@eqproject/eqp-dynamic-module 2.9.31 → 2.9.32
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/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +15 -3
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +65 -42
- package/esm2020/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.mjs +5 -3
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +41 -4
- package/esm2020/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +10 -3
- package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +12 -6
- package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +12 -6
- package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +10 -4
- package/esm2020/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +10 -3
- package/esm2020/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +9 -2
- package/esm2020/lib/models/dynamicModuleFilterResultViewModeEnum.model.mjs +2 -1
- package/esm2020/lib/models/dynamicModuleViewModeEnum.mjs +2 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +177 -60
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +177 -60
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +5 -1
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +6 -1
- package/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.d.ts +2 -1
- package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +7 -2
- package/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.d.ts +2 -1
- package/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.d.ts +2 -1
- package/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.d.ts +2 -1
- package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +2 -1
- package/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.d.ts +2 -1
- package/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.d.ts +2 -1
- package/lib/models/dynamicModuleFilterResultViewModeEnum.model.d.ts +2 -1
- package/lib/models/dynamicModuleViewModeEnum.d.ts +2 -1
- package/package.json +1 -1
|
@@ -52,6 +52,7 @@ export class EqpDynamicModuleComponent {
|
|
|
52
52
|
this.showNewSearchButton = true;
|
|
53
53
|
this.selectedRecord = null;
|
|
54
54
|
this.isDraggableListView = true;
|
|
55
|
+
this.Statistic = null;
|
|
55
56
|
this.context = new Context();
|
|
56
57
|
/**
|
|
57
58
|
* Url del server da chiamare per recuperare, salvare o eliminare i record.
|
|
@@ -92,6 +93,7 @@ export class EqpDynamicModuleComponent {
|
|
|
92
93
|
this.clickDragIndicator = new EventEmitter();
|
|
93
94
|
this.out = new EventEmitter();
|
|
94
95
|
this.fireTrigger = new EventEmitter();
|
|
96
|
+
this.afterOutputExternalFilters = new EventEmitter();
|
|
95
97
|
this.form = new Form();
|
|
96
98
|
this.lastform = new Form();
|
|
97
99
|
this.FormTypeEnum = FormTypeEnum;
|
|
@@ -102,6 +104,9 @@ export class EqpDynamicModuleComponent {
|
|
|
102
104
|
async ngOnInit() {
|
|
103
105
|
GlobalService.debugMode = this.debugMode;
|
|
104
106
|
this.onBackTo = (this.onBackTo == null) ? this.starterViewMode : this.onBackTo;
|
|
107
|
+
if (this.viewMode == DynamicModuleViewModeEnum.EXTERNAL_FILTER) {
|
|
108
|
+
this.filterResultViewMode = DynamicModuleFilterResultViewModeEnum.FILTERS_ONLY;
|
|
109
|
+
}
|
|
105
110
|
this.dynamicModuleCompileConfig = new DynamicModuleCompileConfig(this.showTitle, this.showSaveButton, this.showBackButton, this.userID, this.additionalParams, this.additionalInfo, this.prefilterParams, this.showNewSearchButton);
|
|
106
111
|
this.dynamicModuleListConfig = new DynamicModuleListConfig(this.showTitle, this.values, this.defaultListActions, this.userID, new Array(), this.updateInfo, this.listViewRecordTitle, this.isDraggableListView);
|
|
107
112
|
this.dynamicModuleRepairConfig = new DynamicModuleRepairConfig(this.FormJSON);
|
|
@@ -435,12 +440,15 @@ export class EqpDynamicModuleComponent {
|
|
|
435
440
|
reloadHTMLReadableValues(answerId) {
|
|
436
441
|
this.listViewFormRecord.reloadHTMLReadableValues(answerId);
|
|
437
442
|
}
|
|
443
|
+
onAfterOutputExternalFilters(ev) {
|
|
444
|
+
this.afterOutputExternalFilters.emit(ev);
|
|
445
|
+
}
|
|
438
446
|
}
|
|
439
447
|
EqpDynamicModuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EqpDynamicModuleComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
440
|
-
EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", orgaID: "orgaID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", formulaObject: "formulaObject", externalButtons: "externalButtons", actionButtons: "actionButtons", listViewRecordTitle: "listViewRecordTitle", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", additionalInfo: "additionalInfo", updateInfo: "updateInfo", prefilterParams: "prefilterParams", showNewSearchButton: "showNewSearchButton", answerToDuplicateId: "answerToDuplicateId", highlightFilter: "highlightFilter", selectedRecord: "selectedRecord", isDraggableListView: "isDraggableListView", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", dragStarted: "dragStarted", dragReleased: "dragReleased", clickDragIndicator: "clickDragIndicator", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "listViewFormRecord", first: true, predicate: ["listViewFormRecord"], descendants: true }], ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i4.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i5.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: i6.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i7.ViewFormRecordComponent, selector: "view-form-record", inputs: ["endPointConfiguration", "record", "showBackButton", "actionButtons"], outputs: ["goBackEvent"] }, { kind: "component", type: i8.SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: i9.RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["configurations", "formID", "endPointConfiguration"], outputs: ["onSaveJson"] }, { kind: "component", type: i10.FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["configurations", "endPointConfiguration", "userID", "externalButtons", "actionButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode"], outputs: ["fireTrigger", "saveRecordEvent", "afterSaveRecordEvent", "afterFilter"] }, { kind: "component", type: i11.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
|
|
448
|
+
EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", orgaID: "orgaID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", formulaObject: "formulaObject", externalButtons: "externalButtons", actionButtons: "actionButtons", listViewRecordTitle: "listViewRecordTitle", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", additionalInfo: "additionalInfo", updateInfo: "updateInfo", prefilterParams: "prefilterParams", showNewSearchButton: "showNewSearchButton", answerToDuplicateId: "answerToDuplicateId", highlightFilter: "highlightFilter", selectedRecord: "selectedRecord", isDraggableListView: "isDraggableListView", Statistic: "Statistic", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", dragStarted: "dragStarted", dragReleased: "dragReleased", clickDragIndicator: "clickDragIndicator", out: "out", fireTrigger: "fireTrigger", afterOutputExternalFilters: "afterOutputExternalFilters" }, viewQueries: [{ propertyName: "listViewFormRecord", first: true, predicate: ["listViewFormRecord"], descendants: true }], ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && (viewMode == dynamicModuleViewModeEnum.FILTER || viewMode == dynamicModuleViewModeEnum.EXTERNAL_FILTER)\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n [Statistic]=\"Statistic\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n (afterOutputExternalFilters)=\"onAfterOutputExternalFilters($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i4.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i5.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: i6.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i7.ViewFormRecordComponent, selector: "view-form-record", inputs: ["endPointConfiguration", "record", "showBackButton", "actionButtons"], outputs: ["goBackEvent"] }, { kind: "component", type: i8.SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: i9.RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["configurations", "formID", "endPointConfiguration"], outputs: ["onSaveJson"] }, { kind: "component", type: i10.FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["configurations", "endPointConfiguration", "userID", "externalButtons", "actionButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode", "Statistic"], outputs: ["fireTrigger", "saveRecordEvent", "afterSaveRecordEvent", "afterFilter", "afterOutputExternalFilters"] }, { kind: "component", type: i11.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
|
|
441
449
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EqpDynamicModuleComponent, decorators: [{
|
|
442
450
|
type: Component,
|
|
443
|
-
args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
|
|
451
|
+
args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && (viewMode == dynamicModuleViewModeEnum.FILTER || viewMode == dynamicModuleViewModeEnum.EXTERNAL_FILTER)\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n [Statistic]=\"Statistic\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n (afterOutputExternalFilters)=\"onAfterOutputExternalFilters($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
|
|
444
452
|
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { debugMode: [{
|
|
445
453
|
type: Input
|
|
446
454
|
}], configurations: [{
|
|
@@ -499,6 +507,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
499
507
|
type: Input
|
|
500
508
|
}], isDraggableListView: [{
|
|
501
509
|
type: Input
|
|
510
|
+
}], Statistic: [{
|
|
511
|
+
type: Input
|
|
502
512
|
}], QueryEditorComponent: [{
|
|
503
513
|
type: Input
|
|
504
514
|
}], saveRecord: [{
|
|
@@ -523,8 +533,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
523
533
|
type: Output
|
|
524
534
|
}], fireTrigger: [{
|
|
525
535
|
type: Output
|
|
536
|
+
}], afterOutputExternalFilters: [{
|
|
537
|
+
type: Output
|
|
526
538
|
}], listViewFormRecord: [{
|
|
527
539
|
type: ViewChild,
|
|
528
540
|
args: ['listViewFormRecord', { static: false }]
|
|
529
541
|
}] } });
|
|
530
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RGLE9BQU8sRUFHTCxhQUFhLEdBQ2QsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXRILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFD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b0JBQW9CO3NCQUE1QixLQUFLO2dCQStCSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRTZDLGtCQUFrQjtzQkFBckUsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bVwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uLCBGaXJlVHJpZ2dlciwgVHJpZ2dlciB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaXN0Vmlld0Zvcm1SZWNvcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9saXN0LXZpZXctZm9ybS1yZWNvcmQvbGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpZWxkRXh0cmFDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2ZpZWxkRXh0cmFDb25maWcubW9kZWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVxcC1keW5hbWljLW1vZHVsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxcER5bmFtaWNNb2R1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWc7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZztcclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGFydGVyVmlld01vZGU6IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1Q7XHJcblxyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nID0gXCIwXCI7XHJcbiAgQElucHV0KCkgb3JnYUlEOiBzdHJpbmcgPSBcIjBcIjsgIFxyXG4gIEBJbnB1dCgpIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSB2YWx1ZXM6IEFycmF5PFJlY29yZD4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIEZvcm1KU09OID0gXCJcIjtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTsgLy8gcmFwcHJlc2VudGEgaWwgY29udGVzdG8gZGVsbGEgcGlhdHRhZm9ybWEgY2hpYW1hbnRlIHBlciBsYSB2YWx1dGF6aW9uZSBkZWxsZSBmb3JtdWxlLiBFc2VtcGlvOiB7Y3Vycm9sZTogcm9sZSwgdXNlcjogdXNlciwgbWVkaWNhbDogbWVkaWNhbGV4YW1pbmF0aW9ufVxyXG4gIEBJbnB1dCgpIGV4dGVybmFsQnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogQXJyYXk8QWN0aW9uQnV0dG9uPiA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgQElucHV0KCkgbGlzdFZpZXdSZWNvcmRUaXRsZTogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KCk7XHJcbiAgQElucHV0KCkgb25TYXZlQmFja1RvTGlzdCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG9uQmFja1RvOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gbnVsbDtcclxuICBASW5wdXQoKSBmaWx0ZXJSZXN1bHRWaWV3TW9kZTogRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bSA9IER5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0uSU5URVJOQUxfRVFQVEFCTEU7XHJcbiAgQElucHV0KCkgYWRkaXRpb25hbFBhcmFtczogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBhZGRpdGlvbmFsSW5mbzogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSB1cGRhdGVJbmZvOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHByZWZpbHRlclBhcmFtczogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBzaG93TmV3U2VhcmNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbnN3ZXJUb0R1cGxpY2F0ZUlkOiBhbnk7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSZWNvcmQ6IFJlY29yZCB8IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgaXNEcmFnZ2FibGVMaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IGFueTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcbiAgLyoqXHJcbiAgICogVXJsIGRlbCBzZXJ2ZXIgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUsIHNhbHZhcmUgbyBlbGltaW5hcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBkZWZhdWx0IGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRva2VuIGRhIHVzYXJlIG5lZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBzb2xvIHNlIHZpZW5lIHBvcG9sYXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIuXHJcbiAgICovXHJcbiAgdXNlclRva2VuOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSBkYXRpLlxyXG4gICAqIFB1w7IgZXNzZXJlIGRlZmluaXRhIGRhbGwndXRlbnRlIG9wcHVyZSBsYXNjaWF0YSBudWxsLCB2aWVuZSBwb3BvbGF0YSBjb24gZGVpXHJcbiAgICogdmFsb3JpIGRpIGRlZmF1bHQgc2UgdmllbmUgdmFsb3JpenphdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiBhbHRyaW1lbnRpXHJcbiAgICogdmllbmUgbGFzY2lhdGEgbnVsbCBlIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGFsIHNlcnZlci5cclxuICAgKi9cclxuICBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG51bGw7XHJcblxyXG4gIC8vQElucHV0KCkgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgLy8gZGVmYXVsdExpc3RBY3Rpb25zOiBkeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9IG5ldyBkeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIC8vIEZvcm1KU09OOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudGkgZW1lc3NpIHF1YW5kbyBzaSBzYWx2YSwgZWxpbWluYSBvIGR1cGxpY2EgdW4gcmVjb3JkXHJcbiAgICogc2Ugbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIFNhdmVKU09OOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlckZpbHRlcjogRXZlbnRFbWl0dGVyPEFycmF5PER5blJlY29yZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxEeW5SZWNvcmQ+PigpO1xyXG4gIC8qKlxyXG4gICAqIEV2ZW50aSBlbWVzc2kgRE9QTyBhdmVyIGVzZWd1aXRvIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGVyIGlsIHNhbHZhdGFnZ2lvLFxyXG4gICAqIGwnZWxpbWluYXppb25lIG8gbGEgZHVwbGljYXppb25lIGRpIHVuIHJlY29yZCBhbGwnZW5kcG9pbnQgc3BlY2lmaWNhdG8uXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGFmdGVyU2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJEZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBkcmFnU3RhcnRlZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZHJhZ1JlbGVhc2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRHJhZ0luZGljYXRvcjogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgIFxyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2xpc3RWaWV3Rm9ybVJlY29yZCcsIHsgc3RhdGljOiBmYWxzZSB9KSBsaXN0Vmlld0Zvcm1SZWNvcmQ6IExpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudDtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgbGFzdGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuICBvbmx5VmlldzogYm9vbGVhbjtcclxuICB2aWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuICBkZWZhdWx0Vmlld01vZGU6IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW07XHJcblxyXG4gIGR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBkeW5hbWljTW9kdWxlTGlzdENvbmZpZzogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZzogRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZztcclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z01vZGUgPSB0aGlzLmRlYnVnTW9kZTtcclxuXHJcbiAgICB0aGlzLm9uQmFja1RvID0gKHRoaXMub25CYWNrVG8gPT0gbnVsbCkgPyB0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA6IHRoaXMub25CYWNrVG87XHJcblxyXG4gICAgdGhpcy5keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyhcclxuICAgICAgdGhpcy5zaG93VGl0bGUsXHJcbiAgICAgIHRoaXMuc2hvd1NhdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24sXHJcbiAgICAgIHRoaXMudXNlcklELFxyXG4gICAgICB0aGlzLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIHRoaXMuYWRkaXRpb25hbEluZm8sXHJcbiAgICAgIHRoaXMucHJlZmlsdGVyUGFyYW1zLFxyXG4gICAgICB0aGlzLnNob3dOZXdTZWFyY2hCdXR0b25cclxuICAgICk7XHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnKFxyXG4gICAgICB0aGlzLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy52YWx1ZXMsXHJcbiAgICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLFxyXG4gICAgICB0aGlzLnVzZXJJRCxcclxuICAgICAgbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKSxcclxuICAgICAgdGhpcy51cGRhdGVJbmZvLFxyXG4gICAgICB0aGlzLmxpc3RWaWV3UmVjb3JkVGl0bGUsXHJcbiAgICAgIHRoaXMuaXNEcmFnZ2FibGVMaXN0Vmlld1xyXG4gICAgKTtcclxuICAgIHRoaXMuZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnKFxyXG4gICAgICB0aGlzLkZvcm1KU09OXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29uZmlndXJhdGlvbnMuY29udGV4dDtcclxuICAgIHRoaXMuYmFzZVNlcnZlclVybCA9IHRoaXMuY29uZmlndXJhdGlvbnMuYmFzZVNlcnZlclVybDtcclxuICAgIHRoaXMudXNlclRva2VuID0gdGhpcy5jb25maWd1cmF0aW9ucy51c2VyVG9rZW47XHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgLy90aGlzLmZvcm1JRCA9IHRoaXMuY29uZmlndXJhdGlvbnMuZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcuZm9ybUlEXHJcblxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlXHJcbiAgICBVdGlsaXR5SGVscGVyU2VydmljZS5TZXRDb250ZXh0KHRoaXMuY29udGV4dCk7XHJcbiAgICBcclxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpO1xyXG5cclxuICAgIGlmICh0aGlzLkZvcm1KU09OID09IFwiXCIpIHtcclxuICAgICAgLy8gcHJlbmRlIGlsIGZvcm0gZSBpbXBvc3RhIGxhIHZpZXdtb2RlIGNvcnJldHRhXHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLnZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGU7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIiwgdGhpcy5keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZylcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgIGlmICh0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEUgfHwgdGhpcy5zdGFydGVyVmlld01vZGUgPT0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5GSUxURVIpIHtcclxuICAgICAgLy8gZGEgdmVkZXJlIGluIGdldEZvcm1CeUlEXHJcbiAgICAgIHRoaXMuZGVmYXVsdFZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkKG51bGwpLCAxMDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KF8gPT4geyB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gIC8vICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgLy8gICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgLy8gICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gIC8vICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAvLyAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgLy8gICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAvLyAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gIC8vICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5sYXN0Zm9ybSA9IHJlcztcclxuICAvLyAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgLy8gICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuXHJcbiAgLy8gICAgICAgLy8gaWYgKHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRSkge1xyXG4gIC8vICAgICAgIC8vICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkKG51bGwpO1xyXG4gIC8vICAgICAgIC8vIH1cclxuICAvLyAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGU7XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIChlcnIpID0+IHt9XHJcbiAgLy8gICApO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBnbGkgZW5kcG9pbnQgZGEgdXNhcmUgZGkgZGVmYXVsdCBhIHBhcnRpcmUgZGFsbCd1cmwgYmFzZSBkZWwgc2VydmVyXHJcbiAgICogYSBjdWkgc2kgZGV2ZSBjb25uZXR0ZXJlIGUgYWwgdG9rZW4gZGEgcGFzc2FyZSBwZXIgYXV0ZW50aWNhcnNpLlxyXG4gICAqIFNlIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgw6ggbnVsbCBlIG5vbiBzb25vIHN0YXRpIGNvbmZpZ3VyYXRpIGkgdmFyaSBlbmRwb2ludCBhbGxvcmFcclxuICAgKiBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBodHRwIHBlciByZWN1cGVyYXJlL3NhbHZhcmUgaSBkYXRpLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmIHRoaXMuYmFzZVNlcnZlclVybCkge1xyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiA9XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5Db25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKFxyXG4gICAgICAgICAgdGhpcy5iYXNlU2VydmVyVXJsLFxyXG4gICAgICAgICAgdGhpcy51c2VyVG9rZW5cclxuICAgICAgICApOyAgICBcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgLy8gYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludFxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgLy8gICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgLy8gICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgXTtcclxuICAgIC8vICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAvLyAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgLy8gICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAvLyAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgLy8gICAgICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgIC8vICAgICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gci5BbnN3ZXJEYXRlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkdvQmFjaygpe1xyXG4gICAgdGhpcy52aWV3TW9kZSA9IHRoaXMub25CYWNrVG8gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uQWRkVmlld0VkaXRSZWNvcmQoZXZlbnQ6IHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0pIHtcclxuXHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJWZXJzaW9uIG1vZHVsb1wiLCBldmVudC5yZWNvcmQuVmVyc2lvbilcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInF1ZXJ5IHBhcmFtc1wiLCBkeW5hbWljTW9kdWxlUGFyYW1zKVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucztcclxuXHJcbiAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJSRVNcIiwgcmVzKVxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUmVjb3JkIGFzIFJlY29yZCkuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RlZFJlY29yZCBhcyBSZWNvcmQpLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRSZWNvcmQgYXMgUmVjb3JkKS51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRSZWNvcmQgYXMgUmVjb3JkKS5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuZGVmYXVsdFZpZXdNb2RlO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmVjb3JkICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPT09IFwic3RyaW5nXCIpe1xyXG5cclxuICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnNlbGVjdGVkUmVjb3JkLFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUmVjb3JkIGFzIFJlY29yZCkuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUmVjb3JkIGFzIFJlY29yZCkuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUmVjb3JkIGFzIFJlY29yZCkudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRSZWNvcmQgYXMgUmVjb3JkKS5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLmRlZmF1bHRWaWV3TW9kZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic3VjY2VzcyBSdW5FbmRQb2ludENhbGxcIixyZXMsdGhpcy5kZWZhdWx0Vmlld01vZGUpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgICAgfSAgICAgICBcclxuXHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmFuc3dlclRvRHVwbGljYXRlSWQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSB0aGlzLmFuc3dlclRvRHVwbGljYXRlSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEdXBsaWNhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uVmlld1JlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSByZWNvcmRcclxuICAgICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uVklFV1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRydWVcclxuXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFNBVkVcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgaWwgY29tcG9uZW50ZSBkb3BvIGNoZSBpbCByZWNvcmQgw6ggc3RhdG8gYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIHNhbHZhcmUuXHJcbiAgICovXHJcbiAgb25TYXZlUmVjb3JkKGV2ZW50OiBSZWNvcmQpIHtcclxuICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmQuZW1pdChldmVudCk7XHJcbiAgICAvLyBpZiAodGhpcy5vblNhdmVCYWNrVG9MaXN0KSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1Q7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5OT05FO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy52aWV3TW9kZSA9IHRoaXMub25CYWNrVG9cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBpbCBjb21wb25lbnRlIGRvcG8gY2hlIGUgc3RhdGEgcmljaGllc3RhIHVuYSBhZ2dpdW50byBvIHVuYSBtb2RpZmljYSBkZWwgcmVjb3JkIG5lbGwnIGFkZC1mb3JtLXJlY29yZC5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uQWZ0ZXJTYXZlUmVjb3JkKGV2ZW50OiBSZWNvcmQpIHtcclxuICAgIHRoaXMuYWZ0ZXJTYXZlUmVjb3JkLmVtaXQoZXZlbnQpO1xyXG4gICAgLy8gaWYgKHRoaXMub25TYXZlQmFja1RvTGlzdCkge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTk9ORTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvXHJcbiAgfVxyXG5cclxuXHJcbiAgb25TYXZlSnNvbihyZWNvcmQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5TYXZlSlNPTi5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gU0FWRVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHJlbG9hZCgpe1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IHRoaXMubG9hZGVyID0gdHJ1ZSxcclxuICAgICAgNTBcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBERUxFVEUgXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgb25EZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EZWxldGVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgICAgXCJFbGltaW5hcmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogcmVjb3JkLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkRlbGV0ZUVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnJlbG9hZFRhYmxlcygpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25BZnRlckRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nT25Jbml0KCksIDUwIClcclxuICAgIHRoaXMuYWZ0ZXJEZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlZG5yZWdpb24gREVMRVRFIFxyXG5cclxuICBvbkFmdGVyRmlsdGVyKGV2KXtcclxuICAgIHRoaXMuYWZ0ZXJGaWx0ZXIuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydGVkKGVsOiBhbnkpe1xyXG4gICAgdGhpcy5kcmFnU3RhcnRlZC5lbWl0KGVsKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ1JlbGVhc2VkKCl7XHJcbiAgICB0aGlzLmRyYWdSZWxlYXNlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRHJhZ0luZGljYXRvcihlbDogYW55KXtcclxuICAgIHRoaXMuY2xpY2tEcmFnSW5kaWNhdG9yLmVtaXQoZWwpO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpe1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcil7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgLyoqIHV0aWxpenphdG8gaW4gVE1FRCAqLyBcclxuICByZWxvYWRIVE1MUmVhZGFibGVWYWx1ZXMoYW5zd2VySWQ6IHN0cmluZyl7XHJcbiAgICB0aGlzLmxpc3RWaWV3Rm9ybVJlY29yZC5yZWxvYWRIVE1MUmVhZGFibGVWYWx1ZXMoYW5zd2VySWQpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG48IS0tIFtyZWNvcmRdPVwiJ2IzZDk0M2MwLTljMDEtNDk3My05NDhiLTdhYTQxODYzNGY3MidcIiAtLT5cclxuPHZpZXctZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtdmlld1wiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIChnb0JhY2tFdmVudCk9XCJvbkdvQmFjaygpXCJcclxuICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuPlxyXG48L3ZpZXctZm9ybS1yZWNvcmQ+XHJcblxyXG48Z3JhcGhzXHJcbipuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uR1JBUEhTXCJcclxuY2xhc3M9XCJkeW5hbWljLW1vZHVsZS12aWV3XCJcclxuW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5bZm9ybV09XCJmb3JtXCJcclxuW2Zvcm1JRF09XCJmb3JtSURcIlxyXG5bdXNlcklEXT1cInVzZXJJRFwiXHJcblthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG5bY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG4oZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuPlxyXG48L2dyYXBocz5cclxuXHJcbjxmaWx0ZXItZm9ybS1zdGF0aXN0aWNcclxuKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5GSUxURVJcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29tcGlsZVwiXHJcbiAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgW2RlZmF1bHRMaXN0QWN0aW9uc109XCJkZWZhdWx0TGlzdEFjdGlvbnNcIlxyXG4gIFtmaWx0ZXJSZXN1bHRWaWV3TW9kZV09XCJmaWx0ZXJSZXN1bHRWaWV3TW9kZVwiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICAoYWZ0ZXJGaWx0ZXIpPVwib25BZnRlckZpbHRlcigkZXZlbnQpXCJcclxuICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuPlxyXG48L2ZpbHRlci1mb3JtLXN0YXRpc3RpYz5cclxuXHJcbjxhZGQtZm9ybS1yZWNvcmRcclxuKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gIFtmb3JtXT1cImZvcm1cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRlXCJcclxuICBbc2hvd1RpdGxlXT1cInNob3dUaXRsZVwiXHJcblxyXG4gIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcblxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZ1wiXHJcblxyXG4gIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbj5cclxuPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG48bGlzdC1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVFwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1saXN0XCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcblxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuICBbZXh0ZXJuYWxCdXR0b25zXT1cImV4dGVybmFsQnV0dG9uc1wiXHJcbiAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcblxyXG4gIChvblZpZXdSZWNvcmQpPVwib25WaWV3UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFkZFZpZXdFZGl0UmVjb3JkKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRGVsZXRlUmVjb3JkKT1cIm9uRGVsZXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFmdGVyRGVsZXRlUmVjb3JkKT1cIm9uQWZ0ZXJEZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcblxyXG4gIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4+XHJcbjwvbGlzdC1mb3JtLXJlY29yZD5cclxuXHJcbjxobGlzdC1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uSExJU1RcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtaGxpc3RcIlxyXG4gIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCJcclxuXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUxpc3RDb25maWdcIlxyXG4gIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuXHJcbiAgKG9uVmlld1JlY29yZCk9XCJvblZpZXdSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdFJlY29yZCgkZXZlbnQpXCJcclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWZ0ZXJEZWxldGVSZWNvcmQpPVwib25BZnRlckRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuPlxyXG48L2hsaXN0LWZvcm0tcmVjb3JkPlxyXG5cclxuPHJlcGFpci1mb3JtLWZpZWxkc1xyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uUkVQQUlSXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLXJlcGFpclwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZ1wiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5cclxuICAob25TYXZlSnNvbik9XCJvblNhdmVKc29uKCRldmVudClcIlxyXG4+XHJcbjwvcmVwYWlyLWZvcm0tZmllbGRzPlxyXG5cclxuPGxpc3Qtdmlldy1mb3JtLXJlY29yZFxyXG4gICNsaXN0Vmlld0Zvcm1SZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1RXSUVXXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuICBbY29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXHJcblxyXG4gIFtkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbl09XCJkZWZhdWx0TGlzdFZpZXdGdW5jdGlvblwiXHJcbiAgW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIFxyXG4gIFtoaWdobGlnaHRGaWx0ZXJdPVwiaGlnaGxpZ2h0RmlsdGVyXCJcclxuICBbb25seVZpZXddPVwiIWRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0XCJcclxuICBcclxuICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG5cclxuICAob25BZGRWaWV3RWRpdFJlY29yZCk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkRlbGV0ZVJlY29yZCk9XCJvbkRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGRyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXHJcbiAgKGRyYWdSZWxlYXNlZCk9XCJvbkRyYWdSZWxlYXNlZCgpXCJcclxuICAoY2xpY2tEcmFnSW5kaWNhdG9yKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKCRldmVudClcIlxyXG4gIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gID5cclxuPC9saXN0LXZpZXctZm9ybS1yZWNvcmQ+XHJcbiJdfQ==
|
|
542
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RGLE9BQU8sRUFHTCxhQUFhLEdBQ2QsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXRILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFD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QUFRO3NCQUFoQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQStCSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUU2QyxrQkFBa0I7c0JBQXJFLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvY29udGV4dC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW1cIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybSwgRm9ybVR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiwgRmlyZVRyaWdnZXIsIFRyaWdnZXIgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlzdFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXJTdGF0aXN0aWMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVxcC1keW5hbWljLW1vZHVsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxcER5bmFtaWNNb2R1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWc7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZztcclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGFydGVyVmlld01vZGU6IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1Q7XHJcblxyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nID0gXCIwXCI7XHJcbiAgQElucHV0KCkgb3JnYUlEOiBzdHJpbmcgPSBcIjBcIjsgIFxyXG4gIEBJbnB1dCgpIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSB2YWx1ZXM6IEFycmF5PFJlY29yZD4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIEZvcm1KU09OID0gXCJcIjtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTsgLy8gcmFwcHJlc2VudGEgaWwgY29udGVzdG8gZGVsbGEgcGlhdHRhZm9ybWEgY2hpYW1hbnRlIHBlciBsYSB2YWx1dGF6aW9uZSBkZWxsZSBmb3JtdWxlLiBFc2VtcGlvOiB7Y3Vycm9sZTogcm9sZSwgdXNlcjogdXNlciwgbWVkaWNhbDogbWVkaWNhbGV4YW1pbmF0aW9ufVxyXG4gIEBJbnB1dCgpIGV4dGVybmFsQnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uczogQXJyYXk8QWN0aW9uQnV0dG9uPiA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgQElucHV0KCkgbGlzdFZpZXdSZWNvcmRUaXRsZTogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KCk7XHJcbiAgQElucHV0KCkgb25TYXZlQmFja1RvTGlzdCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG9uQmFja1RvOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gbnVsbDtcclxuICBASW5wdXQoKSBmaWx0ZXJSZXN1bHRWaWV3TW9kZTogRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bSA9IER5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0uSU5URVJOQUxfRVFQVEFCTEU7XHJcbiAgQElucHV0KCkgYWRkaXRpb25hbFBhcmFtczogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBhZGRpdGlvbmFsSW5mbzogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSB1cGRhdGVJbmZvOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHByZWZpbHRlclBhcmFtczogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBzaG93TmV3U2VhcmNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbnN3ZXJUb0R1cGxpY2F0ZUlkOiBhbnk7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSZWNvcmQ6IFJlY29yZCB8IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgaXNEcmFnZ2FibGVMaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgU3RhdGlzdGljOiBGaWx0ZXJTdGF0aXN0aWMgPSBudWxsO1xyXG4gIFxyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBhbnk7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcblxyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG5cclxuICAvL0BJbnB1dCgpIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIC8vIGRlZmF1bHRMaXN0QWN0aW9uczogZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICAvLyBGb3JtSlNPTjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRpIGVtZXNzaSBxdWFuZG8gc2kgc2FsdmEsIGVsaW1pbmEgbyBkdXBsaWNhIHVuIHJlY29yZFxyXG4gICAqIHNlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBTYXZlSlNPTjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJGaWx0ZXI6IEV2ZW50RW1pdHRlcjxBcnJheTxEeW5SZWNvcmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4oKTtcclxuICAvKipcclxuICAgKiBFdmVudGkgZW1lc3NpIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpbyxcclxuICAgKiBsJ2VsaW1pbmF6aW9uZSBvIGxhIGR1cGxpY2F6aW9uZSBkaSB1biByZWNvcmQgYWxsJ2VuZHBvaW50IHNwZWNpZmljYXRvLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdSZWxlYXNlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBjbGlja0RyYWdJbmRpY2F0b3I6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7ICBcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlck91dHB1dEV4dGVybmFsRmlsdGVyczogRXZlbnRFbWl0dGVyPEZpbHRlclN0YXRpc3RpYz4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclN0YXRpc3RpYz4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbGlzdFZpZXdGb3JtUmVjb3JkJywgeyBzdGF0aWM6IGZhbHNlIH0pIGxpc3RWaWV3Rm9ybVJlY29yZDogTGlzdFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50O1xyXG5cclxuICBmb3JtOiBGb3JtID0gbmV3IEZvcm0oKTtcclxuICBsYXN0Zm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgRm9ybVR5cGVFbnVtID0gRm9ybVR5cGVFbnVtO1xyXG4gIGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtO1xyXG4gIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIHZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtO1xyXG4gIGRlZmF1bHRWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuXHJcbiAgZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIGR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnOiBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdNb2RlID0gdGhpcy5kZWJ1Z01vZGU7XHJcblxyXG4gICAgdGhpcy5vbkJhY2tUbyA9ICh0aGlzLm9uQmFja1RvID09IG51bGwpID8gdGhpcy5zdGFydGVyVmlld01vZGUgOiB0aGlzLm9uQmFja1RvO1xyXG5cclxuICAgIGlmICh0aGlzLnZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uRVhURVJOQUxfRklMVEVSKXtcclxuICAgICAgdGhpcy5maWx0ZXJSZXN1bHRWaWV3TW9kZSA9IER5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0uRklMVEVSU19PTkxZO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlLFxyXG4gICAgICB0aGlzLnNob3dTYXZlQnV0dG9uLFxyXG4gICAgICB0aGlzLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLnVzZXJJRCxcclxuICAgICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zLFxyXG4gICAgICB0aGlzLmFkZGl0aW9uYWxJbmZvLFxyXG4gICAgICB0aGlzLnByZWZpbHRlclBhcmFtcyxcclxuICAgICAgdGhpcy5zaG93TmV3U2VhcmNoQnV0dG9uXHJcbiAgICApO1xyXG4gICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyhcclxuICAgICAgdGhpcy5zaG93VGl0bGUsXHJcbiAgICAgIHRoaXMudmFsdWVzLFxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyxcclxuICAgICAgdGhpcy51c2VySUQsXHJcbiAgICAgIG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCksXHJcbiAgICAgIHRoaXMudXBkYXRlSW5mbyxcclxuICAgICAgdGhpcy5saXN0Vmlld1JlY29yZFRpdGxlLFxyXG4gICAgICB0aGlzLmlzRHJhZ2dhYmxlTGlzdFZpZXdcclxuICAgICk7XHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyhcclxuICAgICAgdGhpcy5Gb3JtSlNPTlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmNvbnRleHQ7XHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLnVzZXJUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbnMudXNlclRva2VuO1xyXG4gICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIC8vdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRFxyXG5cclxuICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZVxyXG4gICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtSlNPTiA9PSBcIlwiKSB7XHJcbiAgICAgIC8vIHByZW5kZSBpbCBmb3JtIGUgaW1wb3N0YSBsYSB2aWV3bW9kZSBjb3JyZXR0YVxyXG4gICAgICAvLyBhd2FpdCB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCIsIHRoaXMuZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcpXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWVcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5zdGFydGVyVmlld01vZGUgPT0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFIHx8IHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uRklMVEVSKSB7XHJcbiAgICAgIC8vIGRhIHZlZGVyZSBpbiBnZXRGb3JtQnlJRFxyXG4gICAgICB0aGlzLmRlZmF1bHRWaWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub25BZGRWaWV3RWRpdFJlY29yZChudWxsKSwgMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGU7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dChfID0+IHsgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAvLyAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gIC8vICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gIC8vICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAvLyAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgLy8gICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gIC8vICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgLy8gICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAvLyAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAvLyAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMubGFzdGZvcm0gPSByZXM7XHJcbiAgLy8gICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gIC8vICAgICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcblxyXG4gIC8vICAgICAgIC8vIGlmICh0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEUpIHtcclxuICAvLyAgICAgICAvLyAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZChudWxsKTtcclxuICAvLyAgICAgICAvLyB9XHJcbiAgLy8gICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgICAoZXJyKSA9PiB7fVxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgZ2xpIGVuZHBvaW50IGRhIHVzYXJlIGRpIGRlZmF1bHQgYSBwYXJ0aXJlIGRhbGwndXJsIGJhc2UgZGVsIHNlcnZlclxyXG4gICAqIGEgY3VpIHNpIGRldmUgY29ubmV0dGVyZSBlIGFsIHRva2VuIGRhIHBhc3NhcmUgcGVyIGF1dGVudGljYXJzaS5cclxuICAgKiBTZSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiIMOoIG51bGwgZSBub24gc29ubyBzdGF0aSBjb25maWd1cmF0aSBpIHZhcmkgZW5kcG9pbnQgYWxsb3JhXHJcbiAgICogbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgaHR0cCBwZXIgcmVjdXBlcmFyZS9zYWx2YXJlIGkgZGF0aS5cclxuICAgKi9cclxuICBjb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJiB0aGlzLmJhc2VTZXJ2ZXJVcmwpIHtcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgICAgICAgIHRoaXMuYmFzZVNlcnZlclVybCxcclxuICAgICAgICAgIHRoaXMudXNlclRva2VuXHJcbiAgICAgICAgKTsgICAgXHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIC8vIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgIC8vICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgIC8vICkge1xyXG4gICAgLy8gICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgIC8vICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgIC8vICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgLy8gICAgIH0sXHJcbiAgICAvLyAgIF07XHJcbiAgICAvLyAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgLy8gICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgLy8gICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuZHluYW1pY01vZHVsZUxpc3RDb25maWcudmFsdWVzID0gbmV3IEFycmF5PFJlY29yZD4oKTtcclxuICAgIC8vICAgICAgIHJlcy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgIC8vICAgICAgICAgdG1wUmVjID0gSlNPTi5wYXJzZShyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuSUQgPSByLklEO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuVmVyc2lvbiA9IHIuVmVyc2lvbjtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLnVzZXJJRCA9IHIudXNlcklEO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHIuQW5zd2VyRGF0ZTtcclxuICAgIC8vICAgICAgICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZy52YWx1ZXMucHVzaCh0bXBSZWMpO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICApO1xyXG4gICAgLy8gfVxyXG4gIC8vIH1cclxuXHJcbiAgb25Hb0JhY2soKXtcclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvIDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvbkFkZFZpZXdFZGl0UmVjb3JkKGV2ZW50OiB7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9KSB7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5vbmx5VmlldyA9IGV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiVmVyc2lvbiBtb2R1bG9cIiwgZXZlbnQucmVjb3JkLlZlcnNpb24pXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJxdWVyeSBwYXJhbXNcIiwgZHluYW1pY01vZHVsZVBhcmFtcylcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiUkVTXCIsIHJlcylcclxuICAgICAgICAgICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgICAgICAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5JRCxcclxuICAgICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgICAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgICAgICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RlZFJlY29yZCBhcyBSZWNvcmQpLklEID0gcmVzLklEO1xyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRSZWNvcmQgYXMgUmVjb3JkKS5FbnRJRCA9IHJlcy5FbnRJRDtcclxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUmVjb3JkIGFzIFJlY29yZCkudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUmVjb3JkIGFzIFJlY29yZCkuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuZGVmYXVsdFZpZXdNb2RlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50LnJlY29yZCkpO1xyXG4gICAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLmRlZmF1bHRWaWV3TW9kZTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJlY29yZCAhPSBudWxsICYmIHR5cGVvZiB0aGlzLnNlbGVjdGVkUmVjb3JkID09PSBcInN0cmluZ1wiKXtcclxuXHJcbiAgICAgICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5zZWxlY3RlZFJlY29yZCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZFJlY29yZCBhcyBSZWNvcmQpLklEID0gcmVzLklEO1xyXG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZFJlY29yZCBhcyBSZWNvcmQpLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZFJlY29yZCBhcyBSZWNvcmQpLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUmVjb3JkIGFzIFJlY29yZCkuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInN1Y2Nlc3MgUnVuRW5kUG9pbnRDYWxsXCIscmVzLHRoaXMuZGVmYXVsdFZpZXdNb2RlKTtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICAgIH0gICAgICAgXHJcblxyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5hbnN3ZXJUb0R1cGxpY2F0ZUlkICE9IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gdGhpcy5hbnN3ZXJUb0R1cGxpY2F0ZUlkO1xyXG4gICAgICAgICAgICB0aGlzLmlzRHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuZGVmYXVsdFZpZXdNb2RlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvblZpZXdSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcmVjb3JkXHJcbiAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlXHJcblxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBTQVZFXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGlsIGNvbXBvbmVudGUgZG9wbyBjaGUgaWwgcmVjb3JkIMOoIHN0YXRvIGFnZ2l1bnRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkLmVtaXQoZXZlbnQpO1xyXG4gICAgLy8gaWYgKHRoaXMub25TYXZlQmFja1RvTGlzdCkge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTk9ORTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgaWwgY29tcG9uZW50ZSBkb3BvIGNoZSBlIHN0YXRhIHJpY2hpZXN0YSB1bmEgYWdnaXVudG8gbyB1bmEgbW9kaWZpY2EgZGVsIHJlY29yZCBuZWxsJyBhZGQtZm9ybS1yZWNvcmQuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmFmdGVyU2F2ZVJlY29yZC5lbWl0KGV2ZW50KTtcclxuICAgIC8vIGlmICh0aGlzLm9uU2F2ZUJhY2tUb0xpc3QpIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLk5PTkU7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUb1xyXG4gIH1cclxuXHJcblxyXG4gIG9uU2F2ZUpzb24ocmVjb3JkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuU2F2ZUpTT04uZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uIFNBVkVcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICByZWxvYWQoKXtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiB0aGlzLmxvYWRlciA9IHRydWUsXHJcbiAgICAgIDUwXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gREVMRVRFIFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIG9uRGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuRGVsZXRlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICAgIFwiRWxpbWluYXJlIGlsIHJlY29yZCBzZWxlemlvbmF0bz9cIixcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHJlY29yZC5JRCxcclxuICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EZWxldGVFbmRQb2ludCxcclxuICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZnRlckRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5yZWxvYWRUYWJsZXMoKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQWZ0ZXJEZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uZ09uSW5pdCgpLCA1MCApXHJcbiAgICB0aGlzLmFmdGVyRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZWRucmVnaW9uIERFTEVURSBcclxuXHJcbiAgb25BZnRlckZpbHRlcihldil7XHJcbiAgICB0aGlzLmFmdGVyRmlsdGVyLmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnU3RhcnRlZChlbDogYW55KXtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdSZWxlYXNlZCgpe1xyXG4gICAgdGhpcy5kcmFnUmVsZWFzZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0RyYWdJbmRpY2F0b3IoZWw6IGFueSl7XHJcbiAgICB0aGlzLmNsaWNrRHJhZ0luZGljYXRvci5lbWl0KGVsKTtcclxuICB9XHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KXtcclxuICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgb25GaXJlVHJpZ2dlcihldjogRmlyZVRyaWdnZXIpe1xyXG4gICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIC8qKiB1dGlsaXp6YXRvIGluIFRNRUQgKi8gXHJcbiAgcmVsb2FkSFRNTFJlYWRhYmxlVmFsdWVzKGFuc3dlcklkOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5saXN0Vmlld0Zvcm1SZWNvcmQucmVsb2FkSFRNTFJlYWRhYmxlVmFsdWVzKGFuc3dlcklkKTtcclxuICB9XHJcblxyXG4gIG9uQWZ0ZXJPdXRwdXRFeHRlcm5hbEZpbHRlcnMoZXY6IEZpbHRlclN0YXRpc3RpYyl7XHJcbiAgICB0aGlzLmFmdGVyT3V0cHV0RXh0ZXJuYWxGaWx0ZXJzLmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG48IS0tIFtyZWNvcmRdPVwiJ2IzZDk0M2MwLTljMDEtNDk3My05NDhiLTdhYTQxODYzNGY3MidcIiAtLT5cclxuPHZpZXctZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtdmlld1wiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIChnb0JhY2tFdmVudCk9XCJvbkdvQmFjaygpXCJcclxuICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuPlxyXG48L3ZpZXctZm9ybS1yZWNvcmQ+XHJcblxyXG48Z3JhcGhzXHJcbipuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uR1JBUEhTXCJcclxuY2xhc3M9XCJkeW5hbWljLW1vZHVsZS12aWV3XCJcclxuW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5bZm9ybV09XCJmb3JtXCJcclxuW2Zvcm1JRF09XCJmb3JtSURcIlxyXG5bdXNlcklEXT1cInVzZXJJRFwiXHJcblthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG5bY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG4oZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuPlxyXG48L2dyYXBocz5cclxuXHJcbjxmaWx0ZXItZm9ybS1zdGF0aXN0aWNcclxuKm5nSWY9XCJsb2FkZXIgJiYgKHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uRklMVEVSIHx8IHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uRVhURVJOQUxfRklMVEVSKVwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICBbZm9ybV09XCJmb3JtXCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgW29ubHlWaWV3XT1cIm9ubHlWaWV3XCJcclxuICBbZGVmYXVsdExpc3RBY3Rpb25zXT1cImRlZmF1bHRMaXN0QWN0aW9uc1wiXHJcbiAgW2ZpbHRlclJlc3VsdFZpZXdNb2RlXT1cImZpbHRlclJlc3VsdFZpZXdNb2RlXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcbiAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gIFtTdGF0aXN0aWNdPVwiU3RhdGlzdGljXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICAoYWZ0ZXJGaWx0ZXIpPVwib25BZnRlckZpbHRlcigkZXZlbnQpXCJcclxuICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAoYWZ0ZXJPdXRwdXRFeHRlcm5hbEZpbHRlcnMpPVwib25BZnRlck91dHB1dEV4dGVybmFsRmlsdGVycygkZXZlbnQpXCJcclxuPlxyXG48L2ZpbHRlci1mb3JtLXN0YXRpc3RpYz5cclxuXHJcbjxhZGQtZm9ybS1yZWNvcmRcclxuKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gIFtmb3JtXT1cImZvcm1cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRlXCJcclxuICBbc2hvd1RpdGxlXT1cInNob3dUaXRsZVwiXHJcblxyXG4gIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcblxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZ1wiXHJcblxyXG4gIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbj5cclxuPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG48bGlzdC1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVFwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1saXN0XCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcblxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuICBbZXh0ZXJuYWxCdXR0b25zXT1cImV4dGVybmFsQnV0dG9uc1wiXHJcbiAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcblxyXG4gIChvblZpZXdSZWNvcmQpPVwib25WaWV3UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFkZFZpZXdFZGl0UmVjb3JkKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRGVsZXRlUmVjb3JkKT1cIm9uRGVsZXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFmdGVyRGVsZXRlUmVjb3JkKT1cIm9uQWZ0ZXJEZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcblxyXG4gIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4+XHJcbjwvbGlzdC1mb3JtLXJlY29yZD5cclxuXHJcbjxobGlzdC1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uSExJU1RcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtaGxpc3RcIlxyXG4gIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCJcclxuXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUxpc3RDb25maWdcIlxyXG4gIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuXHJcbiAgKG9uVmlld1JlY29yZCk9XCJvblZpZXdSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdFJlY29yZCgkZXZlbnQpXCJcclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWZ0ZXJEZWxldGVSZWNvcmQpPVwib25BZnRlckRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuPlxyXG48L2hsaXN0LWZvcm0tcmVjb3JkPlxyXG5cclxuPHJlcGFpci1mb3JtLWZpZWxkc1xyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uUkVQQUlSXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLXJlcGFpclwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZ1wiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5cclxuICAob25TYXZlSnNvbik9XCJvblNhdmVKc29uKCRldmVudClcIlxyXG4+XHJcbjwvcmVwYWlyLWZvcm0tZmllbGRzPlxyXG5cclxuPGxpc3Qtdmlldy1mb3JtLXJlY29yZFxyXG4gICNsaXN0Vmlld0Zvcm1SZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1RXSUVXXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuICBbY29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXHJcblxyXG4gIFtkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbl09XCJkZWZhdWx0TGlzdFZpZXdGdW5jdGlvblwiXHJcbiAgW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG4gIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIFxyXG4gIFtoaWdobGlnaHRGaWx0ZXJdPVwiaGlnaGxpZ2h0RmlsdGVyXCJcclxuICBbb25seVZpZXddPVwiIWRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0XCJcclxuICBcclxuICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG5cclxuICAob25BZGRWaWV3RWRpdFJlY29yZCk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkRlbGV0ZVJlY29yZCk9XCJvbkRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGRyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXHJcbiAgKGRyYWdSZWxlYXNlZCk9XCJvbkRyYWdSZWxlYXNlZCgpXCJcclxuICAoY2xpY2tEcmFnSW5kaWNhdG9yKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKCRldmVudClcIlxyXG4gIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gID5cclxuPC9saXN0LXZpZXctZm9ybS1yZWNvcmQ+XHJcbiJdfQ==
|