@arsedizioni/ars-utils 18.2.103 → 18.2.104
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.
- package/clipper.ui/ui/browser-dialog/browser-dialog.component.d.ts +0 -11
- package/clipper.ui/ui/document/document.component.d.ts +7 -10
- package/clipper.ui/ui/document-manager/document-manager.d.ts +8 -1
- package/clipper.ui/ui/document-menu/document-menu.component.d.ts +1 -1
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +1 -22
- package/esm2022/clipper.ui/ui/document/document.component.mjs +11 -29
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +42 -5
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +2506 -2508
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Clipboard } from '@angular/cdk/clipboard';
|
|
2
|
-
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
|
3
3
|
import { ClipperMessages, ClipperModel, ClipperModule, ClipperQueryReferencesMode, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
|
|
4
4
|
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 { ClipperReferencesComponent } from '../references/references.component';
|
|
8
|
+
import { ClipperDocumentComponent } from '../document/document.component';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
export class ClipperDocumentManager {
|
|
10
11
|
constructor() {
|
|
@@ -238,10 +239,44 @@ export class ClipperDocumentManager {
|
|
|
238
239
|
* Open an item
|
|
239
240
|
* This should be always overridden
|
|
240
241
|
* @param documentId : the document id
|
|
242
|
+
* @param query: the query string
|
|
241
243
|
* @param newWindow: true if the document must be open into a new window
|
|
242
244
|
*/
|
|
243
|
-
open(documentId, newWindow = false) {
|
|
244
|
-
|
|
245
|
+
open(documentId, query = null, newWindow = false) {
|
|
246
|
+
if (documentId) {
|
|
247
|
+
if (!newWindow) {
|
|
248
|
+
this.openDocument(documentId, query);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
window.open('/documento/' + documentId, '_blank');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Open a document
|
|
257
|
+
* @param documentId : the document id
|
|
258
|
+
* @param query: the query string
|
|
259
|
+
*/
|
|
260
|
+
openDocument(documentId, query = null) {
|
|
261
|
+
if (documentId) {
|
|
262
|
+
this.dialogService.open(ClipperDocumentComponent, {
|
|
263
|
+
ariaLabel: 'documento',
|
|
264
|
+
autoFocus: false,
|
|
265
|
+
restoreFocus: false,
|
|
266
|
+
disableClose: false,
|
|
267
|
+
data: {
|
|
268
|
+
id: documentId,
|
|
269
|
+
query: query
|
|
270
|
+
},
|
|
271
|
+
panelClass: 'document-container',
|
|
272
|
+
minWidth: '375px',
|
|
273
|
+
maxWidth: '1400px',
|
|
274
|
+
width: '99%',
|
|
275
|
+
height: '99%'
|
|
276
|
+
}).componentInstance.opening.subscribe((r) => {
|
|
277
|
+
this.openDocument(r.id);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
245
280
|
}
|
|
246
281
|
/**
|
|
247
282
|
* Display a document report
|
|
@@ -419,13 +454,15 @@ export class ClipperDocumentManager {
|
|
|
419
454
|
this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);
|
|
420
455
|
}
|
|
421
456
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentManager, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
422
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ClipperDocumentManager, isStandalone: true, selector: "ng-component", ngImport: i0, template: '<div></div>', isInline: true }); }
|
|
457
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ClipperDocumentManager, isStandalone: true, selector: "ng-component", ngImport: i0, template: '<div></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
423
458
|
}
|
|
424
459
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentManager, decorators: [{
|
|
425
460
|
type: Component,
|
|
426
461
|
args: [{
|
|
427
462
|
template: '<div></div>',
|
|
428
463
|
standalone: true,
|
|
464
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
465
|
+
imports: [ClipperDocumentComponent, ClipperReferencesComponent],
|
|
429
466
|
}]
|
|
430
467
|
}] });
|
|
431
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFPaEYsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQU1jLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQTBaOUQ7SUF0Wkc7OztHQUdEO0lBQ0MsU0FBUyxDQUFDLElBQXlCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLElBQUksQ0FBQyxhQUFh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LENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7OEdBNVpRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHdFQUhyQixhQUFhOzsyRkFHZCxzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTWVzc2FnZXMsIENsaXBwZXJNb2RlbCwgQ2xpcHBlck1vZHVsZSwgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IEJyb2FkY2FzdFNlcnZpY2UsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlLCBTZW5kVG9EaWFsb2dDb21wb25lbnQgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uJztcclxuaW1wb3J0IHNhdmVBcyBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgQ2xpcHBlclJlZmVyZW5jZXNDb21wb25lbnQgfSBmcm9tICcuLi9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1hbmFnZXIge1xyXG5cclxuICAgIHByb3RlY3RlZCBjbGlwYm9hcmQgPSBpbmplY3QoQ2xpcGJvYXJkKTtcclxuICAgIHB1YmxpYyBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSk7XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICogRXhwb3J0IGEgZG9jdW1lbnQgaW4gcGRmIGZvcm1hdFxyXG4gKiBAcGFyYW0gaXRlbSA6IHRoZSBkb2N1bWVudCB0byBleHBvcnRcclxuICovXHJcbiAgICBleHBvcnRQZGYoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5jb25maXJtKFwiQ29uZmVybWkgbCdlc3BvcnRhemlvbmU/XCIsICdBdHRlbnppb25lIScpXHJcbiAgICAgICAgICAgIC5jb21wb25lbnRJbnN0YW5jZS5jaG9vc2VuLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoci5yZXN1bHQgPT09ICdvaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW0uaWQgfHwgaXRlbS5kb2N1bWVudElkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdFc3BvcnRhemlvbmUgaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmV4cG9ydFBkZihpZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocjI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyMiwgKGl0ZW0udGl0bGUxID8gaXRlbS50aXRsZTEgOiBpZCkgKyAnLnBkZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlIGN1cnJlbnQgZG9jdW1lbnQgbGlzdCBvciBqdXN0IHRoZSBzZWxlY3RlZCBkb2N1bWVudHMgYXMgYSBjc3ZcclxuICAgICAqIEBwYXJhbSBpdGVtczogdGhlIGl0ZW0gbGlzdFxyXG4gICAgICogQHBhcmFtIHNlYXJjaFBhcmFtczogdGhlIHNlYXJjaCBwYXJhbXNcclxuICAgICAqL1xyXG4gICAgZXhwb3J0SXRlbXMoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSwgc2VhcmNoUGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgbGV0IG1vZGVsOiBhbnkgPSB7IGlkczogaWRzLCBxdWVyeTogbnVsbCwgZm9ybWF0OiAxIH07XHJcbiAgICAgICAgaWYgKG1vZGVsLmlkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgbW9kZWwucXVlcnkgPSBzZWFyY2hQYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdTYWx2YXRhZ2dpbyBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuZXhwb3J0KG1vZGVsKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUFzKHIsICdlbGVuY28uY3N2Jyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJjaGl2ZSBhIGxpc3Qgb2YgaXRlbXNcclxuICAgICAqIEBwYXJhbSBpdGVtczogdGhlIGl0ZW0gbGlzdFxyXG4gICAgICovXHJcbiAgICBhZGRUb0FyY2hpdmUoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9BUkNISVZFX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGRlYWRsaW5lXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGFkZFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhbGVuZGFyKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQ0FMRU5EQVJfQURELCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICogQWRkIGEgbGlzdCBvZiBpdGVtcyB0byB3b3JraW5nIGRvY3VtZW50c1xyXG4gKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiAqL1xyXG4gICAgYWRkSXRlbXNUb1dvcmtpbmdEb2N1bWVudHMoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9XT1JLSU5HX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4qIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiovXHJcbiAgICBhZGRJdGVtc1RvQmFnKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5hZGRUb0JhZyhpZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBtZXRhZGF0YSB0byBjbGlwYm9hcmRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gY29weVxyXG4gICAgICovXHJcbiAgICBjb3B5TWV0YWRhdGFUb0NsaXBib2FyZChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5Db29yZGluYW1lbnRvKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1ldGEgPVxyXG4gICAgICAgICAgICAoaXRlbS5pZCA/PyBpdGVtLmRvY3VtZW50SWQpICsgJ1xcdCcgK1xyXG4gICAgICAgICAgICBpdGVtLnRpdGxlMT8ucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIikgKyAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS50aXRsZTIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS50aXRsZTIucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIik7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5udW1iZXIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5udW1iZXI7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5wdWJsaXNoaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLnB1Ymxpc2hpbmdEYXRlID0gbmV3IERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgICAgIG1ldGEgKz0gU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShpdGVtLnB1Ymxpc2hpbmdEYXRlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLmRhdGUgPSBuZXcgRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5vcmlnaW5EZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgbWV0YSArPSBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uXHJcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShtZXRhKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoXCJNZXRhZGF0aSBjb3BpYXRpIG5lZ2xpIGFwcHVudGkuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIGRvY3VtZW50IHBlcm1hbGlua1xyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBzaG93IHRoZSBsaW5rIGZvclxyXG4gICAgICovXHJcbiAgICBzaG93TGluayhpdGVtOiBhbnkpIHtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICBsZXQgaWQgPSBpdGVtLmlkID8gaXRlbS5pZCA6IGl0ZW0uZG9jdW1lbnRJZDtcclxuICAgICAgICBsZXQgY2hhbm5lbHMgPSBpdGVtLmNoYW5uZWxOYW1lXHJcbiAgICAgICAgICAgID8gJ0NhbmFsaTogJyArIGl0ZW0uY2hhbm5lbE5hbWUgKyAnPGJyPidcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICBsZXQgb3JpZ2luID0gaXRlbS5vcmlnaW5cclxuICAgICAgICAgICAgPyAnT3JpZ2luZTogJyArXHJcbiAgICAgICAgICAgIGl0ZW0ub3JpZ2luICtcclxuICAgICAgICAgICAgJyAtICcgK1xyXG4gICAgICAgICAgICAoaXRlbS5vcmlnaW5EZXNjcmlwdGlvbiA/IGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gOiAnJykgK1xyXG4gICAgICAgICAgICAnPGJyPidcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICBsZXQgdG9waWNzID0gaXRlbS50b3BpY3MgPyAnQXJnb21lbnRvOiAnICsgaXRlbS50b3BpY3MgKyAnPGJyPicgOiAnJztcclxuICAgICAgICBpZiAoIWlkKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPVxyXG4gICAgICAgICAgICBcIjxwID5JbCBsaW5rIGNoZSB0cm92aSBxdWkgc290dG8gw6ggdW4gcmlmZXJpbWVudG8gZGlyZXR0byBhbCBkb2N1bWVudG8gc2VsZXppb25hdG8uPC9wPlwiICtcclxuICAgICAgICAgICAgXCI8cCA+TG8gcHVvaSB1dGlsaXp6YXJlIG5lbGxhIHR1YSBkb2N1bWVudGF6aW9uZSBvIGludmlhcmxvIHBlciBlbWFpbCBhZCB1biB0dW8gY29sbGVnYS4gTGEgcGVyc29uYSBjaGUgZGVzaWRlcmVyw6AgdmlzdWFsaXp6YXJlIGlsIGRvY3VtZW50byBkb3Zyw6AgbmVjZXNzYXJpYW1lbnRlIGVzc2VyZSB1biB1dGVudGUgYWJib25hdG8uPC9wPlwiICtcclxuICAgICAgICAgICAgXCI8cCA+U2VsZXppb25hIGUgY29waWEgKGZhaSBDVFJMK0MpIGlsIGxpbmsgcXVpIHNvdHRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc21hbGwgYWNjZW50Jz5cIiArXHJcbiAgICAgICAgICAgICdodHRwczovL2NsaXBwZXIuYXJzZWRpemlvbmkuaXQvP2lkPScgK1xyXG4gICAgICAgICAgICBpZCArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxicj4nICtcclxuICAgICAgICAgICAgJzxocj4nICtcclxuICAgICAgICAgICAgJzxwIGNsYXNzPVwic21hbGxcIj4nICtcclxuICAgICAgICAgICAgY2hhbm5lbHMgK1xyXG4gICAgICAgICAgICBvcmlnaW4gK1xyXG4gICAgICAgICAgICB0b3BpY3NcclxuICAgICAgICAnPC9wPic7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvKG1lc3NhZ2UsICdDb3BpYSBsaW5rJywgJ0NoaXVkaScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZCBkb2N1bWVudHMgbGlua3MgYnkgZW1haWxcclxuICAgICAqIEBwYXJhbSBpdGVtcyA6IHRoZSBkb2N1bWVudCBsaXN0XHJcbiAgICAgKi9cclxuICAgIHNlbmRJdGVtc1RvKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKFNlbmRUb0RpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBhcmlhTGFiZWw6ICdpbnZpYSBkb2N1bWVudGkgcGVyIGVtYWlsJyxcclxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBpbmZvOlxyXG4gICAgICAgICAgICAgICAgICAgICdQdW9pIGludmlhcmUgaSBkb2N1bWVudGkgYSBjaGkgdnVvaSBtYSwgcGVyIHBvdGVybGkgdmlzdWFsaXp6YXJlLCDDqCBuZWNlc3NhcmlvIGVzc2VyZSB1biB1dGVudGUgYWJib25hdG8uJyxcclxuICAgICAgICAgICAgICAgIGNvdW50OiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHIuaWRzID0gaXRlbXM/Lm1hcChuID0+IG4uZG9jdW1lbnRJZCA/PyBuLmlkKSA/PyBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdJbnZpbyBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5zZW5kVG8ocilcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcjIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyMi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdJbnZpbyBjb21wbGV0YXRvIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5IGEgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHRpdGxlOiB0aGUgZG9jdW1lbnQgc2hvcnQgdGl0bGVcclxuICAgICAqL1xyXG4gICAgb3BlblJlcG9ydChkb2N1bWVudElkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudElkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5yZXBvcnQoZG9jdW1lbnRJZClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyLCAodGl0bGUgPyB0aXRsZSA6IGRvY3VtZW50SWQpICsgJy5odG1sJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4qIE9wZW4gYW4gaXRlbVxyXG4qIFRoaXMgc2hvdWxkIGJlIGFsd2F5cyBvdmVycmlkZGVuXHJcbiogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuKiBAcGFyYW0gbmV3V2luZG93OiB0cnVlIGlmIHRoZSBkb2N1bWVudCBtdXN0IGJlIG9wZW4gaW50byBhIG5ldyB3aW5kb3dcclxuKi9cclxuICAgIG9wZW4oZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgbmV3V2luZG93OiBib29sZWFuID0gZmFsc2UpIHsgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKGRvY3VtZW50SWQgKyAnID4gJyArIG5ld1dpbmRvdyApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSBhIGRvY3VtZW50IHJlcG9ydFxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcmVwb3J0KGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICBpZiAoaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSAmJiBpdGVtLm1vZGVsICE9IENsaXBwZXJNb2RlbC5TY2FkZW56ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhcIlF1ZXN0YSBmdW56aW9uYWxpdMOgIG5vbiDDqCBkaXNwb25pYmlsZSBwZXIgcXVlc3RvIHRpcG8gZGkgZG9jdW1lbnRvLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblJlcG9ydChpdGVtLmRvY3VtZW50SWQsIGl0ZW0udGl0bGUxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCcm93c2UgZG9jdW1lbnQgcmVmZXJlbmNlc1xyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnQgaXRlbVxyXG4gICAgICogQHBhcmFtIG1vZGUgOiB0aGUgc25hcHNob3QgbW9kZVxyXG4gICAgICovXHJcbiAgICByZWZlcmVuY2VzKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8sIG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGFyaWFMYWJlbDogJ3JpZmVyaW1lbnRpIGxlZ2F0aSBhbCBkb2N1bWVudG8nLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IHsgaWQ6IGl0ZW0uZG9jdW1lbnRJZCwgbW9kZTogbW9kZSB9LFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAncmVmZXJlbmNlcy1jb250YWluZXInLFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgICAgICB3aWR0aDogJzk5JScsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzk5JScsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgci5pZCkgdGhpcy5vcGVuKHIuaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hbmFnZSBjbGlwcGVyIGJhZ1xyXG4gICAgICovXHJcbiAgICBtYW5hZ2VCYWcoKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zOiBhbnkgPSBbXTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmJhZy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBuLnRpdGxlMSA/PyBuLnRpdGxlMjtcclxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGl0bGUsXHJcbiAgICAgICAgICAgICAgICBiYWc6IG4sXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hCYWc6IHsgbmFtZTogdGl0bGUgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5zZWxlY3Qoe1xyXG4gICAgICAgICAgICB0aXRsZTogJ0dlc3Rpc2NpIGRvY3VtZW50aSBkaSBsYXZvcm8nLFxyXG4gICAgICAgICAgICBtdWx0aTogZmFsc2UsXHJcbiAgICAgICAgICAgIG11c3RTZWxlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICBva0NhcHRpb246ICdTRUxFWklPTkEnLFxyXG4gICAgICAgICAgICBpdGVtczogaXRlbXMsXHJcbiAgICAgICAgICAgIGNhbkRlbGV0ZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2FuVmlldzogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLnZpZXdcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHIuYmFnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuKGl0ZW0uZG9jdW1lbnRJZCB8fCBpdGVtLkRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRlbGV0ZVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gci5zZWxlY3RlZEl0ZW1zWzBdLmJhZztcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVtb3ZlRnJvbUJhZyhpdGVtLmRvY3VtZW50SWQgfHwgaXRlbS5Eb2N1bWVudElkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcjIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCByLml0ZW1zLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXRlbXNbcF0uYmFnLkRvY3VtZW50SWQgPT09IGl0ZW0uRG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLml0ZW1zLnNwbGljZShwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXRlbXMubGVuZ3RoID09PSAwKSBkLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gKiBDaGVja3MgaWYgYSBtb2R1bGUgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAqIEBwYXJhbSBtb2R1bGUgOiB0aGUgbW9kdWxlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2R1bGUgaXMgc3VwcG9ydGVkXHJcbiAqL1xyXG4gICAgaXNNb2R1bGVTdXBwb3J0ZWRCeVJTKG1vZHVsZTogQ2xpcHBlck1vZHVsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuR2F6emV0dGVCb2xsZXR0aW5pRUZvbnRpRGl2ZXJzZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuU2NhZGVuemVFU2VnbmFsYXppb25pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGEgbW9kZWwgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAgKiBAcGFyYW0gbW9kZWwgOiB0aGUgbW9kZWwgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2RlbCBpcyBzdXBwb3J0ZWRcclxuICAgICAqL1xyXG4gICAgaXNNb2RlbFN1cHBvcnRlZEJ5UlMobW9kZWw6IENsaXBwZXJNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbGwgZG9jdW1lbnRzIGFyZSBzdXBwb3J0ZWQgYnkgUlNcclxuICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgbGlzdCBvZiBkb2N1bWVuc1xyXG4gICAqIEByZXR1cm5zOiB0cnVlIGlmIGFsbCBkb2N1bWVudHMgc3VwcG9ydHMgUlNcclxuICAgKi9cclxuICAgIGNhblN1cHBvcnRSUyhpdGVtczogW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSB0aGlzLmlzTW9kZWxTdXBwb3J0ZWRCeVJTKG4ubW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIFJTIGlzIGVuYWJsZWQgZm9yIGFsbCBnaXZlbiBkb2N1bWVudHNcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudHMgOiB0aGUgZG9jdW1lbnRzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFsbGEgZG9jdW1lbnRzIGFyIFJTIGVuYWJsZWRcclxuICAgICAqL1xyXG4gICAgUlNfZW5hYmxlZChkb2N1bWVudHM6IENsaXBwZXJEb2N1bWVudEluZm9bXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRzIHx8IGRvY3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBkb2N1bWVudHMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSBuICYmIChuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZSk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3cpIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWxsb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogTmV3IGxhd1xyXG4gICAqIEBwYXJhbSBkb2N1bWVudHM6IHRoZSBhcnJheSBvZiBkb2N1bWVudHMgdG8gbGluayB0byB0aGUgbGF3XHJcbiAgICovXHJcbiAgICBSU19uZXdMYXcoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19MQVcsIGRvY3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZXcgYWN0aXZpdHlcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudDogdGhlIGRvY3VtZW50IHRvIGxpbmsgdG8gdGhlIGFjdGl2aXR5XHJcbiAgICAgKi9cclxuICAgIFJTX25ld0FjdGl2aXR5KGRvY3VtZW50OiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfTkVXX0FDVElWSVRZLCBkb2N1bWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogRG9jdW1lbnQgdXNhZ2UgcmVwb3J0XHJcbiAgICogQHBhcmFtIGRvY3VtZW50OiB0aGUgbGF3XHJcbiAgICovXHJcbiAgICBSU191c2FnZVJlcG9ydChkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX1VTQUdFX1JFUE9SVCwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFTMUUsTUFBTSxPQUFPLHNCQUFzQjtJQU5uQztRQVFjLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQTZiOUQ7SUF6Ykc7OztHQUdEO0lBQ0MsU0FBUyxDQUFDLElBQXlCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUFF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Qzs4R0EvYlEsc0JBQXNCO2tHQUF0QixzQkFBc0Isd0VBTHJCLGFBQWE7OzJGQUtkLHNCQUFzQjtrQkFObEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSwwQkFBMEIsQ0FBQztpQkFDbEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudEluZm8sIENsaXBwZXJNZXNzYWdlcywgQ2xpcHBlck1vZGVsLCBDbGlwcGVyTW9kdWxlLCBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSwgQ2xpcHBlclNlYXJjaFBhcmFtcywgQ2xpcHBlclNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQnJvYWRjYXN0U2VydmljZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UsIFNlbmRUb0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgc2F2ZUFzIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCB9IGZyb20gJy4uL3JlZmVyZW5jZXMvcmVmZXJlbmNlcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi9kb2N1bWVudC9kb2N1bWVudC5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBpbXBvcnRzOiBbQ2xpcHBlckRvY3VtZW50Q29tcG9uZW50LCBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyRG9jdW1lbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY2xpcGJvYXJkID0gaW5qZWN0KENsaXBib2FyZCk7XHJcbiAgICBwdWJsaWMgY2xpcHBlclNlcnZpY2UgPSBpbmplY3QoQ2xpcHBlclNlcnZpY2UpO1xyXG4gICAgcHJvdGVjdGVkIGJyb2FkY2FzdFNlcnZpY2UgPSBpbmplY3QoQnJvYWRjYXN0U2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZSA9IGluamVjdChBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UpO1xyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnQgdG8gZXhwb3J0XHJcbiAqL1xyXG4gICAgZXhwb3J0UGRmKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZVxyXG4gICAgICAgICAgICAuY29uZmlybShcIkNvbmZlcm1pIGwnZXNwb3J0YXppb25lP1wiLCAnQXR0ZW56aW9uZSEnKVxyXG4gICAgICAgICAgICAuY29tcG9uZW50SW5zdGFuY2UuY2hvb3Nlbi5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIucmVzdWx0ID09PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkIHx8IGl0ZW0uZG9jdW1lbnRJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnRXNwb3J0YXppb25lIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5leHBvcnRQZGYoaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlQXMocjIsIChpdGVtLnRpdGxlMSA/IGl0ZW0udGl0bGUxIDogaWQpICsgJy5wZGYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZSBjdXJyZW50IGRvY3VtZW50IGxpc3Qgb3IganVzdCB0aGUgc2VsZWN0ZWQgZG9jdW1lbnRzIGFzIGEgY3N2XHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqIEBwYXJhbSBzZWFyY2hQYXJhbXM6IHRoZSBzZWFyY2ggcGFyYW1zXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydEl0ZW1zKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10sIHNlYXJjaFBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIGxldCBtb2RlbDogYW55ID0geyBpZHM6IGlkcywgcXVlcnk6IG51bGwsIGZvcm1hdDogMSB9O1xyXG4gICAgICAgIGlmIChtb2RlbC5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLnF1ZXJ5ID0gc2VhcmNoUGFyYW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnU2FsdmF0YWdnaW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmV4cG9ydChtb2RlbClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyLCAnZWxlbmNvLmNzdicpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyY2hpdmUgYSBsaXN0IG9mIGl0ZW1zXHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqL1xyXG4gICAgYWRkVG9BcmNoaXZlKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQVJDSElWRV9BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBkZWFkbGluZVxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBhZGRcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWxlbmRhcihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0NBTEVOREFSX0FERCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4gKi9cclxuICAgIGFkZEl0ZW1zVG9Xb3JraW5nRG9jdW1lbnRzKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfV09SS0lOR19BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuKiBBZGQgYSBsaXN0IG9mIGl0ZW1zIHRvIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4qL1xyXG4gICAgYWRkSXRlbXNUb0JhZyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuYWRkVG9CYWcoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgbWV0YWRhdGEgdG8gY2xpcGJvYXJkXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGNvcHlcclxuICAgICAqL1xyXG4gICAgY29weU1ldGFkYXRhVG9DbGlwYm9hcmQoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuQ29vcmRpbmFtZW50bykgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXRhID1cclxuICAgICAgICAgICAgKGl0ZW0uaWQgPz8gaXRlbS5kb2N1bWVudElkKSArICdcXHQnICtcclxuICAgICAgICAgICAgaXRlbS50aXRsZTE/LnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpICsgJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0udGl0bGUyLnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ubnVtYmVyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0ubnVtYmVyO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHVibGlzaGluZ0RhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5wdWJsaXNoaW5nRGF0ZSA9IG5ldyBEYXRlKGl0ZW0ucHVibGlzaGluZ0RhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmRhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5kYXRlID0gbmV3IERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICAgICAgbWV0YSArPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5vcmlnaW5EZXNjcmlwdGlvblxyXG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkobWV0YSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KFwiTWV0YWRhdGkgY29waWF0aSBuZWdsaSBhcHB1bnRpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkb2N1bWVudCBwZXJtYWxpbmtcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gc2hvdyB0aGUgbGluayBmb3JcclxuICAgICAqL1xyXG4gICAgc2hvd0xpbmsoaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGlkID0gaXRlbS5pZCA/IGl0ZW0uaWQgOiBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgbGV0IGNoYW5uZWxzID0gaXRlbS5jaGFubmVsTmFtZVxyXG4gICAgICAgICAgICA/ICdDYW5hbGk6ICcgKyBpdGVtLmNoYW5uZWxOYW1lICsgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IG9yaWdpbiA9IGl0ZW0ub3JpZ2luXHJcbiAgICAgICAgICAgID8gJ09yaWdpbmU6ICcgK1xyXG4gICAgICAgICAgICBpdGVtLm9yaWdpbiArXHJcbiAgICAgICAgICAgICcgLSAnICtcclxuICAgICAgICAgICAgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gPyBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uIDogJycpICtcclxuICAgICAgICAgICAgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IHRvcGljcyA9IGl0ZW0udG9waWNzID8gJ0FyZ29tZW50bzogJyArIGl0ZW0udG9waWNzICsgJzxicj4nIDogJyc7XHJcbiAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgICAgXCI8cCA+SWwgbGluayBjaGUgdHJvdmkgcXVpIHNvdHRvIMOoIHVuIHJpZmVyaW1lbnRvIGRpcmV0dG8gYWwgZG9jdW1lbnRvIHNlbGV6aW9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPkxvIHB1b2kgdXRpbGl6emFyZSBuZWxsYSB0dWEgZG9jdW1lbnRhemlvbmUgbyBpbnZpYXJsbyBwZXIgZW1haWwgYWQgdW4gdHVvIGNvbGxlZ2EuIExhIHBlcnNvbmEgY2hlIGRlc2lkZXJlcsOgIHZpc3VhbGl6emFyZSBpbCBkb2N1bWVudG8gZG92csOgIG5lY2Vzc2FyaWFtZW50ZSBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPlNlbGV6aW9uYSBlIGNvcGlhIChmYWkgQ1RSTCtDKSBpbCBsaW5rIHF1aSBzb3R0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NtYWxsIGFjY2VudCc+XCIgK1xyXG4gICAgICAgICAgICAnaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0Lz9pZD0nICtcclxuICAgICAgICAgICAgaWQgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8YnI+JyArXHJcbiAgICAgICAgICAgICc8aHI+JyArXHJcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInNtYWxsXCI+JyArXHJcbiAgICAgICAgICAgIGNoYW5uZWxzICtcclxuICAgICAgICAgICAgb3JpZ2luICtcclxuICAgICAgICAgICAgdG9waWNzXHJcbiAgICAgICAgJzwvcD4nO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhtZXNzYWdlLCAnQ29waWEgbGluaycsICdDaGl1ZGknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbmQgZG9jdW1lbnRzIGxpbmtzIGJ5IGVtYWlsXHJcbiAgICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgZG9jdW1lbnQgbGlzdFxyXG4gICAgICovXHJcbiAgICBzZW5kSXRlbXNUbyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihTZW5kVG9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsOiAnaW52aWEgZG9jdW1lbnRpIHBlciBlbWFpbCcsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgaW5mbzpcclxuICAgICAgICAgICAgICAgICAgICAnUHVvaSBpbnZpYXJlIGkgZG9jdW1lbnRpIGEgY2hpIHZ1b2kgbWEsIHBlciBwb3RlcmxpIHZpc3VhbGl6emFyZSwgw6ggbmVjZXNzYXJpbyBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLicsXHJcbiAgICAgICAgICAgICAgICBjb3VudDogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByLmlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnSW52aW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VuZFRvKHIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IocjIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnSW52aW8gY29tcGxldGF0byBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSBhIGRvY3VtZW50IHJlcG9ydFxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICAqIEBwYXJhbSB0aXRsZTogdGhlIGRvY3VtZW50IHNob3J0IHRpdGxlXHJcbiAgICAgKi9cclxuICAgIG9wZW5SZXBvcnQoZG9jdW1lbnRJZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRJZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVwb3J0KGRvY3VtZW50SWQpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzYXZlQXMociwgKHRpdGxlID8gdGl0bGUgOiBkb2N1bWVudElkKSArICcuaHRtbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuKiBPcGVuIGFuIGl0ZW1cclxuKiBUaGlzIHNob3VsZCBiZSBhbHdheXMgb3ZlcnJpZGRlblxyXG4qIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiovXHJcbiAgICBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHF1ZXJ5OiBzdHJpbmcgPSBudWxsLCBuZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChkb2N1bWVudElkKSB7XHJcbiAgICAgICAgICAgIGlmICghbmV3V2luZG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gYSBkb2N1bWVudFxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICAqIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBvcGVuRG9jdW1lbnQoZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcXVlcnk6IHN0cmluZyA9IG51bGwpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyRG9jdW1lbnRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogJ2RvY3VtZW50bycsXHJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRvY3VtZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogJ2RvY3VtZW50LWNvbnRhaW5lcicsXHJcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTQwMHB4JyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogJzk5JSdcclxuICAgICAgICAgICAgfSkuY29tcG9uZW50SW5zdGFuY2Uub3BlbmluZy5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRG9jdW1lbnQoci5pZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIHJlcG9ydChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGl0ZW0ubW9kZWwgIT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgJiYgaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuU2NhZGVuemUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oXCJRdWVzdGEgZnVuemlvbmFsaXTDoCBub24gw6ggZGlzcG9uaWJpbGUgcGVyIHF1ZXN0byB0aXBvIGRpIGRvY3VtZW50by5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5SZXBvcnQoaXRlbS5kb2N1bWVudElkLCBpdGVtLnRpdGxlMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnJvd3NlIGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50IGl0ZW1cclxuICAgICAqIEBwYXJhbSBtb2RlIDogdGhlIHNuYXBzaG90IG1vZGVcclxuICAgICAqL1xyXG4gICAgcmVmZXJlbmNlcyhpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvLCBtb2RlOiBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSA9IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbikge1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBhcmlhTGFiZWw6ICdyaWZlcmltZW50aSBsZWdhdGkgYWwgZG9jdW1lbnRvJyxcclxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiB7IGlkOiBpdGVtLmRvY3VtZW50SWQsIG1vZGU6IG1vZGUgfSxcclxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ3JlZmVyZW5jZXMtY29udGFpbmVyJyxcclxuICAgICAgICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwMHB4JyxcclxuICAgICAgICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc5OSUnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGQuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyICYmIHIuaWQpIHRoaXMub3BlbihyLmlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW5hZ2UgY2xpcHBlciBiYWdcclxuICAgICAqL1xyXG4gICAgbWFuYWdlQmFnKCkge1xyXG4gICAgICAgIGxldCBpdGVtczogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5iYWcuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gbi50aXRsZTEgPz8gbi50aXRsZTI7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgYmFnOiBuLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoQmFnOiB7IG5hbWU6IHRpdGxlIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2VsZWN0KHtcclxuICAgICAgICAgICAgdGl0bGU6ICdHZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvJyxcclxuICAgICAgICAgICAgbXVsdGk6IGZhbHNlLFxyXG4gICAgICAgICAgICBtdXN0U2VsZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgb2tDYXB0aW9uOiAnU0VMRVpJT05BJyxcclxuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLFxyXG4gICAgICAgICAgICBjYW5EZWxldGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNhblZpZXc6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZC5jb21wb25lbnRJbnN0YW5jZS52aWV3XHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSByLmJhZztcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbihpdGVtLmRvY3VtZW50SWQgfHwgaXRlbS5Eb2N1bWVudElkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZC5jb21wb25lbnRJbnN0YW5jZS5kZWxldGVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHIuc2VsZWN0ZWRJdGVtc1swXS5iYWc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlbW92ZUZyb21CYWcoaXRlbS5kb2N1bWVudElkIHx8IGl0ZW0uRG9jdW1lbnRJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAocjI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyMi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgci5pdGVtcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLml0ZW1zW3BdLmJhZy5Eb2N1bWVudElkID09PSBpdGVtLkRvY3VtZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5pdGVtcy5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLml0ZW1zLmxlbmd0aCA9PT0gMCkgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICogQ2hlY2tzIGlmIGEgbW9kdWxlIGlzIHN1cHBvcnRlZCBieSBSU1xyXG4gKiBAcGFyYW0gbW9kdWxlIDogdGhlIG1vZHVsZSB0byBjaGVja1xyXG4gKiBAcmV0dXJuczogdHJ1ZSBpZiB0aGUgbW9kdWxlIGlzIHN1cHBvcnRlZFxyXG4gKi9cclxuICAgIGlzTW9kdWxlU3VwcG9ydGVkQnlSUyhtb2R1bGU6IENsaXBwZXJNb2R1bGUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLkdhenpldHRlQm9sbGV0dGluaUVGb250aURpdmVyc2UgfHxcclxuICAgICAgICAgICAgbW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgbW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLlNjYWRlbnplRVNlZ25hbGF6aW9uaTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhIG1vZGVsIGlzIHN1cHBvcnRlZCBieSBSU1xyXG4gICAgICogQHBhcmFtIG1vZGVsIDogdGhlIG1vZGVsIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJuczogdHJ1ZSBpZiB0aGUgbW9kZWwgaXMgc3VwcG9ydGVkXHJcbiAgICAgKi9cclxuICAgIGlzTW9kZWxTdXBwb3J0ZWRCeVJTKG1vZGVsOiBDbGlwcGVyTW9kZWwpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbW9kZWwgPT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvIHx8XHJcbiAgICAgICAgICAgIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBDaGVja3MgaWYgYWxsIGRvY3VtZW50cyBhcmUgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGxpc3Qgb2YgZG9jdW1lbnNcclxuICAgKiBAcmV0dXJuczogdHJ1ZSBpZiBhbGwgZG9jdW1lbnRzIHN1cHBvcnRzIFJTXHJcbiAgICovXHJcbiAgICBjYW5TdXBwb3J0UlMoaXRlbXM6IFtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGFsbG93ID0gdGhpcy5pc01vZGVsU3VwcG9ydGVkQnlSUyhuLm1vZGVsKTtcclxuICAgICAgICAgICAgaWYgKCFhbGxvdykgcmV0dXJuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbGxvdztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBSUyBpcyBlbmFibGVkIGZvciBhbGwgZ2l2ZW4gZG9jdW1lbnRzXHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRzIDogdGhlIGRvY3VtZW50cyB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhbGxhIGRvY3VtZW50cyBhciBSUyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIFJTX2VuYWJsZWQoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50cyB8fCBkb2N1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbGV0IGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgZG9jdW1lbnRzLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgIGFsbG93ID0gbiAmJiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemUpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIE5ldyBsYXdcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRzOiB0aGUgYXJyYXkgb2YgZG9jdW1lbnRzIHRvIGxpbmsgdG8gdGhlIGxhd1xyXG4gICAqL1xyXG4gICAgUlNfbmV3TGF3KGRvY3VtZW50czogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19ORVdfTEFXLCBkb2N1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmV3IGFjdGl2aXR5XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnQ6IHRoZSBkb2N1bWVudCB0byBsaW5rIHRvIHRoZSBhY3Rpdml0eVxyXG4gICAgICovXHJcbiAgICBSU19uZXdBY3Rpdml0eShkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19BQ1RJVklUWSwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIERvY3VtZW50IHVzYWdlIHJlcG9ydFxyXG4gICAqIEBwYXJhbSBkb2N1bWVudDogdGhlIGxhd1xyXG4gICAqL1xyXG4gICAgUlNfdXNhZ2VSZXBvcnQoZG9jdW1lbnQ6IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19VU0FHRV9SRVBPUlQsIGRvY3VtZW50KTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|