@tsi-developpement/tsi-shared-ui 1.7.33 → 1.7.35
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/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +27 -6
- package/esm2022/lib/tsi-helpers/filter-helper.mjs +14 -4
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +38 -8
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/tsi-components/tsi-form/tsi-form.component.d.ts +6 -1
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ import { TsiModalFooterComponent } from '../tsi-modal-footer/tsi-modal-footer.co
|
|
|
11
11
|
import { TsiModalHeaderComponent } from '../tsi-modal-header/tsi-modal-header.component';
|
|
12
12
|
import { FormulaireService } from '../../services/dynamic-form/formulaire.service';
|
|
13
13
|
import { isNullOrEmpty } from '../../functions';
|
|
14
|
+
import { EntityConfigurationService } from '../../services/configuration/entity-configuration.service';
|
|
14
15
|
import * as i0 from "@angular/core";
|
|
15
16
|
import * as i1 from "../../services/status/entityStatus.service";
|
|
16
17
|
import * as i2 from "../../services/status/status-color.service";
|
|
@@ -43,7 +44,7 @@ export class TsiFormComponent {
|
|
|
43
44
|
set descriminatorValue(value) {
|
|
44
45
|
this._descriminatorValue = value;
|
|
45
46
|
this.isDescriminatorValueSet = true;
|
|
46
|
-
this.
|
|
47
|
+
this.calculateFormsInfos();
|
|
47
48
|
}
|
|
48
49
|
get formEndpoint() {
|
|
49
50
|
return this._formEndpoint;
|
|
@@ -70,7 +71,8 @@ export class TsiFormComponent {
|
|
|
70
71
|
this.getColonnePersonnalisee();
|
|
71
72
|
this.getEntityStatus();
|
|
72
73
|
this.getStatusMetaForCombo();
|
|
73
|
-
this.
|
|
74
|
+
this.checkEntityInfo();
|
|
75
|
+
this.calculateFormsInfos();
|
|
74
76
|
}
|
|
75
77
|
// Getter for id
|
|
76
78
|
get id() {
|
|
@@ -149,8 +151,11 @@ export class TsiFormComponent {
|
|
|
149
151
|
this._doesHaveForms = false;
|
|
150
152
|
this.isDescriminatorValueSet = false;
|
|
151
153
|
this.isBusinessClassSet = false;
|
|
154
|
+
this.isFormsInfosCalculated = false;
|
|
155
|
+
this.ignoreDescriminator = false;
|
|
152
156
|
this.dynamicFormService = inject(DynamicFormService);
|
|
153
157
|
this.formulaireService = inject(FormulaireService);
|
|
158
|
+
this.entityConfigurationService = inject(EntityConfigurationService);
|
|
154
159
|
//#endregion
|
|
155
160
|
//#region variables
|
|
156
161
|
this._workflowInformation = new workflowInstanceInformationResponse();
|
|
@@ -506,6 +511,20 @@ export class TsiFormComponent {
|
|
|
506
511
|
y: event.clientY + 5,
|
|
507
512
|
};
|
|
508
513
|
}
|
|
514
|
+
async checkEntityInfo() {
|
|
515
|
+
if (!this.businessClass)
|
|
516
|
+
return;
|
|
517
|
+
try {
|
|
518
|
+
let entityInfo = await this.entityConfigurationService.getEntityInfoFromCache(this.businessClass);
|
|
519
|
+
if (!entityInfo || (!entityInfo.discriminatorClassName && !entityInfo.discriminatorPropertyName)) {
|
|
520
|
+
this.ignoreDescriminator = true;
|
|
521
|
+
this.calculateFormsInfos();
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
catch (error) {
|
|
525
|
+
console.error(error);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
509
528
|
getAllFormsOfBusinessClass() {
|
|
510
529
|
if (!this.businessClass)
|
|
511
530
|
return;
|
|
@@ -523,11 +542,13 @@ export class TsiFormComponent {
|
|
|
523
542
|
});
|
|
524
543
|
}
|
|
525
544
|
recalculateFormsVisibility() { this.canShowForms = this.doesHaveForms && !isNullOrEmpty(this.mode) && this.mode != Modes.create; }
|
|
526
|
-
|
|
527
|
-
if (
|
|
545
|
+
calculateFormsInfos() {
|
|
546
|
+
if (this.isFormsInfosCalculated)
|
|
547
|
+
return;
|
|
548
|
+
if (!this.isBusinessClassSet || !this.ignoreDescriminator && !this.isDescriminatorValueSet)
|
|
528
549
|
return;
|
|
529
|
-
}
|
|
530
550
|
this.getAllFormsOfBusinessClass();
|
|
551
|
+
this.isFormsInfosCalculated = true;
|
|
531
552
|
}
|
|
532
553
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFormComponent, deps: [{ token: i1.EntityStatusService }, { token: i2.StatusColorService }, { token: i3.FichierService }, { token: i4.ErrorResponseManagerService }, { token: i5.TsiConfirmationService }, { token: i6.TsiNotificationService }, { token: i0.ChangeDetectorRef }, { token: i7.LayoutHelperService }, { token: i8.WorkflowConfigurationService }, { token: i9.ColonnePersonnaliseeService }, { token: i10.DynamicDialogRef }, { token: i10.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
533
554
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiFormComponent, selector: "tsi-form", inputs: { class: "class", autocomplete: "autocomplete", optionalEndpoints: "optionalEndpoints", disabled: "disabled", isLoading: "isLoading", modalSize: "modalSize", formEndpoint: "formEndpoint", formName: "formName", isReportingToolbarDisabled: "isReportingToolbarDisabled", isCreateOnly: "isCreateOnly" }, outputs: { onSave: "onSave", onSubmit: "onSubmit", onSubmitFormWorkflowConfiguration: "onSubmitFormWorkflowConfiguration", formRefChange: "formRefChange", onStatusChange: "onStatusChange" }, queries: [{ propertyName: "modalHeaderComp", first: true, predicate: TsiModalHeaderComponent, descendants: true }, { propertyName: "modalFooterComp", first: true, predicate: TsiModalFooterComponent, descendants: true }], viewQueries: [{ propertyName: "formRef", first: true, predicate: ["formRef"], descendants: true }, { propertyName: "reportingApp", first: true, predicate: ["reportingApp"], descendants: true }, { propertyName: "toolbarTemplateRef", first: true, predicate: ["toolbarTemplate"], descendants: true }, { propertyName: "dynamicToolbarContainers", predicate: ["dynamicToolbarContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "dynamicFootersContainers", predicate: ["dynamicFooterContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<form class=\"form-horizontal\" autocomplete=\"off\" (ngSubmit)=\"handleFormSubmit($event)\" #formRef=\"ngForm\">\r\n <ng-template #toolbarTemplate>\r\n <p-toolbar *ngIf=\"formEndpoint\" styleClass=\"mb-1 gap-2\" class=\"w-full\" (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\" (dragenter)=\"onDragEnter($event)\" (dragleave)=\"onDragLeave($event)\">\r\n\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"mt-1 ml-2\">\r\n {{ inputTitle }}\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <div class=\"mt-1 mr-2\">\r\n <app-reporting *ngIf=\"formEndpoint\" [fromTsiForm]=\"true\" [id]=\"this.id\" [formEndpoint]=\"formEndpoint\"\r\n [formName]=\"formName\" [reportDiscriminator]=\"descriminatorValue\" [isFormEndpointPaged]=\"true\"\r\n [nombreDocumentsJoints]=\"nombreDocuments\" [configModeButtonId]=\"configModeButtonId\"\r\n [isReportingToolbarDisabled]=\"isReportingToolbarDisabled\" (toggleDesignMode)=\"toggleDesignMode($event)\"\r\n [businessClass]=\"businessClass\" (closedModalFileUpload)=\"getNombreFichier()\"\r\n [showImportExportButton]=\"false\" #reportingApp>\r\n </app-reporting>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isDragOver\" [ngStyle]=\"{ left: messagePosition.x + 'px', top: messagePosition.y + 'px' }\"\r\n class=\"drag-message cursor-follow\">\r\n {{ \"Jointure\" | localize }}\r\n </div>\r\n\r\n </p-toolbar>\r\n </ng-template>\r\n\r\n <div *busy=\"isLoading\"></div>\r\n\r\n <fieldset [disabled]=\"disabled\">\r\n <div class=\"card mr\">\r\n <p-tabView>\r\n\r\n <p-tabPanel header=\"\" \r\n [headerStyle]=\"colonnesPersonnaliseeGrouped.length === 0 && !canShowForms\r\n ? { display: 'none' } \r\n : null\">\r\n\r\n <ng-template pTemplate=\"header\">\r\n <i class=\"pi pi-home mr-2\"></i>\r\n <span class=\"main-tab-text\">{{ 'shared_form_maintabTitle' | localize }}</span>\r\n </ng-template>\r\n\r\n <ng-content></ng-content>\r\n </p-tabPanel>\r\n\r\n <!-- Dynamic tabs -->\r\n <ng-container *ngIf=\"colonnesPersonnaliseeGrouped.length > 0\">\r\n <p-tabPanel *ngFor=\"let grp of colonnesPersonnaliseeGrouped\" [header]=\"grp.groupe\">\r\n\r\n <ng-template #dynamicToolbarContainer></ng-template>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-12 grid form-row\" *ngFor=\"let col of grp.colonnes\">\r\n <div class=\"col-3 form-label\">\r\n <Tsi-Label [labelValue]=\"col.nom\"></Tsi-Label>\r\n </div>\r\n\r\n <!-- String -->\r\n <div class=\"col-8 form-input\" *ngIf=\"col.type === formType.string\">\r\n <div class=\"input-wrapper\">\r\n <Tsi-Text-Box [(inputField)]=\"col.data.valeurString\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <!-- Int -->\r\n <div class=\"col-8 form-input\" *ngIf=\"col.type === formType.int\">\r\n <div class=\"input-wrapper\">\r\n <Tsi-Integer [(inputField)]=\"col.data.valeurInt\"></Tsi-Integer>\r\n </div>\r\n </div>\r\n\r\n <!-- Decimal -->\r\n <div class=\"col-8 form-input\" *ngIf=\"col.type === formType.decimal\">\r\n <div class=\"input-wrapper\">\r\n <Tsi-Decimal-Input [(inputField)]=\"col.data.valeurDecimal\"></Tsi-Decimal-Input>\r\n </div>\r\n </div>\r\n\r\n <!-- Boolean -->\r\n <div class=\"col-8 form-input\" *ngIf=\"col.type === formType.boolean\">\r\n <div class=\"input-wrapper\">\r\n <Tsi-CheckBox [isBinary]=\"false\" [(inputField)]=\"col.data.valeurBoolean\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <!-- Binary -->\r\n <div class=\"col-8 form-input\" *ngIf=\"col.type === formType.binary\">\r\n binary input (not handled yet)\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <ng-template #dynamicFooterContainer></ng-template>\r\n </p-tabPanel>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"canShowForms\">\r\n <p-tabPanel [header]=\"'shared_form_dynamicFormsTab_Title' | localize\">\r\n <ng-template pTemplate=\"content\">\r\n <shared-dynamic-form-list\r\n [occurence]=\"id\"\r\n [occurenceBusinessClass]=\"businessClass\"\r\n [occurenceDiscriminatorValue]=\"descriminatorValue\"\r\n [ignoreDialogConfig]=\"true\" />\r\n </ng-template>\r\n </p-tabPanel>\r\n </ng-container>\r\n\r\n </p-tabView>\r\n </div>\r\n </fieldset>\r\n\r\n <div *ngIf=\"(businessClass && entityStatusList.length > 0) ||\r\n workflowInformation?.workflowUid ||\r\n workflowConfigurationService.isDesginModeFromWorkflow\" class=\"mx-4 px-2 my-1 shared-footer-bar\">\r\n\r\n <div *ngIf=\"businessClass && entityStatusList && entityStatusList.length > 0\">\r\n <div class=\"flex align-items-center gap-2\" presentationDesigner=\"shared_crud_status\">\r\n <Tsi-Label [labelValue]=\"'shared_crud_status'\"></Tsi-Label>\r\n <Tsi-Search-Combo [id-field]=\"'key'\" [label-field]=\"'value'\" [datasource]=\"entityStatusList\" [(bind)]=\"status\"\r\n [comboType]=\"'status'\" [statusMetadata]=\"statusMetadataComboStatus\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div *ngIf=\"workflowInformation?.workflowUid || workflowConfigurationService.isDesginModeFromWorkflow\"\r\n class=\"flex col-10\">\r\n <div presentationDesigner=\"shared_workflowName\" class=\"flex align-items-center gap-2 col-4\">\r\n <Tsi-Label [labelValue]=\"'administration_workflow_workflow'| localize\">\r\n </Tsi-Label>\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'workflowName'\" [(inputField)]=\"workflowInformation.workflowName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n <div presentationDesigner=\"administration_workflow_workflow_current_status\"\r\n class=\"flex align-items-center gap-2 col-4\">\r\n <Tsi-Label [labelValue]=\"'administration_workflow_workflow_current_status'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"w-7\" [disabled]=\"true\" id-field=\"key\" label-field=\"value\"\r\n [bind]=\"workflowInformation.workflowEtat\" [isFiltered]=\"true\"\r\n [elementSourceUrl]=\"getWorkflowEtatAsKeyValuePair\" [listSourceUrl]=\"getWorkflowEtatSuivantAsKeyValuePair\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <div class=\"col-4\">\r\n <div *ngIf=\"mode != formModes.create || workflowConfigurationService.isDesginModeFromWorkflow\"\r\n presentationDesigner=\"administration_workflow_workflow_next_status\"\r\n class=\"flex gap-2 align-items-center no-border\">\r\n <Tsi-Label [labelValue]=\"'administration_workflow_workflow_next_status'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"w-7\" id-field=\"key\" label-field=\"value\" [(bind)]=\"selectedWorkflowEtatUid\"\r\n [isFiltered]=\"true\" [elementSourceUrl]=\"getWorkflowEtatAsKeyValuePair\"\r\n [listSourceUrl]=\"getWorkflowEtatSuivantAsKeyValuePair\" (bindChange)=\"confirmUpdateWorkflowEtat($event)\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</form>", styles: [".border-black{border:solid 2px black}.no-border{border:none!important}.shared-footer-bar{display:flex;align-items:center;width:calc(100% - 300px);height:2.5rem;position:absolute;bottom:0;z-index:5}.mr{margin:0 12px 5px}.input-wrapper,.input-wrapper>tsi-text-box,.input-wrapper>tsi-integer,.input-wrapper>tsi-decimal-input,.input-wrapper>tsi-check-box{width:100%;display:block}.form-input{display:flex;align-items:center}.main-tab-text{display:inline-block}@media (max-width: 768px){.main-tab-text{display:none}}\n"], dependencies: [{ kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i12.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i12.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i12.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i14.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i15.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i15.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i16.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i17.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i18.TsiDecimalInputComponent, selector: "Tsi-Decimal-Input", inputs: ["numOfDecimal", "class"], outputs: ["inputFieldChange"] }, { kind: "component", type: i19.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i20.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i21.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i22.ReportingComponent, selector: "app-reporting", inputs: ["showImportExportButton", "showNoteButton", "showInfoButton", "showUploadButton", "isReportingToolbarDisabled", "formName", "formEndpoint", "formEndpointBody", "isFormEndpointPaged", "filtersHtmlTemplate", "optionalEndpoints", "businessClass", "cudComponent", "httpMethodType", "requestData", "customReportingMode", "pagedRequest", "reportDiscriminator", "nombreDocumentsJoints", "id", "configModeButtonId", "selectedItemUids", "fromTsiForm", "customSendMailMode", "reportingInformation"], outputs: ["onSave", "refreshData", "closedModalFileUpload", "toggleDesignMode"] }, { kind: "component", type: i23.DynamicFormListComponent, selector: "shared-dynamic-form-list", inputs: ["occurence", "occurenceBusinessClass", "occurenceDiscriminatorValue", "ignoreDialogConfig"] }, { kind: "directive", type: i24.BusyDirective, selector: "[busy]", inputs: ["busy"] }, { kind: "directive", type: i25.PresentationDesignerDirective, selector: "[presentationDesigner]" }, { kind: "pipe", type: i26.LocalizePipe, name: "localize" }] }); }
|
|
@@ -587,4 +608,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
587
608
|
type: ViewChildren,
|
|
588
609
|
args: ['dynamicFooterContainer', { read: ViewContainerRef }]
|
|
589
610
|
}] } });
|
|
590
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZm9ybS90c2ktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUE0QixPQUFPLEVBQW1DLCtCQUErQixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hLLE9BQU8sRUFBRSx3QkFBd0IsRUFBdUMsTUFBTSxpREFBaUQsQ0FBQztBQUVoSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFVdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixF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QUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBbUJILFlBQVk7c0JBRGYsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBa0VGLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFTRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csaUNBQWlDO3NCQUExQyxNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFHdUIsa0JBQWtCO3NCQUEvQyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDVyxlQUFlO3NCQUFyRCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFFRSxlQUFlO3NCQUFyRCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFHckMsd0JBQXdCO3NCQUR2QixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUluRSx3QkFBd0I7c0JBRHZCLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmb3JtVHlwZSB9IGZyb20gJy4uLy4uL2NvbnN0cy9mb3JtLXR5cGUnO1xyXG5pbXBvcnQgeyBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cyB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMvZW5kcG9pbnRzJztcclxuaW1wb3J0IHsgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElNb2RhbFNpemUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRW50aXR5UHJvcGVydGllc1Jlc3BvbnNlLCBGaWNoaWVyLCBLZXlWYWx1ZVBhaXIsIE9wdGlvbmFsRW5kcG9pbnRzLCB1cGRhdGVFbnRpdHlXb3JrZmxvd0luZm9ybWF0aW9uLCB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbG9ubmVQZXJzb25uYWxpc2VlRGF0YSwgQ29sb25uZVBlcnNvbm5hbGlzZWVHcm91cGVkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZSc7XHJcbmltcG9ydCB7IFN0YXR1c01ldGFkYXRhUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3RhdHVzL2NvbG9yLXN0YXR1cyc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9keW5hbWljLWZvcm0vY29sb25uZS1wZXJzb25uYWxpc2VlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWNoaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZmljaGllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC9sYXlvdXQtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vZXJyb3ItcmVzcG9uc2UtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktY29uZmlybWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0dXMvZW50aXR5U3RhdHVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNDb2xvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0dXMvc3RhdHVzLWNvbG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3cvd29ya2Zsb3ctY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVwb3J0aW5nL3JlcG9ydGluZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1tb2RhbC1mb290ZXIvdHNpLW1vZGFsLWZvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1tb2RhbC1oZWFkZXIvdHNpLW1vZGFsLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtdWxhaXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS9mb3JtdWxhaXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc051bGxPckVtcHR5IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHNpLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIHB1YmxpYyBsb2NhbGl6ZT8gPSBpbmplY3QoTG9jYWxpemVQaXBlKVxyXG4gIFxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIGZpZWxkc1xyXG4gIHByaXZhdGUgX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgQFZpZXdDaGlsZCgnZm9ybVJlZicpIGZvcm1SZWY/OiBOZ0Zvcm07XHJcbiAgQFZpZXdDaGlsZChcInJlcG9ydGluZ0FwcFwiKSByZXBvcnRpbmdBcHA/OiBSZXBvcnRpbmdDb21wb25lbnRcclxuICAvLyNlbmRyZWdpb25cclxuICBcclxuICAvLyNyZWdpb24gaW5wdXRzXHJcbiAgQElucHV0KCkgY2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmcgPSAnb2ZmJztcclxuICAvLyBASW5wdXQoKSBmb3JtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIFxyXG4gIEBJbnB1dCgpIG9wdGlvbmFsRW5kcG9pbnRzPzogT3B0aW9uYWxFbmRwb2ludHM7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtb2RhbFNpemU/OiBJTW9kYWxTaXplO1xyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgZ2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fZGVzY3JpbWluYXRvclZhbHVlOyB9XHJcbiAgc2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaXNEZXNjcmltaW5hdG9yVmFsdWVTZXQgPSB0cnVlO1xyXG4gICAgdGhpcy5vbkRlc2NyaW1pbmF0b3JWYWx1ZU9yQnVzaW5lc3NDbGFzc1NldCgpO1xyXG4gIH1cclxuXHJcbiAgZW50aXR5U3RhdHVzTGlzdDogS2V5VmFsdWVQYWlyPHN0cmluZywgc3RyaW5nPltdID0gW107XHJcblxyXG4gIG5vbWJyZURvY3VtZW50czogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIGlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICBtZXNzYWdlUG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuICBwcml2YXRlIGRyYWdFbnRlckNvdW50ID0gMDtcclxuICBwcml2YXRlIF9mb3JtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIFxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGZvcm1FbmRwb2ludCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1FbmRwb2ludDtcclxuICB9XHJcblxyXG4gIHNldCBmb3JtRW5kcG9pbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZm9ybUVuZHBvaW50ID0gdmFsdWU7XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZm9ybU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtTmFtZTtcclxuICB9XHJcblxyXG4gIHNldCBmb3JtTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9mb3JtTmFtZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2J1c2luZXNzQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9pZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX21vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9mb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9zdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gR2V0dGVyIGZvciBidXNpbmVzc0NsYXNzXHJcbiAgZ2V0IGJ1c2luZXNzQ2xhc3MoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgLy8gU2V0dGVyIGZvciBidXNpbmVzc0NsYXNzXHJcbiAgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5pc0J1c2luZXNzQ2xhc3NTZXQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuZ2V0Q29sb25uZVBlcnNvbm5hbGlzZWUoKTtcclxuICAgIHRoaXMuZ2V0RW50aXR5U3RhdHVzKCk7XHJcbiAgICB0aGlzLmdldFN0YXR1c01ldGFGb3JDb21ibygpO1xyXG4gICAgdGhpcy5vbkRlc2NyaW1pbmF0b3JWYWx1ZU9yQnVzaW5lc3NDbGFzc1NldCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0dGVyIGZvciBpZFxyXG4gIGdldCBpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgLy8gU2V0dGVyIGZvciBpZFxyXG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5nZXRDb2xvbm5lUGVyc29ubmFsaXNlZSgpO1xyXG4gICAgdGhpcy5nZXROb21icmVGaWNoaWVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXR0ZXIgZm9yIHN0YXR1c1xyXG4gIGdldCBzdGF0dXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvLyBTZXR0ZXIgZm9yIHN0YXR1c1xyXG4gIHNldCBzdGF0dXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XHJcbiAgICB0aGlzLm9uU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5fc3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuZ2V0Q29sb25uZVBlcnNvbm5hbGlzZWUoKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVGb3Jtc1Zpc2liaWxpdHkoKTtcclxuICB9XHJcblxyXG4gIGdldCBtb2RlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgaXNDcmVhdGVPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gb3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtUmVmQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TmdGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmdGb3JtPigpO1xyXG4gIEBPdXRwdXQoKSBvblN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhclRlbXBsYXRlJykgdG9vbGJhclRlbXBsYXRlUmVmICE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChUc2lNb2RhbEhlYWRlckNvbXBvbmVudCkgbW9kYWxIZWFkZXJDb21wPzogVHNpTW9kYWxIZWFkZXJDb21wb25lbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoVHNpTW9kYWxGb290ZXJDb21wb25lbnQpIG1vZGFsRm9vdGVyQ29tcD86IFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdkeW5hbWljVG9vbGJhckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIGR5bmFtaWNUb29sYmFyQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0Zvb3RlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIGR5bmFtaWNGb290ZXJzQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcclxuXHJcbiAgaW5wdXRUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkOiBDb2xvbm5lUGVyc29ubmFsaXNlZUdyb3VwZWRSZXNwb25zZVtdID0gW107XHJcbiAgY2FuU2hvd0Zvcm1zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybXNPZkJ1c2luZXNzQ2xhc3M6IGFueVtdID0gW107ICBcclxuICBwcml2YXRlIF9kb2VzSGF2ZUZvcm1zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGRvZXNIYXZlRm9ybXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kb2VzSGF2ZUZvcm1zOyB9XHJcbiAgc2V0IGRvZXNIYXZlRm9ybXModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2RvZXNIYXZlRm9ybXMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVGb3Jtc1Zpc2liaWxpdHkoKTtcclxuICB9XHJcblxyXG4gIGlzRGVzY3JpbWluYXRvclZhbHVlU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCdXNpbmVzc0NsYXNzU2V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGR5bmFtaWNGb3JtU2VydmljZSA9IGluamVjdChEeW5hbWljRm9ybVNlcnZpY2UpO1xyXG4gIGZvcm11bGFpcmVTZXJ2aWNlIDogRm9ybXVsYWlyZVNlcnZpY2UgPSBpbmplY3QoRm9ybXVsYWlyZVNlcnZpY2UpO1xyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbnRpdHlTdGF0dXNTZXJ2aWNlOiBFbnRpdHlTdGF0dXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdGF0dXNDb2xvclNlcnZpY2U6IFN0YXR1c0NvbG9yU2VydmljZSxcclxuICAgIHB1YmxpYyBfZmljaGllclNlcnZpY2U6IEZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90c2lDb25maXJtU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaU5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfbGF5b3V0SGVscGVyU2VydmljZTogTGF5b3V0SGVscGVyU2VydmljZSxcclxuICAgIHB1YmxpYyB3b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2U6IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSxcclxuICAgIHB1YmxpYyByZWY/OiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodGhpcy5yZXBvcnRpbmdBcHApIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSAmJiB0aGlzLnJlcG9ydGluZ0FwcC5zaG93UHJlc2VudGF0aW9uRGVzaWduZXJDb25maWdCdXR0b24pIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ0FwcC5zaG93UHJlc2VudGF0aW9uRGVzaWduZXJDb25maWdCdXR0b24gPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNhdmVkRGF0YVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnNhdmVkRGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gdmFyaWFibGVzXHJcbiAgcHJpdmF0ZSBfd29ya2Zsb3dJbmZvcm1hdGlvbjogd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgPSBuZXcgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UoKTtcclxuICBzZXQgd29ya2Zsb3dJbmZvcm1hdGlvbih2YWx1ZTogd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UpIHtcclxuICAgIHRoaXMuX3dvcmtmbG93SW5mb3JtYXRpb24gPSB2YWx1ZVxyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgaWYgKHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXIgPSBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QnlXb3JrZmxvd0V0YXQodGhpcy53b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFzeW5jIGdldFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24oYnVzaW5lc3NDbGFzczogc3RyaW5nLCB1aWRPYmplY3Q/OiBzdHJpbmcsIGRpc2NyaW1pbmF0b3JDbGFzc05hbWUgPzogc3RyaW5nLCBcclxuICAvLyBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lID86IHN0cmluZ1xyXG4gIC8vICkge1xyXG4gIC8vICAgaWYgKHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUpIHtcclxuICAvLyAgICAgcmV0dXJuO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdHJ5IHtcclxuICAvLyAgICAgbGV0IHJlcXVlc3Q6IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QgPSBuZXcgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCgpO1xyXG4gIC8vICAgICByZXF1ZXN0LmNsYXNzTmFtZSA9IGJ1c2luZXNzQ2xhc3NcclxuICAvLyAgICAgcmVxdWVzdC51aWRPYmpldCA9IHVpZE9iamVjdDtcclxuICAvLyAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lID0gZGlzY3JpbWluYXRvckNsYXNzTmFtZVxyXG4gIC8vICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgPSBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lXHJcbiAgLy8gICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAvLyAgICAgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlXb3JrbGZvd0luc3RhbmNlSW5mb3JtYXRpb24ocmVxdWVzdCkpXHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwidGhpcy53b3JrZmxvd0luZm9ybWF0aW9uXCIsIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbilcclxuICAvLyAgICAgaWYgKHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbikge1xyXG4gIC8vICAgICAgIGxldCB3b3JrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEZvcm1cclxuICAvLyAgICAgICAgID8uZmluZCh4ID0+IHgudWlkID09IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KVxyXG4gIC8vICAgICAgIGlmICh3b3JrZmxvd0V0YXRGb3JtKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvckZvckN1cnJlbnRFbnRpdHlGb3JtID1cclxuICAvLyAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5tYXBXb3JrZmxvd0V0YXRGb3JtVG9QcmVzZW50YXRpb25TZXR0aW5nKHdvcmtmbG93RXRhdEZvcm0ud29ya2Zsb3dFdGF0c0Zvcm1zKVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgd29ya2Zsb3dJbmZvcm1hdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl93b3JrZmxvd0luZm9ybWF0aW9uXHJcbiAgfVxyXG4gIGdldFdvcmtmbG93RXRhdEFzS2V5VmFsdWVQYWlyID1cclxuICAgIEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldFdvcmtmbG93RXRhdEFzS2V5VmFsdWVQYWlyKCk7XHJcbiAgZ2V0V29ya2Zsb3dFdGF0U3VpdmFudEFzS2V5VmFsdWVQYWlyID0gJyc7XHJcbiAgc2VsZWN0ZWRXb3JrZmxvd0V0YXRVaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XHJcbiAgaXNDb21ib0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybU1vZGVzID0gTW9kZXM7XHJcblxyXG4gIGNvbmZpZ01vZGVCdXR0b25JZCA9IFwiY29uZmctbW9kZS1idXR0b24tZnJvbS1mb3JtXCI7XHJcbiAgY3VkQ29tcG9uZW50OiBhbnlcclxuICBjb25maWdEYXRhOiBhbnlcclxuICBzYXZlZERhdGFTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb25cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgTGlmZWN5Y2xlIEhvb2tzXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1ZENvbXBvbmVudCA9IHRoaXMuY29uZmlnPy5kYXRhPy5jdWRDb21wb25lbnQ7XHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEgPSB0aGlzLmNvbmZpZ1xyXG4gICAgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uID0gdGhpcy5jb25maWc/LmRhdGE/LndvcmtmbG93SW5mb3JtYXRpb24gPz8gbmV3IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlKClcclxuICAgIGNvbnNvbGUubG9nKFwid29ya2Zsb3dJbmZvcm1hdGlvbiA9PiBcIiwgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uKVxyXG4gICAgaWYgKHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXIgPSBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRXb3JrZmxvd0V0YXRTdWl2YW50QnlXb3JrZmxvd0V0YXQodGhpcy53b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdClcclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRGb3JtU2F2ZVN1YnNjcmlwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEZvcm1TYXZlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5zYXZlZERhdGFTdWJzY3JpcHRpb24gPSB0aGlzLl9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2VcclxuICAgICAgLmRhdGFTYXZlZE9ic2VydmFibGUuc3Vic2NyaWJlKFxyXG4gICAgICAgIGFzeW5jIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuY29sb25uZXNQZXJzb25uYWxpc2VlRGF0YVxyXG4gICAgICAgICAgICAgIC5mb3JFYWNoKHggPT4geC5vY2N1cmVuY2UgPSBkYXRhKVxyXG4gICAgICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UuYWRkT3JVcGRhdGVGb3JtdWxhaXJlRGF0YSh0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIGZvcm1UeXBlID0gZm9ybVR5cGU7XHJcbiAgcHJpdmF0ZSBnZXRDb2xvbm5lUGVyc29ubmFsaXNlZSgpIHtcclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MgJiYgdGhpcy5tb2RlID09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICB0aGlzLl9nZXRDb2xvbm5lUGVyc29ubmFsaXNlKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLm1vZGUgIT0gTW9kZXMuY3JlYXRlICYmIHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5fZ2V0Q29sb25uZVBlcnNvbm5hbGlzZSh0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuaWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRDb2xvbm5lUGVyc29ubmFsaXNlKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgaWQ/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZS5nZXRDb2xvbm5lc1BlcnNvbm5hbGlzZWUoYnVzaW5lc3NDbGFzcywgdGhpcy5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHJlcy5mb3JFYWNoKGNwZyA9PiB7XHJcbiAgICAgICAgICBjcGcuY29sb25uZXMuZm9yRWFjaChjcCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY3AuZGF0YSkge1xyXG4gICAgICAgICAgICAgIGNwLmRhdGEgPSBuZXcgQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhKFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pZCwgY3AudWlkLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkID0gcmVzO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NEeW5hbWljVGFicygpXHJcbiAgICAgICAgfSwgMCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3Igd2hlbiBnZXR0aW5nIGxpc3Qgb2YgY29sb25uZSBwZXJzb25uYWxpc2VlXCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0b2dnbGVEZXNpZ25Nb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIHRoaXMuY29uZmlnRGF0YS5kYXRhLmN1ZENvbXBvbmVudCA9IHVuZGVmaW5lZFxyXG4gICAgLy8gdGhpcy5jb25maWdEYXRhLmRhdGEud29ya2Zsb3dJbmZvcm1hdGlvbiA9IHVuZGVmaW5lZFxyXG5cclxuICAgIC8vIHRoaXMucmVmPy5jbG9zZSgpO1xyXG4gICAgLy8gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSB0cnVlXHJcbiAgICAvLyB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmN1cnJlbnRGb3JtTmFtZSA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpXHJcblxyXG4gICAgLy8gdGhpcy5yZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5jdWRDb21wb25lbnQsIHRoaXMuY29uZmlnRGF0YSk7XHJcbiAgICAvLyB0aGlzLnJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2VcclxuICAgIC8vICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5jdXJyZW50Rm9ybU5hbWUgPSB1bmRlZmluZWRcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJvY2Vzc0R5bmFtaWNUYWJzKCkge1xyXG4gICAgdGhpcy5keW5hbWljVG9vbGJhckNvbnRhaW5lcnMudG9BcnJheSgpLmZvckVhY2goY29udGFpbmVyID0+IHtcclxuICAgICAgY29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIGNvbnN0IGNvbXBSZWY6IENvbXBvbmVudFJlZjxUc2lNb2RhbEhlYWRlckNvbXBvbmVudD4gPSBjb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFRzaU1vZGFsSGVhZGVyQ29tcG9uZW50KTtcclxuXHJcbiAgICAgIGNvbXBSZWYuaW5zdGFuY2UudG9vbGJhclRlbXBsYXRlSGVhZGVyID0gdGhpcy5tb2RhbEhlYWRlckNvbXAhLnRvb2xiYXJUZW1wbGF0ZUhlYWRlcjtcclxuICAgICAgY29tcFJlZi5pbnN0YW5jZS5pbnB1dFRpdGxlID0gdGhpcy5tb2RhbEhlYWRlckNvbXAhLmlucHV0VGl0bGU7XHJcblxyXG4gICAgICBjb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZHluYW1pY0Zvb3RlcnNDb250YWluZXJzLnRvQXJyYXkoKS5mb3JFYWNoKGNvbnRhaW5lciA9PiB7XHJcbiAgICAgIGNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICBjb25zdCBjb21wUmVmOiBDb21wb25lbnRSZWY8VHNpTW9kYWxGb290ZXJDb21wb25lbnQ+ID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChUc2lNb2RhbEZvb3RlckNvbXBvbmVudCk7XHJcbiAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZm9vdGVyVGVtcGxhdGVSZWYgPSB0aGlzLm1vZGFsRm9vdGVyQ29tcD8uZm9vdGVyVGVtcGxhdGVSZWZcclxuICAgICAgY29tcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudG9vbGJhclRlbXBsYXRlUmVmICYmIHRoaXMubW9kYWxIZWFkZXJDb21wKSB7XHJcbiAgICAgIHRoaXMubW9kYWxIZWFkZXJDb21wLnRvb2xiYXJUZW1wbGF0ZUhlYWRlciA9IHRoaXMudG9vbGJhclRlbXBsYXRlUmVmO1xyXG4gICAgICB0aGlzLmlucHV0VGl0bGUgPSB0aGlzLm1vZGFsSGVhZGVyQ29tcC5pbnB1dFRpdGxlO1xyXG5cclxuICAgICAgdGhpcy5tb2RhbEhlYWRlckNvbXAudG9vbGJhclRlbXBsYXRlSGVhZGVyID0gdGhpcy50b29sYmFyVGVtcGxhdGVSZWY7XHJcbiAgICAgIHRoaXMuaW5wdXRUaXRsZSA9IHRoaXMubW9kYWxIZWFkZXJDb21wLmlucHV0VGl0bGU7XHJcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtUmVmQ2hhbmdlLmVtaXQodGhpcy5mb3JtUmVmKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgaGFuZGxlRm9ybVN1Ym1pdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICB0aGlzLm9uU3VibWl0Rm9ybVdvcmtmbG93Q29uZmlndXJhdGlvbi5lbWl0KGV2ZW50KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3luY0R5bmFtaWNDb2x1bW5EYXRhVG9EeW5hbWljRm9ybVNlcnZpY2UoKVxyXG4gICAgICB0aGlzLm9uU3VibWl0LmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgc3luY0R5bmFtaWNDb2x1bW5EYXRhVG9EeW5hbWljRm9ybVNlcnZpY2UoKSB7XHJcbiAgICBjb25zdCBleGlzdGluZ1VpZHMgPSBuZXcgU2V0KFxyXG4gICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhLm1hcCh4ID0+IHguY29sb25uZVBlcnNvbm5hbGlzZWVVaWQpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZC5mb3JFYWNoKGNwZyA9PiB7XHJcbiAgICAgIGNwZy5jb2xvbm5lcy5mb3JFYWNoKGNwID0+IHtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nVWlkcy5oYXMoY3AudWlkKSkge1xyXG4gICAgICAgICAgaWYgKCFjcC5kYXRhKSB7XHJcbiAgICAgICAgICAgIGNwLmRhdGEgPSBuZXcgQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhKFxyXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB0aGlzLmlkLCBjcC51aWQsXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBuZXdEYXRhID0gbmV3IENvbG9ubmVQZXJzb25uYWxpc2VlRGF0YShcclxuICAgICAgICAgICAgY3A/LmRhdGE/LnVpZCA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNwPy5kYXRhPy5vY2N1cmVuY2UgPz8gdGhpcy5pZCxcclxuICAgICAgICAgICAgY3AudWlkLFxyXG4gICAgICAgICAgICBjcC5kYXRhLnZhbGV1ckJvb2xlYW4sXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVySW50LFxyXG4gICAgICAgICAgICBjcC5kYXRhLnZhbGV1ckRlY2ltYWwsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyU3RyaW5nLFxyXG4gICAgICAgICAgICBjcC5kYXRhLnZhbGV1ckJpbmFyeSxcclxuICAgICAgICAgICAgY3Aub2JzZXJ2YXRpb25cclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuY29sb25uZXNQZXJzb25uYWxpc2VlRGF0YS5wdXNoKG5ld0RhdGEpO1xyXG5cclxuICAgICAgICAgIGV4aXN0aW5nVWlkcy5hZGQoY3AudWlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhID0+IFwiLFxyXG4gICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhXHJcbiAgICApXHJcblxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiB3b3JrZmxvd1xyXG5cclxuXHJcbiAgY29uZmlybVVwZGF0ZVdvcmtmbG93RXRhdChldmVudDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhldmVudClcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLl90c2lDb25maXJtU2VydmljZS5jb25maXJtKFwiYWRtaW5pc3RyYXRpb25fY29uZmlybV9zdGF0dXNfY2hhbmdlXCIsIFwiYWRtaW5pc3RyYXRpb25fY29uZmlybWF0aW9uX3RpdGxlXCIsXHJcbiAgICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWVcclxuICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgdXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbigpXHJcbiAgICAgICAgICAgIHJlcXVlc3QuY2xhc3NOYW1lID0gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICAgICAgICAgICAgcmVxdWVzdC51aWRPYmplY3QgPSB0aGlzLl9pZFxyXG4gICAgICAgICAgICByZXF1ZXN0Lm5ld1dvcmtmbG93U3RhdHVzID0gZXZlbnQ7XHJcbiAgICAgICAgICAgIHJlcXVlc3Qud29ya2Zsb3cgPSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93VWlkO1xyXG4gICAgICAgICAgICByZXF1ZXN0LndvcmtmbG93RXRhdCA9IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbi53b3JrZmxvd0V0YXRcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrZmxvd0luc3RhbmNlVWlkID0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0luc3RhbmNlVWlkXHJcbiAgICAgICAgICAgIHJlcXVlc3Qud29ya2Zsb3dFdGF0ID0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXRcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVxdWVzdClcclxuICAgICAgICAgICAgdGhpcy53b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLnVwZGF0ZUVudGl0eVdvcmtmbG93SW5mb3JtYXRpb24ocmVxdWVzdCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpXHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnN0YXR1cyAhPSBudWxsICYmIGRhdGEuc3RhdHVzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gZGF0YS5zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dFdGF0VWlkID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl90c2lOb3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGVycm9yPy5lcnJvcilcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd0V0YXRVaWQgPSBudWxsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBzdGF0dXNNZXRhZGF0YUNvbWJvU3RhdHVzPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuXHJcbiAgcHJpdmF0ZSBnZXRTdGF0dXNNZXRhRm9yQ29tYm8oKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zdGF0dXNDb2xvclNlcnZpY2UuZ2V0U3RhdHVzQ29sb3JEZXRhaWxzQnlCdXNpbmVzc0NsYXNzTmFtZSh0aGlzLmJ1c2luZXNzQ2xhc3MhKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogU3RhdHVzTWV0YWRhdGFSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzTWV0YWRhdGFDb21ib1N0YXR1cyA9IGRhdGE7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBFbnRpdHkgc3RhdHVzXHJcbiAgcHJpdmF0ZSBnZXRFbnRpdHlTdGF0dXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVudGl0eVN0YXR1c1NlcnZpY2UuZ2V0RW50aXR5U3RhdHVzKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IEVudGl0eVByb3BlcnRpZXNSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAoZGF0YS5lbnRpdHlTdGF0dXMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmVudGl0eVN0YXR1cykpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5U3RhdHVzTGlzdCA9IGRhdGEuZW50aXR5U3RhdHVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9IGRhdGEuZGVmYXVsdFN0YXR1cztcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuICAgICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZShmaWxlLCBmaWxlRXh0ZW5zaW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBsb2FkRmlsZShmaWxlOiBGaWxlLCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IFByb2dyZXNzRXZlbnQ8RmlsZVJlYWRlcj4pID0+IHtcclxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBlLnRhcmdldD8ucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xyXG4gICAgICBpZiAoIWFycmF5QnVmZmVyKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBiYXNlNjRDb250ZW50ID0gdGhpcy5hcnJheUJ1ZmZlclRvQmFzZTY0KGFycmF5QnVmZmVyKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpY2hpZXJUb1NlbmQgPSBuZXcgRmljaGllcigpO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmRhdGVGaWNoaWVyID0gbmV3IERhdGUoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5ub20gPSBmaWxlLm5hbWU7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQub2JqZXQgPSAnJztcclxuICAgICAgZmljaGllclRvU2VuZC5ub21GaWNoaWVyQ29tcGxldCA9IGZpbGUubmFtZTtcclxuICAgICAgZmljaGllclRvU2VuZC5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmNvbnRlbnUgPSBiYXNlNjRDb250ZW50O1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLnRhYmxlTGllZSA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgZmljaGllclRvU2VuZC5wa2V5ID0gdGhpcy5pZD8udG9TdHJpbmcoKTtcclxuICAgICAgZmljaGllclRvU2VuZC5leHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uXHJcblxyXG4gICAgICB0aGlzLl9maWNoaWVyU2VydmljZS5jcmVhdGUoZmljaGllclRvU2VuZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldE5vbWJyZUZpY2hpZXIoKTtcclxuICAgICAgICAgIHRoaXMuX3RzaU5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcImZpY2hpZXJfam9pbnRcIik7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICB9XHJcblxyXG4gIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnRvYShiaW5hcnkpO1xyXG4gIH1cclxuXHJcbiAgaGlkZSh2YWw/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnJlZiAhPSBudWxsICYmIHRoaXMucmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5yZWY/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlZj8uY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcblxyXG4gIGdldE5vbWJyZUZpY2hpZXIoKSB7XHJcbiAgICBpZiAodGhpcy5pZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlXHJcbiAgICAgICAgLkdldE5vbWJyZUZpY2hpZXJKb2ludEJ5SWQodGhpcy5pZCA/PyBcIlwiKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub21icmVEb2N1bWVudHMgPSBkYXRhO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHRvIGdldCBudW1iZXIgb2YgZmlsZXMgb24gdGhpcyByZWNvcmRcIiwgcmVzcG9uc2UpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuZHJhZ0VudGVyQ291bnQrKztcclxuXHJcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXRNZXNzYWdlUG9zaXRpb24oZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRHJhZ092ZXIpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlUG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCArIDUsXHJcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WSArIDVcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmRyYWdFbnRlckNvdW50LS07XHJcblxyXG4gICAgaWYgKHRoaXMuZHJhZ0VudGVyQ291bnQgPD0gMCkge1xyXG4gICAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5kcmFnRW50ZXJDb3VudCA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1lc3NhZ2VQb3NpdGlvbihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2VQb3NpdGlvbiA9IHtcclxuICAgICAgeDogZXZlbnQuY2xpZW50WCArIDUsXHJcbiAgICAgIHk6IGV2ZW50LmNsaWVudFkgKyA1LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICBpZighdGhpcy5idXNpbmVzc0NsYXNzKSByZXR1cm47XHJcbiAgICBcclxuICAgIHRoaXMuZm9ybXVsYWlyZVNlcnZpY2UuZ2V0QWxsRm9ybXNPZkJ1c2luZXNzQ2xhc3ModGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPCAxKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5mb3Jtc09mQnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZG9lc0hhdmVGb3JtcyA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUZvcm1zVmlzaWJpbGl0eSgpIHsgdGhpcy5jYW5TaG93Rm9ybXMgPSB0aGlzLmRvZXNIYXZlRm9ybXMgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5tb2RlKSAmJiB0aGlzLm1vZGUgIT0gTW9kZXMuY3JlYXRlOyB9XHJcblxyXG4gIHByaXZhdGUgb25EZXNjcmltaW5hdG9yVmFsdWVPckJ1c2luZXNzQ2xhc3NTZXQoKTogdm9pZCB7XHJcbiAgICBpZighdGhpcy5pc0J1c2luZXNzQ2xhc3NTZXQgfHwgIXRoaXMuaXNEZXNjcmltaW5hdG9yVmFsdWVTZXQpXHJcbiAgICB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldEFsbEZvcm1zT2ZCdXNpbmVzc0NsYXNzKCk7XHJcbiAgfVxyXG59IiwiPGZvcm0gY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAobmdTdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdCgkZXZlbnQpXCIgI2Zvcm1SZWY9XCJuZ0Zvcm1cIj5cclxuICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJUZW1wbGF0ZT5cclxuICAgIDxwLXRvb2xiYXIgKm5nSWY9XCJmb3JtRW5kcG9pbnRcIiBzdHlsZUNsYXNzPVwibWItMSBnYXAtMlwiIGNsYXNzPVwidy1mdWxsXCIgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCIgKGRyYWdlbnRlcik9XCJvbkRyYWdFbnRlcigkZXZlbnQpXCIgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCI+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xIG1sLTJcIj5cclxuICAgICAgICAgIHt7IGlucHV0VGl0bGUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xIG1yLTJcIj5cclxuICAgICAgICAgIDxhcHAtcmVwb3J0aW5nICpuZ0lmPVwiZm9ybUVuZHBvaW50XCIgW2Zyb21Uc2lGb3JtXT1cInRydWVcIiBbaWRdPVwidGhpcy5pZFwiIFtmb3JtRW5kcG9pbnRdPVwiZm9ybUVuZHBvaW50XCJcclxuICAgICAgICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCIgW3JlcG9ydERpc2NyaW1pbmF0b3JdPVwiZGVzY3JpbWluYXRvclZhbHVlXCIgW2lzRm9ybUVuZHBvaW50UGFnZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtub21icmVEb2N1bWVudHNKb2ludHNdPVwibm9tYnJlRG9jdW1lbnRzXCIgW2NvbmZpZ01vZGVCdXR0b25JZF09XCJjb25maWdNb2RlQnV0dG9uSWRcIlxyXG4gICAgICAgICAgICBbaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIiAodG9nZ2xlRGVzaWduTW9kZSk9XCJ0b2dnbGVEZXNpZ25Nb2RlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCIgKGNsb3NlZE1vZGFsRmlsZVVwbG9hZCk9XCJnZXROb21icmVGaWNoaWVyKClcIlxyXG4gICAgICAgICAgICBbc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbl09XCJmYWxzZVwiICNyZXBvcnRpbmdBcHA+XHJcbiAgICAgICAgICA8L2FwcC1yZXBvcnRpbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNEcmFnT3ZlclwiIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVzc2FnZVBvc2l0aW9uLnggKyAncHgnLCB0b3A6IG1lc3NhZ2VQb3NpdGlvbi55ICsgJ3B4JyB9XCJcclxuICAgICAgICBjbGFzcz1cImRyYWctbWVzc2FnZSBjdXJzb3ItZm9sbG93XCI+XHJcbiAgICAgICAge3sgXCJKb2ludHVyZVwiIHwgbG9jYWxpemUgfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9wLXRvb2xiYXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPGRpdiAqYnVzeT1cImlzTG9hZGluZ1wiPjwvZGl2PlxyXG5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtclwiPlxyXG4gICAgICA8cC10YWJWaWV3PlxyXG5cclxuICAgICAgICA8cC10YWJQYW5lbCBoZWFkZXI9XCJcIiBcclxuICAgICAgICBbaGVhZGVyU3R5bGVdPVwiY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZC5sZW5ndGggPT09IDAgJiYgIWNhblNob3dGb3Jtc1xyXG4gICAgICA/IHsgZGlzcGxheTogJ25vbmUnIH0gXHJcbiAgICAgIDogbnVsbFwiPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWhvbWUgbXItMlwiPjwvaT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi10YWItdGV4dFwiPnt7ICdzaGFyZWRfZm9ybV9tYWludGFiVGl0bGUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG5cclxuICAgICAgICA8IS0tIER5bmFtaWMgdGFicyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZC5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgZ3JwIG9mIGNvbG9ubmVzUGVyc29ubmFsaXNlZUdyb3VwZWRcIiBbaGVhZGVyXT1cImdycC5ncm91cGVcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZHluYW1pY1Rvb2xiYXJDb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBncmlkIGZvcm0tcm93XCIgKm5nRm9yPVwibGV0IGNvbCBvZiBncnAuY29sb25uZXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiY29sLm5vbVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdHJpbmcgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLnN0cmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJTdHJpbmdcIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEludCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBmb3JtLWlucHV0XCIgKm5nSWY9XCJjb2wudHlwZSA9PT0gZm9ybVR5cGUuaW50XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIFsoaW5wdXRGaWVsZCldPVwiY29sLmRhdGEudmFsZXVySW50XCI+PC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIERlY2ltYWwgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLmRlY2ltYWxcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLURlY2ltYWwtSW5wdXQgWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJEZWNpbWFsXCI+PC9Uc2ktRGVjaW1hbC1JbnB1dD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLmJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IFtpc0JpbmFyeV09XCJmYWxzZVwiIFsoaW5wdXRGaWVsZCldPVwiY29sLmRhdGEudmFsZXVyQm9vbGVhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQmluYXJ5IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04IGZvcm0taW5wdXRcIiAqbmdJZj1cImNvbC50eXBlID09PSBmb3JtVHlwZS5iaW5hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgYmluYXJ5IGlucHV0IChub3QgaGFuZGxlZCB5ZXQpXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkeW5hbWljRm9vdGVyQ29udGFpbmVyPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3AtdGFiUGFuZWw+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5TaG93Rm9ybXNcIj5cclxuICAgICAgICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ3NoYXJlZF9mb3JtX2R5bmFtaWNGb3Jtc1RhYl9UaXRsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxzaGFyZWQtZHluYW1pYy1mb3JtLWxpc3RcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlXT1cImlkXCJcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlQnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCJcclxuICAgICAgICAgICAgICBbb2NjdXJlbmNlRGlzY3JpbWluYXRvclZhbHVlXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2lnbm9yZURpYWxvZ0NvbmZpZ109XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwvcC10YWJWaWV3PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9maWVsZHNldD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIihidXNpbmVzc0NsYXNzICYmIGVudGl0eVN0YXR1c0xpc3QubGVuZ3RoID4gMCkgfHxcclxuICAgICAgICB3b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd1VpZCB8fFxyXG4gICAgICAgIHdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93XCIgY2xhc3M9XCJteC00IHB4LTIgbXktMSBzaGFyZWQtZm9vdGVyLWJhclwiPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIGVudGl0eVN0YXR1c0xpc3QgJiYgZW50aXR5U3RhdHVzTGlzdC5sZW5ndGggPiAwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiIHByZXNlbnRhdGlvbkRlc2lnbmVyPVwic2hhcmVkX2NydWRfc3RhdHVzXCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2NydWRfc3RhdHVzJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtpZC1maWVsZF09XCIna2V5J1wiIFtsYWJlbC1maWVsZF09XCIndmFsdWUnXCIgW2RhdGFzb3VyY2VdPVwiZW50aXR5U3RhdHVzTGlzdFwiIFsoYmluZCldPVwic3RhdHVzXCJcclxuICAgICAgICAgIFtjb21ib1R5cGVdPVwiJ3N0YXR1cydcIiBbc3RhdHVzTWV0YWRhdGFdPVwic3RhdHVzTWV0YWRhdGFDb21ib1N0YXR1c1wiPjwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ3b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd1VpZCB8fCB3b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvd1wiXHJcbiAgICAgIGNsYXNzPVwiZmxleCBjb2wtMTBcIj5cclxuICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cInNoYXJlZF93b3JrZmxvd05hbWVcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGNvbC00XCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3cnfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxUc2ktVGV4dC1Cb3ggW2Rpc2FibGVkXT1cInRydWVcIiBbaW5wdXROYW1lXT1cIid3b3JrZmxvd05hbWUnXCIgWyhpbnB1dEZpZWxkKV09XCJ3b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93TmFtZVwiPlxyXG4gICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cImFkbWluaXN0cmF0aW9uX3dvcmtmbG93X3dvcmtmbG93X2N1cnJlbnRfc3RhdHVzXCJcclxuICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGNvbC00XCI+XHJcbiAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3dfY3VycmVudF9zdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJ3LTdcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICBbYmluZF09XCJ3b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdFwiIFtpc0ZpbHRlcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgW2VsZW1lbnRTb3VyY2VVcmxdPVwiZ2V0V29ya2Zsb3dFdGF0QXNLZXlWYWx1ZVBhaXJcIiBbbGlzdFNvdXJjZVVybF09XCJnZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXJcIj5cclxuICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibW9kZSAhPSBmb3JtTW9kZXMuY3JlYXRlIHx8IHdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93XCJcclxuICAgICAgICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyPVwiYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3dfbmV4dF9zdGF0dXNcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBuby1ib3JkZXJcIj5cclxuICAgICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X3dvcmtmbG93X25leHRfc3RhdHVzJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJ3LTdcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIiBbKGJpbmQpXT1cInNlbGVjdGVkV29ya2Zsb3dFdGF0VWlkXCJcclxuICAgICAgICAgICAgW2lzRmlsdGVyZWRdPVwidHJ1ZVwiIFtlbGVtZW50U291cmNlVXJsXT1cImdldFdvcmtmbG93RXRhdEFzS2V5VmFsdWVQYWlyXCJcclxuICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiZ2V0V29ya2Zsb3dFdGF0U3VpdmFudEFzS2V5VmFsdWVQYWlyXCIgKGJpbmRDaGFuZ2UpPVwiY29uZmlybVVwZGF0ZVdvcmtmbG93RXRhdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT4iXX0=
|
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZm9ybS90c2ktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsT0FBTyxFQUE0QixPQUFPLEVBQW1DLCtCQUErQixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hLLE9BQU8sRUFBRSx3QkFBd0IsRUFBdUMsTUFBTSxpREFBaUQsQ0FBQztBQUVoSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFVdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixF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QkFBMUMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR3VCLGtCQUFrQjtzQkFBL0MsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1csZUFBZTtzQkFBckQsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBRUUsZUFBZTtzQkFBckQsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBR3JDLHdCQUF3QjtzQkFEdkIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbkUsd0JBQXdCO3NCQUR2QixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZm9ybVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdHMvZm9ybS10eXBlJztcclxuaW1wb3J0IHsgQWRtaW5pc3RyYXRpb25FbmRwb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzL2VuZHBvaW50cyc7XHJcbmltcG9ydCB7IE1vZGVzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBJTW9kYWxTaXplIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVudGl0eVByb3BlcnRpZXNSZXNwb25zZSwgRmljaGllciwgS2V5VmFsdWVQYWlyLCBPcHRpb25hbEVuZHBvaW50cywgdXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbiwgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEsIENvbG9ubmVQZXJzb25uYWxpc2VlR3JvdXBlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUnO1xyXG5pbXBvcnQgeyBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0YXR1cy9jb2xvci1zdGF0dXMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQvbGF5b3V0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL2Vycm9yLXJlc3BvbnNlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUNvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLWNvbmZpcm1hdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHVzL2VudGl0eVN0YXR1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdHVzQ29sb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHVzL3N0YXR1cy1jb2xvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93L3dvcmtmbG93LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ0NvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydGluZy9yZXBvcnRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktbW9kYWwtZm9vdGVyL3RzaS1tb2RhbC1mb290ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpTW9kYWxIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktbW9kYWwtaGVhZGVyL3RzaS1tb2RhbC1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybXVsYWlyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9keW5hbWljLWZvcm0vZm9ybXVsYWlyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNOdWxsT3JFbXB0eSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHNpLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIHB1YmxpYyBsb2NhbGl6ZT8gPSBpbmplY3QoTG9jYWxpemVQaXBlKVxyXG4gIFxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIGZpZWxkc1xyXG4gIHByaXZhdGUgX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgQFZpZXdDaGlsZCgnZm9ybVJlZicpIGZvcm1SZWY/OiBOZ0Zvcm07XHJcbiAgQFZpZXdDaGlsZChcInJlcG9ydGluZ0FwcFwiKSByZXBvcnRpbmdBcHA/OiBSZXBvcnRpbmdDb21wb25lbnRcclxuICAvLyNlbmRyZWdpb25cclxuICBcclxuICAvLyNyZWdpb24gaW5wdXRzXHJcbiAgQElucHV0KCkgY2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmcgPSAnb2ZmJztcclxuICAvLyBASW5wdXQoKSBmb3JtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIGZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIFxyXG4gIEBJbnB1dCgpIG9wdGlvbmFsRW5kcG9pbnRzPzogT3B0aW9uYWxFbmRwb2ludHM7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtb2RhbFNpemU/OiBJTW9kYWxTaXplO1xyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgZ2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fZGVzY3JpbWluYXRvclZhbHVlOyB9XHJcbiAgc2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaXNEZXNjcmltaW5hdG9yVmFsdWVTZXQgPSB0cnVlO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVGb3Jtc0luZm9zKCk7XHJcbiAgfVxyXG5cclxuICBlbnRpdHlTdGF0dXNMaXN0OiBLZXlWYWx1ZVBhaXI8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcclxuXHJcbiAgbm9tYnJlRG9jdW1lbnRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gIG1lc3NhZ2VQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG4gIHByaXZhdGUgZHJhZ0VudGVyQ291bnQgPSAwO1xyXG4gIHByaXZhdGUgX2Zvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgQElucHV0KClcclxuICBnZXQgZm9ybUVuZHBvaW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1FbmRwb2ludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9mb3JtRW5kcG9pbnQgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBmb3JtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1OYW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1OYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2Zvcm1OYW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVzaW5lc3NDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfbW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2Zvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX3N0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyBHZXR0ZXIgZm9yIGJ1c2luZXNzQ2xhc3NcclxuICBnZXQgYnVzaW5lc3NDbGFzcygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG5cclxuICAvLyBTZXR0ZXIgZm9yIGJ1c2luZXNzQ2xhc3NcclxuICBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmlzQnVzaW5lc3NDbGFzc1NldCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5nZXRDb2xvbm5lUGVyc29ubmFsaXNlZSgpO1xyXG4gICAgdGhpcy5nZXRFbnRpdHlTdGF0dXMoKTtcclxuICAgIHRoaXMuZ2V0U3RhdHVzTWV0YUZvckNvbWJvKCk7XHJcbiAgICB0aGlzLmNoZWNrRW50aXR5SW5mbygpOyAgICBcclxuICAgIHRoaXMuY2FsY3VsYXRlRm9ybXNJbmZvcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0dGVyIGZvciBpZFxyXG4gIGdldCBpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgLy8gU2V0dGVyIGZvciBpZFxyXG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5nZXRDb2xvbm5lUGVyc29ubmFsaXNlZSgpO1xyXG4gICAgdGhpcy5nZXROb21icmVGaWNoaWVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXR0ZXIgZm9yIHN0YXR1c1xyXG4gIGdldCBzdGF0dXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvLyBTZXR0ZXIgZm9yIHN0YXR1c1xyXG4gIHNldCBzdGF0dXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XHJcbiAgICB0aGlzLm9uU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5fc3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuZ2V0Q29sb25uZVBlcnNvbm5hbGlzZWUoKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVGb3Jtc1Zpc2liaWxpdHkoKTtcclxuICB9XHJcblxyXG4gIGdldCBtb2RlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgaXNDcmVhdGVPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gb3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtUmVmQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TmdGb3JtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmdGb3JtPigpO1xyXG4gIEBPdXRwdXQoKSBvblN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhclRlbXBsYXRlJykgdG9vbGJhclRlbXBsYXRlUmVmICE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQENvbnRlbnRDaGlsZChUc2lNb2RhbEhlYWRlckNvbXBvbmVudCkgbW9kYWxIZWFkZXJDb21wPzogVHNpTW9kYWxIZWFkZXJDb21wb25lbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoVHNpTW9kYWxGb290ZXJDb21wb25lbnQpIG1vZGFsRm9vdGVyQ29tcD86IFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdkeW5hbWljVG9vbGJhckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIGR5bmFtaWNUb29sYmFyQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0Zvb3RlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIGR5bmFtaWNGb290ZXJzQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcclxuXHJcbiAgaW5wdXRUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkOiBDb2xvbm5lUGVyc29ubmFsaXNlZUdyb3VwZWRSZXNwb25zZVtdID0gW107XHJcbiAgY2FuU2hvd0Zvcm1zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybXNPZkJ1c2luZXNzQ2xhc3M6IGFueVtdID0gW107ICBcclxuICBwcml2YXRlIF9kb2VzSGF2ZUZvcm1zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGRvZXNIYXZlRm9ybXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kb2VzSGF2ZUZvcm1zOyB9XHJcbiAgc2V0IGRvZXNIYXZlRm9ybXModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2RvZXNIYXZlRm9ybXMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVGb3Jtc1Zpc2liaWxpdHkoKTtcclxuICB9XHJcblxyXG4gIGlzRGVzY3JpbWluYXRvclZhbHVlU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCdXNpbmVzc0NsYXNzU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNGb3Jtc0luZm9zQ2FsY3VsYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlnbm9yZURlc2NyaW1pbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZHluYW1pY0Zvcm1TZXJ2aWNlID0gaW5qZWN0KER5bmFtaWNGb3JtU2VydmljZSk7XHJcbiAgZm9ybXVsYWlyZVNlcnZpY2UgOiBGb3JtdWxhaXJlU2VydmljZSA9IGluamVjdChGb3JtdWxhaXJlU2VydmljZSk7XHJcbiAgZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgOiBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSk7XHJcblxyXG4gIC8vI3JlZ2lvbiBjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVudGl0eVN0YXR1c1NlcnZpY2U6IEVudGl0eVN0YXR1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0YXR1c0NvbG9yU2VydmljZTogU3RhdHVzQ29sb3JTZXJ2aWNlLFxyXG4gICAgcHVibGljIF9maWNoaWVyU2VydmljZTogRmljaGllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaUNvbmZpcm1TZXJ2aWNlOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHNpTm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlOiBMYXlvdXRIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2U6IFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZTogQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJlZj86IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh0aGlzLnJlcG9ydGluZ0FwcCkge1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlICYmIHRoaXMucmVwb3J0aW5nQXBwLnNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvbikge1xyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nQXBwLnNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvbiA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2F2ZWREYXRhU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2F2ZWREYXRhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiB2YXJpYWJsZXNcclxuICBwcml2YXRlIF93b3JrZmxvd0luZm9ybWF0aW9uOiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSA9IG5ldyB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSgpO1xyXG4gIHNldCB3b3JrZmxvd0luZm9ybWF0aW9uKHZhbHVlOiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSkge1xyXG4gICAgdGhpcy5fd29ya2Zsb3dJbmZvcm1hdGlvbiA9IHZhbHVlXHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICBpZiAodGhpcy5tb2RlICE9IE1vZGVzLmNyZWF0ZSAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdCkge1xyXG4gICAgICB0aGlzLmdldFdvcmtmbG93RXRhdFN1aXZhbnRBc0tleVZhbHVlUGFpciA9IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldFdvcmtmbG93RXRhdFN1aXZhbnRCeVdvcmtmbG93RXRhdCh0aGlzLndvcmtmbG93SW5mb3JtYXRpb24ud29ya2Zsb3dFdGF0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgZ2V0V29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbihidXNpbmVzc0NsYXNzOiBzdHJpbmcsIHVpZE9iamVjdD86IHN0cmluZywgZGlzY3JpbWluYXRvckNsYXNzTmFtZSA/OiBzdHJpbmcsIFxyXG4gIC8vIGRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgPzogc3RyaW5nXHJcbiAgLy8gKSB7XHJcbiAgLy8gICBpZiAodGhpcy5tb2RlICE9IE1vZGVzLmNyZWF0ZSkge1xyXG4gIC8vICAgICByZXR1cm47XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBsZXQgcmVxdWVzdDogR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCA9IG5ldyBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0KCk7XHJcbiAgLy8gICAgIHJlcXVlc3QuY2xhc3NOYW1lID0gYnVzaW5lc3NDbGFzc1xyXG4gIC8vICAgICByZXF1ZXN0LnVpZE9iamV0ID0gdWlkT2JqZWN0O1xyXG4gIC8vICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUgPSBkaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgLy8gICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSA9IGRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWVcclxuICAvLyAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gIC8vICAgICB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eVdvcmtsZm93SW5zdGFuY2VJbmZvcm1hdGlvbihyZXF1ZXN0KSlcclxuICAvLyAgICAgY29uc29sZS5sb2coXCJ0aGlzLndvcmtmbG93SW5mb3JtYXRpb25cIiwgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uKVxyXG4gIC8vICAgICBpZiAodGhpcy53b3JrZmxvd0luZm9ybWF0aW9uKSB7XHJcbiAgLy8gICAgICAgbGV0IHdvcmtmbG93RXRhdEZvcm0gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50Rm9ybVxyXG4gIC8vICAgICAgICAgPy5maW5kKHggPT4geC51aWQgPT0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpXHJcbiAgLy8gICAgICAgaWYgKHdvcmtmbG93RXRhdEZvcm0pIHtcclxuICAvLyAgICAgICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9yRm9yQ3VycmVudEVudGl0eUZvcm0gPVxyXG4gIC8vICAgICAgICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLm1hcFdvcmtmbG93RXRhdEZvcm1Ub1ByZXNlbnRhdGlvblNldHRpbmcod29ya2Zsb3dFdGF0Rm9ybS53b3JrZmxvd0V0YXRzRm9ybXMpXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjYXRjaCAoZXJyb3IpIHtcclxuICAvLyAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdldCB3b3JrZmxvd0luZm9ybWF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dvcmtmbG93SW5mb3JtYXRpb25cclxuICB9XHJcbiAgZ2V0V29ya2Zsb3dFdGF0QXNLZXlWYWx1ZVBhaXIgPVxyXG4gICAgQWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0V29ya2Zsb3dFdGF0QXNLZXlWYWx1ZVBhaXIoKTtcclxuICBnZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXIgPSAnJztcclxuICBzZWxlY3RlZFdvcmtmbG93RXRhdFVpZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuICBpc0NvbWJvRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtTW9kZXMgPSBNb2RlcztcclxuXHJcbiAgY29uZmlnTW9kZUJ1dHRvbklkID0gXCJjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWZvcm1cIjtcclxuICBjdWRDb21wb25lbnQ6IGFueVxyXG4gIGNvbmZpZ0RhdGE6IGFueVxyXG4gIHNhdmVkRGF0YVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VkQ29tcG9uZW50ID0gdGhpcy5jb25maWc/LmRhdGE/LmN1ZENvbXBvbmVudDtcclxuICAgIHRoaXMuY29uZmlnRGF0YSA9IHRoaXMuY29uZmlnXHJcbiAgICB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24gPSB0aGlzLmNvbmZpZz8uZGF0YT8ud29ya2Zsb3dJbmZvcm1hdGlvbiA/PyBuZXcgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UoKVxyXG4gICAgY29uc29sZS5sb2coXCJ3b3JrZmxvd0luZm9ybWF0aW9uID0+IFwiLCB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24pXHJcbiAgICBpZiAodGhpcy5tb2RlICE9IE1vZGVzLmNyZWF0ZSAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdCkge1xyXG4gICAgICB0aGlzLmdldFdvcmtmbG93RXRhdFN1aXZhbnRBc0tleVZhbHVlUGFpciA9IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldFdvcmtmbG93RXRhdFN1aXZhbnRCeVdvcmtmbG93RXRhdCh0aGlzLndvcmtmbG93SW5mb3JtYXRpb24ud29ya2Zsb3dFdGF0KVxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdEZvcm1TYXZlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0Rm9ybVNhdmVTdWJzY3JpcHRpb24oKSB7XHJcbiAgICB0aGlzLnNhdmVkRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZVxyXG4gICAgICAuZGF0YVNhdmVkT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhXHJcbiAgICAgICAgICAgICAgLmZvckVhY2goeCA9PiB4Lm9jY3VyZW5jZSA9IGRhdGEpXHJcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZS5hZGRPclVwZGF0ZUZvcm11bGFpcmVEYXRhKHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gIH1cclxuXHJcbiAgZm9ybVR5cGUgPSBmb3JtVHlwZTtcclxuICBwcml2YXRlIGdldENvbG9ubmVQZXJzb25uYWxpc2VlKCkge1xyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLm1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMuX2dldENvbG9ubmVQZXJzb25uYWxpc2UodGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmIHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGUgJiYgdGhpcy5pZCkge1xyXG4gICAgICB0aGlzLl9nZXRDb2xvbm5lUGVyc29ubmFsaXNlKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5pZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldENvbG9ubmVQZXJzb25uYWxpc2UoYnVzaW5lc3NDbGFzczogc3RyaW5nLCBpZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5fY29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlLmdldENvbG9ubmVzUGVyc29ubmFsaXNlZShidXNpbmVzc0NsYXNzLCB0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzLmZvckVhY2goY3BnID0+IHtcclxuICAgICAgICAgIGNwZy5jb2xvbm5lcy5mb3JFYWNoKGNwID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjcC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgY3AuZGF0YSA9IG5ldyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEoXHJcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlkLCBjcC51aWQsXHJcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmNvbG9ubmVzUGVyc29ubmFsaXNlZUdyb3VwZWQgPSByZXM7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc0R5bmFtaWNUYWJzKClcclxuICAgICAgICB9LCAwKTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJlcnJvciB3aGVuIGdldHRpbmcgbGlzdCBvZiBjb2xvbm5lIHBlcnNvbm5hbGlzZWVcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gdGhpcy5jb25maWdEYXRhLmRhdGEuY3VkQ29tcG9uZW50ID0gdW5kZWZpbmVkXHJcbiAgICAvLyB0aGlzLmNvbmZpZ0RhdGEuZGF0YS53b3JrZmxvd0luZm9ybWF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG4gICAgLy8gdGhpcy5yZWY/LmNsb3NlKCk7XHJcbiAgICAvLyB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IHRydWVcclxuICAgIC8vIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuY3VycmVudEZvcm1OYW1lID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKClcclxuXHJcbiAgICAvLyB0aGlzLnJlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmN1ZENvbXBvbmVudCwgdGhpcy5jb25maWdEYXRhKTtcclxuICAgIC8vIHRoaXMucmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgIC8vICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gICAgLy8gICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmN1cnJlbnRGb3JtTmFtZSA9IHVuZGVmaW5lZFxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcm9jZXNzRHluYW1pY1RhYnMoKSB7XHJcbiAgICB0aGlzLmR5bmFtaWNUb29sYmFyQ29udGFpbmVycy50b0FycmF5KCkuZm9yRWFjaChjb250YWluZXIgPT4ge1xyXG4gICAgICBjb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgY29uc3QgY29tcFJlZjogQ29tcG9uZW50UmVmPFRzaU1vZGFsSGVhZGVyQ29tcG9uZW50PiA9IGNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoVHNpTW9kYWxIZWFkZXJDb21wb25lbnQpO1xyXG5cclxuICAgICAgY29tcFJlZi5pbnN0YW5jZS50b29sYmFyVGVtcGxhdGVIZWFkZXIgPSB0aGlzLm1vZGFsSGVhZGVyQ29tcCEudG9vbGJhclRlbXBsYXRlSGVhZGVyO1xyXG4gICAgICBjb21wUmVmLmluc3RhbmNlLmlucHV0VGl0bGUgPSB0aGlzLm1vZGFsSGVhZGVyQ29tcCEuaW5wdXRUaXRsZTtcclxuXHJcbiAgICAgIGNvbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5keW5hbWljRm9vdGVyc0NvbnRhaW5lcnMudG9BcnJheSgpLmZvckVhY2goY29udGFpbmVyID0+IHtcclxuICAgICAgY29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIGNvbnN0IGNvbXBSZWY6IENvbXBvbmVudFJlZjxUc2lNb2RhbEZvb3RlckNvbXBvbmVudD4gPSBjb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50KTtcclxuICAgICAgY29tcFJlZi5pbnN0YW5jZS5mb290ZXJUZW1wbGF0ZVJlZiA9IHRoaXMubW9kYWxGb290ZXJDb21wPy5mb290ZXJUZW1wbGF0ZVJlZlxyXG4gICAgICBjb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sYmFyVGVtcGxhdGVSZWYgJiYgdGhpcy5tb2RhbEhlYWRlckNvbXApIHtcclxuICAgICAgdGhpcy5tb2RhbEhlYWRlckNvbXAudG9vbGJhclRlbXBsYXRlSGVhZGVyID0gdGhpcy50b29sYmFyVGVtcGxhdGVSZWY7XHJcbiAgICAgIHRoaXMuaW5wdXRUaXRsZSA9IHRoaXMubW9kYWxIZWFkZXJDb21wLmlucHV0VGl0bGU7XHJcblxyXG4gICAgICB0aGlzLm1vZGFsSGVhZGVyQ29tcC50b29sYmFyVGVtcGxhdGVIZWFkZXIgPSB0aGlzLnRvb2xiYXJUZW1wbGF0ZVJlZjtcclxuICAgICAgdGhpcy5pbnB1dFRpdGxlID0gdGhpcy5tb2RhbEhlYWRlckNvbXAuaW5wdXRUaXRsZTtcclxuICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1SZWZDaGFuZ2UuZW1pdCh0aGlzLmZvcm1SZWYpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBoYW5kbGVGb3JtU3VibWl0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLndvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIHRoaXMub25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uLmVtaXQoZXZlbnQpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zeW5jRHluYW1pY0NvbHVtbkRhdGFUb0R5bmFtaWNGb3JtU2VydmljZSgpXHJcbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBzeW5jRHluYW1pY0NvbHVtbkRhdGFUb0R5bmFtaWNGb3JtU2VydmljZSgpIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nVWlkcyA9IG5ldyBTZXQoXHJcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEubWFwKHggPT4geC5jb2xvbm5lUGVyc29ubmFsaXNlZVVpZClcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkLmZvckVhY2goY3BnID0+IHtcclxuICAgICAgY3BnLmNvbG9ubmVzLmZvckVhY2goY3AgPT4ge1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdVaWRzLmhhcyhjcC51aWQpKSB7XHJcbiAgICAgICAgICBpZiAoIWNwLmRhdGEpIHtcclxuICAgICAgICAgICAgY3AuZGF0YSA9IG5ldyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEoXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHRoaXMuaWQsIGNwLnVpZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhKFxyXG4gICAgICAgICAgICBjcD8uZGF0YT8udWlkID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY3A/LmRhdGE/Lm9jY3VyZW5jZSA/PyB0aGlzLmlkLFxyXG4gICAgICAgICAgICBjcC51aWQsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyQm9vbGVhbixcclxuICAgICAgICAgICAgY3AuZGF0YS52YWxldXJJbnQsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyRGVjaW1hbCxcclxuICAgICAgICAgICAgY3AuZGF0YS52YWxldXJTdHJpbmcsXHJcbiAgICAgICAgICAgIGNwLmRhdGEudmFsZXVyQmluYXJ5LFxyXG4gICAgICAgICAgICBjcC5vYnNlcnZhdGlvblxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5jb2xvbm5lc1BlcnNvbm5hbGlzZWVEYXRhLnB1c2gobmV3RGF0YSk7XHJcblxyXG4gICAgICAgICAgZXhpc3RpbmdVaWRzLmFkZChjcC51aWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGEgPT4gXCIsXHJcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbG9ubmVzUGVyc29ubmFsaXNlZURhdGFcclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIHdvcmtmbG93XHJcblxyXG5cclxuICBjb25maXJtVXBkYXRlV29ya2Zsb3dFdGF0KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KVxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuX3RzaUNvbmZpcm1TZXJ2aWNlLmNvbmZpcm0oXCJhZG1pbmlzdHJhdGlvbl9jb25maXJtX3N0YXR1c19jaGFuZ2VcIiwgXCJhZG1pbmlzdHJhdGlvbl9jb25maXJtYXRpb25fdGl0bGVcIixcclxuICAgICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyB1cGRhdGVFbnRpdHlXb3JrZmxvd0luZm9ybWF0aW9uKClcclxuICAgICAgICAgICAgcmVxdWVzdC5jbGFzc05hbWUgPSB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gICAgICAgICAgICByZXF1ZXN0LnVpZE9iamVjdCA9IHRoaXMuX2lkXHJcbiAgICAgICAgICAgIHJlcXVlc3QubmV3V29ya2Zsb3dTdGF0dXMgPSBldmVudDtcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrZmxvdyA9IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dVaWQ7XHJcbiAgICAgICAgICAgIHJlcXVlc3Qud29ya2Zsb3dFdGF0ID0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uLndvcmtmbG93RXRhdFxyXG4gICAgICAgICAgICByZXF1ZXN0LndvcmtmbG93SW5zdGFuY2VVaWQgPSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93SW5zdGFuY2VVaWRcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrZmxvd0V0YXQgPSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXF1ZXN0KVxyXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UudXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuc3RhdHVzICE9IG51bGwgJiYgZGF0YS5zdGF0dXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBkYXRhLnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd0V0YXRVaWQgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RzaU5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93RXRhdFVpZCA9IG51bGxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHN0YXR1c01ldGFkYXRhQ29tYm9TdGF0dXM/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBwcml2YXRlIGdldFN0YXR1c01ldGFGb3JDb21ibygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnN0YXR1c0NvbG9yU2VydmljZS5nZXRTdGF0dXNDb2xvckRldGFpbHNCeUJ1c2luZXNzQ2xhc3NOYW1lKHRoaXMuYnVzaW5lc3NDbGFzcyEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0dXNNZXRhZGF0YUNvbWJvU3RhdHVzID0gZGF0YTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEVudGl0eSBzdGF0dXNcclxuICBwcml2YXRlIGdldEVudGl0eVN0YXR1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuZW50aXR5U3RhdHVzU2VydmljZS5nZXRFbnRpdHlTdGF0dXModGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogRW50aXR5UHJvcGVydGllc1Jlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChkYXRhLmVudGl0eVN0YXR1cyAmJiBBcnJheS5pc0FycmF5KGRhdGEuZW50aXR5U3RhdHVzKSkge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlTdGF0dXNMaXN0ID0gZGF0YS5lbnRpdHlTdGF0dXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzID0gZGF0YS5kZWZhdWx0U3RhdHVzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNldE1lc3NhZ2VQb3NpdGlvbihldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcclxuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gICAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGUsIGZpbGVFeHRlbnNpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGU6IEZpbGUsIGZpbGVFeHRlbnNpb246IHN0cmluZykge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoZTogUHJvZ3Jlc3NFdmVudDxGaWxlUmVhZGVyPikgPT4ge1xyXG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgQXJyYXlCdWZmZXI7XHJcbiAgICAgIGlmICghYXJyYXlCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgY29uc3QgZmljaGllclRvU2VuZCA9IG5ldyBGaWNoaWVyKCk7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuZGF0ZUZpY2hpZXIgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm5vbSA9IGZpbGUubmFtZTtcclxuICAgICAgZmljaGllclRvU2VuZC5vYmpldCA9ICcnO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLm5vbUZpY2hpZXJDb21wbGV0ID0gZmlsZS5uYW1lO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQuY29udGVudSA9IGJhc2U2NENvbnRlbnQ7XHJcbiAgICAgIGZpY2hpZXJUb1NlbmQudGFibGVMaWVlID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLnBrZXkgPSB0aGlzLmlkPy50b1N0cmluZygpO1xyXG4gICAgICBmaWNoaWVyVG9TZW5kLmV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb25cclxuXHJcbiAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlLmNyZWF0ZShmaWNoaWVyVG9TZW5kKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZ2V0Tm9tYnJlRmljaGllcigpO1xyXG4gICAgICAgICAgdGhpcy5fdHNpTm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFwiZmljaGllcl9qb2ludFwiKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICBoaWRlKHZhbD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMucmVmICE9IG51bGwgJiYgdGhpcy5yZWYgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh2YWwgPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnJlZj8uZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVmPy5jbG9zZSh2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmxvY2FsaXplICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5sb2NhbGl6ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG4gIH1cclxuXHJcbiAgZ2V0Tm9tYnJlRmljaGllcigpIHtcclxuICAgIGlmICh0aGlzLmlkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5fZmljaGllclNlcnZpY2VcclxuICAgICAgICAuR2V0Tm9tYnJlRmljaGllckpvaW50QnlJZCh0aGlzLmlkID8/IFwiXCIpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vbWJyZURvY3VtZW50cyA9IGRhdGE7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdG8gZ2V0IG51bWJlciBvZiBmaWxlcyBvbiB0aGlzIHJlY29yZFwiLCByZXNwb25zZSlcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5kcmFnRW50ZXJDb3VudCsrO1xyXG5cclxuICAgIHRoaXMuaXNEcmFnT3ZlciA9IHRydWU7XHJcbiAgICB0aGlzLnNldE1lc3NhZ2VQb3NpdGlvbihldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEcmFnT3Zlcikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiBldmVudC5jbGllbnRYICsgNSxcclxuICAgICAgICB5OiBldmVudC5jbGllbnRZICsgNVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuZHJhZ0VudGVyQ291bnQtLTtcclxuXHJcbiAgICBpZiAodGhpcy5kcmFnRW50ZXJDb3VudCA8PSAwKSB7XHJcbiAgICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmRyYWdFbnRlckNvdW50ID0gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TWVzc2FnZVBvc2l0aW9uKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMubWVzc2FnZVBvc2l0aW9uID0ge1xyXG4gICAgICB4OiBldmVudC5jbGllbnRYICsgNSxcclxuICAgICAgeTogZXZlbnQuY2xpZW50WSArIDUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjaGVja0VudGl0eUluZm8oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZighdGhpcy5idXNpbmVzc0NsYXNzKSByZXR1cm47XHJcblxyXG4gICAgdHJ5e1xyXG4gICAgICBsZXQgZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG5cclxuICAgICAgaWYoIWVudGl0eUluZm8gfHwgKCFlbnRpdHlJbmZvLmRpc2NyaW1pbmF0b3JDbGFzc05hbWUgJiYgIWVudGl0eUluZm8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSkpXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLmlnbm9yZURlc2NyaW1pbmF0b3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlRm9ybXNJbmZvcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaChlcnJvcil7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBbGxGb3Jtc09mQnVzaW5lc3NDbGFzcygpIHtcclxuICAgIGlmKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHJldHVybjtcclxuICAgIFxyXG4gICAgdGhpcy5mb3JtdWxhaXJlU2VydmljZS5nZXRBbGxGb3Jtc09mQnVzaW5lc3NDbGFzcyh0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICghdmFsdWUgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHJldHVybjtcclxuICAgICAgICB0aGlzLmZvcm1zT2ZCdXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5kb2VzSGF2ZUZvcm1zID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBwcml2YXRlIHJlY2FsY3VsYXRlRm9ybXNWaXNpYmlsaXR5KCkgeyB0aGlzLmNhblNob3dGb3JtcyA9IHRoaXMuZG9lc0hhdmVGb3JtcyAmJiAhaXNOdWxsT3JFbXB0eSh0aGlzLm1vZGUpICYmIHRoaXMubW9kZSAhPSBNb2Rlcy5jcmVhdGU7IH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVGb3Jtc0luZm9zKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5pc0Zvcm1zSW5mb3NDYWxjdWxhdGVkKSByZXR1cm47ICAgIFxyXG4gICAgaWYoIXRoaXMuaXNCdXNpbmVzc0NsYXNzU2V0IHx8ICF0aGlzLmlnbm9yZURlc2NyaW1pbmF0b3IgJiYgIXRoaXMuaXNEZXNjcmltaW5hdG9yVmFsdWVTZXQpIHJldHVybjtcclxuICAgIFxyXG4gICAgdGhpcy5nZXRBbGxGb3Jtc09mQnVzaW5lc3NDbGFzcygpO1xyXG4gICAgdGhpcy5pc0Zvcm1zSW5mb3NDYWxjdWxhdGVkID0gdHJ1ZTtcclxuICB9XHJcbn0iLCI8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChuZ1N1Ym1pdCk9XCJoYW5kbGVGb3JtU3VibWl0KCRldmVudClcIiAjZm9ybVJlZj1cIm5nRm9ybVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdG9vbGJhclRlbXBsYXRlPlxyXG4gICAgPHAtdG9vbGJhciAqbmdJZj1cImZvcm1FbmRwb2ludFwiIHN0eWxlQ2xhc3M9XCJtYi0xIGdhcC0yXCIgY2xhc3M9XCJ3LWZ1bGxcIiAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIiAoZHJhZ2VudGVyKT1cIm9uRHJhZ0VudGVyKCRldmVudClcIiAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEgbWwtMlwiPlxyXG4gICAgICAgICAge3sgaW5wdXRUaXRsZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEgbXItMlwiPlxyXG4gICAgICAgICAgPGFwcC1yZXBvcnRpbmcgKm5nSWY9XCJmb3JtRW5kcG9pbnRcIiBbZnJvbVRzaUZvcm1dPVwidHJ1ZVwiIFtpZF09XCJ0aGlzLmlkXCIgW2Zvcm1FbmRwb2ludF09XCJmb3JtRW5kcG9pbnRcIlxyXG4gICAgICAgICAgICBbZm9ybU5hbWVdPVwiZm9ybU5hbWVcIiBbcmVwb3J0RGlzY3JpbWluYXRvcl09XCJkZXNjcmltaW5hdG9yVmFsdWVcIiBbaXNGb3JtRW5kcG9pbnRQYWdlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW25vbWJyZURvY3VtZW50c0pvaW50c109XCJub21icmVEb2N1bWVudHNcIiBbY29uZmlnTW9kZUJ1dHRvbklkXT1cImNvbmZpZ01vZGVCdXR0b25JZFwiXHJcbiAgICAgICAgICAgIFtpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiICh0b2dnbGVEZXNpZ25Nb2RlKT1cInRvZ2dsZURlc2lnbk1vZGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIiAoY2xvc2VkTW9kYWxGaWxlVXBsb2FkKT1cImdldE5vbWJyZUZpY2hpZXIoKVwiXHJcbiAgICAgICAgICAgIFtzaG93SW1wb3J0RXhwb3J0QnV0dG9uXT1cImZhbHNlXCIgI3JlcG9ydGluZ0FwcD5cclxuICAgICAgICAgIDwvYXBwLXJlcG9ydGluZz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc0RyYWdPdmVyXCIgW25nU3R5bGVdPVwieyBsZWZ0OiBtZXNzYWdlUG9zaXRpb24ueCArICdweCcsIHRvcDogbWVzc2FnZVBvc2l0aW9uLnkgKyAncHgnIH1cIlxyXG4gICAgICAgIGNsYXNzPVwiZHJhZy1tZXNzYWdlIGN1cnNvci1mb2xsb3dcIj5cclxuICAgICAgICB7eyBcIkpvaW50dXJlXCIgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L3AtdG9vbGJhcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8ZGl2ICpidXN5PVwiaXNMb2FkaW5nXCI+PC9kaXY+XHJcblxyXG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1yXCI+XHJcbiAgICAgIDxwLXRhYlZpZXc+XHJcblxyXG4gICAgICAgIDxwLXRhYlBhbmVsIGhlYWRlcj1cIlwiIFxyXG4gICAgICAgIFtoZWFkZXJTdHlsZV09XCJjb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkLmxlbmd0aCA9PT0gMCAmJiAhY2FuU2hvd0Zvcm1zXHJcbiAgICAgID8geyBkaXNwbGF5OiAnbm9uZScgfSBcclxuICAgICAgOiBudWxsXCI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaG9tZSBtci0yXCI+PC9pPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXRhYi10ZXh0XCI+e3sgJ3NoYXJlZF9mb3JtX21haW50YWJUaXRsZScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICA8L3AtdGFiUGFuZWw+XHJcblxyXG4gICAgICAgIDwhLS0gRHluYW1pYyB0YWJzIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2xvbm5lc1BlcnNvbm5hbGlzZWVHcm91cGVkLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgIDxwLXRhYlBhbmVsICpuZ0Zvcj1cImxldCBncnAgb2YgY29sb25uZXNQZXJzb25uYWxpc2VlR3JvdXBlZFwiIFtoZWFkZXJdPVwiZ3JwLmdyb3VwZVwiPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkeW5hbWljVG9vbGJhckNvbnRhaW5lcj48L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdyaWQgZm9ybS1yb3dcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGdycC5jb2xvbm5lc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCJjb2wubm9tXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0cmluZyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBmb3JtLWlucHV0XCIgKm5nSWY9XCJjb2wudHlwZSA9PT0gZm9ybVR5cGUuc3RyaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBbKGlucHV0RmllbGQpXT1cImNvbC5kYXRhLnZhbGV1clN0cmluZ1wiPjwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gSW50IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04IGZvcm0taW5wdXRcIiAqbmdJZj1cImNvbC50eXBlID09PSBmb3JtVHlwZS5pbnRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUludGVnZXIgWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJJbnRcIj48L1RzaS1JbnRlZ2VyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gRGVjaW1hbCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBmb3JtLWlucHV0XCIgKm5nSWY9XCJjb2wudHlwZSA9PT0gZm9ybVR5cGUuZGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1JbnB1dCBbKGlucHV0RmllbGQpXT1cImNvbC5kYXRhLnZhbGV1ckRlY2ltYWxcIj48L1RzaS1EZWNpbWFsLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQm9vbGVhbiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBmb3JtLWlucHV0XCIgKm5nSWY9XCJjb2wudHlwZSA9PT0gZm9ybVR5cGUuYm9vbGVhblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggW2lzQmluYXJ5XT1cImZhbHNlXCIgWyhpbnB1dEZpZWxkKV09XCJjb2wuZGF0YS52YWxldXJCb29sZWFuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBCaW5hcnkgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTggZm9ybS1pbnB1dFwiICpuZ0lmPVwiY29sLnR5cGUgPT09IGZvcm1UeXBlLmJpbmFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICBiaW5hcnkgaW5wdXQgKG5vdCBoYW5kbGVkIHlldClcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2R5bmFtaWNGb290ZXJDb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblNob3dGb3Jtc1wiPlxyXG4gICAgICAgICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInc2hhcmVkX2Zvcm1fZHluYW1pY0Zvcm1zVGFiX1RpdGxlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPHNoYXJlZC1keW5hbWljLWZvcm0tbGlzdFxyXG4gICAgICAgICAgICAgIFtvY2N1cmVuY2VdPVwiaWRcIlxyXG4gICAgICAgICAgICAgIFtvY2N1cmVuY2VCdXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICAgICAgICAgIFtvY2N1cmVuY2VEaXNjcmltaW5hdG9yVmFsdWVdPVwiZGVzY3JpbWluYXRvclZhbHVlXCJcclxuICAgICAgICAgICAgICBbaWdub3JlRGlhbG9nQ29uZmlnXT1cInRydWVcIiAvPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPC9wLXRhYlZpZXc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2ZpZWxkc2V0PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiKGJ1c2luZXNzQ2xhc3MgJiYgZW50aXR5U3RhdHVzTGlzdC5sZW5ndGggPiAwKSB8fFxyXG4gICAgICAgIHdvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93VWlkIHx8XHJcbiAgICAgICAgd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3dcIiBjbGFzcz1cIm14LTQgcHgtMiBteS0xIHNoYXJlZC1mb290ZXItYmFyXCI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgZW50aXR5U3RhdHVzTGlzdCAmJiBlbnRpdHlTdGF0dXNMaXN0Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCIgcHJlc2VudGF0aW9uRGVzaWduZXI9XCJzaGFyZWRfY3J1ZF9zdGF0dXNcIj5cclxuICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfY3J1ZF9zdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gW2lkLWZpZWxkXT1cIidrZXknXCIgW2xhYmVsLWZpZWxkXT1cIid2YWx1ZSdcIiBbZGF0YXNvdXJjZV09XCJlbnRpdHlTdGF0dXNMaXN0XCIgWyhiaW5kKV09XCJzdGF0dXNcIlxyXG4gICAgICAgICAgW2NvbWJvVHlwZV09XCInc3RhdHVzJ1wiIFtzdGF0dXNNZXRhZGF0YV09XCJzdGF0dXNNZXRhZGF0YUNvbWJvU3RhdHVzXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93VWlkIHx8IHdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93XCJcclxuICAgICAgY2xhc3M9XCJmbGV4IGNvbC0xMFwiPlxyXG4gICAgICA8ZGl2IHByZXNlbnRhdGlvbkRlc2lnbmVyPVwic2hhcmVkX3dvcmtmbG93TmFtZVwiIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgY29sLTRcIj5cclxuICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl93b3JrZmxvd193b3JrZmxvdyd8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgPFRzaS1UZXh0LUJveCBbZGlzYWJsZWRdPVwidHJ1ZVwiIFtpbnB1dE5hbWVdPVwiJ3dvcmtmbG93TmFtZSdcIiBbKGlucHV0RmllbGQpXT1cIndvcmtmbG93SW5mb3JtYXRpb24ud29ya2Zsb3dOYW1lXCI+XHJcbiAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IHByZXNlbnRhdGlvbkRlc2lnbmVyPVwiYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3dfY3VycmVudF9zdGF0dXNcIlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgY29sLTRcIj5cclxuICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl93b3JrZmxvd193b3JrZmxvd19jdXJyZW50X3N0YXR1cydcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cInctN1wiIFtkaXNhYmxlZF09XCJ0cnVlXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgIFtiaW5kXT1cIndvcmtmbG93SW5mb3JtYXRpb24ud29ya2Zsb3dFdGF0XCIgW2lzRmlsdGVyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbZWxlbWVudFNvdXJjZVVybF09XCJnZXRXb3JrZmxvd0V0YXRBc0tleVZhbHVlUGFpclwiIFtsaXN0U291cmNlVXJsXT1cImdldFdvcmtmbG93RXRhdFN1aXZhbnRBc0tleVZhbHVlUGFpclwiPlxyXG4gICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlICE9IGZvcm1Nb2Rlcy5jcmVhdGUgfHwgd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3dcIlxyXG4gICAgICAgICAgcHJlc2VudGF0aW9uRGVzaWduZXI9XCJhZG1pbmlzdHJhdGlvbl93b3JrZmxvd193b3JrZmxvd19uZXh0X3N0YXR1c1wiXHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIG5vLWJvcmRlclwiPlxyXG4gICAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfd29ya2Zsb3dfbmV4dF9zdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cInctN1wiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiIFsoYmluZCldPVwic2VsZWN0ZWRXb3JrZmxvd0V0YXRVaWRcIlxyXG4gICAgICAgICAgICBbaXNGaWx0ZXJlZF09XCJ0cnVlXCIgW2VsZW1lbnRTb3VyY2VVcmxdPVwiZ2V0V29ya2Zsb3dFdGF0QXNLZXlWYWx1ZVBhaXJcIlxyXG4gICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJnZXRXb3JrZmxvd0V0YXRTdWl2YW50QXNLZXlWYWx1ZVBhaXJcIiAoYmluZENoYW5nZSk9XCJjb25maXJtVXBkYXRlV29ya2Zsb3dFdGF0KCRldmVudClcIj5cclxuICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
|
|
@@ -107,6 +107,8 @@ export class FilterHelper {
|
|
|
107
107
|
let clone = {
|
|
108
108
|
field: sf.field,
|
|
109
109
|
labelValue: sf.labelValue,
|
|
110
|
+
minLabelValue: sf.minLabelValue,
|
|
111
|
+
maxLabelValue: sf.maxLabelValue,
|
|
110
112
|
operator: sf.operator,
|
|
111
113
|
value: sf.value,
|
|
112
114
|
isMaxMin: sf.isMaxMin,
|
|
@@ -121,12 +123,20 @@ export class FilterHelper {
|
|
|
121
123
|
labelField: sf.labelField,
|
|
122
124
|
idField: sf.idField,
|
|
123
125
|
isFiltered: sf.isFiltered,
|
|
124
|
-
minLabelValue: sf.minLabelValue,
|
|
125
|
-
maxLabelValue: sf.maxLabelValue,
|
|
126
126
|
comboboxLabel: sf.comboboxLabel,
|
|
127
127
|
currency: sf.currency,
|
|
128
128
|
isFraction: sf.isFraction,
|
|
129
|
-
numOfDecimal: sf.numOfDecimal
|
|
129
|
+
numOfDecimal: sf.numOfDecimal,
|
|
130
|
+
disabled: sf.disabled,
|
|
131
|
+
required: sf.required,
|
|
132
|
+
businessClass: sf.businessClass,
|
|
133
|
+
showSearchButton: sf.showSearchButton,
|
|
134
|
+
showAddButton: sf.showAddButton,
|
|
135
|
+
showUpdateButton: sf.showUpdateButton,
|
|
136
|
+
showConsultButton: sf.showConsultButton,
|
|
137
|
+
radioButtonDatasource: sf.radioButtonDatasource ? [...sf.radioButtonDatasource] : [],
|
|
138
|
+
layoutOrientation: sf.layoutOrientation,
|
|
139
|
+
multiple: sf.multiple,
|
|
130
140
|
};
|
|
131
141
|
return clone;
|
|
132
142
|
}
|
|
@@ -160,4 +170,4 @@ export class FilterHelper {
|
|
|
160
170
|
return operator == FilterOperatorType.IN || operator == FilterOperatorType.NOTIN;
|
|
161
171
|
}
|
|
162
172
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktaGVscGVycy9maWx0ZXItaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE1BQU0sT0FBTyxZQUFZO0lBR2hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBYztRQUN6QyxRQUFRLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDN0QsS0FBSyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztZQUNsRixLQUFLLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsY0FBYyxDQUFDO1lBQ3hGLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO1lBQ3BFLEtBQUssZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQy9ELEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDO1lBQ3JFLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO1lBQ2xFLEtBQUssZUFBZSxDQUFD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T0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQTRCO1FBQ3ZELE9BQU8sUUFBUSxJQUFJLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxRQUFRLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ25GLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbHRlck1hdGNoTW9kZSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xyXG5pbXBvcnQgeyBGaWx0ZXJPcGVyYXRvclR5cGUsIElucHV0VHlwZXMsIERpc3BsYXlUeXBlcyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBJQXBwU2V0dGluZ3MgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBTZWFyY2hGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgRGVmYXVsdFNvY2lldGVEZXZpc2UgfSBmcm9tIFwiLi4vY29uc3RzL3RzaS1jb25zdHNcIjtcclxuaW1wb3J0IHsgT2JqZWN0SGVscGVyIH0gZnJvbSBcIi4vb2JqZWN0LmhlbHBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpbHRlckhlbHBlciB7XHJcbiAgcHVibGljIHN0YXRpYyBhcHBTZXR0aW5nczogSUFwcFNldHRpbmdzO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIFRvT3BlcmF0b3JUeXBlKHZhbHVlPzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRVFVQUxTOiByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlLkVRVUFMO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5MRVNTX1RIQU5fT1JfRVFVQUxfVE86IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuTEVTU09SRVFVQUw7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UTzogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5HUkVBVEVST1JFUVVBTDtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUzogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5OT1RFUVVBTDtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOOiByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlLkxFU1M7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTjogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5HUkVBVEVSO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5DT05UQUlOUzogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5DT05UQUlOUztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9JUzogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5EQVRFSVM7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRIOiByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlLlNUQVJUU1dJVEg7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVORFNfV0lUSDogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5FTkRTV0lUSDtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9JU19OT1Q6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuREFURUlTTk9UO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5EQVRFX0JFRk9SRTogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5EQVRFSVNCRUZPUkU7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQUZURVI6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuREFURUlTQUZURVI7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLk5PVF9DT05UQUlOUzogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5OT1RDT05UQUlOUztcclxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuRVFVQUw7XHJcbiAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignTm90IFN1cHBvcnRlZCBmaWx0ZXIgb3BlcmF0b3InKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdFNlYXJjaEZpZWxkcyhzZWFyY2hGaWVsZHM/OiBTZWFyY2hGaWVsZFtdKTogU2VhcmNoRmllbGRbXSB7XHJcbiAgICBsZXQgb3hTZWFyY2hGaWVsZHM6IFNlYXJjaEZpZWxkW10gPSBbXTtcclxuICAgIGlmIChzZWFyY2hGaWVsZHMpIHtcclxuICAgICAgc2VhcmNoRmllbGRzLmZvckVhY2goc2YgPT4ge1xyXG4gICAgICAgIHRoaXMuX2luaXRTZWFyY2hGaWVsZERlZmF1bHRzSWZOdWxsT3JVbmRlZmluZWQoc2YpO1xyXG5cclxuICAgICAgICBsZXQgdG9NaW5NYXhTZWFyY2hGaWVsZHM6IFNlYXJjaEZpZWxkW10gPSB0aGlzLl9pbml0TWluTWF4U2VhcmNoRmllbGQoc2YpO1xyXG5cclxuICAgICAgICBveFNlYXJjaEZpZWxkcyA9IFsuLi5veFNlYXJjaEZpZWxkcywgLi4udG9NaW5NYXhTZWFyY2hGaWVsZHNdO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBveFNlYXJjaEZpZWxkcztcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAqIE5vcm1hbGl6ZXMgYW5kIGluaXRpYWxpemVzIGRlZmF1bHQgdmFsdWVzIGZvciBhIHtAbGluayBTZWFyY2hGaWVsZH1cclxuICogd2hlbiBzb21lIHByb3BlcnRpZXMgYXJlIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gKlxyXG4gKiBUaGlzIG1ldGhvZCBndWFyYW50ZWVzIGNvbnNpc3RlbnQgYmVoYXZpb3Igd2hlbiBkeW5hbWljYWxseSBidWlsZGluZ1xyXG4gKiBzZWFyY2gvZmlsdGVyIFVJIGNvbXBvbmVudHMgYnkgZW5mb3JjaW5nIHNlbnNpYmxlIGRlZmF1bHRzLlxyXG4gKlxyXG4gKiBCZWhhdmlvcjpcclxuICogLSBJZiB0eXBlID09PSBTRUFSQ0hfQ09NQk86XHJcbiAqICAgIC0gb3BlcmF0b3IgZGVmYXVsdHMgdG8gSU4gd2hlbiB2YWx1ZSBpcyBudWxsL3VuZGVmaW5lZC5cclxuICogICAgLSBtdWx0aXBsZSBkZWZhdWx0cyB0byB0cnVlIHdoZW4gdGhlIG9wZXJhdG9yIGlzIGEgc2V0IG9wZXJhdG9yIChlLmcuLCBJTikuXHJcbiAqIC0gRm9yIGFsbCBvdGhlciB0eXBlczpcclxuICogICAgLSBvcGVyYXRvciBkZWZhdWx0cyB0byBFUVVBTCB3aGVuIG5vdCBkZWZpbmVkLlxyXG4gKiAtIHN0eWxlQ2xhc3MgZGVmYXVsdHMgdG8gJ2NvbC0zJyB3aGVuIGVtcHR5IG9yIG5vdCBwcm92aWRlZC5cclxuICogLSBJZiB0eXBlID09PSBDVVJSRU5DWV9TT0NJRVRFX0lOUFVUOlxyXG4gKiAgICAtIGN1cnJlbmN5IGRlZmF1bHRzIHRvIHRoZSBjb21wYW55IGN1cnJlbmN5IGRlZmluZWQgaW4gYXBwIHNldHRpbmdzLFxyXG4gKiAgICAgIG9yIGZhbGxzIGJhY2sgdG8gRGVmYXVsdFNvY2lldGVEZXZpc2UuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZiBUaGUge0BsaW5rIFNlYXJjaEZpZWxkfSBpbnN0YW5jZSB0byBub3JtYWxpemUuXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgbWV0aG9kIG11dGF0ZXMgdGhlIHByb3ZpZGVkIFNlYXJjaEZpZWxkIG9iamVjdCBpbiBwbGFjZS5cclxuICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luaXRTZWFyY2hGaWVsZERlZmF1bHRzSWZOdWxsT3JVbmRlZmluZWQoc2Y6IFNlYXJjaEZpZWxkKTogdm9pZCB7XHJcbiAgICBpZiAoIXNmKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHNmLnR5cGUgPT09IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPXHJcbiAgICAgICYmICEoJ3ZhbHVlJyBpbiBzZikpIHtcclxuICAgICAgaWYgKE9iamVjdEhlbHBlci5pc051bGxPclVuZGVmaW5lZChzZi5vcGVyYXRvcikpIHtcclxuICAgICAgICBzZi5vcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yVHlwZS5JTjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKE9iamVjdEhlbHBlci5pc051bGxPclVuZGVmaW5lZChzZi5tdWx0aXBsZSkgJiYgc2Yub3BlcmF0b3IgJiYgdGhpcy5pc1NldE9wZXJhdG9yKHNmLm9wZXJhdG9yKSkge1xyXG4gICAgICAgIHNmLm11bHRpcGxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoT2JqZWN0SGVscGVyLmlzTnVsbE9yVW5kZWZpbmVkKHNmLm9wZXJhdG9yKSkge1xyXG4gICAgICBzZi5vcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yVHlwZS5FUVVBTDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNmLnN0eWxlQ2xhc3M/LnRyaW0oKSkge1xyXG4gICAgICBzZi5zdHlsZUNsYXNzID0gJ2NvbC0zJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2YudHlwZSA9PSBJbnB1dFR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfSU5QVVQpIHtcclxuICAgICAgc2YuY3VycmVuY3kgPSBGaWx0ZXJIZWxwZXIuYXBwU2V0dGluZ3MuZGV2aXNlU29jaWV0ZS5jb2RlRGV2aXNlID8/IERlZmF1bHRTb2NpZXRlRGV2aXNlLmNvZGVEZXZpc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5pdE1pbk1heFNlYXJjaEZpZWxkKHNmOiBTZWFyY2hGaWVsZCk6IFNlYXJjaEZpZWxkW10ge1xyXG4gICAgbGV0IHNlYXJjaEZpZWxkczogU2VhcmNoRmllbGRbXSA9IFtdO1xyXG4gICAgaWYgKHNmLmlzTWF4TWluKSB7XHJcbiAgICAgIC8vY3JlYXRlIE1heCBmaWx0ZXJcclxuICAgICAgbGV0IG1heFNGID0gdGhpcy5fY2xvbmVTZWFyY2hGaWVsZChzZik7XHJcbiAgICAgIG1heFNGLm9wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3JUeXBlLkxFU1NPUkVRVUFMO1xyXG4gICAgICBtYXhTRi5pc01heE1pbiA9IGZhbHNlO1xyXG4gICAgICBpZiAobWF4U0YubWF4TGFiZWxWYWx1ZSkge1xyXG4gICAgICAgIG1heFNGLmxhYmVsVmFsdWUgPSBtYXhTRi5tYXhMYWJlbFZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2NyZWF0ZSBNaW4gZmlsdGVyXHJcbiAgICAgIGxldCBtaW5TRiA9IHRoaXMuX2Nsb25lU2VhcmNoRmllbGQoc2YpO1xyXG4gICAgICBtaW5TRi5vcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yVHlwZS5HUkVBVEVST1JFUVVBTDtcclxuICAgICAgbWluU0YuaXNNYXhNaW4gPSBmYWxzZTtcclxuICAgICAgaWYgKG1pblNGLm1pbkxhYmVsVmFsdWUpIHtcclxuICAgICAgICBtaW5TRi5sYWJlbFZhbHVlID0gbWluU0YubWluTGFiZWxWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2VhcmNoRmllbGRzID0gW21pblNGLCBtYXhTRl1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZWFyY2hGaWVsZHMucHVzaChzZik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2Nsb25lU2VhcmNoRmllbGQoc2Y6IFNlYXJjaEZpZWxkKTogU2VhcmNoRmllbGQge1xyXG4gICAgbGV0IGNsb25lOiBTZWFyY2hGaWVsZCA9IHtcclxuICAgICAgZmllbGQ6IHNmLmZpZWxkLFxyXG4gICAgICBsYWJlbFZhbHVlOiBzZi5sYWJlbFZhbHVlLFxyXG4gICAgICBvcGVyYXRvcjogc2Yub3BlcmF0b3IsXHJcbiAgICAgIHZhbHVlOiBzZi52YWx1ZSxcclxuICAgICAgaXNNYXhNaW46IHNmLmlzTWF4TWluLFxyXG4gICAgICBtYXhWYWx1ZTogc2YubWF4VmFsdWUsXHJcbiAgICAgIG1pblZhbHVlOiBzZi5taW5WYWx1ZSxcclxuICAgICAgdHlwZTogc2YudHlwZSxcclxuICAgICAgc3R5bGVDbGFzczogc2Yuc3R5bGVDbGFzcyxcclxuICAgICAgaW5wdXRTdHlsZUNsYXNzOiBzZi5pbnB1dFN0eWxlQ2xhc3MsXHJcbiAgICAgIGxhYmVsU3R5bGVDbGFzczogc2YubGFiZWxTdHlsZUNsYXNzLFxyXG4gICAgICBsaXN0U291cmNlVXJsOiBzZi5saXN0U291cmNlVXJsLFxyXG4gICAgICBlbGVtZW50U291cmNlVXJsOiBzZi5lbGVtZW50U291cmNlVXJsLFxyXG4gICAgICBsYWJlbEZpZWxkOiBzZi5sYWJlbEZpZWxkLFxyXG4gICAgICBpZEZpZWxkOiBzZi5pZEZpZWxkLFxyXG4gICAgICBpc0ZpbHRlcmVkOiBzZi5pc0ZpbHRlcmVkLFxyXG4gICAgICBtaW5MYWJlbFZhbHVlOiBzZi5taW5MYWJlbFZhbHVlLFxyXG4gICAgICBtYXhMYWJlbFZhbHVlOiBzZi5tYXhMYWJlbFZhbHVlLFxyXG4gICAgICBjb21ib2JveExhYmVsOiBzZi5jb21ib2JveExhYmVsLFxyXG4gICAgICBjdXJyZW5jeTogc2YuY3VycmVuY3ksXHJcbiAgICAgIGlzRnJhY3Rpb246IHNmLmlzRnJhY3Rpb24sXHJcbiAgICAgIG51bU9mRGVjaW1hbDogc2YubnVtT2ZEZWNpbWFsXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIFRvRGlzcGxheVR5cGUodmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICBjYXNlIElucHV0VHlwZXMuREFURTogcmV0dXJuIERpc3BsYXlUeXBlcy5EQVRFX0RJU1BMQVk7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlcy5DSEVDS0JPWDogcmV0dXJuIERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZO1xyXG4gICAgICBjYXNlIElucHV0VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9JTlBVVDogcmV0dXJuIERpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVk7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlcy5DVVJSRU5DWV9PVEhFUl9JTlBVVDogcmV0dXJuIERpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZO1xyXG4gICAgICBjYXNlIElucHV0VHlwZXMuREVDSU1BTF9JTlBVVDogcmV0dXJuIERpc3BsYXlUeXBlcy5ERUNJTUFMX0RJU1BMQVk7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlcy5JTlRFR0VSOiByZXR1cm4gRGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWTtcclxuICAgICAgY2FzZSBJbnB1dFR5cGVzLlJBVEVfSU5QVVQ6IHJldHVybiBEaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZO1xyXG4gICAgICBjYXNlIElucHV0VHlwZXMuSU1BR0VfSU5QVVQ6IHJldHVybiBEaXNwbGF5VHlwZXMuSU1BR0VfRElTUExBWTtcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBUb0lucHV0VHlwZSh2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRBVEVfRElTUExBWTogcmV0dXJuIElucHV0VHlwZXMuREFURTtcclxuICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWTogcmV0dXJuIElucHV0VHlwZXMuQ0hFQ0tCT1g7XHJcbiAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTogcmV0dXJuIElucHV0VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9JTlBVVDtcclxuICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfRElTUExBWTogcmV0dXJuIElucHV0VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfSU5QVVQ7XHJcbiAgICAgIGNhc2UgRGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWTogcmV0dXJuIElucHV0VHlwZXMuREVDSU1BTF9JTlBVVDtcclxuICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZOiByZXR1cm4gSW5wdXRUeXBlcy5JTlRFR0VSO1xyXG4gICAgICBjYXNlIERpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVk6IHJldHVybiBJbnB1dFR5cGVzLlJBVEVfSU5QVVQ7XHJcbiAgICAgIGNhc2UgRGlzcGxheVR5cGVzLklNQUdFX0RJU1BMQVk6IHJldHVybiBJbnB1dFR5cGVzLklNQUdFX0lOUFVUO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpc1NldE9wZXJhdG9yKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvclR5cGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBvcGVyYXRvciA9PSBGaWx0ZXJPcGVyYXRvclR5cGUuSU4gfHwgb3BlcmF0b3IgPT0gRmlsdGVyT3BlcmF0b3JUeXBlLk5PVElOO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iXX0=
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktaGVscGVycy9maWx0ZXItaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE1BQU0sT0FBTyxZQUFZO0lBR2hCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBYztRQUN6QyxRQUFRLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDN0QsS0FBSyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztZQUNsRixLQUFLLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsY0FBYyxDQUFDO1lBQ3hGLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO1lBQ3BFLEtBQUssZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQy9ELEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDO1lBQ3JFLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDO1lBQ2xFLEtBQUssZUFBZSxDQUFD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VSxDQUFDLFFBQVEsQ0FBQztZQUMvRCxLQUFLLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDLHNCQUFzQixDQUFDO1lBQ3JGLEtBQUssWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUMsT0FBTyxVQUFVLENBQUMsb0JBQW9CLENBQUM7WUFDakYsS0FBSyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ25FLEtBQUssWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUM3RCxLQUFLLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDN0QsS0FBSyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUE0QjtRQUN2RCxPQUFPLFFBQVEsSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLElBQUksUUFBUSxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUNuRixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJNYXRjaE1vZGUgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcclxuaW1wb3J0IHsgRmlsdGVyT3BlcmF0b3JUeXBlLCBJbnB1dFR5cGVzLCBEaXNwbGF5VHlwZXMgfSBmcm9tIFwiLi4vZW51bXNcIjtcclxuaW1wb3J0IHsgSUFwcFNldHRpbmdzIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcclxuaW1wb3J0IHsgU2VhcmNoRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XHJcbmltcG9ydCB7IERlZmF1bHRTb2NpZXRlRGV2aXNlIH0gZnJvbSBcIi4uL2NvbnN0cy90c2ktY29uc3RzXCI7XHJcbmltcG9ydCB7IE9iamVjdEhlbHBlciB9IGZyb20gXCIuL29iamVjdC5oZWxwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJIZWxwZXIge1xyXG4gIHB1YmxpYyBzdGF0aWMgYXBwU2V0dGluZ3M6IElBcHBTZXR0aW5ncztcclxuXHJcbiAgcHVibGljIHN0YXRpYyBUb09wZXJhdG9yVHlwZSh2YWx1ZT86IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUzogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5FUVVBTDtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOX09SX0VRVUFMX1RPOiByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlLkxFU1NPUkVRVUFMO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE86IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuR1JFQVRFUk9SRVFVQUw7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLk5PVF9FUVVBTFM6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuTk9URVFVQUw7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxFU1NfVEhBTjogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5MRVNTO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU46IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuR1JFQVRFUjtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ09OVEFJTlM6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuQ09OVEFJTlM7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVM6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuREFURUlTO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TVEFSVFNfV0lUSDogcmV0dXJuIEZpbHRlck9wZXJhdG9yVHlwZS5TVEFSVFNXSVRIO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEg6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuRU5EU1dJVEg7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVNfTk9UOiByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlLkRBVEVJU05PVDtcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9CRUZPUkU6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuREFURUlTQkVGT1JFO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5EQVRFX0FGVEVSOiByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlLkRBVEVJU0FGVEVSO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5OT1RfQ09OVEFJTlM6IHJldHVybiBGaWx0ZXJPcGVyYXRvclR5cGUuTk9UQ09OVEFJTlM7XHJcbiAgICAgIGNhc2UgdW5kZWZpbmVkOiByZXR1cm4gRmlsdGVyT3BlcmF0b3JUeXBlLkVRVUFMO1xyXG4gICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ05vdCBTdXBwb3J0ZWQgZmlsdGVyIG9wZXJhdG9yJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGluaXRTZWFyY2hGaWVsZHMoc2VhcmNoRmllbGRzPzogU2VhcmNoRmllbGRbXSk6IFNlYXJjaEZpZWxkW10ge1xyXG4gICAgbGV0IG94U2VhcmNoRmllbGRzOiBTZWFyY2hGaWVsZFtdID0gW107XHJcbiAgICBpZiAoc2VhcmNoRmllbGRzKSB7XHJcbiAgICAgIHNlYXJjaEZpZWxkcy5mb3JFYWNoKHNmID0+IHtcclxuICAgICAgICB0aGlzLl9pbml0U2VhcmNoRmllbGREZWZhdWx0c0lmTnVsbE9yVW5kZWZpbmVkKHNmKTtcclxuXHJcbiAgICAgICAgbGV0IHRvTWluTWF4U2VhcmNoRmllbGRzOiBTZWFyY2hGaWVsZFtdID0gdGhpcy5faW5pdE1pbk1heFNlYXJjaEZpZWxkKHNmKTtcclxuXHJcbiAgICAgICAgb3hTZWFyY2hGaWVsZHMgPSBbLi4ub3hTZWFyY2hGaWVsZHMsIC4uLnRvTWluTWF4U2VhcmNoRmllbGRzXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3hTZWFyY2hGaWVsZHM7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gKiBOb3JtYWxpemVzIGFuZCBpbml0aWFsaXplcyBkZWZhdWx0IHZhbHVlcyBmb3IgYSB7QGxpbmsgU2VhcmNoRmllbGR9XHJcbiAqIHdoZW4gc29tZSBwcm9wZXJ0aWVzIGFyZSBudWxsIG9yIHVuZGVmaW5lZC5cclxuICpcclxuICogVGhpcyBtZXRob2QgZ3VhcmFudGVlcyBjb25zaXN0ZW50IGJlaGF2aW9yIHdoZW4gZHluYW1pY2FsbHkgYnVpbGRpbmdcclxuICogc2VhcmNoL2ZpbHRlciBVSSBjb21wb25lbnRzIGJ5IGVuZm9yY2luZyBzZW5zaWJsZSBkZWZhdWx0cy5cclxuICpcclxuICogQmVoYXZpb3I6XHJcbiAqIC0gSWYgdHlwZSA9PT0gU0VBUkNIX0NPTUJPOlxyXG4gKiAgICAtIG9wZXJhdG9yIGRlZmF1bHRzIHRvIElOIHdoZW4gdmFsdWUgaXMgbnVsbC91bmRlZmluZWQuXHJcbiAqICAgIC0gbXVsdGlwbGUgZGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIHRoZSBvcGVyYXRvciBpcyBhIHNldCBvcGVyYXRvciAoZS5nLiwgSU4pLlxyXG4gKiAtIEZvciBhbGwgb3RoZXIgdHlwZXM6XHJcbiAqICAgIC0gb3BlcmF0b3IgZGVmYXVsdHMgdG8gRVFVQUwgd2hlbiBub3QgZGVmaW5lZC5cclxuICogLSBzdHlsZUNsYXNzIGRlZmF1bHRzIHRvICdjb2wtMycgd2hlbiBlbXB0eSBvciBub3QgcHJvdmlkZWQuXHJcbiAqIC0gSWYgdHlwZSA9PT0gQ1VSUkVOQ1lfU09DSUVURV9JTlBVVDpcclxuICogICAgLSBjdXJyZW5jeSBkZWZhdWx0cyB0byB0aGUgY29tcGFueSBjdXJyZW5jeSBkZWZpbmVkIGluIGFwcCBzZXR0aW5ncyxcclxuICogICAgICBvciBmYWxscyBiYWNrIHRvIERlZmF1bHRTb2NpZXRlRGV2aXNlLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2YgVGhlIHtAbGluayBTZWFyY2hGaWVsZH0gaW5zdGFuY2UgdG8gbm9ybWFsaXplLlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSBwcm92aWRlZCBTZWFyY2hGaWVsZCBvYmplY3QgaW4gcGxhY2UuXHJcbiAqL1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbml0U2VhcmNoRmllbGREZWZhdWx0c0lmTnVsbE9yVW5kZWZpbmVkKHNmOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xyXG4gICAgaWYgKCFzZikgcmV0dXJuO1xyXG5cclxuICAgIGlmIChzZi50eXBlID09PSBJbnB1dFR5cGVzLlNFQVJDSF9DT01CT1xyXG4gICAgICAmJiAhKCd2YWx1ZScgaW4gc2YpKSB7XHJcbiAgICAgIGlmIChPYmplY3RIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoc2Yub3BlcmF0b3IpKSB7XHJcbiAgICAgICAgc2Yub3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvclR5cGUuSU47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChPYmplY3RIZWxwZXIuaXNOdWxsT3JVbmRlZmluZWQoc2YubXVsdGlwbGUpICYmIHNmLm9wZXJhdG9yICYmIHRoaXMuaXNTZXRPcGVyYXRvcihzZi5vcGVyYXRvcikpIHtcclxuICAgICAgICBzZi5tdWx0aXBsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKE9iamVjdEhlbHBlci5pc051bGxPclVuZGVmaW5lZChzZi5vcGVyYXRvcikpIHtcclxuICAgICAgc2Yub3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvclR5cGUuRVFVQUw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFzZi5zdHlsZUNsYXNzPy50cmltKCkpIHtcclxuICAgICAgc2Yuc3R5bGVDbGFzcyA9ICdjb2wtMyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNmLnR5cGUgPT0gSW5wdXRUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0lOUFVUKSB7XHJcbiAgICAgIHNmLmN1cnJlbmN5ID0gRmlsdGVySGVscGVyLmFwcFNldHRpbmdzLmRldmlzZVNvY2lldGUuY29kZURldmlzZSA/PyBEZWZhdWx0U29jaWV0ZURldmlzZS5jb2RlRGV2aXNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luaXRNaW5NYXhTZWFyY2hGaWVsZChzZjogU2VhcmNoRmllbGQpOiBTZWFyY2hGaWVsZFtdIHtcclxuICAgIGxldCBzZWFyY2hGaWVsZHM6IFNlYXJjaEZpZWxkW10gPSBbXTtcclxuICAgIGlmIChzZi5pc01heE1pbikge1xyXG4gICAgICAvL2NyZWF0ZSBNYXggZmlsdGVyXHJcbiAgICAgIGxldCBtYXhTRiA9IHRoaXMuX2Nsb25lU2VhcmNoRmllbGQoc2YpO1xyXG4gICAgICBtYXhTRi5vcGVyYXRvciA9IEZpbHRlck9wZXJhdG9yVHlwZS5MRVNTT1JFUVVBTDtcclxuICAgICAgbWF4U0YuaXNNYXhNaW4gPSBmYWxzZTtcclxuICAgICAgaWYgKG1heFNGLm1heExhYmVsVmFsdWUpIHtcclxuICAgICAgICBtYXhTRi5sYWJlbFZhbHVlID0gbWF4U0YubWF4TGFiZWxWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9jcmVhdGUgTWluIGZpbHRlclxyXG4gICAgICBsZXQgbWluU0YgPSB0aGlzLl9jbG9uZVNlYXJjaEZpZWxkKHNmKTtcclxuICAgICAgbWluU0Yub3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvclR5cGUuR1JFQVRFUk9SRVFVQUw7XHJcbiAgICAgIG1pblNGLmlzTWF4TWluID0gZmFsc2U7XHJcbiAgICAgIGlmIChtaW5TRi5taW5MYWJlbFZhbHVlKSB7XHJcbiAgICAgICAgbWluU0YubGFiZWxWYWx1ZSA9IG1pblNGLm1pbkxhYmVsVmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNlYXJjaEZpZWxkcyA9IFttaW5TRiwgbWF4U0ZdXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2VhcmNoRmllbGRzLnB1c2goc2YpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF9jbG9uZVNlYXJjaEZpZWxkKHNmOiBTZWFyY2hGaWVsZCk6IFNlYXJjaEZpZWxkIHtcclxuICAgIGxldCBjbG9uZTogU2VhcmNoRmllbGQgPSB7XHJcbiAgICAgIGZpZWxkOiBzZi5maWVsZCxcclxuICAgICAgbGFiZWxWYWx1ZTogc2YubGFiZWxWYWx1ZSxcclxuICAgICAgbWluTGFiZWxWYWx1ZTogc2YubWluTGFiZWxWYWx1ZSxcclxuICAgICAgbWF4TGFiZWxWYWx1ZTogc2YubWF4TGFiZWxWYWx1ZSxcclxuICAgICAgb3BlcmF0b3I6IHNmLm9wZXJhdG9yLFxyXG4gICAgICB2YWx1ZTogc2YudmFsdWUsXHJcbiAgICAgIGlzTWF4TWluOiBzZi5pc01heE1pbixcclxuICAgICAgbWF4VmFsdWU6IHNmLm1heFZhbHVlLFxyXG4gICAgICBtaW5WYWx1ZTogc2YubWluVmFsdWUsXHJcbiAgICAgIHR5cGU6IHNmLnR5cGUsXHJcbiAgICAgIHN0eWxlQ2xhc3M6IHNmLnN0eWxlQ2xhc3MsXHJcbiAgICAgIGlucHV0U3R5bGVDbGFzczogc2YuaW5wdXRTdHlsZUNsYXNzLFxyXG4gICAgICBsYWJlbFN0eWxlQ2xhc3M6IHNmLmxhYmVsU3R5bGVDbGFzcyxcclxuICAgICAgbGlzdFNvdXJjZVVybDogc2YubGlzdFNvdXJjZVVybCxcclxuICAgICAgZWxlbWVudFNvdXJjZVVybDogc2YuZWxlbWVudFNvdXJjZVVybCxcclxuICAgICAgbGFiZWxGaWVsZDogc2YubGFiZWxGaWVsZCxcclxuICAgICAgaWRGaWVsZDogc2YuaWRGaWVsZCxcclxuICAgICAgaXNGaWx0ZXJlZDogc2YuaXNGaWx0ZXJlZCxcclxuICAgICAgY29tYm9ib3hMYWJlbDogc2YuY29tYm9ib3hMYWJlbCxcclxuICAgICAgY3VycmVuY3k6IHNmLmN1cnJlbmN5LFxyXG4gICAgICBpc0ZyYWN0aW9uOiBzZi5pc0ZyYWN0aW9uLFxyXG4gICAgICBudW1PZkRlY2ltYWw6IHNmLm51bU9mRGVjaW1hbCxcclxuICAgICAgZGlzYWJsZWQ6IHNmLmRpc2FibGVkLFxyXG4gICAgICByZXF1aXJlZDogc2YucmVxdWlyZWQsXHJcbiAgICAgIGJ1c2luZXNzQ2xhc3M6IHNmLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgIHNob3dTZWFyY2hCdXR0b246IHNmLnNob3dTZWFyY2hCdXR0b24sXHJcbiAgICAgIHNob3dBZGRCdXR0b246IHNmLnNob3dBZGRCdXR0b24sXHJcbiAgICAgIHNob3dVcGRhdGVCdXR0b246IHNmLnNob3dVcGRhdGVCdXR0b24sXHJcbiAgICAgIHNob3dDb25zdWx0QnV0dG9uOiBzZi5zaG93Q29uc3VsdEJ1dHRvbixcclxuICAgICAgcmFkaW9CdXR0b25EYXRhc291cmNlOiBzZi5yYWRpb0J1dHRvbkRhdGFzb3VyY2UgPyBbLi4uc2YucmFkaW9CdXR0b25EYXRhc291cmNlXSA6IFtdLFxyXG4gICAgICBsYXlvdXRPcmllbnRhdGlvbjogc2YubGF5b3V0T3JpZW50YXRpb24sXHJcbiAgICAgIG11bHRpcGxlOiBzZi5tdWx0aXBsZSxcclxuICAgIH1cclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgVG9EaXNwbGF5VHlwZSh2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlcy5EQVRFOiByZXR1cm4gRGlzcGxheVR5cGVzLkRBVEVfRElTUExBWTtcclxuICAgICAgY2FzZSBJbnB1dFR5cGVzLkNIRUNLQk9YOiByZXR1cm4gRGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVk7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0lOUFVUOiByZXR1cm4gRGlzcGxheVR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfRElTUExBWTtcclxuICAgICAgY2FzZSBJbnB1dFR5cGVzLkNVUlJFTkNZX09USEVSX0lOUFVUOiByZXR1cm4gRGlzcGxheVR5cGVzLkNVUlJFTkNZX09USEVSX0RJU1BMQVk7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlcy5ERUNJTUFMX0lOUFVUOiByZXR1cm4gRGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWTtcclxuICAgICAgY2FzZSBJbnB1dFR5cGVzLklOVEVHRVI6IHJldHVybiBEaXNwbGF5VHlwZXMuSU5URUdFUl9ESVNQTEFZO1xyXG4gICAgICBjYXNlIElucHV0VHlwZXMuUkFURV9JTlBVVDogcmV0dXJuIERpc3BsYXlUeXBlcy5SQVRFX0RJU1BMQVk7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlcy5JTUFHRV9JTlBVVDogcmV0dXJuIERpc3BsYXlUeXBlcy5JTUFHRV9ESVNQTEFZO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIFRvSW5wdXRUeXBlKHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZOiByZXR1cm4gSW5wdXRUeXBlcy5EQVRFO1xyXG4gICAgICBjYXNlIERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZOiByZXR1cm4gSW5wdXRUeXBlcy5DSEVDS0JPWDtcclxuICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9ESVNQTEFZOiByZXR1cm4gSW5wdXRUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0lOUFVUO1xyXG4gICAgICBjYXNlIERpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZOiByZXR1cm4gSW5wdXRUeXBlcy5DVVJSRU5DWV9PVEhFUl9JTlBVVDtcclxuICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZOiByZXR1cm4gSW5wdXRUeXBlcy5ERUNJTUFMX0lOUFVUO1xyXG4gICAgICBjYXNlIERpc3BsYXlUeXBlcy5JTlRFR0VSX0RJU1BMQVk6IHJldHVybiBJbnB1dFR5cGVzLklOVEVHRVI7XHJcbiAgICAgIGNhc2UgRGlzcGxheVR5cGVzLlJBVEVfRElTUExBWTogcmV0dXJuIElucHV0VHlwZXMuUkFURV9JTlBVVDtcclxuICAgICAgY2FzZSBEaXNwbGF5VHlwZXMuSU1BR0VfRElTUExBWTogcmV0dXJuIElucHV0VHlwZXMuSU1BR0VfSU5QVVQ7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzU2V0T3BlcmF0b3Iob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG9wZXJhdG9yID09IEZpbHRlck9wZXJhdG9yVHlwZS5JTiB8fCBvcGVyYXRvciA9PSBGaWx0ZXJPcGVyYXRvclR5cGUuTk9USU47XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==
|