@eqproject/eqp-dynamic-module 2.10.104 → 2.11.1
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/README.md +35 -15
- package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +2 -2
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +26 -26
- package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +4 -4
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +18 -18
- package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +7 -7
- package/esm2020/lib/components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component.mjs +4 -4
- package/esm2020/lib/components/private/dbgetter/dbgetter.component.mjs +5 -5
- package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +5 -5
- package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +5 -5
- package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +10 -10
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +3 -3
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +11 -11
- package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +16 -9
- package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +6 -6
- package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +6 -6
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +5 -5
- package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +16 -16
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +19 -19
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +18 -18
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +32 -9
- package/esm2020/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +7 -7
- package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +8 -8
- package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +4 -4
- package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +7 -7
- package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +18 -11
- package/esm2020/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +7 -7
- package/esm2020/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +7 -7
- package/esm2020/lib/components/private/graphs/graphs.component.mjs +4 -4
- package/esm2020/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.mjs +5 -5
- package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +6 -6
- package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +8 -10
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +5 -5
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +5 -5
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +4 -4
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +15 -8
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +7 -7
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +7 -7
- package/esm2020/lib/eqp-dynamic-module.module.mjs +22 -44
- package/esm2020/lib/models/dynAttachment.mjs +1 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +275 -253
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +274 -253
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +1 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +8 -8
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +14 -14
- package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +2 -2
- package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +1 -1
- package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +2 -2
- package/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.d.ts +11 -11
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +11 -11
- package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +9 -9
- package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +4 -3
- package/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.d.ts +1 -1
- package/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.d.ts +1 -1
- package/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.d.ts +1 -1
- package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +3 -3
- package/lib/components/private/trigger-creator/trigger-creator.component.d.ts +0 -2
- package/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.d.ts +1 -1
- package/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.d.ts +1 -1
- package/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.d.ts +3 -3
- package/lib/eqp-dynamic-module.module.d.ts +9 -26
- package/lib/models/dynAttachment.d.ts +2 -2
- package/package.json +8 -15
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, Input, ViewChild, Output, EventEmitter, } from "@angular/core";
|
|
2
|
-
import { CellAlignmentEnum, NumberColumnPipe, TypeColumn } from "
|
|
2
|
+
import { CellAlignmentEnum, NumberColumnPipe, TypeColumn } from "tmw-table";
|
|
3
3
|
import { Record } from "../../../../models/record.model";
|
|
4
4
|
import { DynamicModuleListFormRecordActionsDefault } from "../../../../models/dynamicModuleListFormRecordActionsDefault";
|
|
5
5
|
import { DynamicModuleCompileConfig } from "./../../../..//models/dynamicModuleCompileConfig.model";
|
|
@@ -18,9 +18,9 @@ import * as i5 from "@angular/common";
|
|
|
18
18
|
import * as i6 from "@angular/material/button";
|
|
19
19
|
import * as i7 from "@angular/material/card";
|
|
20
20
|
import * as i8 from "@angular/material/expansion";
|
|
21
|
-
import * as i9 from "@angular/material/
|
|
22
|
-
import * as i10 from "
|
|
23
|
-
import * as i11 from "
|
|
21
|
+
import * as i9 from "@angular/material/tooltip";
|
|
22
|
+
import * as i10 from "tmw-table";
|
|
23
|
+
import * as i11 from "tmw-icons";
|
|
24
24
|
import * as i12 from "@angular/cdk/drag-drop";
|
|
25
25
|
import * as i13 from "../hlist-form-record/hlist-form-record.component";
|
|
26
26
|
import * as i14 from "../add-form-record/add-form-record.component";
|
|
@@ -117,7 +117,7 @@ export class ListViewFormRecordComponent {
|
|
|
117
117
|
configureListviewButtons() {
|
|
118
118
|
this.buttons = [
|
|
119
119
|
{
|
|
120
|
-
"icon": "
|
|
120
|
+
"icon": "eye",
|
|
121
121
|
"text": "Visualizza",
|
|
122
122
|
"visible": this.defaultListActions.view && (this.defaultListActions.edit || this.defaultListActions.duplicate || this.defaultListActions.delete),
|
|
123
123
|
"extraClass": "view-button-icon",
|
|
@@ -135,7 +135,7 @@ export class ListViewFormRecordComponent {
|
|
|
135
135
|
}
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
|
-
"icon": "
|
|
138
|
+
"icon": "copy",
|
|
139
139
|
"text": "Duplica",
|
|
140
140
|
"visible": this.defaultListActions.duplicate,
|
|
141
141
|
"extraClass": "duplicate-button-icon",
|
|
@@ -144,7 +144,7 @@ export class ListViewFormRecordComponent {
|
|
|
144
144
|
}
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
|
-
"icon": "
|
|
147
|
+
"icon": "trash",
|
|
148
148
|
"text": "Cancella",
|
|
149
149
|
"visible": this.defaultListActions.delete,
|
|
150
150
|
"extraClass": "delete-button-icon",
|
|
@@ -204,7 +204,7 @@ export class ListViewFormRecordComponent {
|
|
|
204
204
|
//#endregion getFormByID
|
|
205
205
|
//#region configureColumns
|
|
206
206
|
/**
|
|
207
|
-
* Metodo per configurare le colonne della
|
|
207
|
+
* Metodo per configurare le colonne della tabella.
|
|
208
208
|
*/
|
|
209
209
|
configureColumns() {
|
|
210
210
|
// this.configureTabellarColumns();
|
|
@@ -222,7 +222,7 @@ export class ListViewFormRecordComponent {
|
|
|
222
222
|
//#region configureTabellarColumns
|
|
223
223
|
// private configureTabellarColumns(){
|
|
224
224
|
// /**
|
|
225
|
-
// * Metodo per creare la configurazione delle colonne per la
|
|
225
|
+
// * Metodo per creare la configurazione delle colonne per la tabella.
|
|
226
226
|
// * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.
|
|
227
227
|
// * Le colonne vengono create per i BaseField con il flag InListView a TRUE
|
|
228
228
|
// * oppure, nel caso non siano stati specificati i campi da visualizzare,
|
|
@@ -252,8 +252,8 @@ export class ListViewFormRecordComponent {
|
|
|
252
252
|
//#region createFieldColumn
|
|
253
253
|
/**
|
|
254
254
|
* Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.
|
|
255
|
-
* @param field BaseField per cui creare la colonna nella
|
|
256
|
-
* @returns Restituisce una ConfigColumn per la
|
|
255
|
+
* @param field BaseField per cui creare la colonna nella tabella
|
|
256
|
+
* @returns Restituisce una ConfigColumn per la tabella
|
|
257
257
|
*/
|
|
258
258
|
createFieldColumn(field) {
|
|
259
259
|
var column = { key: field.Name, display: field.Label };
|
|
@@ -465,8 +465,8 @@ export class ListViewFormRecordComponent {
|
|
|
465
465
|
//#region viewOrEditRecord
|
|
466
466
|
/**
|
|
467
467
|
* Metodo che scatena l'evento di Output per mostrare o modificare il record
|
|
468
|
-
* selezionato sulla
|
|
469
|
-
* @param record Record da visualizzare o modificare selezionato sulla
|
|
468
|
+
* selezionato sulla tabella.
|
|
469
|
+
* @param record Record da visualizzare o modificare selezionato sulla tabella.
|
|
470
470
|
* @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.
|
|
471
471
|
*/
|
|
472
472
|
viewOrEditRecord(record, onlyView, i) {
|
|
@@ -554,7 +554,7 @@ export class ListViewFormRecordComponent {
|
|
|
554
554
|
//#region deleteRecord
|
|
555
555
|
/**
|
|
556
556
|
* Metodo per eliminare un record dalla lista.
|
|
557
|
-
* @param record Record da eliminare selezionato sulla
|
|
557
|
+
* @param record Record da eliminare selezionato sulla tabella.
|
|
558
558
|
*/
|
|
559
559
|
deleteRecord(record, ev) {
|
|
560
560
|
ev.preventDefault();
|
|
@@ -564,7 +564,7 @@ export class ListViewFormRecordComponent {
|
|
|
564
564
|
//#endregion deleteRecord
|
|
565
565
|
//#region reloadTables
|
|
566
566
|
/**
|
|
567
|
-
* Metodo per ricaricare i dati della
|
|
567
|
+
* Metodo per ricaricare i dati della tabella.
|
|
568
568
|
*/
|
|
569
569
|
reloadTables() {
|
|
570
570
|
if (this.tableRecords) {
|
|
@@ -867,10 +867,10 @@ export class ListViewFormRecordComponent {
|
|
|
867
867
|
}
|
|
868
868
|
}
|
|
869
869
|
ListViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialog }, { token: i3.Router }, { token: i4.dbDateService }, { token: i5.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
870
|
-
ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", actionButtons: "actionButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent", formulaObject: "formulaObject", contestualizationParams: "contestualizationParams" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.EqpTableComponent, selector: "eqp-table" }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent", "visualEditorMode", "veSwapFieldCode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger", "veFieldClick"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "formulaObject", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
|
|
870
|
+
ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", actionButtons: "actionButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent", formulaObject: "formulaObject", contestualizationParams: "contestualizationParams" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"actionButton.Icon\" [name]=\"actionButton.Icon\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <tmw-icon class=\"mat-icon\" name=\"table\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <tmw-icon class=\"mat-icon\" name=\"list\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"!isFullOpened\" name=\"chevron-down\"></tmw-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"isFullOpened && isListView\" name=\"chevron-up\"></tmw-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <tmw-icon class=\"mat-icon\" name=\"chart-pie\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <tmw-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </tmw-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <tmw-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></tmw-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <tmw-icon class=\"mat-icon\" [name]=\"button.icon\"></tmw-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\"\r\n mat-icon-button\r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <tmw-icon class=\"mat-icon\" [name]=\"button.icon\"></tmw-icon>\r\n </button>\r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <tmw-icon class=\"mat-icon\" name=\"arrow-left\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.TmwTableComponent, selector: "tmw-table", inputs: ["data", "columns", "headerTitle", "emptyTableMessage", "tableColor", "createMatCard", "createMatCardHeader", "isMultiLanguage", "cultureInfo", "rowHeightMode", "rowHeight", "rowExpandable", "enableMultiSort", "isTableSearcheable", "searchText", "isSingleColumnFilter", "showSingleFilterButton", "switchFilterType", "switchFilterToGenericText", "switchFilterToSingleText", "showFilterText", "hideFilterText", "singleFilterColumnVisible", "currencyFilterToReplace", "currencyFilterToUse", "serverSideSort", "serverSideFilter", "selection", "isMultipleSelection", "disableRow", "disableRowColor", "isHighlight", "highlightColor", "rowCssClass", "cellCssClass", "headerCellCssClass", "rowIdentity", "isSelectedPropertyName", "paginatorVisible", "matPaginatorLength", "matPaginatorSize", "matPaginatorIndex", "matPaginatorCount", "disablePageStorageSave", "tableName", "disableColumnStateStorageSave", "showFirstLastButtons", "serverSidePagination", "serverPagination", "loading", "antiFreeze", "antiFreezeThreshold", "virtualScroll", "estimatedRowHeight", "virtualScrollBuffer", "enableDragAndDrop", "enableDragColumn", "changeDragRowPosition", "enableDragDrop", "isStickyHeader", "columnOverflowMode", "maxBodyHeight", "allowNewLine", "cardBreakpoint", "forceCardLayout", "chooseColumnsToShow", "chooseColumnsToShowText", "customButtons", "enableColumnReorder", "bulkActions", "showAggregationRow", "exportEqpTable", "notPaginatedExport", "notPaginatedFunctionType", "notPaginatedFunctionPath", "notPaginatedFunctionPostData", "notPaginatedFunctionReturnParameter", "notPaginatedFunctionReturnIsJson", "notPaginatedMergeController", "notPaginatedMergePostData", "suppressRenderDataUpdate"], outputs: ["antiFreezeChange", "columnResize", "columnReorder", "sortChange", "multiSortChange", "filteredColumns", "filterChange", "checkboxInfo", "checkboxJustSelectedInfo", "highlightSelected", "highlightDeselected", "pageChange", "dragStartedEvent", "dragReleasedEvent", "dragEndedEvent", "dragDropEvent", "eqpExportStarted", "eqpExportCompleted", "eqpExportEnded", "exportAllRequested"] }, { kind: "component", type: i11.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent", "visualEditorMode", "veSwapFieldCode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger", "veFieldClick"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "formulaObject", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
|
|
871
871
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, decorators: [{
|
|
872
872
|
type: Component,
|
|
873
|
-
args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"] }]
|
|
873
|
+
args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"actionButton.Icon\" [name]=\"actionButton.Icon\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <tmw-icon class=\"mat-icon\" name=\"table\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <tmw-icon class=\"mat-icon\" name=\"list\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"!isFullOpened\" name=\"chevron-down\"></tmw-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"isFullOpened && isListView\" name=\"chevron-up\"></tmw-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <tmw-icon class=\"mat-icon\" name=\"chart-pie\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <tmw-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </tmw-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <tmw-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></tmw-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <tmw-icon class=\"mat-icon\" [name]=\"button.icon\"></tmw-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\"\r\n mat-icon-button\r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <tmw-icon class=\"mat-icon\" [name]=\"button.icon\"></tmw-icon>\r\n </button>\r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <tmw-icon class=\"mat-icon\" name=\"arrow-left\"></tmw-icon>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"] }]
|
|
874
874
|
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }, { type: i2.MatDialog }, { type: i3.Router }, { type: i4.dbDateService }, { type: i5.DatePipe }]; }, propDecorators: { configurations: [{
|
|
875
875
|
type: Input
|
|
876
876
|
}], compileConfigurations: [{
|
|
@@ -931,4 +931,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
931
931
|
}], clickDragIndicator: [{
|
|
932
932
|
type: Output
|
|
933
933
|
}] } });
|
|
934
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7QUFJMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3RHLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV4RixPQUFP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QUU7Z0JBUUksYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdJLGVBQWU7c0JBQS9ELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTBCckMsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIENlbGxBbGlnbm1lbnRFbnVtLFxyXG4gIENvbmZpZ0NvbHVtbixcclxuICBFcXBUYWJsZUNvbXBvbmVudCxcclxuICBOdW1iZXJDb2x1bW5QaXBlLFxyXG4gIFR5cGVDb2x1bW5cclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi8uLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBGaXJlVHJpZ2dlciwgVHJpZ2dlciwgQWN0aW9uQnV0dG9uLCBBY3Rpb25GbGFnRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgZGJEYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9kYi1kYXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVGaWVsZCwgRGF0ZVRpbWVUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTGFiZWxGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xhYmVsRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gJ3Rtdy1waWNrZXInO1xyXG5pbXBvcnQgeyBUYWJlbGxhckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dyYXBoLm1vZGVsJztcclxuaW1wb3J0IHsgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5cclxudHlwZSBQYW5lbCA9IHtcclxuICByZWNvcmQ6IFJlY29yZCxcclxuICBpc09wZW46IGJvb2xlYW4sXHJcbiAgcGFnZVN0YXRlOiBzdHJpbmcsXHJcbiAgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgY29tcGlsZUNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBvdXRDb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9yZ2FJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uOiBGdW5jdGlvbiA9IG51bGw7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcmVjb3JkczogQXJyYXk8RHluUmVjb3JkPiA9IG51bGw7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBjb250ZXN0dWFsaXphdGlvblBhcmFtczogYW55ID0gbnVsbDtcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuXHJcbiAgLy8gdmFsdWVzOiBBcnJheTxSZWNvcmQ+O1xyXG4gIHRlc3QgPSBmYWxzZTtcclxuICBpc0R1cGxpY2F0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IGFueTsgLy8gUmVjb3JkIHwgc3RyaW5nO1xyXG4gIGxvYWRlcjogYm9vbGVhbjtcclxuICBsb2FkZWRmb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFuZWxPcGVuU3RhdGU6IGJvb2xlYW5bXSA9IG5ldyBBcnJheTxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICB2aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgbW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZVJlY29yZHNcIiwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVSZWNvcmRzOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgY29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgdGFiZWxsYXJDb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBwYW5lbHM6IEFycmF5PFBhbmVsPlxyXG4gIGJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIHBvcHVwTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJvcGVuQWRkRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuQWRkRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5BZGREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5HcmFwaERpYWxvZ1wiLCB7IHN0YXRpYzogZmFsc2UgfSkgb3BlbkdyYXBoRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5HcmFwaERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICB0b2RvTGlzdDogYW55O1xyXG4gIGlzRnVsbE9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1RhYmVsbGFyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNMaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdGFiZWxsYXJDb25kaXRpb25Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbWlucGVyaW9kOiBEYXRlO1xyXG4gIG1heHBlcmlvZDogRGF0ZTtcclxuXHJcbiAgdGFiZWxsYXJGaWVsZHM6IEFycmF5PFRhYmVsbGFyRmllbGQ+ID0gbmV3IEFycmF5PFRhYmVsbGFyRmllbGQ+KCk7XHJcbiAgc2VsZWN0ZWRUYWJlbGxhckZpZWxkczogQXJyYXk8VGFiZWxsYXJGaWVsZD47XHJcbiAgdGFiZWxsYXJWYWx1ZXM6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuICAvLyBUTVctUElDS0VSXHJcbiAgbW9kZXMgPSBNb2RlRW51bVxyXG4gIHRpbWVUeXBlID0gVGltZVR5cGVFbnVtXHJcbiAgbW9kZTogTW9kZUVudW07XHJcblxyXG4gIGxpYlNpbmdsZUxvYWRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgdmlzaWJsZUFjdGlvbkJ1dHRvbnM6IEFycmF5PEFjdGlvbkJ1dHRvbj4gPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG5cclxuICAvLyBhZGQgbmV3XHJcbiAgQE91dHB1dCgpIG9uQWRkVmlld0VkaXRSZWNvcmQ6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICByZWNvcmQ6IFJlY29yZDtcclxuICAgIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdTdGFydGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkcmFnUmVsZWFzZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG4gIEBPdXRwdXQoKSBjbGlja0RyYWdJbmRpY2F0b3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIC8vI3JlZ2lvbiBjb25zdHJ1Y3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBkYkRhdGVTZXJ2aWNlOiBkYkRhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcclxuICApIHsgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjb25zdHJ1Y3RvclxyXG5cclxuICAvLyNyZWdpb24gbmdPbkluaXRcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMucGFuZWxPcGVuU3RhdGUgPSBbXHJcbiAgICAvLyAgIC4uLkFycmF5KHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLmxlbmd0aCArIDEpLFxyXG4gICAgLy8gXS5tYXAoKCkgPT4gZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcbiAgICB0aGlzLnZpc2libGVBY3Rpb25CdXR0b25zID0gdGhpcy5hY3Rpb25CdXR0b25zLmZpbHRlcih4ID0+IHguU2hvd0luID09IEFjdGlvbkZsYWdFbnVtLkxJU1RWSUVXKTtcclxuXHJcbiAgICAvLyB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG5cclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5wcmVmaWx0ZXJQYXJhbXMsXHJcbiAgICApO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12aWV3IC0gb3V0Y29tcGlsZUNvbmZpZ3VyYXRpb25zIFwiLCB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkluaXRcclxuXHJcbiAgLy8jcmVnaW9uIG5nT25DaGFuZ2VzXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uQ2hhbmdlcycsIGNoYW5nZXMpO1xyXG5cclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uZmlyc3RDaGFuZ2UgPT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBuZ09uQ2hhbmdlc1xyXG5cclxuICAvLyNyZWdpb24gb25PcGVuaW5nXHJcbiAgLyoqXHJcbiAgICogZnVuemlvbmUgZGkgYXBlcnR1cmEgZGVsbCdhY2NvcmRpb25cclxuICAgKiBAcGFyYW0gaW5kaWNlIFxyXG4gICAqL1xyXG4gIG9uT3BlbmluZyhpbmRpY2U6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kaWNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25PcGVuaW5nXHJcblxyXG4gIGNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpIHtcclxuICAgIHRoaXMuYnV0dG9ucyA9IFtcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJ2aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ICYmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0IHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUpLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcInZpZXctYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlld1JlY29yZChwYW5lbCwgdHJ1ZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImVkaXRcIixcclxuICAgICAgICBcInRleHRcIjogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0LFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImVkaXQtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuRWRpdFJlY29yZChwYW5lbCwgZmFsc2UsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJEdXBsaWNhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkdXBsaWNhdGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkNhbmNlbGxhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkZWxldGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKHBhbmVsLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgXVxyXG4gICAgdGhpcy5idXR0b25zID0gdGhpcy5idXR0b25zLmNvbmNhdCh0aGlzLmV4dGVybmFsQnV0dG9ucykuZmlsdGVyKHggPT4geC52aXNpYmxlKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuVGFiZWxsYXJcclxuICBvcGVuVGFiZWxsYXIoKXtcclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1RhYmVsbGFyID0gdHJ1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5UYWJlbGxhclxyXG5cclxuICAvLyNyZWdpb24gb3Blbkxpc3RWaWV3XHJcbiAgb3Blbkxpc3RWaWV3KCl7XHJcbiAgICB0aGlzLmlzVGFiZWxsYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IHRydWU7XHJcbiAgfSAgXHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5MaXN0Vmlld1xyXG5cclxuICAvLyNyZWdpb24gZ2V0Rm9ybUJ5SURcclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkxpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudCAtIGdldCBGT1JNXCIsIHJlcylcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcblxyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZGZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0Rm9ybUJ5SURcclxuXHJcbiAgLy8jcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuXHJcbiAgICAvLyB0aGlzLmNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1ucygpO1xyXG5cclxuICAgIC8vIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIC8vIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRzID09IG51bGwpIHtcclxuICAgICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnUmVjb3JkcyBFeGlzdHMnLCB0aGlzLnJlY29yZHMpO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHRoaXMucmVjb3Jkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjb25maWd1cmVDb2x1bW5zXHJcblxyXG4gIC8vI3JlZ2lvbiBjb25maWd1cmVUYWJlbGxhckNvbHVtbnNcclxuICAvLyBwcml2YXRlIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1ucygpe1xyXG5cclxuICAvLyAgICAgLyoqXHJcbiAgLy8gICAgICAqIE1ldG9kbyBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgcGVyIGxhIGVxcC10YWJsZS5cclxuICAvLyAgICAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gIC8vICAgICAgKiBMZSBjb2xvbm5lIHZlbmdvbm8gY3JlYXRlIHBlciBpIEJhc2VGaWVsZCBjb24gaWwgZmxhZyBJbkxpc3RWaWV3IGEgVFJVRVxyXG4gIC8vICAgICAgKiBvcHB1cmUsIG5lbCBjYXNvIG5vbiBzaWFubyBzdGF0aSBzcGVjaWZpY2F0aSBpIGNhbXBpIGRhIHZpc3VhbGl6emFyZSxcclxuICAvLyAgICAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAvLyAgICAgICovXHJcblxyXG4gIC8vICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMnLCB0aGlzLmZvcm0pO1xyXG4gICAgXHJcbiAgLy8gICAgICAgdmFyIGZpZWxkc0ZvckNvbHVtbnM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgLy8gICAgICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5Jbkxpc3RWaWV3KSkge1xyXG4gIC8vICAgICAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkluTGlzdFZpZXcpO1xyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuT3JkaW5hbFBvc2l0aW9uIDwgNik7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAvLyAgICAgICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gIC8vICAgICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICAgICAgPyAxXHJcbiAgLy8gICAgICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICAgICAgPyAtMVxyXG4gIC8vICAgICAgICAgICAgIDogMFxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHRoaXMuY3JlYXRlRmllbGRDb2x1bW4oZmllbGQpKTtcclxuICAvLyAgICAgICAgIH0pO1xyXG5cclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiRklOQUwgQ09MVU1TTlwiLCB0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAvLyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsJ29nZ2V0dG8gQ29uZmlndXJlQ29sdW1uIGNoZSByYXBwcmVzZW50YSBpbCBCYXNlRmllbGQgcGFzc2F0byBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGxhIGNvbG9ubmEgbmVsbGEgZXFwLXRhYmxlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIENvbmZpZ0NvbHVtbiBwZXIgbGEgZXFwLXRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZENvbHVtbihmaWVsZDogQmFzZUZpZWxkKTogQ29uZmlnQ29sdW1uIHtcclxuICAgIHZhciBjb2x1bW46IENvbmZpZ0NvbHVtbiA9IHsga2V5OiBmaWVsZC5OYW1lLCBkaXNwbGF5OiBmaWVsZC5MYWJlbCB9O1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkJvb2xlYW47XHJcbiAgICAgICAgY29sdW1uLmJvb2xlYW5WYWx1ZXMgPSB7XHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtdGltZXMgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5zdHlsZXMgPSB7XHJcbiAgICAgICAgICBmbGV4OiBcIjAgMCA3JVwiLFxyXG4gICAgICAgICAgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlICE9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIG9yYXJpb1wiXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkRhdGU7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gXCJkZC9NTS95eXl5IEhIOm1tXCI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICAgID8gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdC5yZXBsYWNlKFwiRERcIiwgXCJkZFwiKVxyXG4gICAgICAgICAgICAgIDogXCJkZC9NTS95eXl5XCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2wpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5DVVJSRU5DWTtcclxuICAgICAgICAgIGNvbHVtbi5jdXJyZW5jeVBpcGVDb2RlID0gKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2w7XHJcbiAgICAgICAgfSBlbHNlIGlmICghKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuREVDSU1BTDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZVwiXTpcclxuICAgICBcclxuICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl06XHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4geyByZXR1cm4gKGZpZWxkIGFzIExhYmVsRmllbGQpLkV0aWNoZXR0YTsgfTtcclxuICAgICAgYnJlYWs7ICAgICAgICBcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG5cclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnRbZmllbGQuTmFtZV0gfHwgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChrKSA9PlxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50W2ZpZWxkLk5hbWVdLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9PSBudWxsKXsgXHJcblxyXG4gICAgICAgICAgICAgIHZhciB2cyA9IChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgaWYgKHZzICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB2cy5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmR2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvckVhY2goKG9wKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBvcC5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbMV0gPT0gZWxlbWVudFtmaWVsZC5OYW1lXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmR2YWx1ZSA9IHZhbHVlc1swXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmR2YWx1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5maW5kKFxyXG4gICAgICAgICAgICAgIChrKSA9PlxyXG4gICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdID09IGVsZW1lbnRbZmllbGQuTmFtZV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfSAgXHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUZpZWxkQ29sdW1uXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRSZWNvcmRzQnlGb3JtSURcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCA9PSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgLy8gc2Ugbm9uIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdHZXRCeUZvcm1JREVuZFBvaW50JywgcmVzKVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImNvbnRyb2xsYXJlIGxlIGNvbmZpZ3VyYXppb25pIGRlbGwnZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRSZWNvcmRzQnlGb3JtSURcclxuXHJcbiAgLy8jcmVnaW9uIGdlbmVyYXRlQW5zd2Vyc0FycmF5XHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUFuc3dlcnNBcnJheShyZXM6IEFycmF5PER5blJlY29yZD4pIHtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gbmV3IEFycmF5PFJlY29yZD4oKTtcclxuICAgIHRoaXMucGFuZWxzID0gbmV3IEFycmF5PFBhbmVsPigpO1xyXG4gICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZ2VuZXJhdGVBbnN3ZXJzQXJyYXlcIiwgcilcclxuICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJTZXJpYWxpemVkVmFsdWVzXCIsIHIuU2VyaWFsaXplZFZhbHVlcylcclxuICAgICAgdG1wUmVjID0gSlNPTi5wYXJzZShyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICB0bXBSZWMuSUQgPSByLklEO1xyXG4gICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgICB0bXBSZWMuVmVyc2lvbiA9IHIuVmVyc2lvbjtcclxuICAgICAgdG1wUmVjLnVzZXJJRCA9IHIudXNlcklEO1xyXG4gICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHRoaXMuZGJEYXRlU2VydmljZS5wYXJzZURhdGVmcm9tREIoci5BbnN3ZXJEYXRlKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgdG1wUmVjLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHIuSFRNTHJlYWRhYmxlVmFsdWVzO1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRpdGlvbmFsUGFyYW1zXCIsIHIuQWRkaXRpb25hbFBhcmFtcylcclxuICAgICAgdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXMgPSByLkFkZGl0aW9uYWxQYXJhbXMgIT0gXCJcIiAmJiByLkFkZGl0aW9uYWxQYXJhbXMgIT0gbnVsbCA/IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsUGFyYW1zKSA6IFwiXCI7XHJcbiAgICAgIHRtcFJlYy5BZGRpdGlvbmFsSW5mbyA9IHIuQWRkaXRpb25hbEluZm8gIT0gXCJcIiAmJiByLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgPyBKU09OLnBhcnNlKHIuQWRkaXRpb25hbEluZm8pIDogXCJcIjtcclxuXHJcbiAgICAgIHZhciBmb3VuZGtleSA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRlc3R1YWxpemF0aW9uUGFyYW1zICE9IG51bGwpe1xyXG4gICAgICAgIGlmICh0bXBSZWMuQWRkaXRpb25hbFBhcmFtcyAhPSBudWxsKXtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29udGVzdHVhbGl6YXRpb25QYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgfHwgdGhpcy5jb250ZXN0dWFsaXphdGlvblBhcmFtc1trZXldLmluZGV4T2YodG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNba2V5XSkgPT0gLTEpe1xyXG4gICAgICAgICAgICAgIGZvdW5ka2V5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZvdW5ka2V5KXtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcblxyXG4gICAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0RmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5oaWdobGlnaHRGaWx0ZXIpLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zW2ZpbHRlcl0gfHwgdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNbZmlsdGVyXSAhPSB0aGlzLmhpZ2hsaWdodEZpbHRlcltmaWx0ZXJdKSB7XHJcbiAgICAgICAgICAgICAgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGFuZWxzLnB1c2goeyByZWNvcmQ6IHRtcFJlYywgaXNPcGVuOiBmYWxzZSwgcGFnZVN0YXRlOiBudWxsLCBoaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZCB9KTtcclxuXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoXykgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZW5lcmF0ZUFuc3dlcnNBcnJheVxyXG5cclxuICAvLyNyZWdpb24gdG9nZ2xlUGFuZWxcclxuICB0b2dnbGVQYW5lbChwYW5lbDogYW55LCByZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd0b2dnbGVQYW5lbCcpXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24nLCByZWNvcmQpXHJcbiAgICAgIHRoaXMuZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24ocmVjb3JkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYW5lbC5pc09wZW4pIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICAvLyBTaW11bGEgdW4gY2FsY29sbyBhc2luY3Jvbm9cclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIH0sIDEwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB0b2dnbGVQYW5lbFxyXG5cclxuICAvLyNyZWdpb24gdmlld09yRWRpdFJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2NhdGVuYSBsJ2V2ZW50byBkaSBPdXRwdXQgcGVyIG1vc3RyYXJlIG8gbW9kaWZpY2FyZSBpbCByZWNvcmRcclxuICAgKiBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgdmllbmUgbW9zdHJhdG8gaWwgY29tcG9uZW50ZSBhZGQtZm9ybS1yZWNvcmQgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqL1xyXG4gIHZpZXdPckVkaXRSZWNvcmQocmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuLCBpKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZpZXdPckVkaXRSZWNvcmQnKVxyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHZpZXdPckVkaXRSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIHZpZXdSZWNvcmRcclxuICB2aWV3UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2aWV3UmVjb3JkJylcclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICd2aXN1YWxpenphQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB2aWV3UmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0UmVjb3JkXHJcbiAgRWRpdFJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnRWRpdFJlY29yZCcpXHJcblxyXG4gICAgbGV0IHJlY29yZCA9IHBhbmVsLnJlY29yZFxyXG4gICAgcGFuZWwucmVjb3JkLkFkZGl0aW9uYWxJbmZvID0gT2JqZWN0LmFzc2lnbih7fSwgcmVjb3JkLkFkZGl0aW9uYWxJbmZvLCB0aGlzLmNvbmZpZ3VyYXRpb25zLnVwZGF0ZUluZm8pO1xyXG4gICAgdGhpcy52aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGlmaWNhQ29udGVudXRvID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIGlmIChwYW5lbC5wYWdlU3RhdGUgPT0gJ21vZGlmaWNhQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0byc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gRWRpdFJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gZXh0ZXJuYWxDYWxsYmFja1xyXG4gIGV4dGVybmFsQ2FsbGJhY2soZXY6IEV2ZW50LCBjYWxsYmFjazogRnVuY3Rpb24sIHJlY29yZDogYW55KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjYWxsYmFjayhyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZXh0ZXJuYWxDYWxsYmFja1xyXG5cclxuICAvLyNyZWdpb24gZHVwbGljYXRlUmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZHVwbGljYXJlLlxyXG4gICAqL1xyXG4gIGR1cGxpY2F0ZVJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2R1cGxpY2F0ZVJlY29yZCcpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBwYW5lbC5yZWNvcmQuSUQ7XHJcbiAgICB0aGlzLmlzRHVwbGljYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMub3BlbkFkZERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQWRkRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBkdXBsaWNhdGVSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIGRlbGV0ZVJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLm9uRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGRlbGV0ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gcmVsb2FkVGFibGVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRUYWJsZXMoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVJlY29yZHMpIHtcclxuICAgICAgdGhpcy50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiByZWxvYWRUYWJsZXNcclxuXHJcbiAgLy8jcmVnaW9uIHNhdmVPckV4aXRGb3JtXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0ocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC12aWV3LWZvcm0tcmVjb3JkIHNhdmUnLCByZWNvcmQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzYXZlT3JFeGl0Rm9ybVxyXG5cclxuICAvLyNyZWdpb24gb25BZnRlclNhdmVSZWNvcmRcclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgYWZ0ZXJzYXZlJywgZXZlbnQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWZ0ZXJTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFkZFZpZXdFZGl0UmVjb3JkMlxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvbkFkZFZpZXdFZGl0UmVjb3JkMihldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24gPSBmYWxzZTtcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uID0gIWV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50LnJlY29yZCkpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH0gICAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgICAgfSAgXHJcblxyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAvLyB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkFkZFZpZXdFZGl0UmVjb3JkMlxyXG5cclxuICAvLyNyZWdpb24gb3BlbkFsbFxyXG4gIG9wZW5BbGwoKXtcclxuICAgIHRoaXMuaXNGdWxsT3BlbmVkID0gIXRoaXMuaXNGdWxsT3BlbmVkO1xyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYgKHBhbmVsLmlzT3BlbiAhPSB0aGlzLmlzRnVsbE9wZW5lZCl7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwLVwiK3BhbmVsLnJlY29yZC5JRCtcIi12aXNpYmlsaXR5XCIpLmNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQWxsXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQWRkUG9wdXBcclxuICBvcGVuQWRkUG9wdXAoKSB7XHJcbiAgICAvLyBtaSBzc2ljdXJvIGNoZSBub24gY2kgc2lhbm8gcGFubmVsbGkgaW4gbW9kaWZpY2EgcGVyY2jDqCBhbHRyaW1lbnRpIHZhIGluIGNvbmZsaXR0byBsJ3VwZGF0ZSBjb24gbCdhZGRcclxuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7XHJcbiAgICAgIGlmKHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0bycpe1xyXG4gICAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBvcHVwTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzRHVwbGljYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgd2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkFkZFBvcHVwXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuR3JhcGhzXHJcbiAgb3BlbkdyYXBocygpIHtcclxuICAgIFxyXG4gICAgdGhpcy5vcGVuR3JhcGhEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkdyYXBoRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIG1pbldpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjcwdmhcIixcclxuICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZoXCJcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkeW5hbWljLW1vZHVsZS1ncmFwaHMvJyArIHRoaXMuZm9ybUlEICsgJy8nICsgdGhpcy51c2VySURdKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5HcmFwaHNcclxuXHJcbiAgLy8jcmVnaW9uIGNsb3NlR3JhcGhzXHJcbiAgY2xvc2VHcmFwaHMoKSB7XHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjbG9zZUdyYXBoc1xyXG4gICAgXHJcbiAgLy8jcmVnaW9uIG9uQWRkU2F2ZVJlY29yZFxyXG4gIG9uQWRkU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9IFxyXG4gICAgaWYgKHJlY29yZCA9PSBudWxsKSB7dGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTsgcmV0dXJufVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkU2F2ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gb25BZGRBZnRlclNhdmVSZWNvcmRcclxuICBvbkFkZEFmdGVyU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9IFxyXG4gICAgaWYgKHJlY29yZCA9PSBudWxsKSB7dGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTsgcmV0dXJufVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcbiAgcHJpbnRBZGRpdGlvbmFsSW5mbyhyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgbGV0IG91dCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUgIT0gbnVsbCAmJiB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHJlY29yZC5BZGRpdGlvbmFsSW5mbyAhPSBudWxsKXtcclxuXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFwoKC4rKVxcKS9nOzsgLy8gcGF0dGVybiBwZXIgdW5vIG8gcGnDuSBudW1lcmlcclxuICAgICAgICBcclxuICAgICAgICAvLyAoZGF0ZWZvcm1hdD1FRUVFLCBkIE1NTU0geSwgSDptbTpzcylcclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaXRlbSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICBsZXQgbXltYXRjaCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgaWYobXltYXRjaC5pbmNsdWRlcyhcImRhdGVmb3JtYXRcIikpe1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0ID0gbXltYXRjaC5zcGxpdChcIj1cIilbMV07XHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IGl0ZW0uc3BsaXQoXCIoXCIpWzBdO1xyXG4gICAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSAhPSBudWxsID8gXCIgXCIgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmQuQWRkaXRpb25hbEluZm9bdG9rZW5dLCBmb3JtYXQpIDogcmVjb3JkW3Rva2VuXSA/IFwiIFwiICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkW3Rva2VuXSwgZm9ybWF0KSA6ICBcIiBcIiArIHRva2VuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dICE9IG51bGwgPyBcIiBcIiArIHJlY29yZC5BZGRpdGlvbmFsSW5mb1tpdGVtXSA6IHJlY29yZFtpdGVtXSA/IFwiIFwiICsgcmVjb3JkW2l0ZW1dIDogIFwiIFwiICsgaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcblxyXG4gIG9uQ2xpY2tEcmFnSW5kaWNhdG9yKGVsOiBhbnkpe1xyXG4gICAgdGhpcy5jbGlja0RyYWdJbmRpY2F0b3IuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydGVkKGVsOiBhbnkpe1xyXG4gICAgICB0aGlzLmRyYWdTdGFydGVkLmVtaXQoZWwpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoKXtcclxuICAgICAgdGhpcy5kcmFnUmVsZWFzZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpe1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcil7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH0gXHJcblxyXG4gIHJlbG9hZEhUTUxSZWFkYWJsZVZhbHVlcyhhbnN3ZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGFuc3dlcklkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMuZmluZCh4ID0+IHgucmVjb3JkLklEID09IGFuc3dlcklkKS5yZWNvcmQuSFRNTHJlYWRhYmxlVmFsdWVzID0gcmVzLkhUTUxyZWFkYWJsZVZhbHVlczsgICAgXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBcclxuICAgIHRoaXMubGliU2luZ2xlTG9hZGVkID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5saWJTaW5nbGVMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUFjdGlvbihhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbil7XHJcbiAgICB2YXIgZmlyZVRyaWdnZXI6IEZpcmVUcmlnZ2VyID0gbmV3IEZpcmVUcmlnZ2VyKCk7XHJcblxyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlciA9IG5ldyBUcmlnZ2VyKCk7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLkNJRCA9IGFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5jb25kaXRpb25zID0gbnVsbDtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZGVzY3JpcHRpb24gPSBhY3Rpb25CdXR0b24uQnV0dG9uTGFiZWw7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmV4ZWN1dGlvbiA9IGFjdGlvbkJ1dHRvbi5leGVjdXRpb247XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmZvcm11bGFzID0gYWN0aW9uQnV0dG9uLmZvcm11bGFzO1xyXG5cclxuICAgIGZpcmVUcmlnZ2VyLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuICAgIGZpcmVUcmlnZ2VyLnJlY29yZCA9IG51bGw7XHJcbiAgICBmaXJlVHJpZ2dlci51c2VyUGF0aWVudCA9IHRoaXMudXNlcklEO1xyXG4gICAgZmlyZVRyaWdnZXIudXNlck1lZGljYWxFeGFtaW5hdGlvbiA9IG51bGw7XHJcbiAgICBcclxuICAgIHRoaXMub25GaXJlVHJpZ2dlcihmaXJlVHJpZ2dlcik7XHJcbiAgfSAgXHJcblxyXG59XHJcblxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIj5cclxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJ0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSAmJiBsb2FkZWRmb3JtXCI+TW9kdWxvIHt7IGZvcm0uTmFtZSB9fSA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnMgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkIHx8IGRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIj5cclxuXHJcbiAgICAgIDxzcGFuICpuZ0lmPVwidmlzaWJsZUFjdGlvbkJ1dHRvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uQnV0dG9uIGluIHZpc2libGVBY3Rpb25CdXR0b25zXCIgKGNsaWNrKT1cImdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbilcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbkJ1dHRvbi5JY29uXCI+e3thY3Rpb25CdXR0b24uSWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj57e2FjdGlvbkJ1dHRvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+ICAgIFxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImlzTGlzdFZpZXdcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlblRhYmVsbGFyKClcIj5cclxuICAgICAgICA8bWF0LWljb24+dGFibGU8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5UYWJlbGxhcmU8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImlzVGFiZWxsYXJcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3Blbkxpc3RWaWV3KClcIj5cclxuICAgICAgICA8bWF0LWljb24+bGlzdDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkxpc3RhPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuQWxsKClcIlxyXG4gICAgICAgICpuZ0lmPVwiaXNMaXN0Vmlld1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpc0Z1bGxPcGVuZWRcIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiICpuZ0lmPVwiIWlzRnVsbE9wZW5lZFwiPkFwcmkgdHV0dG88L3NwYW4+XHJcblxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzRnVsbE9wZW5lZCAmJiBpc0xpc3RWaWV3XCI+ZXhwYW5kX2xlc3M8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIiAqbmdJZj1cImlzRnVsbE9wZW5lZFwiPkNoaXVkaSB0dXR0bzwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+ICAgICAgXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuZ3JhcGhzXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmFwaHMoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5waWVfY2hhcnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5HcmFmaWNpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BZGRQb3B1cCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgXHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImlzVGFiZWxsYXJcIj5cclxuICAgICAgXHJcbiAgICAgIDxobGlzdC1mb3JtLXJlY29yZFxyXG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtaGxpc3RcIlxyXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgICAgICBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCJcclxuXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG5cclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuXHJcbiAgICAgICAgPlxyXG4gICAgICA8L2hsaXN0LWZvcm0tcmVjb3JkPlxyXG5cclxuICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyIGNsYXNzPVwiZGF0ZVwiIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBpbml6aW8nXCIgW2xhYmVsXT1cIidQZXJpb2RvIGluaXppbydcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1pbnBlcmlvZFwiXHJcbiAgICAgICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2Rlcy5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyIGNsYXNzPVwiZGF0ZVwiIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBmaW5lJ1wiIFtsYWJlbF09XCInUGVyaW9kbyBmaW5lJ1wiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwibWF4cGVyaW9kXCJcclxuICAgICAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj4gICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwidGFiZWxsYXJGaWVsZHNcIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRUYWJlbGxhckZpZWxkc1wiIFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25lIGRlaSBjYW1waSdcIlxyXG4gICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInRGVzY3JpcHRpb24nXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInVGV4dERlc2NyaXB0aW9uJ1wiIFtpc011bHRpU2VsZWN0XT1cInRydWVcIiBjbGFzcz1cImVxcC1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj4gICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdGVkVGFiZWxsYXJGaWVsZHMgPT0gbnVsbCB8fCBzZWxlY3RlZFRhYmVsbGFyRmllbGRzLmxlbmd0aCA9PSAwXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWdyYXBoLWdlbmVyYXRlIGJ1dHRvbi1uZXh0IG1lLTJcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZ2VuZXJhdGVUYWJlbGxhcigpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICBHZW5lcmFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgPGVxcC10YWJsZSBpZD1cInRhYmVsbGFyXCIgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cInRhYmVsbGFyQ29uZGl0aW9uTG9hZGVkXCIgW2hpZ2hsaWdodENvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxyXG4gICAgICBbZGF0YV09XCJ0YWJlbGxhclZhbHVlc1wiIFtjb2x1bW5zXT1cInRhYmVsbGFyQ29sdW1uc1wiIFttYXRQYWdpbmF0b3JTaXplXT1cIjEwMDBcIiBbbWF0UGFnaW5hdG9yTGVuZ3RoXT1cIlsxMDAwXVwiPjwvZXFwLXRhYmxlPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICA8bWF0LWFjY29yZGlvbiAgI2RvbmVMaXN0PVwiY2RrRHJvcExpc3RcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJbdG9kb0xpc3RdXCIgW2hpZGVUb2dnbGVdPVwidGVzdFwiIFttdWx0aV09XCJ0cnVlXCIgY2xhc3M9XCJkZi1saXN0LXZpZXctYWNjb3JkaW9uXCIgKm5nSWY9XCJpc0xpc3RWaWV3XCI+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBwYW5lbHM7IGluZGV4IGFzIGlcIiBcclxuICAgICAgICBbZXhwYW5kZWRdPVwicGFuZWwuaXNPcGVuXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiMVwiIFxyXG4gICAgICAgIFtjbGFzc109XCJwYW5lbC5oaWdobGlnaHRlZCA/ICdkbV9wYW5lbF9oaWdobGlnaHRlZCcgOiAnMCdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbChwYW5lbCwgcGFuZWwucmVjb3JkKVwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cImNvbmZpZ3VyYXRpb25zLmlzRHJhZ2dhYmxlTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gKGNsaWNrKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKFtwYW5lbC5yZWNvcmQsZm9ybV0pXCIgY2xhc3M9XCJjbGljay1pY29uXCIgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPiB7eyAhdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX0gLS0+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZHJhZy1pY29uIGZhLXNvbGlkIGZhLWZpbGUtZXhwb3J0XCIgKGNsaWNrKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKFtwYW5lbC5yZWNvcmQsZm9ybV0pXCIgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+PC9pPiB7eyAhdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIiFjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgIHt7ICF0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA/IGZvcm0uTmFtZSA6IFwiXCIgfX0gdi57eyBwYW5lbC5yZWNvcmQuVmVyc2lvbiB9fSAtIHt7IHByaW50QWRkaXRpb25hbEluZm8ocGFuZWwucmVjb3JkKSB9fVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+ICAgICAgICAgIFxyXG4gICAgICAgICAgPCEtLSNyZWdpb24gQk9UVE9OSSBQRVIgTEUgQVpJT05JIC0tPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNcIiBcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgaWQ9XCJwLXt7cGFuZWwucmVjb3JkLklEfX0te3tidXR0b24uaWNvbn19XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiIFxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICBbaGlkZGVuXT1cImJ1dHRvbi5pY29uID09ICdmaWxlX2NvcHknICYmIChwYW5lbHMubGVuZ3RoID09IDAgfHwgcGFuZWwucmVjb3JkLlZlcnNpb24gIT0gcGFuZWxzWzBdLnJlY29yZC5WZXJzaW9uKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbi5mbihwYW5lbCxpLCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBleHRlcm5hbEJ1dHRvbnNcIiBcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXh0ZXJuYWxDYWxsYmFjaygkZXZlbnQsYnV0dG9uLmZuLHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhhbXBsZS1zcGFjZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFnZVN0YXRlICE9IG51bGxcIj5cclxuXHJcbiAgICAgICAgICA8bGliLXNpbmdsZS1yZWNvcmRcclxuICAgICAgICAgICAgKm5nSWY9XCJsaWJTaW5nbGVMb2FkZWRcIlxyXG4gICAgICAgICAgICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG4gICAgICAgICAgICBbcmVjb3JkXSA9IFwicGFuZWwucmVjb3JkXCIgXHJcbiAgICAgICAgICAgIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIlxyXG4gICAgICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICAgICAgW291dENvbXBpbGVDb25maWd1cmF0aW9uc109XCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGFnZVN0YXRlXT1cInBhbmVsLnBhZ2VTdGF0ZVwiXHJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwic2F2ZU9yRXhpdEZvcm0oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgPC9saWItc2luZ2xlLXJlY29yZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDwvbWF0LWFjY29yZGlvbj5cclxuXHJcblxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSNyZWdpb24gRElBTE9HIEFHR0lVTlRBIFJJU1BPU1RBIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5BZGREaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZVwiPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW29yZ2FJRF09XCJvcmdhSURcIlxyXG4gICAgICAgIFtvbmx5Vmlld109XCJmYWxzZVwiXHJcbiAgICAgICAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXHJcbiAgICAgICAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRpbmdcIlxyXG4gICAgICAgIFtzaG93VGl0bGVdPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGVcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cImNvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcblxyXG4gICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZGRBZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuPG5nLXRlbXBsYXRlICNvcGVuR3JhcGhEaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZSBncmFwaENhcmRcIj5cclxuICAgIFxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBlcXAtZHluYW1pYy1tb2R1bGUtdGl0bGUgZ3JhcGgtaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5HcmFmaWNvIHt7IGZvcm0uTmFtZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2VHcmFwaHMoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cclxuICAgICAgICAgIGFycm93X2JhY2tcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+SW5kaWV0cm88L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8Z3JhcGhzXHJcbiAgICAgICAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdID0gXCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dID0gXCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZ3JhcGhzPlxyXG5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBESUFMT0cgVklTVUFMSVpaQVpJT05FIEdSQUZJQ0kgLS0+XHJcbiJdfQ==
|
|
934
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBYSxNQUFNLEVBQWdCLE1BQU0saUNBQWlDLENBQUM7QUFFbEYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDcEcsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGtEQUFrRCxDQUFDO0FBSTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RyxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHOUUsT0FBTyxFQUFhLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFeEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjcEUsTUFBTSxPQUFPLDJCQUEyQjtJQXNGdEMscUJBQXFCO0lBQ3JCLFlBQ1Usb0JBQTBDLEVBQzFDLGNBQWlDLEVBQ2pDLE1BQWlCLEVBQ2pCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixRQUFrQjtRQUxsQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBcEZuQixTQUFJLEdBQVMsSUFBSSxDQUFDO1FBQ2xCLDRCQUF1QixHQUFhLElBQUksQ0FBQztRQUN6QyxvQkFBZSxHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUNqRSxrQkFBYSxHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUMvRCxhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLFlBQU8sR0FBcUIsSUFBSSxDQUFDO1FBQ2pDLG9CQUFlLEdBQVEsSUFBSSxDQUFDO1FBRTVCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLDRCQUF1QixHQUFRLElBQUksQ0FBQztRQUU3Qyx1QkFBa0IsR0FDaEIsSUFBSSx5Q0FBeUMsRUFBRSxDQUFDO1FBRWxELHlCQUF5QjtRQUN6QixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFHL0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixtQkFBYyxHQUFjLElBQUksS0FBSyxFQUFXLENBQUM7UUFDMUMsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQzNDLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFLMUIsWUFBTyxHQUFHLElBQUksS0FBSyxFQUFnQixDQUFDO1FBQ3BDLG9CQUFlLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFFNUMsWUFBTyxHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUN6RCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQVM3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU5QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBS3pDLG1CQUFjLEdBQXlCLElBQUksS0FBSyxFQUFpQixDQUFDO1FBRWxFLG1CQUFjLEdBQWUsSUFBSSxLQUFLLEVBQU8sQ0FBQztRQUU5QyxhQUFhO1FBQ2IsVUFBSyxHQUFHLFFBQVEsQ0FBQTtRQUNoQixhQUFRLEdBQUcsWUFBWSxDQUFBO1FBR3ZCLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLHlCQUFvQixHQUF3QixJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUV0RSxVQUFVO1FBQ0Esd0JBQW1CLEdBR3hCLElBQUksWUFBWSxFQUF5QyxDQUFDO1FBRXJELG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbEUsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRSx5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4RSxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pELGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUQsUUFBRyxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzNELGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7UUFDekUsdUJBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFVdEUsQ0FBQztJQUNMLHdCQUF3QjtJQUV4QixrQkFBa0I7SUFDbEIsUUFBUTtRQUNOLDBCQUEwQjtRQUMxQixxREFBcUQ7UUFDckQsc0JBQXNCO1FBRXRCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhHLGtEQUFrRDtRQUVsRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSwwQkFBMEIsQ0FDNUQsS0FBSyxFQUNMLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFDM0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFDekMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FDM0MsQ0FBQztRQUNGLGlHQUFpRztRQUNqRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUNELHFCQUFxQjtJQUVyQixxQkFBcUI7SUFDckIsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLGlEQUFpRDtRQUVqRCwwRUFBMEU7UUFDMUUsSUFDRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxTQUFTO1lBQ3RDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsSUFBSSxLQUFLLEVBQzlDO1lBQ0EsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFDRCx3QkFBd0I7SUFFeEIsbUJBQW1CO0lBQ25COzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFDRCxzQkFBc0I7SUFFdEIsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFFYjtnQkFDRSxNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztnQkFDaEosWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSTtnQkFDdkMsWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUMsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztnQkFDNUMsWUFBWSxFQUFFLHVCQUF1QjtnQkFDckMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0MsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtnQkFDekMsWUFBWSxFQUFFLG9CQUFvQjtnQkFDbEMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7YUFDRjtTQUVGLENBQUE7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUNELHlCQUF5QjtJQUV6QixzQkFBc0I7SUFDdEIsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFDRCx5QkFBeUI7SUFFekIscUJBQXFCO0lBQ3JCLFdBQVcsQ0FBQyxLQUFhLElBQUksQ0FBQyxNQUFNO1FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDckIsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxLQUFLLEVBQXNCLENBQUM7WUFDbEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN2QixTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsRUFBRTtnQkFDZCxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzthQUN4QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFDaEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBUyxFQUFFLEVBQUU7Z0JBQ1osYUFBYSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBRS9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQztvQkFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUMzRDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVyxDQUFDO2lCQUMzQztnQkFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFDO29CQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztpQkFDckU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7aUJBQ3JEO2dCQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FDYixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUNELHdCQUF3QjtJQUV4QiwwQkFBMEI7SUFDMUI7O09BRUc7SUFDSyxnQkFBZ0I7UUFFdEIsbUNBQW1DO1FBRW5DLGtDQUFrQztRQUNsQyxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ0wseURBQXlEO1lBQ3pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBQ0QsNkJBQTZCO0lBRTdCLGtDQUFrQztJQUNsQyxzQ0FBc0M7SUFFdEMsVUFBVTtJQUNWLDJFQUEyRTtJQUMzRSxnRkFBZ0Y7SUFDaEYsaUZBQWlGO0lBQ2pGLCtFQUErRTtJQUMvRSw4QkFBOEI7SUFDOUIsVUFBVTtJQUVWLDZGQUE2RjtJQUU3RixnREFBZ0Q7SUFDaEQsMERBQTBEO0lBQzFELDJFQUEyRTtJQUMzRSxpQkFBaUI7SUFDakIsb0ZBQW9GO0lBQ3BGLFVBQVU7SUFDVix5QkFBeUI7SUFDekIsMEJBQTBCO0lBQzFCLGtEQUFrRDtJQUNsRCxrQkFBa0I7SUFDbEIsc0RBQXNEO0lBQ3RELG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGdDQUFnQztJQUNoQyw4REFBOEQ7SUFDOUQsY0FBYztJQUVkLHNEQUFzRDtJQUV0RCxJQUFJO0lBQ0oscUNBQXFDO0lBRXJDLDJCQUEyQjtJQUMzQjs7OztPQUlHO0lBQ0ssaUJBQWlCLENBQUMsS0FBZ0I7UUFDeEMsSUFBSSxNQUFNLEdBQWlCLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyRSxRQUFRLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDdkIsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxhQUFhLEdBQUc7b0JBQ3JCLEtBQUssRUFBRSx5Q0FBeUM7b0JBQ2hELElBQUksRUFBRSwyQ0FBMkM7aUJBQ2xELENBQUM7Z0JBQ0YsTUFBTSxDQUFDLE1BQU0sR0FBRztvQkFDZCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtpQkFDeEMsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxhQUFhLENBQUMsY0FBYyxDQUFDO2dCQUNoQyxJQUNHLEtBQW1CLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUNsRTtvQkFDQSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQzlCLElBQ0csS0FBbUIsQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQ2pFO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7cUJBQ3BDO3lCQUFNLElBQ0osS0FBbUIsQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQ2hFO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUksS0FBbUIsQ0FBQyxVQUFVOzRCQUM3QyxDQUFDLENBQUUsS0FBbUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7NEJBQ3JELENBQUMsQ0FBQyxZQUFZLENBQUM7cUJBQ2xCO2lCQUNGO2dCQUNELE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEMsSUFBSyxLQUFzQixDQUFDLGNBQWMsRUFBRTtvQkFDMUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBSSxLQUFzQixDQUFDLGNBQWMsQ0FBQztpQkFDbEU7cUJBQU0sSUFBSSxDQUFFLEtBQXNCLENBQUMsU0FBUyxFQUFFO29CQUM3QyxNQUFNLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztpQkFDOUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFFOUIsTUFBTTtZQUVOLEtBQUssYUFBYSxDQUFDLFdBQVcsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLEdBQUcsT0FBUSxLQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEYsTUFBTTtZQUNOLEtBQUssYUFBYSxDQUFDLGlCQUFpQixDQUFDO2dCQUVuQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7b0JBQ2pDLElBQUssS0FBd0IsQ0FBQyxjQUFjLEVBQUU7d0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTs0QkFDM0QsT0FBTyxJQUFJLENBQUM7eUJBQ2I7NkJBQU07NEJBQ0wsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFFLEtBQXdCLENBQUMsVUFBVSxDQUFDO2lDQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUN6QixLQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDeEMsQ0FDRjtpQ0FDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2Y7cUJBQ0Y7eUJBQU07d0JBRUwsSUFBSyxLQUF3QixDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUM7NEJBRS9DLElBQUksRUFBRSxHQUFJLEtBQXdCLENBQUMsV0FBVyxDQUFDOzRCQUMvQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUM7Z0NBQ2IsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDNUIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dDQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7b0NBQ3JCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQzNCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUM7d0NBQ25DLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7cUNBQ3hCO2dDQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNILE9BQU8sVUFBVSxDQUFDOzZCQUNuQjtpQ0FBTTtnQ0FDTCxPQUFPLEVBQUUsQ0FBQzs2QkFDWDt5QkFFRjt3QkFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUUsS0FBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzNELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSCxLQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUNqRSxDQUFDO3FCQUNIO2dCQUNILENBQUMsQ0FBQztnQkFDRixNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBRTVCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUM7Z0JBQzFCLE9BQU87Z0JBQ1AsTUFBTTtTQUNUO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELDhCQUE4QjtJQUU5Qiw0QkFBNEI7SUFDNUI7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsa0JBQWtCO1FBQ3RCLElBQUksbUJBQW1CLEdBQUc7WUFDeEI7Z0JBQ0UsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQztRQUVGLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSTtZQUNsQyxJQUFJLENBQUMscUJBQXFCO1lBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQ3REO1lBQ0EsMEJBQTBCO1lBQzFCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFDdEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBcUIsRUFBRSxFQUFFO2dCQUN4QixvREFBb0Q7Z0JBQ3BELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQ0YsQ0FBQztTQUNIO2FBQU0sSUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUI7WUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU87WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFDL0Q7WUFDQSxzQkFBc0I7WUFDdEIsSUFBSSxtQkFBbUIsR0FBRztnQkFDeEI7b0JBQ0UsU0FBUyxFQUFFLE9BQU87b0JBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2lCQUN4QztnQkFDRDtvQkFDRSxTQUFTLEVBQUUsUUFBUTtvQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtvQkFDdEMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7aUJBQ3hDO2FBQ0YsQ0FBQztZQUVGLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFDL0QsbUJBQW1CLEVBQ25CLENBQUMsR0FBcUIsRUFBRSxFQUFFO2dCQUN4Qiw2REFBNkQ7Z0JBQzdELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDOUQ7SUFDSCxDQUFDO0lBQ0QsK0JBQStCO0lBRS9CLDhCQUE4QjtJQUN0QixvQkFBb0IsQ0FBQyxHQUFxQjtRQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVMsQ0FBQztRQUNqQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsbURBQW1EO1lBQ25ELElBQUksTUFBTSxHQUFXLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEMsZ0VBQWdFO1lBQ2hFLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDdkIsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN6QixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVoRixNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELGdFQUFnRTtZQUNoRSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkgsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsY0FBYyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUUvRyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSSxFQUFDO2dCQUN2QyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUM7b0JBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7NEJBQ2hJLFFBQVEsR0FBRyxLQUFLLENBQUM7eUJBQ2xCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7WUFFRCxJQUFJLFFBQVEsRUFBQztnQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRXhDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksRUFBRTtvQkFDaEMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7NEJBQ3ZHLGFBQWEsR0FBRyxLQUFLLENBQUM7eUJBQ3ZCO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7YUFFbEc7UUFHSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhO0lBQ3RCLENBQUM7SUFDRCxpQ0FBaUM7SUFFakMscUJBQXFCO0lBQ3JCLFdBQVcsQ0FBQyxLQUFVLEVBQUUsTUFBYztRQUNwQyx1Q0FBdUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSSxFQUFFO1lBQ3hDLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDakIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDcEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQztZQUN4Qyw4QkFBOEI7WUFDOUIscUJBQXFCO1lBQ3JCLFlBQVk7U0FDYjthQUFNO1lBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckIsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBQ0Qsd0JBQXdCO0lBRXhCLDBCQUEwQjtJQUMxQjs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLE1BQWMsRUFBRSxRQUFpQixFQUFFLENBQUM7UUFDbkQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLHVEQUF1RDtJQUN6RCxDQUFDO0lBQ0QsNkJBQTZCO0lBRTdCLG9CQUFvQjtJQUNwQixVQUFVLENBQUMsS0FBWSxFQUFFLFFBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQVM7UUFDdEQsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixzQ0FBc0M7UUFDdEMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsbURBQW1EO1FBQ25ELElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxxQkFBcUIsRUFBRTtZQUM1QyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNyQixLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN4QjthQUFNO1lBQ0wsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDcEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLHVEQUF1RDtJQUN6RCxDQUFDO0lBQ0QsdUJBQXVCO0lBRXZCLG9CQUFvQjtJQUNwQixVQUFVLENBQUMsS0FBWSxFQUFFLFFBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQVM7UUFDdEQsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixzQ0FBc0M7UUFFdEMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksbUJBQW1CLEVBQUU7WUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDckIsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDeEI7YUFBTTtZQUNMLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RSx1REFBdUQ7SUFDekQsQ0FBQztJQUNELHVCQUF1QjtJQUV2QiwwQkFBMEI7SUFDMUIsZ0JBQWdCLENBQUMsRUFBUyxFQUFFLFFBQWtCLEVBQUUsTUFBVztRQUN6RCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsNkJBQTZCO0lBRTdCLHlCQUF5QjtJQUN6Qjs7O09BR0c7SUFDSCxlQUFlLENBQUMsS0FBWSxFQUFFLFFBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQVM7UUFDM0QsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVyQiw0Q0FBNEM7UUFFNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzRCxZQUFZLEVBQUUsSUFBSTtZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixLQUFLLEVBQUUsTUFBTTtZQUNiLFNBQVMsRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztJQUVMLENBQUM7SUFDRCw0QkFBNEI7SUFFNUIsc0JBQXNCO0lBQ3RCOzs7T0FHRztJQUNILFlBQVksQ0FBQyxNQUFjLEVBQUUsRUFBUztRQUNwQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCx5QkFBeUI7SUFFekIsc0JBQXNCO0lBQ3RCOztPQUVHO0lBQ0ssWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFDRCx5QkFBeUI7SUFFekIsd0JBQXdCO0lBQ3hCOztPQUVHO0lBQ0gsY0FBYyxDQUFDLE1BQWM7UUFDM0IsOERBQThEO1FBQzlELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCwyQkFBMkI7SUFFM0IsMkJBQTJCO0lBQzNCLGlCQUFpQixDQUFDLEtBQUs7UUFDckIsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCw4QkFBOEI7SUFFOUIsOEJBQThCO0lBQzlCOzs7Ozs7OztPQVFHO0lBQ0gsb0JBQW9CLENBQUMsS0FBNEM7UUFFL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3JELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWhELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixJQUNFLElBQUksQ0FBQyxxQkFBcUI7Z0JBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPO2dCQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFDbEQ7Z0JBQ0Esd0NBQXdDO2dCQUN4QyxJQUFJLG1CQUFtQixHQUFHO29CQUN4Qjt3QkFDRSxTQUFTLEVBQUUsT0FBTzt3QkFDbEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSzt3QkFDOUIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7cUJBQ3hDO29CQUNEO3dCQUNFLFNBQVMsRUFBRSxTQUFTO3dCQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPO3dCQUNoQyxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQztxQkFDeEM7aUJBQ0YsQ0FBQztnQkFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUMxRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtvQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFDO3dCQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQzNEO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7cUJBQzNDO29CQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUM7d0JBQy9FLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO3FCQUNyRTt5QkFBTTt3QkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssRUFBZ0IsQ0FBQztxQkFDckQ7b0JBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFFN0MsNEJBQTRCO29CQUM1QixJQUFJLG1CQUFtQixHQUFHO3dCQUN4Qjs0QkFDRSxTQUFTLEVBQUUsSUFBSTs0QkFDZixVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFOzRCQUMzQixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzt5QkFDeEM7cUJBQ0YsQ0FBQztvQkFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFDbEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBYyxFQUFFLEVBQUU7d0JBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQzt3QkFFMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ3JCLENBQUMsQ0FDRixDQUFDO2dCQUNKLENBQUMsQ0FDRixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ3BCO1NBQ0Y7YUFBTTtZQUNMLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksS0FBSyxFQUFzQixDQUFDO1lBQ2xDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDdkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUN2QixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzthQUN4QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFDaEQsbUJBQW1CLEVBQ25CLENBQUMsR0FBUyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBRS9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQztvQkFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUMzRDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVyxDQUFDO2lCQUMzQztnQkFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFDO29CQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztpQkFDckU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7aUJBQ3JEO2dCQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBRTdDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDckIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQ2IsQ0FBQztZQUVGLDhCQUE4QjtZQUM5Qix5QkFBeUI7WUFDekIscURBQXFEO1NBQ3REO0lBQ0gsQ0FBQztJQUNELGlDQUFpQztJQUVqQyxpQkFBaUI7SUFDakIsT0FBTztRQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUM7Z0JBQ3BDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3JFO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0Qsb0JBQW9CO0lBRXBCLHNCQUFzQjtJQUN0QixZQUFZO1FBQ1Ysd0dBQXdHO1FBQ3hHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUIsSUFBRyxLQUFLLENBQUMsU0FBUyxHQUFHLG1CQUFtQixFQUFDO2dCQUN2QyxLQUFLLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDO2FBQ3pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLG1CQUFtQixHQUE4QixJQUFJLEtBQUssRUFBc0IsQ0FBQztRQUN2RixtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDdkIsU0FBUyxFQUFFLElBQUk7WUFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDdkIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7U0FDeEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQ2hELG1CQUFtQixFQUNuQixDQUFDLEdBQVMsRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUUvQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUM7Z0JBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMzRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVyxDQUFDO2FBQzNDO1lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsRUFBQztnQkFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDckU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7YUFDckQ7WUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBRTdDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUMzRCxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNO2dCQUNiLFNBQVMsRUFBRSxPQUFPO2FBQ25CLENBQUMsQ0FBQztRQUVMLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCx5QkFBeUI7SUFFekIsb0JBQW9CO0lBQ3BCLFVBQVU7UUFFUixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMvRCxZQUFZLEVBQUUsSUFBSTtZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsTUFBTTtZQUNoQixTQUFTLEVBQUUsTUFBTTtZQUNqQixTQUFTLEVBQUUsT0FBTztTQUNuQixDQUFDLENBQUM7UUFDSCxzRkFBc0Y7SUFDeEYsQ0FBQztJQUNELHVCQUF1QjtJQUV2QixxQkFBcUI7SUFDckIsV0FBVztRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBQ0Qsd0JBQXdCO0lBRXhCLHlCQUF5QjtJQUN6QixlQUFlLENBQUMsTUFBYztRQUM1QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FBRTtRQUNyRSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE9BQU07U0FBQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsNEJBQTRCO0lBRTVCLDhCQUE4QjtJQUM5QixvQkFBb0IsQ0FBQyxNQUFjO1FBQ2pDLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUFFO1FBQ3JFLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtZQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUMsT0FBTTtTQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxpQ0FBaUM7SUFFakMsNkJBQTZCO0lBQzdCLG1CQUFtQixDQUFDLE1BQWM7UUFDaEMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFFekcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUksRUFBQztvQkFFaEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDO29CQUFBLENBQUMsQ0FBQywrQkFBK0I7b0JBRTNELHVDQUF1QztvQkFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxLQUFLLEVBQUU7d0JBQ1QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2QixJQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUM7NEJBQ2hDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ25DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQy9CLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQzt5QkFDMU87cUJBQ0Y7eUJBQU07d0JBQ0wsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBRSxHQUFHLEdBQUcsSUFBSSxDQUFDO3FCQUNuSztpQkFFRjtZQUVILENBQUMsQ0FBQyxDQUFDO1NBRUY7UUFFRCw4Q0FBOEM7UUFDOUMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsZ0NBQWdDO0lBRWhDLG9CQUFvQixDQUFDLEVBQU87UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQU87UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxFQUFZO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBZTtRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsd0JBQXdCLENBQUMsUUFBZ0I7UUFFdkMsNEJBQTRCO1FBQzVCLElBQUksbUJBQW1CLEdBQUc7WUFDeEI7Z0JBQ0UsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUNsRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFjLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUM7UUFDcEcsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGNBQWMsQ0FBQyxZQUEwQjtRQUN2QyxJQUFJLFdBQVcsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUVqRCxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNsRCxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUMzRCxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ3ZELFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFFckQsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzdCLFdBQVcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUMxQixXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdEMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUUxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O3lIQTkvQlUsMkJBQTJCOzZHQUEzQiwyQkFBMkIsdXVDQzFEeEMsbXVYQW9SQTs0RkQxTmEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLHVCQUF1QjsyT0FNeEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQWlCdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVFJLGFBQWE7c0JBQTNELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHSSxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkEwQnJDLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxHQUFHO3NCQUFaLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgVG13VGFibGVDb21wb25lbnQsXHJcbiAgTnVtYmVyQ29sdW1uUGlwZSxcclxuICBUeXBlQ29sdW1uXHJcbn0gZnJvbSBcInRtdy10YWJsZVwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi8uLi8uLi8uLi8uLi8vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLy4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEZpcmVUcmlnZ2VyLCBUcmlnZ2VyLCBBY3Rpb25CdXR0b24sIEFjdGlvbkZsYWdFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBkYkRhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2RiLWRhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkLCBEYXRlVGltZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMYWJlbEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGFiZWxGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNb2RlRW51bSwgVGltZVR5cGVFbnVtIH0gZnJvbSAndG13LXBpY2tlcic7XHJcbmltcG9ydCB7IFRhYmVsbGFyRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcblxyXG50eXBlIFBhbmVsID0ge1xyXG4gIHJlY29yZDogUmVjb3JkLFxyXG4gIGlzT3BlbjogYm9vbGVhbixcclxuICBwYWdlU3RhdGU6IHN0cmluZyxcclxuICBoaWdobGlnaHRlZDogYm9vbGVhblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIFxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBjb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIG91dENvbXBpbGVDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3JnYUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbnM6IEFycmF5PEFjdGlvbkJ1dHRvbj4gPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIG9ubHlWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWNvcmRzOiBBcnJheTxEeW5SZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBoaWdobGlnaHRGaWx0ZXI6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGNvbnRlc3R1YWxpemF0aW9uUGFyYW1zOiBhbnkgPSBudWxsO1xyXG5cclxuICBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG5cclxuICAvLyB2YWx1ZXM6IEFycmF5PFJlY29yZD47XHJcbiAgdGVzdCA9IGZhbHNlO1xyXG4gIGlzRHVwbGljYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZFJlY29yZDogYW55OyAvLyBSZWNvcmQgfCBzdHJpbmc7XHJcbiAgbG9hZGVyOiBib29sZWFuO1xyXG4gIGxvYWRlZGZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwYW5lbE9wZW5TdGF0ZTogYm9vbGVhbltdID0gbmV3IEFycmF5PGJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHNlbGVjdGVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHZpc3VhbGl6emFDb250ZW51dG8gPSBmYWxzZTtcclxuICBtb2RpZmljYUNvbnRlbnV0byA9IGZhbHNlO1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChcInRhYmxlUmVjb3Jkc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJlY29yZHM6IFRtd1RhYmxlQ29tcG9uZW50O1xyXG5cclxuICBjb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICB0YWJlbGxhckNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIHBhbmVsczogQXJyYXk8UGFuZWw+XHJcbiAgYnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgcG9wdXBMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5BZGREaWFsb2dcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG9wZW5BZGREaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkFkZERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICBAVmlld0NoaWxkKFwib3BlbkdyYXBoRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuR3JhcGhEaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkdyYXBoRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIHRvZG9MaXN0OiBhbnk7XHJcbiAgaXNGdWxsT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzVGFiZWxsYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0xpc3RWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICB0YWJlbGxhckNvbmRpdGlvbkxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBtaW5wZXJpb2Q6IERhdGU7XHJcbiAgbWF4cGVyaW9kOiBEYXRlO1xyXG5cclxuICB0YWJlbGxhckZpZWxkczogQXJyYXk8VGFiZWxsYXJGaWVsZD4gPSBuZXcgQXJyYXk8VGFiZWxsYXJGaWVsZD4oKTtcclxuICBzZWxlY3RlZFRhYmVsbGFyRmllbGRzOiBBcnJheTxUYWJlbGxhckZpZWxkPjtcclxuICB0YWJlbGxhclZhbHVlczogQXJyYXk8YW55PiA9IG5ldyBBcnJheTxhbnk+KCk7XHJcblxyXG4gIC8vIFRNVy1QSUNLRVJcclxuICBtb2RlcyA9IE1vZGVFbnVtXHJcbiAgdGltZVR5cGUgPSBUaW1lVHlwZUVudW1cclxuICBtb2RlOiBNb2RlRW51bTtcclxuXHJcbiAgbGliU2luZ2xlTG9hZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICB2aXNpYmxlQWN0aW9uQnV0dG9uczogQXJyYXk8QWN0aW9uQnV0dG9uPiA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcblxyXG4gIC8vIGFkZCBuZXdcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHtcclxuICAgIHJlY29yZDogUmVjb3JkO1xyXG4gICAgb25seVZpZXc6IGJvb2xlYW47XHJcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdSZWxlYXNlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRHJhZ0luZGljYXRvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLy8jcmVnaW9uIGNvbnN0cnVjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGRiRGF0ZVNlcnZpY2U6IGRiRGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxyXG4gICkgeyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbnN0cnVjdG9yXHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uSW5pdFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5wYW5lbE9wZW5TdGF0ZSA9IFtcclxuICAgIC8vICAgLi4uQXJyYXkodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubGVuZ3RoICsgMSksXHJcbiAgICAvLyBdLm1hcCgoKSA9PiBmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMudmlzaWJsZUFjdGlvbkJ1dHRvbnMgPSB0aGlzLmFjdGlvbkJ1dHRvbnMuZmlsdGVyKHggPT4geC5TaG93SW4gPT0gQWN0aW9uRmxhZ0VudW0uTElTVFZJRVcpO1xyXG5cclxuICAgIC8vIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbixcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuYWRkaXRpb25hbEluZm8sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnByZWZpbHRlclBhcmFtcyxcclxuICAgICk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJsaXN0LXZpZXcgLSBvdXRjb21waWxlQ29uZmlndXJhdGlvbnMgXCIsIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIHRoaXMuY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBuZ09uSW5pdFxyXG5cclxuICAvLyNyZWdpb24gbmdPbkNoYW5nZXNcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ25nT25DaGFuZ2VzJywgY2hhbmdlcyk7XHJcblxyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKFxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5maXJzdENoYW5nZSA9PSBmYWxzZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5yZWxvYWRUYWJsZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25DaGFuZ2VzXHJcblxyXG4gIC8vI3JlZ2lvbiBvbk9wZW5pbmdcclxuICAvKipcclxuICAgKiBmdW56aW9uZSBkaSBhcGVydHVyYSBkZWxsJ2FjY29yZGlvblxyXG4gICAqIEBwYXJhbSBpbmRpY2UgXHJcbiAgICovXHJcbiAgb25PcGVuaW5nKGluZGljZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRpY2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbk9wZW5pbmdcclxuXHJcbiAgY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCkge1xyXG4gICAgdGhpcy5idXR0b25zID0gW1xyXG5cclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImV5ZVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIlZpc3VhbGl6emFcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMudmlldyAmJiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUgfHwgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlKSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJ2aWV3LWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdSZWNvcmQocGFuZWwsIHRydWUsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJlZGl0XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJlZGl0LWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkVkaXRSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiY29weVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkR1cGxpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImR1cGxpY2F0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwidHJhc2hcIixcclxuICAgICAgICBcInRleHRcIjogXCJDYW5jZWxsYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZGVsZXRlLWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJlY29yZChwYW5lbCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIF1cclxuICAgIHRoaXMuYnV0dG9ucyA9IHRoaXMuYnV0dG9ucy5jb25jYXQodGhpcy5leHRlcm5hbEJ1dHRvbnMpLmZpbHRlcih4ID0+IHgudmlzaWJsZSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb3BlblRhYmVsbGFyXHJcbiAgb3BlblRhYmVsbGFyKCl7XHJcbiAgICB0aGlzLmlzTGlzdFZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNUYWJlbGxhciA9IHRydWU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuVGFiZWxsYXJcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5MaXN0Vmlld1xyXG4gIG9wZW5MaXN0Vmlldygpe1xyXG4gICAgdGhpcy5pc1RhYmVsbGFyID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTGlzdFZpZXcgPSB0cnVlO1xyXG4gIH0gIFxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuTGlzdFZpZXdcclxuXHJcbiAgLy8jcmVnaW9uIGdldEZvcm1CeUlEXHJcbiAgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJMaXN0Vmlld0Zvcm1SZWNvcmRDb21wb25lbnQgLSBnZXQgRk9STVwiLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRmb3JtID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4geyB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldEZvcm1CeUlEXHJcblxyXG4gIC8vI3JlZ2lvbiBjb25maWd1cmVDb2x1bW5zXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBsZSBjb2xvbm5lIGRlbGxhIHRhYmVsbGEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG5cclxuICAgIC8vIHRoaXMuY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zKCk7XHJcblxyXG4gICAgLy8gdGhpcy5jcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpO1xyXG4gICAgLy8gdGhpcy5jcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKTtcclxuICAgIGlmICh0aGlzLnJlY29yZHMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdSZWNvcmRzIEV4aXN0cycsIHRoaXMucmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkodGhpcy5yZWNvcmRzKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuXHJcbiAgLy8jcmVnaW9uIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1uc1xyXG4gIC8vIHByaXZhdGUgY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zKCl7XHJcblxyXG4gIC8vICAgICAvKipcclxuICAvLyAgICAgICogTWV0b2RvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBwZXIgbGEgdGFiZWxsYS5cclxuICAvLyAgICAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gIC8vICAgICAgKiBMZSBjb2xvbm5lIHZlbmdvbm8gY3JlYXRlIHBlciBpIEJhc2VGaWVsZCBjb24gaWwgZmxhZyBJbkxpc3RWaWV3IGEgVFJVRVxyXG4gIC8vICAgICAgKiBvcHB1cmUsIG5lbCBjYXNvIG5vbiBzaWFubyBzdGF0aSBzcGVjaWZpY2F0aSBpIGNhbXBpIGRhIHZpc3VhbGl6emFyZSxcclxuICAvLyAgICAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAvLyAgICAgICovXHJcblxyXG4gIC8vICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMnLCB0aGlzLmZvcm0pO1xyXG4gICAgXHJcbiAgLy8gICAgICAgdmFyIGZpZWxkc0ZvckNvbHVtbnM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgLy8gICAgICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5Jbkxpc3RWaWV3KSkge1xyXG4gIC8vICAgICAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkluTGlzdFZpZXcpO1xyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuT3JkaW5hbFBvc2l0aW9uIDwgNik7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAvLyAgICAgICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gIC8vICAgICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICAgICAgPyAxXHJcbiAgLy8gICAgICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICAgICAgPyAtMVxyXG4gIC8vICAgICAgICAgICAgIDogMFxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHRoaXMuY3JlYXRlRmllbGRDb2x1bW4oZmllbGQpKTtcclxuICAvLyAgICAgICAgIH0pO1xyXG5cclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiRklOQUwgQ09MVU1TTlwiLCB0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAvLyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsJ29nZ2V0dG8gQ29uZmlndXJlQ29sdW1uIGNoZSByYXBwcmVzZW50YSBpbCBCYXNlRmllbGQgcGFzc2F0byBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGxhIGNvbG9ubmEgbmVsbGEgdGFiZWxsYVxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuYSBDb25maWdDb2x1bW4gcGVyIGxhIHRhYmVsbGFcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkOiBCYXNlRmllbGQpOiBDb25maWdDb2x1bW4ge1xyXG4gICAgdmFyIGNvbHVtbjogQ29uZmlnQ29sdW1uID0geyBrZXk6IGZpZWxkLk5hbWUsIGRpc3BsYXk6IGZpZWxkLkxhYmVsIH07XHJcbiAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uQm9vbGVhbjtcclxuICAgICAgICBjb2x1bW4uYm9vbGVhblZhbHVlcyA9IHtcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLnN0eWxlcyA9IHtcclxuICAgICAgICAgIGZsZXg6IFwiMCAwIDclXCIsXHJcbiAgICAgICAgICBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgIT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uRGF0ZTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSBcImRkL01NL3l5eXkgSEg6bW1cIjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICAgPyAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgICAgICAgICAgICAgOiBcImRkL01NL3l5eXlcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCkge1xyXG4gICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkNVUlJFTkNZO1xyXG4gICAgICAgICAgY29sdW1uLmN1cnJlbmN5UGlwZUNvZGUgPSAoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbDtcclxuICAgICAgICB9IGVsc2UgaWYgKCEoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5ERUNJTUFMO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgIFxyXG4gICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkV0aWNoZXR0YVwiXTpcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7IHJldHVybiAoZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhOyB9O1xyXG4gICAgICBicmVhazsgICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcblxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudFtmaWVsZC5OYW1lXSB8fCBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGspID0+XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRbZmllbGQuTmFtZV0uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID09IG51bGwpeyBcclxuXHJcbiAgICAgICAgICAgICAgdmFyIHZzID0gKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZztcclxuICAgICAgICAgICAgICBpZiAodnMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHZzLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaCgob3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG9wLnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc1sxXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZHZhbHVlID0gdmFsdWVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGspID0+XHJcbiAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba10gPT0gZWxlbWVudFtmaWVsZC5OYW1lXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9ICBcclxuICAvLyNlbmRyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuXHJcbiAgLy8jcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBub24gY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEJ5Rm9ybUlERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgbGV0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJVc2VySURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiY29udHJvbGxhcmUgbGUgY29uZmlndXJhemlvbmkgZGVsbCdlbmRwb2ludFwiKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG5cclxuICAvLyNyZWdpb24gZ2VuZXJhdGVBbnN3ZXJzQXJyYXlcclxuICBwcml2YXRlIGdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlczogQXJyYXk8RHluUmVjb3JkPikge1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgdGhpcy5wYW5lbHMgPSBuZXcgQXJyYXk8UGFuZWw+KCk7XHJcbiAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZW5lcmF0ZUFuc3dlcnNBcnJheVwiLCByKVxyXG4gICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIlNlcmlhbGl6ZWRWYWx1ZXNcIiwgci5TZXJpYWxpemVkVmFsdWVzKVxyXG4gICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gdGhpcy5kYkRhdGVTZXJ2aWNlLnBhcnNlRGF0ZWZyb21EQihyLkFuc3dlckRhdGUpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICB0bXBSZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gci5IVE1McmVhZGFibGVWYWx1ZXM7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZGl0aW9uYWxQYXJhbXNcIiwgci5BZGRpdGlvbmFsUGFyYW1zKVxyXG4gICAgICB0bXBSZWMuQWRkaXRpb25hbFBhcmFtcyA9IHIuQWRkaXRpb25hbFBhcmFtcyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbFBhcmFtcyAhPSBudWxsID8gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxQYXJhbXMpIDogXCJcIjtcclxuICAgICAgdG1wUmVjLkFkZGl0aW9uYWxJbmZvID0gci5BZGRpdGlvbmFsSW5mbyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbEluZm8gIT0gbnVsbCA/IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsSW5mbykgOiBcIlwiO1xyXG5cclxuICAgICAgdmFyIGZvdW5ka2V5ID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuY29udGVzdHVhbGl6YXRpb25QYXJhbXMgIT0gbnVsbCl7XHJcbiAgICAgICAgaWYgKHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zICE9IG51bGwpe1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb250ZXN0dWFsaXphdGlvblBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCB0aGlzLmNvbnRlc3R1YWxpemF0aW9uUGFyYW1zW2tleV0uaW5kZXhPZih0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1trZXldKSA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgZm91bmRrZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZm91bmRrZXkpe1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuXHJcbiAgICAgICAgdmFyIGlzSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRGaWx0ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgaXNIaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmhpZ2hsaWdodEZpbHRlcikuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNbZmlsdGVyXSB8fCB0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdICE9IHRoaXMuaGlnaGxpZ2h0RmlsdGVyW2ZpbHRlcl0pIHtcclxuICAgICAgICAgICAgICBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYW5lbHMucHVzaCh7IHJlY29yZDogdG1wUmVjLCBpc09wZW46IGZhbHNlLCBwYWdlU3RhdGU6IG51bGwsIGhpZ2hsaWdodGVkOiBpc0hpZ2hsaWdodGVkIH0pO1xyXG5cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdlbmVyYXRlQW5zd2Vyc0FycmF5XHJcblxyXG4gIC8vI3JlZ2lvbiB0b2dnbGVQYW5lbFxyXG4gIHRvZ2dsZVBhbmVsKHBhbmVsOiBhbnksIHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3RvZ2dsZVBhbmVsJylcclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uICE9IG51bGwpIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbicsIHJlY29yZClcclxuICAgICAgdGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbihyZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXBhbmVsLmlzT3Blbikge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICAgIC8vIFNpbXVsYSB1biBjYWxjb2xvIGFzaW5jcm9ub1xyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gfSwgMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHRvZ2dsZVBhbmVsXHJcblxyXG4gIC8vI3JlZ2lvbiB2aWV3T3JFZGl0UmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIHRhYmVsbGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSBzZWxlemlvbmF0byBzdWxsYSB0YWJlbGxhLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIHZpZW5lIG1vc3RyYXRvIGlsIGNvbXBvbmVudGUgYWRkLWZvcm0tcmVjb3JkIGluIHNvbGEgbGV0dHVyYS5cclxuICAgKi9cclxuICB2aWV3T3JFZGl0UmVjb3JkKHJlY29yZDogUmVjb3JkLCBvbmx5VmlldzogYm9vbGVhbiwgaSkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2aWV3T3JFZGl0UmVjb3JkJylcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB2aWV3T3JFZGl0UmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiB2aWV3UmVjb3JkXHJcbiAgdmlld1JlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmlld1JlY29yZCcpXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSA9PSAndmlzdWFsaXp6YUNvbnRlbnV0bycpIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdmlld1JlY29yZFxyXG5cclxuICAvLyNyZWdpb24gRWRpdFJlY29yZFxyXG4gIEVkaXRSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0VkaXRSZWNvcmQnKVxyXG5cclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHBhbmVsLnJlY29yZC5BZGRpdGlvbmFsSW5mbyA9IE9iamVjdC5hc3NpZ24oe30sIHJlY29yZC5BZGRpdGlvbmFsSW5mbywgdGhpcy5jb25maWd1cmF0aW9ucy51cGRhdGVJbmZvKTtcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICdtb2RpZmljYUNvbnRlbnV0bycpIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAnbW9kaWZpY2FDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIEVkaXRSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIGV4dGVybmFsQ2FsbGJhY2tcclxuICBleHRlcm5hbENhbGxiYWNrKGV2OiBFdmVudCwgY2FsbGJhY2s6IEZ1bmN0aW9uLCByZWNvcmQ6IGFueSkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY2FsbGJhY2socmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGV4dGVybmFsQ2FsbGJhY2tcclxuXHJcbiAgLy8jcmVnaW9uIGR1cGxpY2F0ZVJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZHVwbGljYXJlIHVuIHJlY29yZCBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGR1cGxpY2FyZS5cclxuICAgKi9cclxuICBkdXBsaWNhdGVSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdkdXBsaWNhdGVSZWNvcmQnKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcGFuZWwucmVjb3JkLklEO1xyXG4gICAgdGhpcy5pc0R1cGxpY2F0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgIG1pbkhlaWdodDogXCIxMDBweFwiLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZHVwbGljYXRlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBkZWxldGVSZWNvcmRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIHRhYmVsbGEuXHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZGVsZXRlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiByZWxvYWRUYWJsZXNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIHRhYmVsbGEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRUYWJsZXMoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVJlY29yZHMpIHtcclxuICAgICAgdGhpcy50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiByZWxvYWRUYWJsZXNcclxuXHJcbiAgLy8jcmVnaW9uIHNhdmVPckV4aXRGb3JtXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0ocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC12aWV3LWZvcm0tcmVjb3JkIHNhdmUnLCByZWNvcmQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzYXZlT3JFeGl0Rm9ybVxyXG5cclxuICAvLyNyZWdpb24gb25BZnRlclNhdmVSZWNvcmRcclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgYWZ0ZXJzYXZlJywgZXZlbnQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWZ0ZXJTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFkZFZpZXdFZGl0UmVjb3JkMlxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvbkFkZFZpZXdFZGl0UmVjb3JkMihldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24gPSBmYWxzZTtcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uID0gIWV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50LnJlY29yZCkpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH0gICAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgICAgfSAgXHJcblxyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAvLyB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkFkZFZpZXdFZGl0UmVjb3JkMlxyXG5cclxuICAvLyNyZWdpb24gb3BlbkFsbFxyXG4gIG9wZW5BbGwoKXtcclxuICAgIHRoaXMuaXNGdWxsT3BlbmVkID0gIXRoaXMuaXNGdWxsT3BlbmVkO1xyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYgKHBhbmVsLmlzT3BlbiAhPSB0aGlzLmlzRnVsbE9wZW5lZCl7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwLVwiK3BhbmVsLnJlY29yZC5JRCtcIi12aXNpYmlsaXR5XCIpLmNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQWxsXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQWRkUG9wdXBcclxuICBvcGVuQWRkUG9wdXAoKSB7XHJcbiAgICAvLyBtaSBzc2ljdXJvIGNoZSBub24gY2kgc2lhbm8gcGFubmVsbGkgaW4gbW9kaWZpY2EgcGVyY2jDqCBhbHRyaW1lbnRpIHZhIGluIGNvbmZsaXR0byBsJ3VwZGF0ZSBjb24gbCdhZGRcclxuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7XHJcbiAgICAgIGlmKHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0bycpe1xyXG4gICAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBvcHVwTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzRHVwbGljYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgd2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkFkZFBvcHVwXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuR3JhcGhzXHJcbiAgb3BlbkdyYXBocygpIHtcclxuICAgIFxyXG4gICAgdGhpcy5vcGVuR3JhcGhEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkdyYXBoRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIG1pbldpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjcwdmhcIixcclxuICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZoXCJcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkeW5hbWljLW1vZHVsZS1ncmFwaHMvJyArIHRoaXMuZm9ybUlEICsgJy8nICsgdGhpcy51c2VySURdKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5HcmFwaHNcclxuXHJcbiAgLy8jcmVnaW9uIGNsb3NlR3JhcGhzXHJcbiAgY2xvc2VHcmFwaHMoKSB7XHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjbG9zZUdyYXBoc1xyXG4gICAgXHJcbiAgLy8jcmVnaW9uIG9uQWRkU2F2ZVJlY29yZFxyXG4gIG9uQWRkU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9IFxyXG4gICAgaWYgKHJlY29yZCA9PSBudWxsKSB7dGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTsgcmV0dXJufVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkU2F2ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gb25BZGRBZnRlclNhdmVSZWNvcmRcclxuICBvbkFkZEFmdGVyU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9IFxyXG4gICAgaWYgKHJlY29yZCA9PSBudWxsKSB7dGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTsgcmV0dXJufVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcbiAgcHJpbnRBZGRpdGlvbmFsSW5mbyhyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgbGV0IG91dCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUgIT0gbnVsbCAmJiB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHJlY29yZC5BZGRpdGlvbmFsSW5mbyAhPSBudWxsKXtcclxuXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFwoKC4rKVxcKS9nOzsgLy8gcGF0dGVybiBwZXIgdW5vIG8gcGnDuSBudW1lcmlcclxuICAgICAgICBcclxuICAgICAgICAvLyAoZGF0ZWZvcm1hdD1FRUVFLCBkIE1NTU0geSwgSDptbTpzcylcclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaXRlbSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICBsZXQgbXltYXRjaCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgaWYobXltYXRjaC5pbmNsdWRlcyhcImRhdGVmb3JtYXRcIikpe1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0ID0gbXltYXRjaC5zcGxpdChcIj1cIilbMV07XHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IGl0ZW0uc3BsaXQoXCIoXCIpWzBdO1xyXG4gICAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSAhPSBudWxsID8gXCIgXCIgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmQuQWRkaXRpb25hbEluZm9bdG9rZW5dLCBmb3JtYXQpIDogcmVjb3JkW3Rva2VuXSA/IFwiIFwiICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkW3Rva2VuXSwgZm9ybWF0KSA6ICBcIiBcIiArIHRva2VuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dICE9IG51bGwgPyBcIiBcIiArIHJlY29yZC5BZGRpdGlvbmFsSW5mb1tpdGVtXSA6IHJlY29yZFtpdGVtXSA/IFwiIFwiICsgcmVjb3JkW2l0ZW1dIDogIFwiIFwiICsgaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcblxyXG4gIG9uQ2xpY2tEcmFnSW5kaWNhdG9yKGVsOiBhbnkpe1xyXG4gICAgdGhpcy5jbGlja0RyYWdJbmRpY2F0b3IuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydGVkKGVsOiBhbnkpe1xyXG4gICAgICB0aGlzLmRyYWdTdGFydGVkLmVtaXQoZWwpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoKXtcclxuICAgICAgdGhpcy5kcmFnUmVsZWFzZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpe1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcil7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH0gXHJcblxyXG4gIHJlbG9hZEhUTUxSZWFkYWJsZVZhbHVlcyhhbnN3ZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGFuc3dlcklkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMuZmluZCh4ID0+IHgucmVjb3JkLklEID09IGFuc3dlcklkKS5yZWNvcmQuSFRNTHJlYWRhYmxlVmFsdWVzID0gcmVzLkhUTUxyZWFkYWJsZVZhbHVlczsgICAgXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBcclxuICAgIHRoaXMubGliU2luZ2xlTG9hZGVkID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5saWJTaW5nbGVMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUFjdGlvbihhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbil7XHJcbiAgICB2YXIgZmlyZVRyaWdnZXI6IEZpcmVUcmlnZ2VyID0gbmV3IEZpcmVUcmlnZ2VyKCk7XHJcblxyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlciA9IG5ldyBUcmlnZ2VyKCk7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLkNJRCA9IGFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5jb25kaXRpb25zID0gbnVsbDtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZGVzY3JpcHRpb24gPSBhY3Rpb25CdXR0b24uQnV0dG9uTGFiZWw7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmV4ZWN1dGlvbiA9IGFjdGlvbkJ1dHRvbi5leGVjdXRpb247XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmZvcm11bGFzID0gYWN0aW9uQnV0dG9uLmZvcm11bGFzO1xyXG5cclxuICAgIGZpcmVUcmlnZ2VyLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuICAgIGZpcmVUcmlnZ2VyLnJlY29yZCA9IG51bGw7XHJcbiAgICBmaXJlVHJpZ2dlci51c2VyUGF0aWVudCA9IHRoaXMudXNlcklEO1xyXG4gICAgZmlyZVRyaWdnZXIudXNlck1lZGljYWxFeGFtaW5hdGlvbiA9IG51bGw7XHJcbiAgICBcclxuICAgIHRoaXMub25GaXJlVHJpZ2dlcihmaXJlVHJpZ2dlcik7XHJcbiAgfSAgXHJcblxyXG59XHJcblxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIj5cclxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJ0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSAmJiBsb2FkZWRmb3JtXCI+TW9kdWxvIHt7IGZvcm0uTmFtZSB9fSA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnMgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkIHx8IGRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIj5cclxuXHJcbiAgICAgIDxzcGFuICpuZ0lmPVwidmlzaWJsZUFjdGlvbkJ1dHRvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uQnV0dG9uIGluIHZpc2libGVBY3Rpb25CdXR0b25zXCIgKGNsaWNrKT1cImdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbilcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgIDx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgKm5nSWY9XCJhY3Rpb25CdXR0b24uSWNvblwiIFtuYW1lXT1cImFjdGlvbkJ1dHRvbi5JY29uXCI+PC90bXctaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj57e2FjdGlvbkJ1dHRvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+ICAgIFxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImlzTGlzdFZpZXdcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlblRhYmVsbGFyKClcIj5cclxuICAgICAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiIG5hbWU9XCJ0YWJsZVwiPjwvdG13LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPlRhYmVsbGFyZTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiaXNUYWJlbGxhclwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuTGlzdFZpZXcoKVwiPlxyXG4gICAgICAgIDx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgbmFtZT1cImxpc3RcIj48L3Rtdy1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5MaXN0YTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+ICAgICAgXHJcblxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFsbCgpXCJcclxuICAgICAgICAqbmdJZj1cImlzTGlzdFZpZXdcIj5cclxuICAgICAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiICpuZ0lmPVwiIWlzRnVsbE9wZW5lZFwiIG5hbWU9XCJjaGV2cm9uLWRvd25cIj48L3Rtdy1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIiAqbmdJZj1cIiFpc0Z1bGxPcGVuZWRcIj5BcHJpIHR1dHRvPC9zcGFuPlxyXG5cclxuICAgICAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiICpuZ0lmPVwiaXNGdWxsT3BlbmVkICYmIGlzTGlzdFZpZXdcIiBuYW1lPVwiY2hldnJvbi11cFwiPjwvdG13LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiICpuZ0lmPVwiaXNGdWxsT3BlbmVkXCI+Q2hpdWRpIHR1dHRvPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkdyYXBocygpXCI+XHJcbiAgICAgICAgPHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIiBuYW1lPVwiY2hhcnQtcGllXCI+PC90bXctaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+R3JhZmljaTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuQWRkUG9wdXAoKVwiPlxyXG4gICAgICAgIDx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgbmFtZT1cInBsdXNcIj48L3Rtdy1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+ICAgICAgXHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcblxyXG4gIFxyXG4gIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJpc1RhYmVsbGFyXCI+XHJcbiAgICAgIFxyXG4gICAgICA8aGxpc3QtZm9ybS1yZWNvcmRcclxuICAgICAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWhsaXN0XCJcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXHJcblxyXG4gICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ3VyYXRpb25zXCJcclxuICAgICAgICBbZXh0ZXJuYWxCdXR0b25zXT1cImV4dGVybmFsQnV0dG9uc1wiXHJcblxyXG4gICAgICAgID5cclxuICAgICAgPC9obGlzdC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciBjbGFzcz1cImRhdGVcIiBbcGxhY2Vob2xkZXJdPVwiJ1BlcmlvZG8gaW5pemlvJ1wiIFtsYWJlbF09XCInUGVyaW9kbyBpbml6aW8nXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJtaW5wZXJpb2RcIlxyXG4gICAgICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZXMuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciBjbGFzcz1cImRhdGVcIiBbcGxhY2Vob2xkZXJdPVwiJ1BlcmlvZG8gZmluZSdcIiBbbGFiZWxdPVwiJ1BlcmlvZG8gZmluZSdcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1heHBlcmlvZFwiXHJcbiAgICAgICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2Rlcy5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgICAgICA8dG13LXNlbGVjdCBbYXJyYXlEYXRhXT1cInRhYmVsbGFyRmllbGRzXCIgWyhuZ01vZGVsSW5wdXQpXT1cInNlbGVjdGVkVGFiZWxsYXJGaWVsZHNcIiBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uZSBkZWkgY2FtcGknXCJcclxuICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ0Rlc2NyaXB0aW9uJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ1RleHREZXNjcmlwdGlvbidcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCIgY2xhc3M9XCJlcXAtZm9ybS1maWVsZFwiPlxyXG4gICAgICAgICAgICA8L3Rtdy1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZFRhYmVsbGFyRmllbGRzID09IG51bGwgfHwgc2VsZWN0ZWRUYWJlbGxhckZpZWxkcy5sZW5ndGggPT0gMFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ncmFwaC1nZW5lcmF0ZSBidXR0b24tbmV4dCBtZS0yXCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdlbmVyYXRlVGFiZWxsYXIoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgR2VuZXJhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgIDx0bXctdGFibGUgaWQ9XCJ0YWJlbGxhclwiIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJ0YWJlbGxhckNvbmRpdGlvbkxvYWRlZFwiIFtoaWdobGlnaHRDb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgW2RhdGFdPVwidGFiZWxsYXJWYWx1ZXNcIiBbY29sdW1uc109XCJ0YWJlbGxhckNvbHVtbnNcIiBbbWF0UGFnaW5hdG9yU2l6ZV09XCIxMDAwXCIgW21hdFBhZ2luYXRvckxlbmd0aF09XCJbMTAwMF1cIj48L3Rtdy10YWJsZT5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgPG1hdC1hY2NvcmRpb24gICNkb25lTGlzdD1cImNka0Ryb3BMaXN0XCIgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiW3RvZG9MaXN0XVwiIFtoaWRlVG9nZ2xlXT1cInRlc3RcIiBbbXVsdGldPVwidHJ1ZVwiIGNsYXNzPVwiZGYtbGlzdC12aWV3LWFjY29yZGlvblwiICpuZ0lmPVwiaXNMaXN0Vmlld1wiPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgcGFuZWxzOyBpbmRleCBhcyBpXCIgXHJcbiAgICAgICAgW2V4cGFuZGVkXT1cInBhbmVsLmlzT3BlblwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIjFcIiBcclxuICAgICAgICBbY2xhc3NdPVwicGFuZWwuaGlnaGxpZ2h0ZWQgPyAnZG1fcGFuZWxfaGlnaGxpZ2h0ZWQnIDogJzAnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZWwocGFuZWwsIHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIChjbGljayk9XCJvbkNsaWNrRHJhZ0luZGljYXRvcihbcGFuZWwucmVjb3JkLGZvcm1dKVwiIGNsYXNzPVwiY2xpY2staWNvblwiICpuZ0lmPVwiY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj4ge3sgIXRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19IC0tPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImRyYWctaWNvbiBmYS1zb2xpZCBmYS1maWxlLWV4cG9ydFwiIChjbGljayk9XCJvbkNsaWNrRHJhZ0luZGljYXRvcihbcGFuZWwucmVjb3JkLGZvcm1dKVwiICpuZ0lmPVwiY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPjwvaT4ge3sgIXRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCIhY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICB7eyAhdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPiAgICAgICAgICBcclxuICAgICAgICAgIDwhLS0jcmVnaW9uIEJPVFRPTkkgUEVSIExFIEFaSU9OSSAtLT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCIgXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgIGlkPVwicC17e3BhbmVsLnJlY29yZC5JRH19LXt7YnV0dG9uLmljb259fVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIiBcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2hpZGRlbl09XCJidXR0b24uaWNvbiA9PSAnY29weScgJiYgKHBhbmVscy5sZW5ndGggPT0gMCB8fCBwYW5lbC5yZWNvcmQuVmVyc2lvbiAhPSBwYW5lbHNbMF0ucmVjb3JkLlZlcnNpb24pXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uLmZuKHBhbmVsLGksJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgW25hbWVdPVwiYnV0dG9uLmljb25cIj48L3Rtdy1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGV4dGVybmFsQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXh0ZXJuYWxDYWxsYmFjaygkZXZlbnQsYnV0dG9uLmZuLHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiIFtuYW1lXT1cImJ1dHRvbi5pY29uXCI+PC90bXctaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhhbXBsZS1zcGFjZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFnZVN0YXRlICE9IG51bGxcIj5cclxuXHJcbiAgICAgICAgICA8bGliLXNpbmdsZS1yZWNvcmRcclxuICAgICAgICAgICAgKm5nSWY9XCJsaWJTaW5nbGVMb2FkZWRcIlxyXG4gICAgICAgICAgICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG4gICAgICAgICAgICBbcmVjb3JkXSA9IFwicGFuZWwucmVjb3JkXCIgXHJcbiAgICAgICAgICAgIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIlxyXG4gICAgICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICAgICAgW291dENvbXBpbGVDb25maWd1cmF0aW9uc109XCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGFnZVN0YXRlXT1cInBhbmVsLnBhZ2VTdGF0ZVwiXHJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwic2F2ZU9yRXhpdEZvcm0oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgPC9saWItc2luZ2xlLXJlY29yZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDwvbWF0LWFjY29yZGlvbj5cclxuXHJcblxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSNyZWdpb24gRElBTE9HIEFHR0lVTlRBIFJJU1BPU1RBIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5BZGREaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZVwiPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW29yZ2FJRF09XCJvcmdhSURcIlxyXG4gICAgICAgIFtvbmx5Vmlld109XCJmYWxzZVwiXHJcbiAgICAgICAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXHJcbiAgICAgICAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRpbmdcIlxyXG4gICAgICAgIFtzaG93VGl0bGVdPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGVcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cImNvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcblxyXG4gICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZGRBZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuPG5nLXRlbXBsYXRlICNvcGVuR3JhcGhEaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZSBncmFwaENhcmRcIj5cclxuICAgIFxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBlcXAtZHluYW1pYy1tb2R1bGUtdGl0bGUgZ3JhcGgtaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5HcmFmaWNvIHt7IGZvcm0uTmFtZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2VHcmFwaHMoKVwiPlxyXG4gICAgICAgIDx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgbmFtZT1cImFycm93LWxlZnRcIj48L3Rtdy1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5JbmRpZXRybzwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxncmFwaHNcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gICAgICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc10gPSBcIm91dENvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl0gPSBcImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgID5cclxuICAgICAgPC9ncmFwaHM+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuIl19
|