@arsedizioni/ars-utils 18.2.108 → 18.2.110
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 +13 -7
- package/clipper.ui/ui/document/document.component.d.ts +1 -1
- package/clipper.ui/ui/document-manager/document-manager.d.ts +6 -6
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +42 -8
- package/esm2022/clipper.ui/ui/document/document.component.mjs +6 -5
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +9 -9
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/references/references.component.mjs +2 -2
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +55 -21
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/package.json +12 -12
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AfterViewInit, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { MatDrawer } from '@angular/material/sidenav';
|
|
3
|
-
import { ClipperSearchResult, ClipperSelectionMode } from '@arsedizioni/ars-utils/clipper.common';
|
|
3
|
+
import { ClipperQueryReferencesMode, ClipperSearchResult, ClipperSelectionMode } from '@arsedizioni/ars-utils/clipper.common';
|
|
4
4
|
import { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export interface ClipperBrowserDialogData {
|
|
@@ -101,12 +101,12 @@ export declare class ClipperBrowserDialogComponent extends ClipperSearchResultMa
|
|
|
101
101
|
*/
|
|
102
102
|
helpSearch(): void;
|
|
103
103
|
/**
|
|
104
|
-
* Open an item
|
|
105
|
-
* This should be always overridden
|
|
106
|
-
* @param documentId : the document id
|
|
107
|
-
* @param query: the query string
|
|
108
|
-
* @param newWindow: true if the document must be open into a new window
|
|
109
|
-
*/
|
|
104
|
+
* Open an item
|
|
105
|
+
* This should be always overridden
|
|
106
|
+
* @param documentId : the document id
|
|
107
|
+
* @param query: the query string
|
|
108
|
+
* @param newWindow: true if the document must be open into a new window
|
|
109
|
+
*/
|
|
110
110
|
open(documentId: string | null | undefined, query?: string | null | undefined, newWindow?: boolean): void;
|
|
111
111
|
/**
|
|
112
112
|
* Open a document
|
|
@@ -114,6 +114,12 @@ export declare class ClipperBrowserDialogComponent extends ClipperSearchResultMa
|
|
|
114
114
|
* @param query: the query string
|
|
115
115
|
*/
|
|
116
116
|
openDocument(documentId: string | null | undefined, query?: string | null | undefined): void;
|
|
117
|
+
/**
|
|
118
|
+
* Browse document references
|
|
119
|
+
* @param documentId : the document id
|
|
120
|
+
* @param mode : the mode
|
|
121
|
+
*/
|
|
122
|
+
openReferences(documentId: string | null, mode?: ClipperQueryReferencesMode | null, model?: number, anchor?: string, anchorTitle?: string, update?: boolean): void;
|
|
117
123
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClipperBrowserDialogComponent, never>;
|
|
118
124
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClipperBrowserDialogComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
119
125
|
}
|
|
@@ -155,7 +155,7 @@ export declare class ClipperDocumentComponent extends ClipperDocumentManager imp
|
|
|
155
155
|
* @param documentId : the document id
|
|
156
156
|
* @param mode : the mode
|
|
157
157
|
*/
|
|
158
|
-
|
|
158
|
+
openReferences(documentId: string | null, mode?: ClipperQueryReferencesMode | null, model?: number, anchor?: string, anchorTitle?: string, update?: boolean): void;
|
|
159
159
|
/**
|
|
160
160
|
* Display a report
|
|
161
161
|
* @param item
|
|
@@ -74,17 +74,17 @@ export declare class ClipperDocumentManager {
|
|
|
74
74
|
* @param query: the query string
|
|
75
75
|
*/
|
|
76
76
|
openDocument(documentId: string | null | undefined, query?: string | null | undefined): void;
|
|
77
|
+
/**
|
|
78
|
+
* Browse document references
|
|
79
|
+
* @param documentId : the document id
|
|
80
|
+
* @param mode : the reference mode
|
|
81
|
+
*/
|
|
82
|
+
openReferences(documentId: string, mode?: ClipperQueryReferencesMode, model?: number | null | undefined, anchor?: string | null | undefined, anchorTitle?: string | null | undefined, update?: boolean | null | undefined): void;
|
|
77
83
|
/**
|
|
78
84
|
* Display a document report
|
|
79
85
|
* @param item : the document
|
|
80
86
|
*/
|
|
81
87
|
report(item: ClipperDocumentInfo): void;
|
|
82
|
-
/**
|
|
83
|
-
* Browse document references
|
|
84
|
-
* @param item : the document item
|
|
85
|
-
* @param mode : the snapshot mode
|
|
86
|
-
*/
|
|
87
|
-
references(item: ClipperDocumentInfo, mode?: ClipperQueryReferencesMode): void;
|
|
88
88
|
/**
|
|
89
89
|
* Manage clipper bag
|
|
90
90
|
*/
|
|
@@ -17,7 +17,7 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
|
17
17
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
18
18
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
19
19
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
20
|
-
import { ClipperAuthors, ClipperDocumentChangeReason, ClipperMessages, ClipperModel, ClipperModels, ClipperSearchParams, ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperSort, ClipperSources } from '@arsedizioni/ars-utils/clipper.common';
|
|
20
|
+
import { ClipperAuthors, ClipperDocumentChangeReason, ClipperMessages, ClipperModel, ClipperModels, ClipperQueryReferencesMode, ClipperSearchParams, ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperSort, ClipperSources } from '@arsedizioni/ars-utils/clipper.common';
|
|
21
21
|
import { SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
22
22
|
import { FlexLayoutModule } from '@ngbracket/ngx-layout';
|
|
23
23
|
import { fromEvent } from 'rxjs';
|
|
@@ -30,6 +30,7 @@ import { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-
|
|
|
30
30
|
import { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';
|
|
31
31
|
import { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';
|
|
32
32
|
import { ClipperDocumentsUtils } from '../../documents';
|
|
33
|
+
import { ClipperReferencesComponent } from '../references/references.component';
|
|
33
34
|
import * as i0 from "@angular/core";
|
|
34
35
|
import * as i1 from "@ngbracket/ngx-layout/flex";
|
|
35
36
|
import * as i2 from "@ngbracket/ngx-layout/extended";
|
|
@@ -684,12 +685,12 @@ export class ClipperBrowserDialogComponent extends ClipperSearchResultManager {
|
|
|
684
685
|
});
|
|
685
686
|
}
|
|
686
687
|
/**
|
|
687
|
-
* Open an item
|
|
688
|
-
* This should be always overridden
|
|
689
|
-
* @param documentId : the document id
|
|
690
|
-
* @param query: the query string
|
|
691
|
-
* @param newWindow: true if the document must be open into a new window
|
|
692
|
-
*/
|
|
688
|
+
* Open an item
|
|
689
|
+
* This should be always overridden
|
|
690
|
+
* @param documentId : the document id
|
|
691
|
+
* @param query: the query string
|
|
692
|
+
* @param newWindow: true if the document must be open into a new window
|
|
693
|
+
*/
|
|
693
694
|
open(documentId, query = null, newWindow = false) {
|
|
694
695
|
if (!newWindow) {
|
|
695
696
|
this.openDocument(documentId, query);
|
|
@@ -707,6 +708,39 @@ export class ClipperBrowserDialogComponent extends ClipperSearchResultManager {
|
|
|
707
708
|
ClipperDocumentsUtils.openDocument(this.dialogService, this.clipperService, documentId, query);
|
|
708
709
|
}
|
|
709
710
|
}
|
|
711
|
+
/**
|
|
712
|
+
* Browse document references
|
|
713
|
+
* @param documentId : the document id
|
|
714
|
+
* @param mode : the mode
|
|
715
|
+
*/
|
|
716
|
+
openReferences(documentId, mode = ClipperQueryReferencesMode.ReferencesIn, model = null, anchor = null, anchorTitle = null, update = true) {
|
|
717
|
+
const d = this.dialogService.open(ClipperReferencesComponent, {
|
|
718
|
+
ariaLabel: 'riferimenti legati al documento',
|
|
719
|
+
autoFocus: false,
|
|
720
|
+
restoreFocus: false,
|
|
721
|
+
disableClose: true,
|
|
722
|
+
closeOnNavigation: false,
|
|
723
|
+
data: {
|
|
724
|
+
id: documentId,
|
|
725
|
+
mode: mode,
|
|
726
|
+
model: model,
|
|
727
|
+
anchor: anchor,
|
|
728
|
+
anchorTitle: anchorTitle,
|
|
729
|
+
update: update,
|
|
730
|
+
},
|
|
731
|
+
panelClass: 'references-container',
|
|
732
|
+
minWidth: '375px',
|
|
733
|
+
maxWidth: '1000px',
|
|
734
|
+
width: '99%',
|
|
735
|
+
height: '99%',
|
|
736
|
+
});
|
|
737
|
+
d.afterClosed()
|
|
738
|
+
.subscribe((r) => {
|
|
739
|
+
if (r && r.documentId) {
|
|
740
|
+
this.open(r.documentId);
|
|
741
|
+
}
|
|
742
|
+
});
|
|
743
|
+
}
|
|
710
744
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperBrowserDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
711
745
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ClipperBrowserDialogComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [
|
|
712
746
|
MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
|
|
@@ -742,4 +776,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
742
776
|
type: ViewChild,
|
|
743
777
|
args: ['filterPane']
|
|
744
778
|
}] } });
|
|
745
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1B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aEN6QyxTQUFTOzJCQUNGLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUdqQzt3QkFDVCwrQ0FBK0M7cUJBQ2hELG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsT0FBTzt3QkFDUCxnQ0FBZ0M7d0JBQ2hDLGtCQUFrQjtxQkFDbkI7OEJBS3dCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcclxuaW1wb3J0IHsgTWF0RHJhd2VyLCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQge1xyXG4gIENsaXBwZXJBdXRob3JzLFxyXG4gIENsaXBwZXJEb2N1bWVudENoYW5nZVJlYXNvbixcclxuICBDbGlwcGVyTWVzc2FnZXMsXHJcbiAgQ2xpcHBlck1vZGVsLFxyXG4gIENsaXBwZXJNb2RlbHMsXHJcbiAgQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90LFxyXG4gIENsaXBwZXJTZWFyY2hQYXJhbXMsXHJcbiAgQ2xpcHBlclNlYXJjaFJlc3VsdCxcclxuICBDbGlwcGVyU2VhcmNoVXRpbHMsXHJcbiAgQ2xpcHBlclNlY3RvclR5cGVzLFxyXG4gIENsaXBwZXJTZWN0b3JzLFxyXG4gIENsaXBwZXJTZWxlY3Rpb25Nb2RlLFxyXG4gIENsaXBwZXJTb3J0LFxyXG4gIENsaXBwZXJTb3VyY2VzXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IFNlbGVjdGFibGVNb2RlbCwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcclxuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mYWNldHMvc2VhcmNoLWZhY2V0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1oZWxwL3NlYXJjaC1mcmVlLXRleHQtaGVscC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIvc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hSZXN1bHRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLXJlc3VsdC1pdGVtL3NlYXJjaC1yZXN1bHQtaXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRzVXRpbHMgfSBmcm9tICcuLi8uLi9kb2N1bWVudHMnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcHBlckJyb3dzZXJEaWFsb2dEYXRhIHtcclxuICBzZWxlY3Rpb25Nb2RlPzogQ2xpcHBlclNlbGVjdGlvbk1vZGUgfCBudWxsLFxyXG4gIHNlbGVjdGFibGVNb2RlbHM/OiBudW1iZXJbXSB8IG51bGwsXHJcbiAgaW5pdGlhbE1vZGVsPzogbnVtYmVyIHwgbnVsbFxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jyb3dzZXItZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUlxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGbGV4TGF5b3V0TW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRCYWRnZU1vZHVsZSxcclxuICAgIE1hdFRhYnNNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQsXHJcbiAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgTWF0U2lkZW5hdk1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxyXG4gICAgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCxcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZVxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyQnJvd3NlckRpYWxvZ0NvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJQYW5lJykgZmlsdGVyUGFuZSE6IE1hdERyYXdlcjtcclxuXHJcbiAgcHJpdmF0ZSBkaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmPENsaXBwZXJCcm93c2VyRGlhbG9nQ29tcG9uZW50Pik7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IENsaXBwZXJCcm93c2VyRGlhbG9nRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xyXG4gIHByb3RlY3RlZCB0aXRsZTogc3RyaW5nID0gJ1JpY2VyY2EgaW4gQ2xpcHBlcic7XHJcbiAgcHJvdGVjdGVkIHNuYXBzaG90OiBDbGlwcGVyU2VhcmNoUmVzdWx0ID0ge1xyXG4gICAgc2VhcmNoSW5mbzogbnVsbCxcclxuICAgIHNlYXJjaFBhcmFtczogbmV3IENsaXBwZXJTZWFyY2hQYXJhbXMoKVxyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBjdXJyZW50TW9kZWw6IHN0cmluZyA9ICdUdXR0byc7XHJcbiAgcHJvdGVjdGVkIGN1cnJlbnRTb3J0OiBzdHJpbmcgPSAnUmlsZXZhbnphJztcclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gVXNlIHNlcnZpY2Ugc25hcHNob3RcclxuICAgIHRoaXMuc25hcHNob3QgPSB0aGlzLmNsaXBwZXJTZXJ2aWNlLnNuYXBzaG90O1xyXG4gICAgaWYgKCF0aGlzLnNuYXBzaG90KVxyXG4gICAgICB0aGlzLnNuYXBzaG90ID0ge1xyXG4gICAgICAgIHNlYXJjaEluZm86IG51bGwsXHJcbiAgICAgICAgc2VhcmNoUGFyYW1zOiBudWxsLFxyXG4gICAgICB9O1xyXG4gICAgaWYgKCF0aGlzLmZpbHRlclBhcmFtcykge1xyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgICAgIC8vIFN0b3JlIHNuYXBzaG90XHJcbiAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc25hcHNob3QgPSB0aGlzLnNuYXBzaG90O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3RhYmxlTW9kZWw8YW55LCBzdHJpbmc+KHRydWUsICdkb2N1bWVudElkJyk7XHJcblxyXG4gICAgLy8gVXBkYXRlIG1vZGVsXHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmluaXRpYWxNb2RlbCkge1xyXG4gICAgICB0aGlzLmNoYW5nZU1vZGVsKHRoaXMuZGlhbG9nRGF0YS5pbml0aWFsTW9kZWwsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuZ2V0TWVzc2FnZSgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRF9JTk5FUikge1xyXG4gICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRCwgbWVzc2FnZS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgyNTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnZpc2libGUuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudmlzaWJsZS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBIYW5kbGUgZmlsdGVyIHBhbmUgXHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgLy8gSGFuZGxlIGZhY2V0c1xyXG4gICAgICBpZiAodGhpcy5mYWNldHMpIHtcclxuICAgICAgICB0aGlzLmZhY2V0cy5jaGFuZ2VkXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnllYXIgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZEludGVydmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMueWVhciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3IgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmNoYW5nZWRTZWN0b3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkVHlwZSlcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50eXBlID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkQXV0aG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmF1dGhvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3I7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmVzaXplIFxyXG4gKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLWJyb3dzZXItc2Nyb2xsYWJsZScpO1xyXG4gICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRDdXJyZW50RGlhbG9nU2Nyb2xsYWJsZUhlaWdodChcclxuICAgICAgICAgIFsnY2xpcHBlci1icm93c2VyLWZpeGVkJ10sXHJcbiAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWlnaHQgIT0gZWxlbS5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nOjAgMCAwIDA7aGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuKiBTaG93IGhpZGUgZmlsdGVyIHBhbmUgbWFudWFsbHlcclxuKi9cclxuICBwcm90ZWN0ZWQgdG9nZ2xlRmlsdGVyUGFuZSgpIHtcclxuICAgIHRoaXMuZmlsdGVyUGFuZUNsb3NlZCA9ICF0aGlzLmZpbHRlclBhbmVDbG9zZWQ7XHJcbiAgICB0aGlzLmZpbHRlclBhbmU/LnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBmaWx0ZXIgcGFuZSB2aXNpYmlsaXR5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhbmUpIHtcclxuICAgICAgaWYgKHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5YU21hbGwpIHx8XHJcbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLlNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5NZWRpdW0pKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUGFuZS5vcGVuZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUubW9kZSA9ICdvdmVyJztcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUuZGlzYWJsZUNsb3NlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lSGFzQmFja2Ryb3AgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJQYW5lLm9wZW5lZCAmJiAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkICYmIHRoaXMuaGFzRmFjZXRzKCkpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5vcGVuKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlclBhbmUub3BlbmVkICYmIHRoaXMuZmlsdGVyUGFuZUNsb3NlZCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5tb2RlID0gJ3NpZGUnO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZS5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZUhhc0JhY2tkcm9wID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgZG9jdW1lbnRzIGNhbiBiZSBzZWxlY3RlZCBhbmQgcmV0dXJuZWQgYXMgbWVzc2FnZVxyXG4gICAqL1xyXG4gIGNhblNlbGVjdCgpOiBib29sZWFuIHtcclxuICAgIGxldCBhbGxvdyA9XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uICYmXHJcbiAgICAgICgodGhpcy5kaWFsb2dEYXRhLnNlbGVjdGlvbk1vZGUgPT09IDEgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPT09IDEpIHx8XHJcbiAgICAgICAgKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlID09PSAyICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPiAxKSB8fFxyXG4gICAgICAgICh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0aW9uTW9kZSA9PT0gMyAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQubGVuZ3RoID4gMCkpO1xyXG4gICAgaWYgKGFsbG93ICYmIHRoaXMuZGlhbG9nRGF0YS5zZWxlY3RhYmxlTW9kZWxzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3RhYmxlTW9kZWxzLmluZGV4T2Yobi5tb2RlbCkgPT09IC0xKSB7XHJcbiAgICAgICAgICBhbGxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsb3c7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIG1lc3NhZ2Ugd2l0aCBjdXJyZW50IHNlbGVjdGlvbiBhbmQgY2xvc2UgZGlhbG9nXHJcbiAgICovXHJcbiAgc2VsZWN0KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKFxyXG4gICAgICAgIENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRCxcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBkaWFsb2dcclxuICAgKiBAcGFyYW0gbmV3Um91dGU6IHRoZSBuZXcgcm91dGUgdG8gbmF2aWdhdGUgdG9cclxuICAgKi9cclxuICBjbG9zZShuZXdSb3V0ZTogYW55ID0gbnVsbCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UobmV3Um91dGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzb3J0XHJcbiAgICovXHJcbiAgdXBkYXRlU29ydE9wdGlvbnMoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlKSB7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclNvcnQuRGF0ZUFzYzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ0RhdGEgY3JlLic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclNvcnQuUG9wdWxhcml0eTpcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ1BvcG9sYXJpdMOgJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyU29ydC5SZWxldmFuY2U6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdSaWxldmFuemEnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlID0gQ2xpcHBlclNvcnQuRGF0ZURlc2M7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdEYXRhIGRlY3IuJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY3VycmVudCBzZWFyY2ggaW5mb1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoSW5mbygpIHtcclxuICAgIGxldCBzaSA9IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgfHxcclxuICAgICAgKHRoaXMuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3IpXHJcbiAgICApIHtcclxuICAgICAgbGV0IHMgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRCeUtleShcclxuICAgICAgICBDbGlwcGVyU2VjdG9ycyxcclxuICAgICAgICAndmFsdWUnLFxyXG4gICAgICAgIHRoaXMuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvclxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3JcclxuICAgICAgKTtcclxuICAgICAgaWYgKHMpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAnc2V0dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogcy5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgICBDbGlwcGVyTW9kZWxzLFxyXG4gICAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yXHJcbiAgICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc2V6aW9uZScsXHJcbiAgICAgICAgICAgIHZhbHVlOiBzLm5hbWUsXHJcbiAgICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3IgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3IpXHJcbiAgICApIHtcclxuICAgICAgbGV0IGEgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRCeUtleShcclxuICAgICAgICBDbGlwcGVyQXV0aG9ycyxcclxuICAgICAgICAndmFsdWUnLFxyXG4gICAgICAgIHRoaXMuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3JcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LmF1dGhvclxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3JcclxuICAgICAgKTtcclxuICAgICAgaWYgKGEpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAnYXV0b3JlJyxcclxuICAgICAgICAgIHZhbHVlOiBhLmF1dGhvckRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudG9waWMpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYXJnb21lbnRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudG9waWMsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhcmdvbWVudG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teU5vZGUsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5udW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtZXJvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSB8fFxyXG4gICAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCAhPT1cclxuICAgICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKSlcclxuICAgICkge1xyXG4gICAgICBsZXQgZDEgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGU7XHJcbiAgICAgIGNvbnN0IGQyID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogIWQyID8gJ2luIGRhdGEnIDogJ2RhIGRhdGEnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQxKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgfHxcclxuICAgICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGUgJiZcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsICE9PVxyXG4gICAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2EgZGF0YScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZCksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmludGVydmFsKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ludGVydmFsbG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLnNuYXBzaG90LmludGVydmFsLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc291cmNlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJTb3VyY2VzLFxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZU51bWJlcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdudW0uIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlTnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZUZyb21EYXRlIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSAmJlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsID09PVxyXG4gICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkMSA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VGcm9tRGF0ZTtcclxuICAgICAgY29uc3QgZDIgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAhZDIgPyAnaW4gZGF0YSBmb250ZScgOiAnZGEgZGF0YSBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZDEpLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZVRvRGF0ZSB8fFxyXG4gICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlICYmXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPT09XHJcbiAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pXHJcbiAgICApIHtcclxuICAgICAgbGV0IGQgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYSBkYXRhIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShkKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGVzdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50ZXh0LFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnR5cGUgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCB0ID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgQ2xpcHBlclNlY3RvclR5cGVzLFxyXG4gICAgICAgICd2YWx1ZScsXHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnR5cGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnR5cGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudHlwZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodCkge1xyXG4gICAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgICAgZmllbGQ6ICd0aXBvJyxcclxuICAgICAgICAgIHZhbHVlOiB0LmRvY3VtZW50VHlwZURlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2hvd1VucmVhZERvY3VtZW50c09ubHkpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnc3RhdG8nLFxyXG4gICAgICAgIHZhbHVlOiAnbm9uIGxldHRpJyxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VSZWFzb24gfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5yZWFzb24pXHJcbiAgICApXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGlwbyBtb2QuJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJEb2N1bWVudENoYW5nZVJlYXNvbixcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5yZWFzb25cclxuICAgICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uXHJcbiAgICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlUmVhc29uXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWROdW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtLiBtb2RpZmljYXRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlZE51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRZZWFyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2Fubm8gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRZZWFyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlZFRpdGxlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3RpdG9sbyBtb2RpZmljYXRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlZFRpdGxlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJOdW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtLiBtb2RpZmljYW50ZScsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyTnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJZZWFyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2Fubm8gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclllYXIsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclRpdGxlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3RpdG9sbyBtb2RpZmljYW50ZScsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyVGl0bGUsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNuYXBzaG90LnNlYXJjaEluZm8gPSBzaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBDaGFuZ2Ugc2VhcmNoIG1vZGVsXHJcbiAqIEBwYXJhbSBtb2RlbCA6IHRoZSBuZXcgZG9jdW1lbnQgbW9kZWwgXHJcbiAqIEBwYXJhbSBmZXRjaCA6IHRydWUgaWYgZGF0YSBtdXN0IGJlIGZldGNoZWQuIERlZmF1bHQgaXMgdHJ1ZVxyXG4gKi9cclxuICBjaGFuZ2VNb2RlbChtb2RlbDogbnVtYmVyID0gbnVsbCwgZmV0Y2g6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgc3dpdGNoIChtb2RlbCkge1xyXG4gICAgICBjYXNlIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvOiB0aGlzLmN1cnJlbnRNb2RlbCA9IFwiR2F6emV0dGUgZSBib2xsZXR0aW5pXCI7IGJyZWFrO1xyXG4gICAgICBjYXNlIENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlOiB0aGlzLmN1cnJlbnRNb2RlbCA9IFwiTm9ybWF0aXZhIHZpZ2VudGVcIjsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSBcIlR1dHRvXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAoZmV0Y2gpXHJcbiAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBseSBhIHNvcnRcclxuICAgKiBAcGFyYW0gbW9kZSA6IHRoZSBzb3J0IG1vZGVcclxuICAgKi9cclxuICBzb3J0QnkobW9kZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZVNvcnRPcHRpb25zKCk7XHJcbiAgICB0aGlzLmZldGNoKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBHZXQgZmFjZXRzXHJcbiAqL1xyXG4gIGZldGNoRmFjZXRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5RmFjZXRzKHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRzKG51bGwsIHIudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCdXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpZGUgZmFjZXRzXHJcbiAgICovXHJcbiAgaGlkZUZhY2V0cygpIHtcclxuICAgIHRoaXMuZmFjZXRzPy5yZXNldCgpO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhIHNlYXJjaCB1c2luZyBjdXJyZW50IHBhcmFtc1xyXG4gICAqL1xyXG4gIGZldGNoKG5ld1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnUmljZXJjYSBpbiBjb3Jzby4uLicpO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuY291bnQgPSAxNTtcclxuICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSAwO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudGV4dClcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IENsaXBwZXJTb3J0LlJlbGV2YW5jZTtcclxuICAgICAgZWxzZSBpZiAoIXRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlKVxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvcnRNb2RlID0gQ2xpcHBlclNvcnQuRGF0ZURlc2M7XHJcbiAgICAgIHRoaXMudXBkYXRlU29ydE9wdGlvbnMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy55ZWFyID4gMCkge1xyXG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5maWx0ZXJQYXJhbXMueWVhcjtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSBuZXcgRGF0ZSh5ZWFyLCAwLCAxLCAyKTtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlID0gbmV3IERhdGUoeWVhciwgMTEsIDMxLCAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnllYXIgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudGV4dCA9IENsaXBwZXJTZWFyY2hVdGlscy5ub3JtYWxpemVUZXh0UXVlcnkodGhpcy5maWx0ZXJQYXJhbXMudGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5KHRoaXMuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0cyhyLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGZhY2V0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZhY2V0cygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmhpZGVGYWNldHMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwoMCk7XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdmlld1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEluZm8oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYSBuZXcgcGFnZSByZXN1bHRcclxuICAgKiBAcGFyYW0gZSA6IHRoZSBNYXRQYWdpbmF0b3IgUGFnZUV2ZW50IGRhdGFcclxuICAgKi9cclxuICBmZXRjaE1vcmUoZTogYW55KSB7XHJcbiAgICBsZXQgZmlyc3QgPSBlLnBhZ2VJbmRleCAqIHRoaXMuZmlsdGVyUGFyYW1zLmNvdW50O1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSBmaXJzdDtcclxuICAgIHRoaXMuZmV0Y2goKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHNlYXJjaFxyXG4gICAqL1xyXG4gIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgdGhpcy5jdXJyZW50TW9kZWwgPSAnTm9ybWF0aXZhIHZpZ2VudGUnO1xyXG4gICAgdGhpcy5zbmFwc2hvdC5pdGVtcyA9IG51bGw7XHJcbiAgICB0aGlzLnNuYXBzaG90LnRvdGFsID0gMDtcclxuICAgIHRoaXMuc25hcHNob3QuZmFjZXRzID0gbnVsbDtcclxuICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgIHRoaXMudXBkYXRlU2VhcmNoSW5mbygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBvc2UgYSBmcmVlIHRleHQgc2VhcmNoIHF1ZXJ5XHJcbiAgICovXHJcbiAgY29tcG9zZVNlYXJjaCgpIHtcclxuICAgIGxldCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlclNlYXJjaEZyZWVUZXh0UXVlcnlCdWlsZGVyQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2Nvc3RydWlzY2kgcmljZXJjYScsXHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnNjAwcHgnLFxyXG4gICAgICB3aWR0aDogJzk5JScsXHJcbiAgICB9KTtcclxuICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50ZXh0ID0gci5xdWVyeTtcclxuICAgICAgICBkLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBQZXJmb3JtIHNlYXJjaFxyXG4gKi9cclxuICBzZWFyY2goKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID09PSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgPSBudWxsO1xyXG5cclxuICAgIC8vIFJlc2V0IHBhZ2luYXRvclxyXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG5cclxuICAgIC8vIFJlc2V0IGZhY2V0cyBzZWFyY2hcclxuICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcblxyXG4gICAgLy8gRG8gc2VhcmNoXHJcbiAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhZHZhbmNlZCBzZWFyY2hcclxuICAgKi9cclxuICBhZHZhbmNlZFNlYXJjaCgpIHtcclxuICAgIGxldCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlclNlYXJjaERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdyaWNlcmNhIGF2YW56YXRhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHBhcmFtczogdGhpcy5maWx0ZXJQYXJhbXMsXHJcbiAgICAgICAgZW5hYmxlUmVhZDogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlU2VjdG9yOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVR5cGU6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlQXV0aG9yOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVRvcGljOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVRleHQ6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlRG9jdW1lbnQ6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlU291cmNlOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc3MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG4gICAgZC5jb21wb25lbnRJbnN0YW5jZS5kb25lXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBzZWFyY2ggcGFyYW1zXHJcbiAgICAgICAgci5tb2RlbCA9IHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0gcjtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IDA7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuY291bnQgPSAxNTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID09PSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgcGFnaW5hdG9yXHJcbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBmYWNldHMgc2VhcmNoXHJcbiAgICAgICAgdGhpcy5mYWNldHMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgLy8gRG8gc2VhcmNoXHJcbiAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gRmluaXNoZWRcclxuICAgICAgICBkLmNsb3NlKCk7XHJcblxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGZyZWUgdGV4dCBoZWxwXHJcbiAqL1xyXG4gIGhlbHBTZWFyY2goKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiogT3BlbiBhbiBpdGVtXHJcbiogVGhpcyBzaG91bGQgYmUgYWx3YXlzIG92ZXJyaWRkZW5cclxuKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4qIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHN0cmluZ1xyXG4qIEBwYXJhbSBuZXdXaW5kb3c6IHRydWUgaWYgdGhlIGRvY3VtZW50IG11c3QgYmUgb3BlbiBpbnRvIGEgbmV3IHdpbmRvd1xyXG4qL1xyXG5vdmVycmlkZSBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCwgbmV3V2luZG93OiBib29sZWFuID0gZmFsc2UpIHtcclxuICBpZiAoIW5ld1dpbmRvdykge1xyXG4gICAgdGhpcy5vcGVuRG9jdW1lbnQoZG9jdW1lbnRJZCwgcXVlcnkpO1xyXG4gIH0gZWxzZSB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG59XHJcblxyXG4vKipcclxuICogT3BlbiBhIGRvY3VtZW50XHJcbiAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAqIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHN0cmluZ1xyXG4gKi9cclxub3ZlcnJpZGUgb3BlbkRvY3VtZW50KGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gIGlmIChkb2N1bWVudElkKSB7XHJcbiAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkRvY3VtZW50KHRoaXMuZGlhbG9nU2VydmljZSwgdGhpcy5jbGlwcGVyU2VydmljZSwgZG9jdW1lbnRJZCwgcXVlcnkpO1xyXG4gIH1cclxufVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2xpcHBlci1icm93c2VyLWZpeGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImRpYWxvZy1oZWFkZXJcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGNsYXNzPVwiZGlhbG9nLXRpdGxlXCI+XHJcbiAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0XCIgbWF0VG9vbHRpcD1cIkFwcmkgQ2xpcHBlciBpbiB1biBudW92byB0YWJcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaXBwZXItbG9nb1wiPjwvZGl2PlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZiAoZGlhbG9nRGF0YT8uc2VsZWN0aW9uTW9kZSA+IDAgJiYgY2FuU2VsZWN0KCkpIHtcclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjE3MHB4XCIgZnhGbGV4Lmx0LW1kPVwiNThweFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBmeEhpZGUubHQtbWQgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2xpcHBlci1zZWxlY3Rpb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21hbGwgdXBwZXJjYXNlXCI+VXNhIHNlbGV6aW9uZTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBmeEhpZGUuZ3Qtc20gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJVc2Egc2VsZXppb25lXCIgYXJpYS1sYWJlbD1cIidVc2EgbGEgc2VsZXppb25lJ1wiIGNsYXNzPVwiY2xpcHBlci1zZWxlY3Rpb24taWNvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwNnB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGNsYXNzPVwiZGlhbG9nLWNsb3NlXCI+XHJcbiAgICAgICAgICBAaWYgKGNsaXBwZXJTZXJ2aWNlLmJhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkRvY3VtZW50aSBkaSBsYXZvcm9cIiBhcmlhLWxhYmVsPVwiJ0RvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZUJhZygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW21hdEJhZGdlXT1cImNsaXBwZXJTZXJ2aWNlLmJhZy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIj53b3JrX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkNoaXVkaVwiIGFyaWEtbGFiZWw9XCJDaGl1ZGlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDIwcHhcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD0nMTBweCcgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTMwcHhcIiBmeEhpZGUueHMgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW1lcm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy5udW1iZXJcIiAjbnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAoa2V5dXAuRW50ZXIpPVwiZmV0Y2godHJ1ZSlcIj5cclxuICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy5udW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiQXp6ZXJhXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJQYXJhbXMubnVtYmVyID0gbnVsbDtcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTMwcHhcIiBmeEhpZGUueHMgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy55ZWFyXCIgI3llYXI9XCJuZ01vZGVsXCIgbmFtZT1cInllYXJcIiBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIiAoa2V5dXAuRW50ZXIpPVwiZmV0Y2godHJ1ZSlcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyUGFyYW1zLnllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKHllYXIuaW52YWxpZCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+Tm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMDBcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlBhcm9sZSwgZnJhc2kgbyBjb25jZXR0aS4uLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAjc2VhcmNoSW5wdXQ9XCJtYXRJbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgI3RleHQgWyhuZ01vZGVsKV09XCJmaWx0ZXJQYXJhbXMudGV4dFwiIG1heGxlbmd0aD1cIjIwMFwiXHJcbiAgICAgICAgICAgICAgICAoa2V5dXAuRW50ZXIpPVwic2VhcmNoKClcIiBhdXRvZm9jdXMgLz5cclxuICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclBhcmFtcy50ZXh0ID0gJydcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJDb21wb25pXCIgbWF0VG9vbHRpcD1cIkNvbXBvbmlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgY29tcG9zZVNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJJbmZvcm1hemlvbmlcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbWUgZWZmZXR0dWFyZSBsYSByaWNlcmNhIGluIHRlc3RvIGxpYmVyb1wiIChjbGljayk9XCJ0ZXh0LmZvY3VzKCk7IGhlbHBTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNlYXJjaCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQXZ2aWEgbGEgcmljZXJjYSdcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBdnZpYSByaWNlcmNhXCIgW2Rpc2FibGVkXT1cIiFjbGlwcGVyU2VydmljZS5sb2dnZWRJbigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidSaWNlcmNhIGF2YW56YXRhJ1wiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJpY2VyY2EgYXZhbnphdGFcIiBbZGlzYWJsZWRdPVwiIWNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChzbmFwc2hvdC5zZWFyY2hJbmZvICYmIHNuYXBzaG90LnNlYXJjaEluZm8ubGVuZ3RoID4gMCkge1xyXG4gICAgPGRpdiBmeEhpZGUueHM+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsIGNsYXNzPVwic21hbGxcIlxyXG4gICAgICAgIHN0eWxlPVwicGFkZGluZzowIDEwcHggMCAyMHB4O1wiPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgPGI+UklDRVJDQSBBVFRJVkE8L2I+Jm5ic3A7Jm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgICBAZm9yIChzaSBvZiBzbmFwc2hvdC5zZWFyY2hJbmZvOyB0cmFjayBzaSkge1xyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIHt7c2kuc2VwID8gJyZuYnNwOyZuYnNwOycgOiAnJ319IHt7c2kuZmllbGR9fTogPHNwYW4gY2xhc3M9XCJhY2NlbnQgbG93ZXJjYXNlXCI+PGk+e3tzaS52YWx1ZX19PC9pPjwvc3Bhbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwic3RhcnRcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQXp6ZXJhIHJpY2VyY2FcIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXAtcmV2ZXJzZVwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6IDAgMTBweCAwIDE1cHg7XCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIEBpZiAoc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0QWxsKCRldmVudCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKSAmJiAhYWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlemlvbmEvZGVzZWxlemlvbmEgdHV0dG8nXCIgbWF0VG9vbHRpcD1cIlNlbGV6aW9uYS9kZXNlbGV6aW9uYSB0dXR0b1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNuYXBzaG90Lml0ZW1zIHx8IHNuYXBzaG90Lml0ZW1zLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIG1hdFRvb2x0aXA9XCJPcmRpbmFcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcmRpbmEnXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVTb3J0XCIgW2Rpc2FibGVkXT1cIiFzbmFwc2hvdC50b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZnhIaWRlLmx0LWxnPk9yZGluYSBwZXI6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZ4SGlkZS5ndC1tZD5zb3J0PC9tYXQtaWNvbj4ge3tjdXJyZW50U29ydH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNvcnQ9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSgzKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgZGF0YSBkZWNyZXNjZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgRGF0YSBkZWNyZXNjZW50ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSgyKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgZGF0YSBjcmVzY2VudGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIERhdGEgY3Jlc2NlbnRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDEpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciByaWxldmFuemEnXCI+XHJcbiAgICAgICAgICAgICAgICAgIFJpbGV2YW56YVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSg1KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgcG9wb2xhcml0w6AnXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBvcG9sYXJpdMOgXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG1vZGVsbG8nXCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51TW9kZWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmeEhpZGUubHQtbGc+TW9zdHJhOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmeEhpZGUuZ3QtbWQ+ZmlsdGVyX2xpc3Q8L21hdC1pY29uPiB7e2N1cnJlbnRNb2RlbH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51TW9kZWxzPVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGFuZ2VNb2RlbCgyKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBhZ2dpb3JuYW1lbnRvIG5vcm1hdGl2bydcIj5cclxuICAgICAgICAgICAgICAgICAgR2F6emV0dGUgZSBib2xsZXR0aW5pXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTW9kZWwoOSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidOb3JtYXRpdmEgdmlnZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgTm9ybWF0aXZhIHZpZ2VudGVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoYW5nZU1vZGVsKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgdHV0dGkgaSBkb2N1bWVudGknXCI+XHJcbiAgICAgICAgICAgICAgICAgIFR1dHRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgQGlmIChzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBemlvbmkgZGEgZXNlZ3VpcmUgc3VnbGkgZWxlbWVudGkgc2VsZXppb25hdGlcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9wemlvbmkgcGVyIGVsZW1lbnRpIHNlbGV6aW9uYXRpJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51U2VsZWN0aW9uc1wiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbbWF0QmFkZ2VdPVwic2VsZWN0aW9uPy5hbGwubGVuZ3RoXCIgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPmNoZWNrbGlzdDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNlbGVjdGlvbnM9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgc2VsZWN0aW9uU291cmNlPVwic2VsZWN0aW9uXCIgW3VzZVNlbGVjdGlvbnNdPVwiY2FuU2VsZWN0KClcIlxyXG4gICAgICAgICAgICAgIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzTGF3SW5Gb3JjZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvY2xpcHBlci1kb2N1bWVudC1tZW51PlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgIEBpZiAoc25hcHNob3QgJiYgc25hcHNob3QuZmFjZXRzPy5oYXNGYWNldHMgJiYgZmlsdGVyUGFuZSAmJiAoIWZpbHRlclBhbmUub3BlbmVkIHx8IGZpbHRlclBhbmVDbG9zZWQpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQWZmaW5hIHJpY2VyY2FcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiJ0FmZmluYSByaWNlcmNhJ1wiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPm1lbnVfb3BlbjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGlkPVwiY2xpcHBlci1icm93c2VyLXNjcm9sbGFibGVcIj5cclxuICA8bWF0LWRyYXdlci1jb250YWluZXIgY2xhc3M9XCJmaWxsXCI+XHJcbiAgICA8bWF0LWRyYXdlciAjZmlsdGVyUGFuZSBwb3NpdGlvbj1cImVuZFwiIGNsYXNzPVwiZHJhd2VyLXNtYWxsIGRyYXdlci13aXRoLWxvYWRlclwiIG9wZW5lZD1cImZhbHNlXCI+XHJcbiAgICAgIEBpZiAoZmlsdGVyQnVzeSgpKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+PC9kaXY+XHJcbiAgICAgIH1cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjZweFwiPlxyXG4gICAgICAgICAgQGlmIChmaWx0ZXJCdXN5KCkpIHtcclxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIHN0eWxlPVwiei1pbmRleDogMTE7XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj5cclxuICAgICAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjU2cHhcIiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lci13aXRoLWxvYWRlclwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGl0bGVcIj5BZmZpbmEgcmljZXJjYTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZSgpXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJOYXNjb25kaVwiPjxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgY2xhc3M9XCJzY3JvbGwtaGlkZGVuXCIgc3R5bGU9XCJwYWRkaW5nOiAwIDVweDtcIj5cclxuICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1mYWNldHMgI2ZhY2V0cz48L2NsaXBwZXItc2VhcmNoLWZhY2V0cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kcmF3ZXI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBbaWRdPVwic2Nyb2xsZXJJZFwiIGNsYXNzPVwic2Nyb2xsLWF1dG9cIiBzdHlsZT1cInBhZGRpbmc6IDAgNXB4O1wiPlxyXG4gICAgICAgIEBpZiAoIXNuYXBzaG90LnRvdGFsKSB7XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlXCI+PGk+TmVzc3VuIGVsZW1lbnRvIGRhIHZpc3VhbGl6emFyZS48L2k+PC9wPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNuYXBzaG90Lml0ZW1zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICBAaWYgKGl0ZW0uZ3JvdXApIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1ncm91cC10aXRsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZ3JvdXAtc3BhY2VkJzogaSA+IDB9XCI+e3tpdGVtLmdyb3VwfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbcGFyZW50XT1cInRoaXNcIiBbYWN0aW9uc109XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5TW9kZWxOYW1lXT1cInRydWVcIj48L2NsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiAoY2xvc2VkKT1cInVwZGF0ZU1lbnVCdXR0b25zVmlzaWJpbGl0eSgpXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICA8Y2xpcHBlci1kb2N1bWVudC1tZW51IFtwYXJlbnRdPVwidGhpc1wiIFtpdGVtXT1cIml0ZW1cIiBbdXNlU2VsZWN0aW9uc109XCJjYW5TZWxlY3QoKVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFtpc0xhd0luRm9yY2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDwvY2xpcHBlci1kb2N1bWVudC1tZW51PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGZvb3RlciAtLT5cclxuICAgICAgQGlmICgoc25hcHNob3Q/LnRvdGFsID8/IDApID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgPG1hdC1wYWdpbmF0b3IgI3BhZ2luYXRvciBjbGFzcz1cInBhZ2luYXRvclwiIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiIFtsZW5ndGhdPVwic25hcHNob3Q/LnRvdGFsID8/IDBcIlxyXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwiZmlsdGVyUGFyYW1zLmNvdW50ID8/IDE1XCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIiAocGFnZSk9XCJmZXRjaE1vcmUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtZHJhd2VyLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
|
|
779
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1B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QStDO3FCQUNoRCxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsNEJBQTRCO3dCQUM1QixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLE9BQU87d0JBQ1AsZ0NBQWdDO3dCQUNoQyxrQkFBa0I7cUJBQ25COzhCQUt3QixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdERyYXdlciwgTWF0U2lkZW5hdk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyQXV0aG9ycyxcclxuICBDbGlwcGVyRG9jdW1lbnRDaGFuZ2VSZWFzb24sXHJcbiAgQ2xpcHBlck1lc3NhZ2VzLFxyXG4gIENsaXBwZXJNb2RlbCxcclxuICBDbGlwcGVyTW9kZWxzLFxyXG4gIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLFxyXG4gIENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCxcclxuICBDbGlwcGVyU2VhcmNoUGFyYW1zLFxyXG4gIENsaXBwZXJTZWFyY2hSZXN1bHQsXHJcbiAgQ2xpcHBlclNlYXJjaFV0aWxzLFxyXG4gIENsaXBwZXJTZWN0b3JUeXBlcyxcclxuICBDbGlwcGVyU2VjdG9ycyxcclxuICBDbGlwcGVyU2VsZWN0aW9uTW9kZSxcclxuICBDbGlwcGVyU29ydCxcclxuICBDbGlwcGVyU291cmNlc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2RvY3VtZW50LW1lbnUvZG9jdW1lbnQtbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0SGVscENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtaGVscC9zZWFyY2gtZnJlZS10ZXh0LWhlbHAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0UXVlcnlCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50c1V0aWxzIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnRzJztcclxuaW1wb3J0IHsgQ2xpcHBlclJlZmVyZW5jZXNDb21wb25lbnQgfSBmcm9tICcuLi9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50JztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaXBwZXJCcm93c2VyRGlhbG9nRGF0YSB7XHJcbiAgc2VsZWN0aW9uTW9kZT86IENsaXBwZXJTZWxlY3Rpb25Nb2RlIHwgbnVsbCxcclxuICBzZWxlY3RhYmxlTW9kZWxzPzogbnVtYmVyW10gfCBudWxsLFxyXG4gIGluaXRpYWxNb2RlbD86IG51bWJlciB8IG51bGxcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jyb3dzZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9icm93c2VyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVJcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRmxleExheW91dE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QmFkZ2VNb2R1bGUsXHJcbiAgICBNYXRUYWJzTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIE1hdERpdmlkZXJNb2R1bGUsXHJcbiAgICBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgQ2xpcHBlclNlYXJjaFJlc3VsdEl0ZW1Db21wb25lbnQsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGVcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckJyb3dzZXJEaWFsb2dDb21wb25lbnRcclxuICBleHRlbmRzIENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyXHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyUGFuZScpIGZpbHRlclBhbmUhOiBNYXREcmF3ZXI7XHJcblxyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyQnJvd3NlckRpYWxvZ0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyQnJvd3NlckRpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcclxuICBwcm90ZWN0ZWQgdGl0bGU6IHN0cmluZyA9ICdSaWNlcmNhIGluIENsaXBwZXInO1xyXG4gIHByb3RlY3RlZCBzbmFwc2hvdDogQ2xpcHBlclNlYXJjaFJlc3VsdCA9IHtcclxuICAgIHNlYXJjaEluZm86IG51bGwsXHJcbiAgICBzZWFyY2hQYXJhbXM6IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKClcclxuICB9O1xyXG5cclxuICBwcm90ZWN0ZWQgY3VycmVudE1vZGVsOiBzdHJpbmcgPSAnVHV0dG8nO1xyXG4gIHByb3RlY3RlZCBjdXJyZW50U29ydDogc3RyaW5nID0gJ1JpbGV2YW56YSc7XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIFVzZSBzZXJ2aWNlIHNuYXBzaG90XHJcbiAgICB0aGlzLnNuYXBzaG90ID0gdGhpcy5jbGlwcGVyU2VydmljZS5zbmFwc2hvdDtcclxuICAgIGlmICghdGhpcy5zbmFwc2hvdClcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHtcclxuICAgICAgICBzZWFyY2hJbmZvOiBudWxsLFxyXG4gICAgICAgIHNlYXJjaFBhcmFtczogbnVsbCxcclxuICAgICAgfTtcclxuICAgIGlmICghdGhpcy5maWx0ZXJQYXJhbXMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAvLyBTdG9yZSBzbmFwc2hvdFxyXG4gICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnNuYXBzaG90ID0gdGhpcy5zbmFwc2hvdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvblxyXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0YWJsZU1vZGVsPGFueSwgc3RyaW5nPih0cnVlLCAnZG9jdW1lbnRJZCcpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBtb2RlbFxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5pbml0aWFsTW9kZWwpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VNb2RlbCh0aGlzLmRpYWxvZ0RhdGEuaW5pdGlhbE1vZGVsLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLmdldE1lc3NhZ2UoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuRE9DVU1FTlRfU0VMRUNURURfSU5ORVIpIHtcclxuICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuRE9DVU1FTlRfU0VMRUNURUQsIG1lc3NhZ2UuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gd2luZG93IHNpemUgY2hhbmdlXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoMjUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS52aXNpYmxlLnNldCh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnZpc2libGUuc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gSGFuZGxlIGZpbHRlciBwYW5lIFxyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgaWYgKHRoaXMuZmFjZXRzKSB7XHJcbiAgICAgICAgdGhpcy5mYWNldHMuY2hhbmdlZFxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHM/LmNoYW5nZWRJbnRlcnZhbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnllYXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZyb21EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkU2VjdG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3I7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZSB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZFR5cGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudHlwZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHM/LmF1dGhvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZEF1dGhvcilcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3IgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yO1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG4gICAgdGhpcy5yZXNpemUoKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJlc2l6ZSBcclxuICovXHJcbiAgcHJpdmF0ZSByZXNpemUoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xpcHBlci1icm93c2VyLXNjcm9sbGFibGUnKTtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0Q3VycmVudERpYWxvZ1Njcm9sbGFibGVIZWlnaHQoXHJcbiAgICAgICAgICBbJ2NsaXBwZXItYnJvd3Nlci1maXhlZCddLFxyXG4gICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaGVpZ2h0ICE9IGVsZW0uY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAncGFkZGluZzowIDAgMCAwO2hlaWdodDonICsgaGVpZ2h0ICsgJ3B4ICFpbXBvcnRhbnQ7bWF4LWhlaWdodDonICsgaGVpZ2h0ICsgJ3B4ICFpbXBvcnRhbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiogU2hvdyBoaWRlIGZpbHRlciBwYW5lIG1hbnVhbGx5XHJcbiovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlclBhbmUoKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhbmVDbG9zZWQgPSAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lPy50b2dnbGUoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIHBhbmUgdmlzaWJpbGl0eVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYW5lKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuWFNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5TbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnb3Zlcic7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZUhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgIXRoaXMuZmlsdGVyUGFuZUNsb3NlZCAmJiB0aGlzLmhhc0ZhY2V0cygpKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUub3BlbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCAmJiB0aGlzLmZpbHRlclBhbmVDbG9zZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUubW9kZSA9ICdzaWRlJztcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGRvY3VtZW50cyBjYW4gYmUgc2VsZWN0ZWQgYW5kIHJldHVybmVkIGFzIG1lc3NhZ2VcclxuICAgKi9cclxuICBjYW5TZWxlY3QoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYWxsb3cgPVxyXG4gICAgICB0aGlzLnNlbGVjdGlvbiAmJlxyXG4gICAgICAoKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlID09PSAxICYmXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQubGVuZ3RoID09PSAxKSB8fFxyXG4gICAgICAgICh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0aW9uTW9kZSA9PT0gMiAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQubGVuZ3RoID4gMSkgfHxcclxuICAgICAgICAodGhpcy5kaWFsb2dEYXRhLnNlbGVjdGlvbk1vZGUgPT09IDMgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA+IDApKTtcclxuICAgIGlmIChhbGxvdyAmJiB0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0YWJsZU1vZGVscz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZC5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0YWJsZU1vZGVscy5pbmRleE9mKG4ubW9kZWwpID09PSAtMSkge1xyXG4gICAgICAgICAgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFsbG93O1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgYSBtZXNzYWdlIHdpdGggY3VycmVudCBzZWxlY3Rpb24gYW5kIGNsb3NlIGRpYWxvZ1xyXG4gICAqL1xyXG4gIHNlbGVjdCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShcclxuICAgICAgICBDbGlwcGVyTWVzc2FnZXMuRE9DVU1FTlRfU0VMRUNURUQsXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgZGlhbG9nXHJcbiAgICogQHBhcmFtIG5ld1JvdXRlOiB0aGUgbmV3IHJvdXRlIHRvIG5hdmlnYXRlIHRvXHJcbiAgICovXHJcbiAgY2xvc2UobmV3Um91dGU6IGFueSA9IG51bGwpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKG5ld1JvdXRlKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc29ydFxyXG4gICAqL1xyXG4gIHVwZGF0ZVNvcnRPcHRpb25zKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSkge1xyXG4gICAgICBjYXNlIENsaXBwZXJTb3J0LkRhdGVBc2M6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdEYXRhIGNyZS4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENsaXBwZXJTb3J0LlBvcHVsYXJpdHk6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydCA9ICdQb3BvbGFyaXTDoCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclNvcnQuUmVsZXZhbmNlOlxyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnUmlsZXZhbnphJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IENsaXBwZXJTb3J0LkRhdGVEZXNjO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnRGF0YSBkZWNyLic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGN1cnJlbnQgc2VhcmNoIGluZm9cclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaEluZm8oKSB7XHJcbiAgICBsZXQgc2kgPSBbXTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yIHx8XHJcbiAgICAgICh0aGlzLmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBzID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgQ2xpcHBlclNlY3RvcnMsXHJcbiAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICB0aGlzLmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChzKSB7XHJcbiAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogJ3NldHRvcmUnLFxyXG4gICAgICAgICAgdmFsdWU6IHMubmFtZSxcclxuICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcyA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEJ5S2V5KFxyXG4gICAgICAgICAgQ2xpcHBlck1vZGVscyxcclxuICAgICAgICAgICd2YWx1ZScsXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yXHJcbiAgICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvclxyXG4gICAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NlemlvbmUnLFxyXG4gICAgICAgICAgICB2YWx1ZTogcy5uYW1lLFxyXG4gICAgICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuYXV0aG9yIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBhID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kQnlLZXkoXHJcbiAgICAgICAgQ2xpcHBlckF1dGhvcnMsXHJcbiAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICB0aGlzLmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3JcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuYXV0aG9yXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogJ2F1dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogYS5hdXRob3JEZXNjcmlwdGlvbixcclxuICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRvcGljKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2FyZ29tZW50bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLnRvcGljLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudGF4b25vbXkpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYXJnb21lbnRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudGF4b25vbXlOb2RlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bWVybycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLm51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5zbmFwc2hvdC5pbnRlcnZhbCAmJlxyXG4gICAgICAodGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGUgfHxcclxuICAgICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSAmJlxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgIT09XHJcbiAgICAgICAgICBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bykpXHJcbiAgICApIHtcclxuICAgICAgbGV0IGQxID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLmZyb21EYXRlO1xyXG4gICAgICBjb25zdCBkMiA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZTtcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICFkMiA/ICdpbiBkYXRhJyA6ICdkYSBkYXRhJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShkMSksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbmFwc2hvdC5pbnRlcnZhbCAmJlxyXG4gICAgICAodGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlIHx8XHJcbiAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCAhPT1cclxuICAgICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKSlcclxuICAgICkge1xyXG4gICAgICBsZXQgZCA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZTtcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhIGRhdGEnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQpLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5pbnRlcnZhbClcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdpbnRlcnZhbGxvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5zbmFwc2hvdC5pbnRlcnZhbCxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmFycmF5R2V0VmFsdWUoXHJcbiAgICAgICAgICBDbGlwcGVyU291cmNlcyxcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VOdW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtLiBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZU51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VGcm9tRGF0ZSB8fFxyXG4gICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGUgJiZcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCA9PT1cclxuICAgICAgICBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bylcclxuICAgICkge1xyXG4gICAgICBsZXQgZDEgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlRnJvbURhdGU7XHJcbiAgICAgIGNvbnN0IGQyID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlVG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogIWQyID8gJ2luIGRhdGEgZm9udGUnIDogJ2RhIGRhdGEgZm9udGUnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQxKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGUgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmXHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZSAmJlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsID09PVxyXG4gICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlVG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2EgZGF0YSBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZCksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50ZXh0KVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3Rlc3RvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudGV4dCxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy50eXBlIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgdCA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEJ5S2V5KFxyXG4gICAgICAgIENsaXBwZXJTZWN0b3JUeXBlcyxcclxuICAgICAgICAndmFsdWUnLFxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnR5cGVcclxuICAgICAgKTtcclxuICAgICAgaWYgKHQpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAndGlwbycsXHJcbiAgICAgICAgICB2YWx1ZTogdC5kb2N1bWVudFR5cGVEZXNjcmlwdGlvbixcclxuICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNob3dVbnJlYWREb2N1bWVudHNPbmx5KVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3N0YXRvJyxcclxuICAgICAgICB2YWx1ZTogJ25vbiBsZXR0aScsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuY2hhbmdlUmVhc29uIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uKVxyXG4gICAgKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ3RpcG8gbW9kLicsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmFycmF5R2V0VmFsdWUoXHJcbiAgICAgICAgICBDbGlwcGVyRG9jdW1lbnRDaGFuZ2VSZWFzb24sXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uXHJcbiAgICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnJlYXNvblxyXG4gICAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZVJlYXNvblxyXG4gICAgICAgICksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWROdW1iZXIsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllck51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJZZWFyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclRpdGxlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hJbmZvID0gc2k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ2hhbmdlIHNlYXJjaCBtb2RlbFxyXG4gKiBAcGFyYW0gbW9kZWwgOiB0aGUgbmV3IGRvY3VtZW50IG1vZGVsIFxyXG4gKiBAcGFyYW0gZmV0Y2ggOiB0cnVlIGlmIGRhdGEgbXVzdCBiZSBmZXRjaGVkLiBEZWZhdWx0IGlzIHRydWVcclxuICovXHJcbiAgY2hhbmdlTW9kZWwobW9kZWw6IG51bWJlciA9IG51bGwsIGZldGNoOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPSBtb2RlbDtcclxuICAgIHN3aXRjaCAobW9kZWwpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bzogdGhpcy5jdXJyZW50TW9kZWwgPSBcIkdhenpldHRlIGUgYm9sbGV0dGluaVwiOyBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZTogdGhpcy5jdXJyZW50TW9kZWwgPSBcIk5vcm1hdGl2YSB2aWdlbnRlXCI7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0gXCJUdXR0b1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKGZldGNoKVxyXG4gICAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgYSBzb3J0XHJcbiAgICogQHBhcmFtIG1vZGUgOiB0aGUgc29ydCBtb2RlXHJcbiAgICovXHJcbiAgc29ydEJ5KG1vZGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy51cGRhdGVTb3J0T3B0aW9ucygpO1xyXG4gICAgdGhpcy5mZXRjaChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogR2V0IGZhY2V0c1xyXG4gKi9cclxuICBmZXRjaEZhY2V0cygpIHtcclxuICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICB0aGlzLmZpbHRlckJ1c3kuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5xdWVyeUZhY2V0cyh0aGlzLmZpbHRlclBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0cyhudWxsLCByLnZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIaWRlIGZhY2V0c1xyXG4gICAqL1xyXG4gIGhpZGVGYWNldHMoKSB7XHJcbiAgICB0aGlzLmZhY2V0cz8ucmVzZXQoKTtcclxuICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gYSBzZWFyY2ggdXNpbmcgY3VycmVudCBwYXJhbXNcclxuICAgKi9cclxuICBmZXRjaChuZXdTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ1JpY2VyY2EgaW4gY29yc28uLi4nKTtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmNvdW50ID0gMTU7XHJcbiAgICBpZiAobmV3U2VhcmNoKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gMDtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBDbGlwcGVyU29ydC5SZWxldmFuY2U7XHJcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSlcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zb3J0TW9kZSA9IENsaXBwZXJTb3J0LkRhdGVEZXNjO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNvcnRPcHRpb25zKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMueWVhciA+IDApIHtcclxuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZmlsdGVyUGFyYW1zLnllYXI7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZyb21EYXRlID0gbmV3IERhdGUoeWVhciwgMCwgMSwgMik7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IG5ldyBEYXRlKHllYXIsIDExLCAzMSwgMik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50ZXh0KSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRleHQgPSBDbGlwcGVyU2VhcmNoVXRpbHMubm9ybWFsaXplVGV4dFF1ZXJ5KHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5xdWVyeSh0aGlzLmZpbHRlclBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdHMoci52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBIYW5kbGUgZmFjZXRzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBmYWNldHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hGYWNldHMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oaWRlRmFjZXRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsKDApO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHZpZXdcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hJbmZvKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgbmV3IHBhZ2UgcmVzdWx0XHJcbiAgICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgICovXHJcbiAgZmV0Y2hNb3JlKGU6IGFueSkge1xyXG4gICAgbGV0IGZpcnN0ID0gZS5wYWdlSW5kZXggKiB0aGlzLmZpbHRlclBhcmFtcy5jb3VudDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gZmlyc3Q7XHJcbiAgICB0aGlzLmZldGNoKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2hcclxuICAgKi9cclxuICBjbGVhclNlYXJjaCgpIHtcclxuICAgIHRoaXMuY3VycmVudE1vZGVsID0gJ05vcm1hdGl2YSB2aWdlbnRlJztcclxuICAgIHRoaXMuc25hcHNob3QuaXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC50b3RhbCA9IDA7XHJcbiAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IG51bGw7XHJcbiAgICB0aGlzLmZhY2V0cy5yZXNldCgpO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlYXJjaEluZm8oKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDb21wb3NlIGEgZnJlZSB0ZXh0IHNlYXJjaCBxdWVyeVxyXG4gICAqL1xyXG4gIGNvbXBvc2VTZWFyY2goKSB7XHJcbiAgICBsZXQgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb3N0cnVpc2NpIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudGV4dCA9IHIucXVlcnk7XHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICogUGVyZm9ybSBzZWFyY2hcclxuICovXHJcbiAgc2VhcmNoKCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9PT0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcilcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gbnVsbDtcclxuXHJcbiAgICAvLyBSZXNldCBwYWdpbmF0b3JcclxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuXHJcbiAgICAvLyBSZXNldCBmYWNldHMgc2VhcmNoXHJcbiAgICB0aGlzLmZhY2V0cy5yZXNldCgpO1xyXG5cclxuICAgIC8vIERvIHNlYXJjaFxyXG4gICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYWR2YW5jZWQgc2VhcmNoXHJcbiAgICovXHJcbiAgYWR2YW5jZWRTZWFyY2goKSB7XHJcbiAgICBsZXQgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAncmljZXJjYSBhdmFuemF0YScsXHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwYXJhbXM6IHRoaXMuZmlsdGVyUGFyYW1zLFxyXG4gICAgICAgIGVuYWJsZVJlYWQ6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVNlY3RvcjogdHJ1ZSxcclxuICAgICAgICBlbmFibGVUeXBlOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZUF1dGhvcjogdHJ1ZSxcclxuICAgICAgICBlbmFibGVUb3BpYzogdHJ1ZSxcclxuICAgICAgICBlbmFibGVUZXh0OiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZURvY3VtZW50OiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVNvdXJjZTogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnNzAwcHgnLFxyXG4gICAgICB3aWR0aDogJzk5JScsXHJcbiAgICB9KTtcclxuICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBVcGRhdGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgICAgIHIubW9kZWwgPSB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbDtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcyA9IHI7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmNvdW50ID0gMTU7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9PT0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcilcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHBhZ2luYXRvclxyXG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgZmFjZXRzIHNlYXJjaFxyXG4gICAgICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcblxyXG4gICAgICAgIC8vIERvIHNlYXJjaFxyXG4gICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIEZpbmlzaGVkXHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG5cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2hvdyBmcmVlIHRleHQgaGVscFxyXG4gKi9cclxuICBoZWxwU2VhcmNoKCkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlclNlYXJjaEZyZWVUZXh0SGVscENvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdpbmZvcm1hemlvbmkgcmljZXJjYScsXHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnODAwcHgnLFxyXG4gICAgICB3aWR0aDogJzk5JScsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuKiBPcGVuIGFuIGl0ZW1cclxuKiBUaGlzIHNob3VsZCBiZSBhbHdheXMgb3ZlcnJpZGRlblxyXG4qIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiovXHJcbiAgb3ZlcnJpZGUgb3Blbihkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsIG5ld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIW5ld1dpbmRvdykge1xyXG4gICAgICB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgICB9IGVsc2Ugd2luZG93Lm9wZW4oJy9kb2N1bWVudG8vJyArIGRvY3VtZW50SWQsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICovXHJcbiAgb3ZlcnJpZGUgb3BlbkRvY3VtZW50KGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgaWYgKGRvY3VtZW50SWQpIHtcclxuICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5Eb2N1bWVudCh0aGlzLmRpYWxvZ1NlcnZpY2UsIHRoaXMuY2xpcHBlclNlcnZpY2UsIGRvY3VtZW50SWQsIHF1ZXJ5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJyb3dzZSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKiBAcGFyYW0gbW9kZSA6IHRoZSBtb2RlXHJcbiAgICovXHJcbiAgb3ZlcnJpZGUgb3BlblJlZmVyZW5jZXMoXHJcbiAgICBkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgbW9kZTogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfCBudWxsID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luLFxyXG4gICAgbW9kZWw6IG51bWJlciA9IG51bGwsXHJcbiAgICBhbmNob3I6IHN0cmluZyA9IG51bGwsXHJcbiAgICBhbmNob3JUaXRsZTogc3RyaW5nID0gbnVsbCxcclxuICAgIHVwZGF0ZTogYm9vbGVhbiA9IHRydWVcclxuICApIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdyaWZlcmltZW50aSBsZWdhdGkgYWwgZG9jdW1lbnRvJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBpZDogZG9jdW1lbnRJZCxcclxuICAgICAgICBtb2RlOiBtb2RlLFxyXG4gICAgICAgIG1vZGVsOiBtb2RlbCxcclxuICAgICAgICBhbmNob3I6IGFuY2hvcixcclxuICAgICAgICBhbmNob3JUaXRsZTogYW5jaG9yVGl0bGUsXHJcbiAgICAgICAgdXBkYXRlOiB1cGRhdGUsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhbmVsQ2xhc3M6ICdyZWZlcmVuY2VzLWNvbnRhaW5lcicsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzEwMDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgaGVpZ2h0OiAnOTklJyxcclxuICAgIH0pO1xyXG4gICAgZC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyICYmIHIuZG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgdGhpcy5vcGVuKHIuZG9jdW1lbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2xpcHBlci1icm93c2VyLWZpeGVkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImRpYWxvZy1oZWFkZXJcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGNsYXNzPVwiZGlhbG9nLXRpdGxlXCI+XHJcbiAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0XCIgbWF0VG9vbHRpcD1cIkFwcmkgQ2xpcHBlciBpbiB1biBudW92byB0YWJcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaXBwZXItbG9nb1wiPjwvZGl2PlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZiAoZGlhbG9nRGF0YT8uc2VsZWN0aW9uTW9kZSA+IDAgJiYgY2FuU2VsZWN0KCkpIHtcclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjE3MHB4XCIgZnhGbGV4Lmx0LW1kPVwiNThweFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBmeEhpZGUubHQtbWQgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2xpcHBlci1zZWxlY3Rpb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21hbGwgdXBwZXJjYXNlXCI+VXNhIHNlbGV6aW9uZTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBmeEhpZGUuZ3Qtc20gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJVc2Egc2VsZXppb25lXCIgYXJpYS1sYWJlbD1cIidVc2EgbGEgc2VsZXppb25lJ1wiIGNsYXNzPVwiY2xpcHBlci1zZWxlY3Rpb24taWNvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwNnB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGNsYXNzPVwiZGlhbG9nLWNsb3NlXCI+XHJcbiAgICAgICAgICBAaWYgKGNsaXBwZXJTZXJ2aWNlLmJhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkRvY3VtZW50aSBkaSBsYXZvcm9cIiBhcmlhLWxhYmVsPVwiJ0RvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZUJhZygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW21hdEJhZGdlXT1cImNsaXBwZXJTZXJ2aWNlLmJhZy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIj53b3JrX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkNoaXVkaVwiIGFyaWEtbGFiZWw9XCJDaGl1ZGlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDIwcHhcIj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD0nMTBweCcgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTMwcHhcIiBmeEhpZGUueHMgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW1lcm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy5udW1iZXJcIiAjbnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAoa2V5dXAuRW50ZXIpPVwiZmV0Y2godHJ1ZSlcIj5cclxuICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy5udW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiQXp6ZXJhXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJQYXJhbXMubnVtYmVyID0gbnVsbDtcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTMwcHhcIiBmeEhpZGUueHMgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy55ZWFyXCIgI3llYXI9XCJuZ01vZGVsXCIgbmFtZT1cInllYXJcIiBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIiAoa2V5dXAuRW50ZXIpPVwiZmV0Y2godHJ1ZSlcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyUGFyYW1zLnllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKHllYXIuaW52YWxpZCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+Tm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMDBcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlBhcm9sZSwgZnJhc2kgbyBjb25jZXR0aS4uLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAjc2VhcmNoSW5wdXQ9XCJtYXRJbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgI3RleHQgWyhuZ01vZGVsKV09XCJmaWx0ZXJQYXJhbXMudGV4dFwiIG1heGxlbmd0aD1cIjIwMFwiXHJcbiAgICAgICAgICAgICAgICAoa2V5dXAuRW50ZXIpPVwic2VhcmNoKClcIiBhdXRvZm9jdXMgLz5cclxuICAgICAgICAgICAgICBAaWYgKGZpbHRlclBhcmFtcy50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclBhcmFtcy50ZXh0ID0gJydcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJDb21wb25pXCIgbWF0VG9vbHRpcD1cIkNvbXBvbmlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgY29tcG9zZVNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJJbmZvcm1hemlvbmlcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbWUgZWZmZXR0dWFyZSBsYSByaWNlcmNhIGluIHRlc3RvIGxpYmVyb1wiIChjbGljayk9XCJ0ZXh0LmZvY3VzKCk7IGhlbHBTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNlYXJjaCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQXZ2aWEgbGEgcmljZXJjYSdcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBdnZpYSByaWNlcmNhXCIgW2Rpc2FibGVkXT1cIiFjbGlwcGVyU2VydmljZS5sb2dnZWRJbigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidSaWNlcmNhIGF2YW56YXRhJ1wiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJpY2VyY2EgYXZhbnphdGFcIiBbZGlzYWJsZWRdPVwiIWNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChzbmFwc2hvdC5zZWFyY2hJbmZvICYmIHNuYXBzaG90LnNlYXJjaEluZm8ubGVuZ3RoID4gMCkge1xyXG4gICAgPGRpdiBmeEhpZGUueHM+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsIGNsYXNzPVwic21hbGxcIlxyXG4gICAgICAgIHN0eWxlPVwicGFkZGluZzowIDEwcHggMCAyMHB4O1wiPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgPGI+UklDRVJDQSBBVFRJVkE8L2I+Jm5ic3A7Jm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgICBAZm9yIChzaSBvZiBzbmFwc2hvdC5zZWFyY2hJbmZvOyB0cmFjayBzaSkge1xyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIHt7c2kuc2VwID8gJyZuYnNwOyZuYnNwOycgOiAnJ319IHt7c2kuZmllbGR9fTogPHNwYW4gY2xhc3M9XCJhY2NlbnQgbG93ZXJjYXNlXCI+PGk+e3tzaS52YWx1ZX19PC9pPjwvc3Bhbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwic3RhcnRcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQXp6ZXJhIHJpY2VyY2FcIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXAtcmV2ZXJzZVwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6IDAgMTBweCAwIDE1cHg7XCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIEBpZiAoc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0QWxsKCRldmVudCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKSAmJiAhYWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlemlvbmEvZGVzZWxlemlvbmEgdHV0dG8nXCIgbWF0VG9vbHRpcD1cIlNlbGV6aW9uYS9kZXNlbGV6aW9uYSB0dXR0b1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNuYXBzaG90Lml0ZW1zIHx8IHNuYXBzaG90Lml0ZW1zLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIG1hdFRvb2x0aXA9XCJPcmRpbmFcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcmRpbmEnXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVTb3J0XCIgW2Rpc2FibGVkXT1cIiFzbmFwc2hvdC50b3RhbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZnhIaWRlLmx0LWxnPk9yZGluYSBwZXI6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZ4SGlkZS5ndC1tZD5zb3J0PC9tYXQtaWNvbj4ge3tjdXJyZW50U29ydH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNvcnQ9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSgzKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgZGF0YSBkZWNyZXNjZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgRGF0YSBkZWNyZXNjZW50ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSgyKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgZGF0YSBjcmVzY2VudGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIERhdGEgY3Jlc2NlbnRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDEpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciByaWxldmFuemEnXCI+XHJcbiAgICAgICAgICAgICAgICAgIFJpbGV2YW56YVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInNvcnRCeSg1KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09yZGluYSBwZXIgcG9wb2xhcml0w6AnXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBvcG9sYXJpdMOgXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG1vZGVsbG8nXCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51TW9kZWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmeEhpZGUubHQtbGc+TW9zdHJhOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmeEhpZGUuZ3QtbWQ+ZmlsdGVyX2xpc3Q8L21hdC1pY29uPiB7e2N1cnJlbnRNb2RlbH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51TW9kZWxzPVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGFuZ2VNb2RlbCgyKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBhZ2dpb3JuYW1lbnRvIG5vcm1hdGl2bydcIj5cclxuICAgICAgICAgICAgICAgICAgR2F6emV0dGUgZSBib2xsZXR0aW5pXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTW9kZWwoOSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidOb3JtYXRpdmEgdmlnZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgTm9ybWF0aXZhIHZpZ2VudGVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoYW5nZU1vZGVsKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgdHV0dGkgaSBkb2N1bWVudGknXCI+XHJcbiAgICAgICAgICAgICAgICAgIFR1dHRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgQGlmIChzZWxlY3Rpb24/Lmhhc1ZhbHVlKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBemlvbmkgZGEgZXNlZ3VpcmUgc3VnbGkgZWxlbWVudGkgc2VsZXppb25hdGlcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9wemlvbmkgcGVyIGVsZW1lbnRpIHNlbGV6aW9uYXRpJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51U2VsZWN0aW9uc1wiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbbWF0QmFkZ2VdPVwic2VsZWN0aW9uPy5hbGwubGVuZ3RoXCIgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPmNoZWNrbGlzdDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudVNlbGVjdGlvbnM9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgc2VsZWN0aW9uU291cmNlPVwic2VsZWN0aW9uXCIgW3VzZVNlbGVjdGlvbnNdPVwiY2FuU2VsZWN0KClcIlxyXG4gICAgICAgICAgICAgIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzTGF3SW5Gb3JjZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvY2xpcHBlci1kb2N1bWVudC1tZW51PlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgIEBpZiAoc25hcHNob3QgJiYgc25hcHNob3QuZmFjZXRzPy5oYXNGYWNldHMgJiYgZmlsdGVyUGFuZSAmJiAoIWZpbHRlclBhbmUub3BlbmVkIHx8IGZpbHRlclBhbmVDbG9zZWQpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQWZmaW5hIHJpY2VyY2FcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiJ0FmZmluYSByaWNlcmNhJ1wiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPm1lbnVfb3BlbjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGlkPVwiY2xpcHBlci1icm93c2VyLXNjcm9sbGFibGVcIj5cclxuICA8bWF0LWRyYXdlci1jb250YWluZXIgY2xhc3M9XCJmaWxsXCI+XHJcbiAgICA8bWF0LWRyYXdlciAjZmlsdGVyUGFuZSBwb3NpdGlvbj1cImVuZFwiIGNsYXNzPVwiZHJhd2VyLXNtYWxsIGRyYXdlci13aXRoLWxvYWRlclwiIG9wZW5lZD1cImZhbHNlXCI+XHJcbiAgICAgIEBpZiAoZmlsdGVyQnVzeSgpKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+PC9kaXY+XHJcbiAgICAgIH1cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjZweFwiPlxyXG4gICAgICAgICAgQGlmIChmaWx0ZXJCdXN5KCkpIHtcclxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIHN0eWxlPVwiei1pbmRleDogMTE7XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj5cclxuICAgICAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjU2cHhcIiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lci13aXRoLWxvYWRlclwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGl0bGVcIj5BZmZpbmEgcmljZXJjYTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZSgpXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJOYXNjb25kaVwiPjxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgY2xhc3M9XCJzY3JvbGwtaGlkZGVuXCIgc3R5bGU9XCJwYWRkaW5nOiAwIDVweDtcIj5cclxuICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1mYWNldHMgI2ZhY2V0cz48L2NsaXBwZXItc2VhcmNoLWZhY2V0cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kcmF3ZXI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBbaWRdPVwic2Nyb2xsZXJJZFwiIGNsYXNzPVwic2Nyb2xsLWF1dG9cIiBzdHlsZT1cInBhZGRpbmc6IDAgNXB4O1wiPlxyXG4gICAgICAgIEBpZiAoIXNuYXBzaG90LnRvdGFsKSB7XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlXCI+PGk+TmVzc3VuIGVsZW1lbnRvIGRhIHZpc3VhbGl6emFyZS48L2k+PC9wPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHNuYXBzaG90Lml0ZW1zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICBAaWYgKGl0ZW0uZ3JvdXApIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1ncm91cC10aXRsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZ3JvdXAtc3BhY2VkJzogaSA+IDB9XCI+e3tpdGVtLmdyb3VwfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbcGFyZW50XT1cInRoaXNcIiBbYWN0aW9uc109XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5TW9kZWxOYW1lXT1cInRydWVcIj48L2NsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiAoY2xvc2VkKT1cInVwZGF0ZU1lbnVCdXR0b25zVmlzaWJpbGl0eSgpXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICA8Y2xpcHBlci1kb2N1bWVudC1tZW51IFtwYXJlbnRdPVwidGhpc1wiIFtpdGVtXT1cIml0ZW1cIiBbdXNlU2VsZWN0aW9uc109XCJjYW5TZWxlY3QoKVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFtpc0xhd0luRm9yY2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDwvY2xpcHBlci1kb2N1bWVudC1tZW51PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGZvb3RlciAtLT5cclxuICAgICAgQGlmICgoc25hcHNob3Q/LnRvdGFsID8/IDApID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgPG1hdC1wYWdpbmF0b3IgI3BhZ2luYXRvciBjbGFzcz1cInBhZ2luYXRvclwiIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiIFtsZW5ndGhdPVwic25hcHNob3Q/LnRvdGFsID8/IDBcIlxyXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwiZmlsdGVyUGFyYW1zLmNvdW50ID8/IDE1XCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIiAocGFnZSk9XCJmZXRjaE1vcmUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtZHJhd2VyLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
|