@firestitch/report 18.0.30 → 18.1.0
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/app/reports/components/report-canvas/report-canvas.component.d.ts +9 -1
- package/app/reports/data/report.data.d.ts +8 -1
- package/app/reports/dialogs/component-settings/component-settings.component.d.ts +9 -4
- package/app/reports/dialogs/global-settings/components/semantic-database/semantic-database.component.d.ts +2 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +3 -2
- package/app/reports/interfaces/report.interface.d.ts +8 -0
- package/app/reports/views/report/fs-ai-report.component.d.ts +8 -1
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +105 -5
- package/esm2022/app/reports/data/report.data.mjs +42 -1
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +59 -10
- package/esm2022/app/reports/dialogs/global-settings/components/semantic-database/semantic-database.component.mjs +20 -3
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +27 -11
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +50 -4
- package/esm2022/app/reports/views/report/report.component.mjs +1 -1
- package/fesm2022/{firestitch-report-echarts-CvuyZRgq.mjs → firestitch-report-echarts-DPeQc3Lq.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-CvuyZRgq.mjs.map → firestitch-report-echarts-DPeQc3Lq.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-C00Q9Orr.mjs → firestitch-report-firestitch-report-BSGrWdzK.mjs} +319 -58
- package/fesm2022/firestitch-report-firestitch-report-BSGrWdzK.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/firestitch-report-firestitch-report-C00Q9Orr.mjs.map +0 -1
|
@@ -11,6 +11,7 @@ import { FsAutocompleteChipsModule } from '@firestitch/autocomplete-chips';
|
|
|
11
11
|
import { FsDatePickerModule } from '@firestitch/datepicker';
|
|
12
12
|
import { FsDialogModule } from '@firestitch/dialog';
|
|
13
13
|
import { FsFormModule } from '@firestitch/form';
|
|
14
|
+
import { FsMaskModule } from '@firestitch/mask';
|
|
14
15
|
import { FsMessage, FsMessageModule } from '@firestitch/message';
|
|
15
16
|
import { FsPrompt } from '@firestitch/prompt';
|
|
16
17
|
import { FsTabsModule } from '@firestitch/tabs';
|
|
@@ -24,12 +25,13 @@ import { dateFromBound, dateToBound } from './report-settings-default';
|
|
|
24
25
|
import * as i0 from "@angular/core";
|
|
25
26
|
import * as i1 from "@angular/forms";
|
|
26
27
|
import * as i2 from "@firestitch/form";
|
|
27
|
-
import * as i3 from "@firestitch/
|
|
28
|
-
import * as i4 from "@firestitch/
|
|
29
|
-
import * as i5 from "@firestitch/
|
|
30
|
-
import * as i6 from "@firestitch/
|
|
31
|
-
import * as i7 from "@firestitch/
|
|
32
|
-
import * as i8 from "@
|
|
28
|
+
import * as i3 from "@firestitch/mask";
|
|
29
|
+
import * as i4 from "@firestitch/dialog";
|
|
30
|
+
import * as i5 from "@firestitch/message";
|
|
31
|
+
import * as i6 from "@firestitch/tabs";
|
|
32
|
+
import * as i7 from "@firestitch/datepicker";
|
|
33
|
+
import * as i8 from "@firestitch/autocomplete-chips";
|
|
34
|
+
import * as i9 from "@angular/material/tabs";
|
|
33
35
|
// Report settings, in three tabs:
|
|
34
36
|
// Settings — name + page setup (size in inches, layout mode).
|
|
35
37
|
// Styles — the report's typographic styles (sizes in POINTS, 1:1 with
|
|
@@ -45,6 +47,10 @@ export class ReportSettingsComponent {
|
|
|
45
47
|
// The page in inches. No initializer: every report carries a size, and
|
|
46
48
|
// ngOnInit seeds both before the tab renders, so a placeholder here could only
|
|
47
49
|
// ever be a wrong number briefly showing as the operator's own.
|
|
50
|
+
//
|
|
51
|
+
// Typed `number | string` because fsMaskNumber is the control: it is seeded
|
|
52
|
+
// with the report's number but hands back the unmasked STRING the operator
|
|
53
|
+
// typed. Save casts it once, on the way out — see `_pageDimension()`.
|
|
48
54
|
pageWidth;
|
|
49
55
|
pageHeight;
|
|
50
56
|
pageDimensionMin = PAGE_DIMENSION_MIN;
|
|
@@ -93,8 +99,8 @@ export class ReportSettingsComponent {
|
|
|
93
99
|
// result, re-seeding the bar from the new defaults.
|
|
94
100
|
const settings$ = this._reportData.update(reportId, {
|
|
95
101
|
name: this.name,
|
|
96
|
-
pageWidth: this.pageWidth,
|
|
97
|
-
pageHeight: this.pageHeight,
|
|
102
|
+
pageWidth: this._pageDimension(this.pageWidth),
|
|
103
|
+
pageHeight: this._pageDimension(this.pageHeight),
|
|
98
104
|
layout: this.layout,
|
|
99
105
|
timezone: this.timezone,
|
|
100
106
|
styles: { heading: { size: this.headingSize } },
|
|
@@ -110,6 +116,15 @@ export class ReportSettingsComponent {
|
|
|
110
116
|
this._dialogRef.close({ action: 'saved' });
|
|
111
117
|
}));
|
|
112
118
|
};
|
|
119
|
+
// The page dimension as a real number for the wire. fsMaskNumber hands back
|
|
120
|
+
// the unmasked string it built with a fixed '.' radix (which is the whole
|
|
121
|
+
// point of the mask - a native number input paints the viewer's locale
|
|
122
|
+
// separator instead), so the cast here is a straight parse and never sees a
|
|
123
|
+
// comma. The backend rejects anything non-numeric rather than coercing, so a
|
|
124
|
+
// NaN fails loudly instead of silently storing a wrong page size.
|
|
125
|
+
_pageDimension(value) {
|
|
126
|
+
return typeof value === 'number' ? value : parseFloat(value);
|
|
127
|
+
}
|
|
113
128
|
// Build one editable row per report-level filter group (level report or both),
|
|
114
129
|
// in bar order, seeding each draft from the group's stored default.
|
|
115
130
|
_buildFilterRows(report) {
|
|
@@ -204,13 +219,14 @@ export class ReportSettingsComponent {
|
|
|
204
219
|
return Object.keys(normalized).length ? normalized : null;
|
|
205
220
|
}
|
|
206
221
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
207
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ReportSettingsComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Report Settings\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"name\"\n name=\"name\"\n [fsFormRequired]=\"true\">\n </mat-form-field>\n <!--\n The page, typed in inches. Orientation is not asked for because it\n is not an independent choice - a page wider than it is tall IS\n landscape - so the two numbers say everything there is to say.\n -->\n <div class=\"fs-row.gap-sm.align-start\">\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Width\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.1\"\n [(ngModel)]=\"pageWidth\"\n name=\"pageWidth\"\n [fsFormRequired]=\"true\"\n [fsFormMin]=\"pageDimensionMin\"\n [fsFormMax]=\"pageDimensionMax\">\n <span matTextSuffix>\n inches\n </span>\n </mat-form-field>\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Height\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"0.1\"\n [(ngModel)]=\"pageHeight\"\n name=\"pageHeight\"\n [fsFormRequired]=\"true\"\n [fsFormMin]=\"pageDimensionMin\"\n [fsFormMax]=\"pageDimensionMax\">\n <span matTextSuffix>\n inches\n </span>\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>\n Layout\n </mat-label>\n <mat-select\n [(ngModel)]=\"layout\"\n name=\"layout\">\n <mat-option value=\"freeform\">\n Freeform \u2014 position components anywhere on the page\n </mat-option>\n <mat-option value=\"flow\">\n Flow \u2014 components flow into rows by width %\n </mat-option>\n </mat-select>\n <mat-hint>\n Freeform is like PowerPoint; Flow is like a responsive dashboard.\n </mat-hint>\n </mat-form-field>\n <fs-ai-report-timezone-select [(timezone)]=\"timezone\"></fs-ai-report-timezone-select>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Styles\"\n name=\"styles\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Heading Size\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"1\"\n min=\"6\"\n max=\"96\"\n [(ngModel)]=\"headingSize\"\n name=\"headingSize\"\n [fsFormMin]=\"6\"\n [fsFormMax]=\"96\">\n <span matTextSuffix>\n pt\n </span>\n <mat-hint>\n Applies to component titles. Points map 1:1 to PDF and PowerPoint.\n </mat-hint>\n </mat-form-field>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Filters\"\n name=\"filters\">\n <div class=\"fs-column tab-body\">\n @if (filterRows().length) {\n @for (row of filterRows(); track row.group.id) {\n @switch (row.group.type) {\n @case ('dateRange') {\n <div class=\"fs-row.gap-sm.align-center fs-flex\">\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default From {{ row.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"row.start\"\n [name]=\"'start' + row.group.id\">\n </mat-form-field>\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default To {{ row.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"row.end\"\n [name]=\"'end' + row.group.id\">\n </mat-form-field>\n </div>\n }\n @case ('select') {\n <fs-autocomplete-chips\n class=\"fs-flex\"\n [label]=\"'Default ' + row.label\"\n [fetch]=\"row.fetch\"\n [(ngModel)]=\"row.values\"\n [name]=\"'values' + row.group.id\"\n [multiple]=\"true\"\n [fetchOnFocus]=\"true\">\n <ng-template\n fsAutocompleteChipsTemplate\n let-object=\"object\">\n {{ object.name }}\n </ng-template>\n </fs-autocomplete-chips>\n }\n @default {\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default {{ row.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"row.value\"\n [name]=\"'value' + row.group.id\">\n </mat-form-field>\n }\n }\n }\n } @else {\n <fs-message-info>\n This report has no report-level filters yet. Add a filter to a\n component (its settings \u2192 Filters) and show it in the report bar,\n then set its default here.\n </fs-message-info>\n }\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <fs-form-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"warn\"\n (click)=\"delete()\">\n Delete\n </button>\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["mat-form-field{width:100%}.tab-body{padding-top:16px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i2.FsFormMinDirective, selector: "[fsFormMin]", inputs: ["fsFormMin", "fsFormMinMessage"] }, { kind: "directive", type: i2.FsFormMaxDirective, selector: "[fsFormMax]", inputs: ["fsFormMax", "fsFormMaxMessage"] }, { kind: "component", type: i2.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "ngmodule", type: FsMessageModule }, { kind: "component", type: i4.FsMessageInfoComponent, selector: "fs-message-info" }, { kind: "ngmodule", type: FsTabsModule }, { kind: "directive", type: i5.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { kind: "directive", type: i5.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { kind: "ngmodule", type: FsDatePickerModule }, { kind: "component", type: i6.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes", "width"], outputs: ["change"] }, { kind: "ngmodule", type: FsAutocompleteChipsModule }, { kind: "component", type: i7.FsAutocompleteChipsComponent, selector: "fs-autocomplete-chips", inputs: ["fetch", "appearance", "floatLabel", "readonly", "size", "label", "placeholder", "chipImage", "chipBackground", "chipColor", "chipIcon", "chipIconColor", "chipClass", "chipPadding", "shape", "hint", "allowText", "allowObject", "delay", "minPanelWidth", "maxPanelHeight", "validateText", "removable", "allowClear", "color", "background", "orderable", "padless", "initOnClick", "fetchOnFocus", "multiple", "multipleAdd", "confirm", "disabled", "groupBy", "panelWidth", "panelClass", "compareWith"], outputs: ["selected", "removed", "reordered", "clear", "panelOpened", "panelClosed"] }, { kind: "directive", type: i7.FsAutocompleteObjectDirective, selector: "[fsAutocompleteObject],[fsAutocompleteChipsTemplate]" }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: TimezoneSelectComponent, selector: "fs-ai-report-timezone-select", inputs: ["placeholder", "required", "disabled", "timezone"], outputs: ["timezoneChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
222
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ReportSettingsComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Report Settings\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"name\"\n name=\"name\"\n [fsFormRequired]=\"true\">\n </mat-form-field>\n <!--\n The page, typed in inches. Orientation is not asked for because it\n is not an independent choice - a page wider than it is tall IS\n landscape - so the two numbers say everything there is to say.\n -->\n <div class=\"fs-row.gap-sm.align-start\">\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Width\n </mat-label>\n <input\n matInput\n fsMaskNumber\n [scale]=\"1\"\n [(ngModel)]=\"pageWidth\"\n name=\"pageWidth\"\n [fsFormRequired]=\"true\"\n [fsFormMin]=\"pageDimensionMin\"\n [fsFormMax]=\"pageDimensionMax\">\n <div matTextSuffix>\n inches\n </div>\n </mat-form-field>\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Height\n </mat-label>\n <input\n matInput\n fsMaskNumber\n [scale]=\"1\"\n [(ngModel)]=\"pageHeight\"\n name=\"pageHeight\"\n [fsFormRequired]=\"true\"\n [fsFormMin]=\"pageDimensionMin\"\n [fsFormMax]=\"pageDimensionMax\">\n <div matTextSuffix>\n inches\n </div>\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>\n Layout\n </mat-label>\n <mat-select\n [(ngModel)]=\"layout\"\n name=\"layout\">\n <mat-option value=\"freeform\">\n Freeform \u2014 position components anywhere on the page\n </mat-option>\n <mat-option value=\"flow\">\n Flow \u2014 components flow into rows by width %\n </mat-option>\n </mat-select>\n <mat-hint>\n Freeform is like PowerPoint; Flow is like a responsive dashboard.\n </mat-hint>\n </mat-form-field>\n <fs-ai-report-timezone-select [(timezone)]=\"timezone\"></fs-ai-report-timezone-select>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Styles\"\n name=\"styles\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Heading Size\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"1\"\n min=\"6\"\n max=\"96\"\n [(ngModel)]=\"headingSize\"\n name=\"headingSize\"\n [fsFormMin]=\"6\"\n [fsFormMax]=\"96\">\n <span matTextSuffix>\n pt\n </span>\n <mat-hint>\n Applies to component titles. Points map 1:1 to PDF and PowerPoint.\n </mat-hint>\n </mat-form-field>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Filters\"\n name=\"filters\">\n <div class=\"fs-column tab-body\">\n @if (filterRows().length) {\n @for (row of filterRows(); track row.group.id) {\n @switch (row.group.type) {\n @case ('dateRange') {\n <div class=\"fs-row.gap-sm.align-center fs-flex\">\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default From {{ row.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"row.start\"\n [name]=\"'start' + row.group.id\">\n </mat-form-field>\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default To {{ row.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"row.end\"\n [name]=\"'end' + row.group.id\">\n </mat-form-field>\n </div>\n }\n @case ('select') {\n <fs-autocomplete-chips\n class=\"fs-flex\"\n [label]=\"'Default ' + row.label\"\n [fetch]=\"row.fetch\"\n [(ngModel)]=\"row.values\"\n [name]=\"'values' + row.group.id\"\n [multiple]=\"true\"\n [fetchOnFocus]=\"true\">\n <ng-template\n fsAutocompleteChipsTemplate\n let-object=\"object\">\n {{ object.name }}\n </ng-template>\n </fs-autocomplete-chips>\n }\n @default {\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default {{ row.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"row.value\"\n [name]=\"'value' + row.group.id\">\n </mat-form-field>\n }\n }\n }\n } @else {\n <fs-message-info>\n This report has no report-level filters yet. Add a filter to a\n component (its settings \u2192 Filters) and show it in the report bar,\n then set its default here.\n </fs-message-info>\n }\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <fs-form-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"warn\"\n (click)=\"delete()\">\n Delete\n </button>\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["mat-form-field{width:100%}.tab-body{padding-top:16px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i2.FsFormMinDirective, selector: "[fsFormMin]", inputs: ["fsFormMin", "fsFormMinMessage"] }, { kind: "directive", type: i2.FsFormMaxDirective, selector: "[fsFormMax]", inputs: ["fsFormMax", "fsFormMaxMessage"] }, { kind: "component", type: i2.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit"] }, { kind: "ngmodule", type: FsMaskModule }, { kind: "directive", type: i3.FsMaskNumberDirective, selector: "[fsMaskNumber]" }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i4.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "ngmodule", type: FsMessageModule }, { kind: "component", type: i5.FsMessageInfoComponent, selector: "fs-message-info" }, { kind: "ngmodule", type: FsTabsModule }, { kind: "directive", type: i6.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { kind: "directive", type: i6.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { kind: "ngmodule", type: FsDatePickerModule }, { kind: "component", type: i7.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes", "width"], outputs: ["change"] }, { kind: "ngmodule", type: FsAutocompleteChipsModule }, { kind: "component", type: i8.FsAutocompleteChipsComponent, selector: "fs-autocomplete-chips", inputs: ["fetch", "appearance", "floatLabel", "readonly", "size", "label", "placeholder", "chipImage", "chipBackground", "chipColor", "chipIcon", "chipIconColor", "chipClass", "chipPadding", "shape", "hint", "allowText", "allowObject", "delay", "minPanelWidth", "maxPanelHeight", "validateText", "removable", "allowClear", "color", "background", "orderable", "padless", "initOnClick", "fetchOnFocus", "multiple", "multipleAdd", "confirm", "disabled", "groupBy", "panelWidth", "panelClass", "compareWith"], outputs: ["selected", "removed", "reordered", "clear", "panelOpened", "panelClosed"] }, { kind: "directive", type: i8.FsAutocompleteObjectDirective, selector: "[fsAutocompleteObject],[fsAutocompleteChipsTemplate]" }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: TimezoneSelectComponent, selector: "fs-ai-report-timezone-select", inputs: ["placeholder", "required", "disabled", "timezone"], outputs: ["timezoneChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
208
223
|
}
|
|
209
224
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportSettingsComponent, decorators: [{
|
|
210
225
|
type: Component,
|
|
211
226
|
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
212
227
|
FormsModule,
|
|
213
228
|
FsFormModule,
|
|
229
|
+
FsMaskModule,
|
|
214
230
|
FsDialogModule,
|
|
215
231
|
FsMessageModule,
|
|
216
232
|
FsTabsModule,
|
|
@@ -229,6 +245,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
229
245
|
MatSelect,
|
|
230
246
|
MatOption,
|
|
231
247
|
TimezoneSelectComponent,
|
|
232
|
-
], template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Report Settings\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"name\"\n name=\"name\"\n [fsFormRequired]=\"true\">\n </mat-form-field>\n <!--\n The page, typed in inches. Orientation is not asked for because it\n is not an independent choice - a page wider than it is tall IS\n landscape - so the two numbers say everything there is to say.\n -->\n <div class=\"fs-row.gap-sm.align-start\">\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Width\n </mat-label>\n <input\n matInput\n
|
|
248
|
+
], template: "<form\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Report Settings\n </h1>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"Settings\"\n name=\"settings\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Name\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"name\"\n name=\"name\"\n [fsFormRequired]=\"true\">\n </mat-form-field>\n <!--\n The page, typed in inches. Orientation is not asked for because it\n is not an independent choice - a page wider than it is tall IS\n landscape - so the two numbers say everything there is to say.\n -->\n <div class=\"fs-row.gap-sm.align-start\">\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Width\n </mat-label>\n <input\n matInput\n fsMaskNumber\n [scale]=\"1\"\n [(ngModel)]=\"pageWidth\"\n name=\"pageWidth\"\n [fsFormRequired]=\"true\"\n [fsFormMin]=\"pageDimensionMin\"\n [fsFormMax]=\"pageDimensionMax\">\n <div matTextSuffix>\n inches\n </div>\n </mat-form-field>\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Height\n </mat-label>\n <input\n matInput\n fsMaskNumber\n [scale]=\"1\"\n [(ngModel)]=\"pageHeight\"\n name=\"pageHeight\"\n [fsFormRequired]=\"true\"\n [fsFormMin]=\"pageDimensionMin\"\n [fsFormMax]=\"pageDimensionMax\">\n <div matTextSuffix>\n inches\n </div>\n </mat-form-field>\n </div>\n <mat-form-field>\n <mat-label>\n Layout\n </mat-label>\n <mat-select\n [(ngModel)]=\"layout\"\n name=\"layout\">\n <mat-option value=\"freeform\">\n Freeform \u2014 position components anywhere on the page\n </mat-option>\n <mat-option value=\"flow\">\n Flow \u2014 components flow into rows by width %\n </mat-option>\n </mat-select>\n <mat-hint>\n Freeform is like PowerPoint; Flow is like a responsive dashboard.\n </mat-hint>\n </mat-form-field>\n <fs-ai-report-timezone-select [(timezone)]=\"timezone\"></fs-ai-report-timezone-select>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Styles\"\n name=\"styles\">\n <div class=\"fs-column tab-body\">\n <mat-form-field>\n <mat-label>\n Heading Size\n </mat-label>\n <input\n matInput\n type=\"number\"\n step=\"1\"\n min=\"6\"\n max=\"96\"\n [(ngModel)]=\"headingSize\"\n name=\"headingSize\"\n [fsFormMin]=\"6\"\n [fsFormMax]=\"96\">\n <span matTextSuffix>\n pt\n </span>\n <mat-hint>\n Applies to component titles. Points map 1:1 to PDF and PowerPoint.\n </mat-hint>\n </mat-form-field>\n </div>\n </mat-tab>\n <mat-tab\n label=\"Filters\"\n name=\"filters\">\n <div class=\"fs-column tab-body\">\n @if (filterRows().length) {\n @for (row of filterRows(); track row.group.id) {\n @switch (row.group.type) {\n @case ('dateRange') {\n <div class=\"fs-row.gap-sm.align-center fs-flex\">\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default From {{ row.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"row.start\"\n [name]=\"'start' + row.group.id\">\n </mat-form-field>\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default To {{ row.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"row.end\"\n [name]=\"'end' + row.group.id\">\n </mat-form-field>\n </div>\n }\n @case ('select') {\n <fs-autocomplete-chips\n class=\"fs-flex\"\n [label]=\"'Default ' + row.label\"\n [fetch]=\"row.fetch\"\n [(ngModel)]=\"row.values\"\n [name]=\"'values' + row.group.id\"\n [multiple]=\"true\"\n [fetchOnFocus]=\"true\">\n <ng-template\n fsAutocompleteChipsTemplate\n let-object=\"object\">\n {{ object.name }}\n </ng-template>\n </fs-autocomplete-chips>\n }\n @default {\n <mat-form-field class=\"fs-flex\">\n <mat-label>\n Default {{ row.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"row.value\"\n [name]=\"'value' + row.group.id\">\n </mat-form-field>\n }\n }\n }\n } @else {\n <fs-message-info>\n This report has no report-level filters yet. Add a filter to a\n component (its settings \u2192 Filters) and show it in the report bar,\n then set its default here.\n </fs-message-info>\n }\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <fs-form-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"warn\"\n (click)=\"delete()\">\n Delete\n </button>\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["mat-form-field{width:100%}.tab-body{padding-top:16px}\n"] }]
|
|
233
249
|
}] });
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL3JlcG9ydC1zZXR0aW5ncy9yZXBvcnQtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUs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NUJuQyxTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLHlCQUF5Qjt3QkFDekIsYUFBYTt3QkFDYixTQUFTO3dCQUNULGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsUUFBUTt3QkFDUixTQUFTO3dCQUNULFNBQVM7d0JBQ1QsdUJBQXVCO3FCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIE9uSW5pdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dBY3Rpb25zLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwsIE1hdEhpbnQsIE1hdFN1ZmZpeCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRPcHRpb24sIE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IEZzQXV0b2NvbXBsZXRlQ2hpcHNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9hdXRvY29tcGxldGUtY2hpcHMnO1xuaW1wb3J0IHsgRnNEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBGc0RpYWxvZ01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RpYWxvZyc7XG5pbXBvcnQgeyBGc0Zvcm1Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcbmltcG9ydCB7IEZzTWVzc2FnZSwgRnNNZXNzYWdlTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5pbXBvcnQgeyBGc1RhYnNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC90YWJzJztcblxuaW1wb3J0IHsgVGltZXpvbmVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RpbWV6b25lLXNlbGVjdC90aW1lem9uZS1zZWxlY3QuY29tcG9uZW50JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQge1xuICBGaWx0ZXJHcm91cERlZmF1bHQsXG4gIFJlcG9ydCxcbiAgUmVwb3J0RmlsdGVyR3JvdXAsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBERUZBVUxUX0hFQURJTkdfU0laRSwgUEFHRV9ESU1FTlNJT05fTUFYLCBQQUdFX0RJTUVOU0lPTl9NSU4gfSBmcm9tICcuLi8uLi9sYXlvdXQnO1xuaW1wb3J0IHsgbG9hZEdyb3VwT3B0aW9ucywgbWF0Y2hPcHRpb25zLCByZXNvbHZlT3B0aW9uVmFsdWVzIH0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBkYXRlRnJvbUJvdW5kLCBkYXRlVG9Cb3VuZCB9IGZyb20gJy4vcmVwb3J0LXNldHRpbmdzLWRlZmF1bHQnO1xuXG5cbi8vIFdoYXQgdGhlIGRpYWxvZyBoYW5kcyBiYWNrIHdoZW4gaXQgY2xvc2VzLCBzbyB0aGUgcGFnZSBrbm93cyB3aGF0IGhhcHBlbmVkXG4vLyB3aXRob3V0IHNuaWZmaW5nIG1hZ2ljIHN0cmluZ3MuIEEgZGlzbWlzc2VkIGRpYWxvZyBjbG9zZXMgd2l0aCBgdW5kZWZpbmVkYC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U2V0dGluZ3NSZXN1bHQge1xuICBhY3Rpb246ICdzYXZlZCcgfCAnZGVsZXRlZCc7XG59XG5cblxuLy8gT25lIHJlcG9ydC1sZXZlbCBmaWx0ZXIgaW4gdGhlIEZpbHRlcnMgdGFiOiBpdHMgZ3JvdXAsIHRoZSBpbmZlcnJlZCBpbnRlcmZhY2UsXG4vLyBhbmQgYW4gZWRpdGFibGUgZHJhZnQgZGVmYXVsdC4gVGhlIGRyYWZ0IGZpZWxkcyB1c2VkIGRlcGVuZCBvbiB0aGUgdHlwZVxuLy8gKGRhdGVSYW5nZSDihpIgc3RhcnQvZW5kIERhdGVzOyBzZWxlY3Qg4oaSIHZhbHVlczsga2V5d29yZCDihpIgdGV4dCkuIGBmZXRjaGAgbG9hZHNcbi8vIHRoZSBzZWxlY3Qgb3B0aW9ucyB0aGUgc2FtZSB3YXkgdGhlIHJlcG9ydCBiYXIgZG9lcy5cbmludGVyZmFjZSBGaWx0ZXJEZWZhdWx0Um93IHtcbiAgZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwO1xuICBsYWJlbDogc3RyaW5nO1xuICBzdGFydDogRGF0ZSB8IG51bGw7XG4gIGVuZDogRGF0ZSB8IG51bGw7XG4gIHZhbHVlczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXTtcbiAgdmFsdWU6IHN0cmluZztcbiAgZmV0Y2g6IChrZXl3b3JkPzogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W10+O1xufVxuXG5cbi8vIFJlcG9ydCBzZXR0aW5ncywgaW4gdGhyZWUgdGFiczpcbi8vICAgU2V0dGluZ3Mg4oCUIG5hbWUgKyBwYWdlIHNldHVwIChzaXplIGluIGluY2hlcywgbGF5b3V0IG1vZGUpLlxuLy8gICBTdHlsZXMgICDigJQgdGhlIHJlcG9ydCdzIHR5cG9ncmFwaGljIHN0eWxlcyAoc2l6ZXMgaW4gUE9JTlRTLCAxOjEgd2l0aFxuLy8gICBQREYvUG93ZXJQb2ludCk7IHRoZSBIZWFkaW5nIHNpemUgdG8gc3RhcnQuXG4vLyAgIEZpbHRlcnMgIOKAlCB0aGUgcmVwb3J0LWxldmVsIGZpbHRlcnMgYW5kIHRoZWlyIERFRkFVTFQgdmFsdWVzLiBBIGRlZmF1bHRcbi8vICAgc2VlZHMgdGhlIHJlcG9ydCBiYXIgb24gZXZlcnkgb3BlbiAoZm9yIGV2ZXJ5IHZpZXdlcikgYnV0IHN0YXlzXG4vLyAgIHVzZXItY2hhbmdlYWJsZSDigJQgaXQgcHJlLWZpbGxzIHRoZSBjb250cm9sLCBpdCBkb2Vzbid0IGxvY2sgaXQuIFRoaXMgaXMgdGhlXG4vLyAgIGZpeCBmb3IgaGVhdnkgcmVwb3J0cyBvcGVuaW5nIGJsYW5rIGFuZCB0aW1pbmcgb3V0OiBhIGRlZmF1bHQgbW9udGggK1xuLy8gICBvcmdhbml6YXRpb24gc2NvcGVzIHRoZSBsYW5kaW5nIHBhZ2UgZnJvbSB0aGUgZmlyc3QgbG9hZC5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0LXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVwb3J0LXNldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRnNGb3JtTW9kdWxlLFxuICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgIEZzTWVzc2FnZU1vZHVsZSxcbiAgICBGc1RhYnNNb2R1bGUsXG4gICAgRnNEYXRlUGlja2VyTW9kdWxlLFxuICAgIEZzQXV0b2NvbXBsZXRlQ2hpcHNNb2R1bGUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0RGlhbG9nVGl0bGUsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRMYWJlbCxcbiAgICBNYXRIaW50LFxuICAgIE1hdFN1ZmZpeCxcbiAgICBNYXRJbnB1dCxcbiAgICBNYXRTZWxlY3QsXG4gICAgTWF0T3B0aW9uLFxuICAgIFRpbWV6b25lU2VsZWN0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIHNlbGVjdGVkVGFiID0gJ3NldHRpbmdzJztcblxuICBwdWJsaWMgbmFtZSA9ICcnO1xuICAvLyBUaGUgcGFnZSBpbiBpbmNoZXMuIE5vIGluaXRpYWxpemVyOiBldmVyeSByZXBvcnQgY2FycmllcyBhIHNpemUsIGFuZFxuICAvLyBuZ09uSW5pdCBzZWVkcyBib3RoIGJlZm9yZSB0aGUgdGFiIHJlbmRlcnMsIHNvIGEgcGxhY2Vob2xkZXIgaGVyZSBjb3VsZCBvbmx5XG4gIC8vIGV2ZXIgYmUgYSB3cm9uZyBudW1iZXIgYnJpZWZseSBzaG93aW5nIGFzIHRoZSBvcGVyYXRvcidzIG93bi5cbiAgcHVibGljIHBhZ2VXaWR0aDogbnVtYmVyO1xuICBwdWJsaWMgcGFnZUhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnZURpbWVuc2lvbk1pbiA9IFBBR0VfRElNRU5TSU9OX01JTjtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VEaW1lbnNpb25NYXggPSBQQUdFX0RJTUVOU0lPTl9NQVg7XG4gIHB1YmxpYyBsYXlvdXQ6ICdmcmVlZm9ybScgfCAnZmxvdycgPSAnZnJlZWZvcm0nO1xuICAvLyBFbXB0eSB1bnRpbCB0aGUgcmVwb3J0IGhhcyBvbmU7IGFwcC10aW1lem9uZS1zZWxlY3QgdGhlbiBkZWZhdWx0cyBpdCB0byB0aGVcbiAgLy8gdmlld2VyJ3MgYnJvd3NlciB6b25lICh3aGljaCBTYXZlIHBlcnNpc3RzLCBtYWtpbmcgdGhlIHJlcG9ydCdzIHpvbmUgZXhwbGljaXQpLlxuICBwdWJsaWMgdGltZXpvbmUgPSAnJztcbiAgcHVibGljIGhlYWRpbmdTaXplID0gREVGQVVMVF9IRUFESU5HX1NJWkU7XG5cbiAgLy8gVGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXJzIGFuZCB0aGVpciBlZGl0YWJsZSBkZWZhdWx0IHZhbHVlcyAoRmlsdGVycyB0YWIpLlxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyUm93cyA9IHNpZ25hbDxGaWx0ZXJEZWZhdWx0Um93W10+KFtdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiB7IHJlcG9ydDogUmVwb3J0IH0gPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCwgUmVwb3J0U2V0dGluZ3NSZXN1bHQ+PihNYXREaWFsb2dSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb21wdCA9IGluamVjdChGc1Byb21wdCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMuX2RhdGEucmVwb3J0O1xuICAgIHRoaXMubmFtZSA9IHJlcG9ydC5uYW1lO1xuICAgIHRoaXMucGFnZVdpZHRoID0gcmVwb3J0LnBhZ2VXaWR0aDtcbiAgICB0aGlzLnBhZ2VIZWlnaHQgPSByZXBvcnQucGFnZUhlaWdodDtcbiAgICB0aGlzLmxheW91dCA9IHJlcG9ydC5sYXlvdXQgPz8gJ2ZyZWVmb3JtJztcbiAgICB0aGlzLnRpbWV6b25lID0gcmVwb3J0LnRpbWV6b25lID8/ICcnO1xuICAgIHRoaXMuaGVhZGluZ1NpemUgPSByZXBvcnQuY29uZmlnPy5zdHlsZXM/LmhlYWRpbmc/LnNpemUgPz8gREVGQVVMVF9IRUFESU5HX1NJWkU7XG5cbiAgICB0aGlzLl9idWlsZEZpbHRlclJvd3MocmVwb3J0KTtcbiAgfVxuXG4gIC8vIENvbmZpcm0gYW5kIGRlbGV0ZSBoZXJlLCB3aGlsZSB0aGUgZGlhbG9nIGlzIHN0aWxsIG9wZW4sIHRoZW4gY2xvc2Ugd2l0aFxuICAvLyBhIGBkZWxldGVkYCByZXN1bHQuIFRoZSBwYWdlIHJlYWN0cyB0byB0aGUgcmVzdWx0OyBpdCBubyBsb25nZXIgb3ducyB0aGVcbiAgLy8gcHJvbXB0IG9yIHRoZSBBUEkgY2FsbC5cbiAgcHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0RlbGV0ZSBSZXBvcnQnLFxuICAgICAgdGVtcGxhdGU6IGBEZWxldGUgXCIke3RoaXMuX2RhdGEucmVwb3J0Lm5hbWV9XCI/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX3JlcG9ydERhdGEuZGVsZXRlKHRoaXMuX2RhdGEucmVwb3J0LmlkKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1JlcG9ydCBkZWxldGVkJyk7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSh7IGFjdGlvbjogJ2RlbGV0ZWQnIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICBjb25zdCByZXBvcnRJZCA9IHRoaXMuX2RhdGEucmVwb3J0LmlkO1xuXG4gICAgLy8gUGVyc2lzdCB0aGUgcmVwb3J0IHNldHRpbmdzIGFuZCBlYWNoIGNoYW5nZWQgZmlsdGVyIGRlZmF1bHQgdG9nZXRoZXIsIHNvXG4gICAgLy8gdGhlIHNpbmdsZSBTYXZlIGNvdmVycyBhbGwgdGhyZWUgdGFicy4gVGhlIHJlcG9ydCByZWxvYWRzIG9uIHRoZSBgc2F2ZWRgXG4gICAgLy8gcmVzdWx0LCByZS1zZWVkaW5nIHRoZSBiYXIgZnJvbSB0aGUgbmV3IGRlZmF1bHRzLlxuICAgIGNvbnN0IHNldHRpbmdzJCA9IHRoaXMuX3JlcG9ydERhdGEudXBkYXRlKHJlcG9ydElkLCB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBwYWdlV2lkdGg6IHRoaXMucGFnZVdpZHRoLFxuICAgICAgcGFnZUhlaWdodDogdGhpcy5wYWdlSGVpZ2h0LFxuICAgICAgbGF5b3V0OiB0aGlzLmxheW91dCxcbiAgICAgIHRpbWV6b25lOiB0aGlzLnRpbWV6b25lLFxuICAgICAgc3R5bGVzOiB7IGhlYWRpbmc6IHsgc2l6ZTogdGhpcy5oZWFkaW5nU2l6ZSB9IH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0cyQgPSB0aGlzLmZpbHRlclJvd3MoKVxuICAgICAgLmZpbHRlcigocm93KSA9PiB0aGlzLl9kZWZhdWx0Q2hhbmdlZChyb3cpKVxuICAgICAgLm1hcCgocm93KSA9PiB0aGlzLl9yZXBvcnREYXRhLnVwZGF0ZUZpbHRlckdyb3VwKHJlcG9ydElkLCByb3cuZ3JvdXAuaWQsIHtcbiAgICAgICAgZGVmYXVsdDogdGhpcy5fcm93RGVmYXVsdChyb3cpLFxuICAgICAgfSkpO1xuXG4gICAgcmV0dXJuIGZvcmtKb2luKFtzZXR0aW5ncyQsIC4uLmRlZmF1bHRzJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1JlcG9ydCBzZXR0aW5ncyBzYXZlZCcpO1xuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSh7IGFjdGlvbjogJ3NhdmVkJyB9KTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9O1xuXG4gIC8vIEJ1aWxkIG9uZSBlZGl0YWJsZSByb3cgcGVyIHJlcG9ydC1sZXZlbCBmaWx0ZXIgZ3JvdXAgKGxldmVsIHJlcG9ydCBvciBib3RoKSxcbiAgLy8gaW4gYmFyIG9yZGVyLCBzZWVkaW5nIGVhY2ggZHJhZnQgZnJvbSB0aGUgZ3JvdXAncyBzdG9yZWQgZGVmYXVsdC5cbiAgcHJpdmF0ZSBfYnVpbGRGaWx0ZXJSb3dzKHJlcG9ydDogUmVwb3J0KTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0SWQgPSByZXBvcnQuaWQ7XG5cbiAgICBjb25zdCBidWlsdCA9IChyZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdKVxuICAgICAgLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmxldmVsID09PSAncmVwb3J0JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKVxuICAgICAgLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBEZWZhdWx0ID0gZ3JvdXAuY29uZmlnPy5kZWZhdWx0O1xuICAgICAgICAvLyBPbmUgc2hhcmVkLCByZXBsYXllZCBvcHRpb24gc3RyZWFtIHBlciBncm91cDogdGhlIGNoaXBzIGZldGNoIGFuZCB0aGVcbiAgICAgICAgLy8gc3RvcmVkIGRlZmF1bHQncyBsYWJlbHMgcmVhZCB0aGUgc2FtZSBsaXN0LCBzbyBpdCBpcyBmZXRjaGVkIG9uY2UuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMkID0gbG9hZEdyb3VwT3B0aW9ucyhncm91cCwgdGhpcy5fcmVwb3J0RGF0YSwgcmVwb3J0SWQpO1xuXG4gICAgICAgIGNvbnN0IHJvdzogRmlsdGVyRGVmYXVsdFJvdyA9IHtcbiAgICAgICAgICBncm91cCxcbiAgICAgICAgICBsYWJlbDogZ3JvdXAubGFiZWwgfHwgZ3JvdXAuZmlsdGVycz8uWzBdPy5maWx0ZXJDb2x1bW4gfHwgJ0ZpbHRlcicsXG4gICAgICAgICAgc3RhcnQ6IGRhdGVGcm9tQm91bmQoZ3JvdXBEZWZhdWx0Py5zdGFydCksXG4gICAgICAgICAgZW5kOiBkYXRlRnJvbUJvdW5kKGdyb3VwRGVmYXVsdD8uZW5kKSxcbiAgICAgICAgICAvLyBOYW1lZCBiZWxvdywgb25jZSB0aGUgb3B0aW9uIGxpc3QgY2FycnlpbmcgdGhlaXIgbGFiZWxzIGlzIGluLlxuICAgICAgICAgIHZhbHVlczogW10sXG4gICAgICAgICAgdmFsdWU6IGdyb3VwRGVmYXVsdD8udmFsdWUgPz8gJycsXG4gICAgICAgICAgLy8gZnMtYXV0b2NvbXBsZXRlLWNoaXBzIGZldGNoOiB0aGUgZ3JvdXAncyBkaXN0aW5jdCBvcHRpb25zLCBuYW1lLWZpbHRlcmVkLlxuICAgICAgICAgIC8vIFNhbWUgbG9hZGVyIHRoZSByZXBvcnQgYmFyIHVzZXMsIHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgICAgZmV0Y2g6IChrZXl3b3JkPzogc3RyaW5nKSA9PiBtYXRjaE9wdGlvbnMob3B0aW9ucyQsIGtleXdvcmQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7IHJvdywgb3B0aW9ucyQsIHZhbHVlczogZ3JvdXBEZWZhdWx0Py52YWx1ZXMgPz8gW10gfTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgcm93cyA9IGJ1aWx0Lm1hcCgoZW50cnkpID0+IGVudHJ5LnJvdyk7XG4gICAgY29uc3Qgc2VlZGVkID0gYnVpbHQuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkudmFsdWVzLmxlbmd0aCk7XG5cbiAgICAvLyBOb3RoaW5nIHRvIG5hbWUg4oCUIHB1Ymxpc2ggaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyBvbiBhIHJlcXVlc3RcbiAgICAvLyBubyByb3cgbmVlZHMuXG4gICAgaWYgKCFzZWVkZWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlclJvd3Muc2V0KHJvd3MpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQSBzdG9yZWQgc2VsZWN0IGRlZmF1bHQgaG9sZHMgaWRzLCBzbyBpdHMgY2hpcHMgY2FuIG9ubHkgYmUgbmFtZWQgb25jZSB0aGVcbiAgICAvLyBvcHRpb24gbGlzdCBpcyBpbi4gUmVzb2x2ZSBldmVyeSBzZWVkZWQgcm93IGZpcnN0IGFuZCBwdWJsaXNoIHRoZSByb3dzIGluXG4gICAgLy8gb25lIGdvLCBzbyB0aGUgdGFiIG5ldmVyIHJlbmRlcnMgYSBjaGlwIHNob3dpbmcgYSByYXcgaWQuXG4gICAgZm9ya0pvaW4oc2VlZGVkLm1hcCgoZW50cnkpID0+IHJlc29sdmVPcHRpb25WYWx1ZXMoZW50cnkub3B0aW9ucyQsIGVudHJ5LnZhbHVlcykpKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgocmVzb2x2ZWQpID0+IHtcbiAgICAgICAgcmVzb2x2ZWQuZm9yRWFjaCgodmFsdWVzLCBpbmRleCkgPT4gc2VlZGVkW2luZGV4XS5yb3cudmFsdWVzID0gdmFsdWVzKTtcbiAgICAgICAgdGhpcy5maWx0ZXJSb3dzLnNldChyb3dzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVGhlIGRyYWZ0IGRlZmF1bHQgbm9ybWFsaXplZCB0byB0aGUgd2lyZSBzaGFwZSBmb3IgdGhpcyByb3cncyB0eXBlLCBvciBudWxsXG4gIC8vIHdoZW4gZW1wdHkgKHdoaWNoIGNsZWFycyB0aGUgc3RvcmVkIGRlZmF1bHQpLlxuICBwcml2YXRlIF9yb3dEZWZhdWx0KHJvdzogRmlsdGVyRGVmYXVsdFJvdyk6IEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGwge1xuICAgIHN3aXRjaCAocm93Lmdyb3VwLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2RhdGVSYW5nZSc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBkYXRlVG9Cb3VuZChyb3cuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmQgPSBkYXRlVG9Cb3VuZChyb3cuZW5kKTtcblxuICAgICAgICByZXR1cm4gKHN0YXJ0IHx8IGVuZCkgPyB7IHN0YXJ0OiBzdGFydCA/PyB1bmRlZmluZWQsIGVuZDogZW5kID8/IHVuZGVmaW5lZCB9IDogbnVsbDtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHJvdy52YWx1ZXMubGVuZ3RoID8geyB2YWx1ZXM6IHJvdy52YWx1ZXMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSkgfSA6IG51bGw7XG5cbiAgICAgIGNhc2UgJ2tleXdvcmQnOlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvdy52YWx1ZS50cmltKCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlID8geyB2YWx1ZSB9IDogbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBXaGV0aGVyIHRoZSByb3cncyBkcmFmdCBkaWZmZXJzIGZyb20gdGhlIGdyb3VwJ3Mgc3RvcmVkIGRlZmF1bHQg4oCUIG9ubHlcbiAgLy8gY2hhbmdlZCByb3dzIGFyZSBwZXJzaXN0ZWQgb24gU2F2ZS5cbiAgcHJpdmF0ZSBfZGVmYXVsdENoYW5nZWQocm93OiBGaWx0ZXJEZWZhdWx0Um93KTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmVmb3JlID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fbm9ybWFsaXplKHJvdy5ncm91cC5jb25maWc/LmRlZmF1bHQgPz8gbnVsbCkpO1xuICAgIGNvbnN0IGFmdGVyID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fbm9ybWFsaXplKHRoaXMuX3Jvd0RlZmF1bHQocm93KSkpO1xuXG4gICAgcmV0dXJuIGJlZm9yZSAhPT0gYWZ0ZXI7XG4gIH1cblxuICAvLyBBIHN0YWJsZSBjb21wYXJpc29uIGZvcm06IGRyb3AgcmVsYXRpdmUgKG5vdCBhdXRob3JlZCBoZXJlKSBhbmQgdW5kZWZpbmVkXG4gIC8vIGtleXMgc28gYSBuby1vcCBlZGl0IGRvZXNuJ3QgcmVhZCBhcyBhIGNoYW5nZS5cbiAgcHJpdmF0ZSBfbm9ybWFsaXplKHZhbHVlOiBGaWx0ZXJHcm91cERlZmF1bHQgfCBudWxsKTogRmlsdGVyR3JvdXBEZWZhdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZDogRmlsdGVyR3JvdXBEZWZhdWx0ID0ge307XG4gICAgaWYgKHZhbHVlLnN0YXJ0KSB7XG4gICAgICBub3JtYWxpemVkLnN0YXJ0ID0gdmFsdWUuc3RhcnQ7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5lbmQpIHtcbiAgICAgIG5vcm1hbGl6ZWQuZW5kID0gdmFsdWUuZW5kO1xuICAgIH1cbiAgICBpZiAodmFsdWUudmFsdWVzPy5sZW5ndGgpIHtcbiAgICAgIG5vcm1hbGl6ZWQudmFsdWVzID0gdmFsdWUudmFsdWVzO1xuICAgIH1cbiAgICBpZiAodmFsdWUudmFsdWUpIHtcbiAgICAgIG5vcm1hbGl6ZWQudmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnJlbGF0aXZlKSB7XG4gICAgICBub3JtYWxpemVkLnJlbGF0aXZlID0gdmFsdWUucmVsYXRpdmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWQpLmxlbmd0aCA/IG5vcm1hbGl6ZWQgOiBudWxsO1xuICB9XG59XG4iLCI8Zm9ybVxuICAgIGZzRm9ybVxuICAgIFtzdWJtaXRdPVwic2F2ZVwiPlxuICA8ZnMtZGlhbG9nPlxuICAgIDxoMSBtYXQtZGlhbG9nLXRpdGxlPlxuICAgICAgUmVwb3J0IFNldHRpbmdzXG4gICAgPC9oMT5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC10YWItZ3JvdXAgWyhzZWxlY3RlZCldPVwic2VsZWN0ZWRUYWJcIj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiU2V0dGluZ3NcIlxuICAgICAgICAgICAgbmFtZT1cInNldHRpbmdzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtbiB0YWItYm9keVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIE5hbWVcbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgW2ZzRm9ybVJlcXVpcmVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgIFRoZSBwYWdlLCB0eXBlZCBpbiBpbmNoZXMuIE9yaWVudGF0aW9uIGlzIG5vdCBhc2tlZCBmb3IgYmVjYXVzZSBpdFxuICAgICAgICAgICAgICBpcyBub3QgYW4gaW5kZXBlbmRlbnQgY2hvaWNlIC0gYSBwYWdlIHdpZGVyIHRoYW4gaXQgaXMgdGFsbCBJU1xuICAgICAgICAgICAgICBsYW5kc2NhcGUgLSBzbyB0aGUgdHdvIG51bWJlcnMgc2F5IGV2ZXJ5dGhpbmcgdGhlcmUgaXMgdG8gc2F5LlxuICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1zbS5hbGlnbi1zdGFydFwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmcy1mbGV4XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFdpZHRoXG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4xXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYWdlV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFnZVdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZzRm9ybVJlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZnNGb3JtTWluXT1cInBhZ2VEaW1lbnNpb25NaW5cIlxuICAgICAgICAgICAgICAgICAgICBbZnNGb3JtTWF4XT1cInBhZ2VEaW1lbnNpb25NYXhcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBtYXRUZXh0U3VmZml4PlxuICAgICAgICAgICAgICAgICAgaW5jaGVzXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmcy1mbGV4XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEhlaWdodFxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFnZUhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYWdlSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2ZzRm9ybVJlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZnNGb3JtTWluXT1cInBhZ2VEaW1lbnNpb25NaW5cIlxuICAgICAgICAgICAgICAgICAgICBbZnNGb3JtTWF4XT1cInBhZ2VEaW1lbnNpb25NYXhcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBtYXRUZXh0U3VmZml4PlxuICAgICAgICAgICAgICAgICAgaW5jaGVzXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgTGF5b3V0XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJsYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImxheW91dFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiZnJlZWZvcm1cIj5cbiAgICAgICAgICAgICAgICAgIEZyZWVmb3JtIOKAlCBwb3NpdGlvbiBjb21wb25lbnRzIGFueXdoZXJlIG9uIHRoZSBwYWdlXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiZmxvd1wiPlxuICAgICAgICAgICAgICAgICAgRmxvdyDigJQgY29tcG9uZW50cyBmbG93IGludG8gcm93cyBieSB3aWR0aCAlXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgICBGcmVlZm9ybSBpcyBsaWtlIFBvd2VyUG9pbnQ7IEZsb3cgaXMgbGlrZSBhIHJlc3BvbnNpdmUgZGFzaGJvYXJkLlxuICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxmcy1haS1yZXBvcnQtdGltZXpvbmUtc2VsZWN0IFsodGltZXpvbmUpXT1cInRpbWV6b25lXCI+PC9mcy1haS1yZXBvcnQtdGltZXpvbmUtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIlN0eWxlc1wiXG4gICAgICAgICAgICBuYW1lPVwic3R5bGVzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtbiB0YWItYm9keVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIEhlYWRpbmcgU2l6ZVxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgbWluPVwiNlwiXG4gICAgICAgICAgICAgICAgbWF4PVwiOTZcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGluZ1NpemVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJoZWFkaW5nU2l6ZVwiXG4gICAgICAgICAgICAgICAgW2ZzRm9ybU1pbl09XCI2XCJcbiAgICAgICAgICAgICAgICBbZnNGb3JtTWF4XT1cIjk2XCI+XG4gICAgICAgICAgICAgIDxzcGFuIG1hdFRleHRTdWZmaXg+XG4gICAgICAgICAgICAgICAgcHRcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgQXBwbGllcyB0byBjb21wb25lbnQgdGl0bGVzLiBQb2ludHMgbWFwIDE6MSB0byBQREYgYW5kIFBvd2VyUG9pbnQuXG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlcnNcIlxuICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uIHRhYi1ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKGZpbHRlclJvd3MoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgQGZvciAocm93IG9mIGZpbHRlclJvd3MoKTsgdHJhY2sgcm93Lmdyb3VwLmlkKSB7XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAocm93Lmdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnZGF0ZVJhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1zbS5hbGlnbi1jZW50ZXIgZnMtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZzLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgRnJvbSB7eyByb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZzRGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidzdGFydCcgKyByb3cuZ3JvdXAuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZzLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgVG8ge3sgcm93LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmc0RhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2VuZCcgKyByb3cuZ3JvdXAuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICA8ZnMtYXV0b2NvbXBsZXRlLWNoaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLWZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidEZWZhdWx0ICcgKyByb3cubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZldGNoXT1cInJvdy5mZXRjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy52YWx1ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3ZhbHVlcycgKyByb3cuZ3JvdXAuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZldGNoT25Gb2N1c109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZzQXV0b2NvbXBsZXRlQ2hpcHNUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQtb2JqZWN0PVwib2JqZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvYmplY3QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZnMtYXV0b2NvbXBsZXRlLWNoaXBzPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmcy1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQge3sgcm93LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3ZhbHVlJyArIHJvdy5ncm91cC5pZFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxmcy1tZXNzYWdlLWluZm8+XG4gICAgICAgICAgICAgICAgVGhpcyByZXBvcnQgaGFzIG5vIHJlcG9ydC1sZXZlbCBmaWx0ZXJzIHlldC4gQWRkIGEgZmlsdGVyIHRvIGFcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgKGl0cyBzZXR0aW5ncyDihpIgRmlsdGVycykgYW5kIHNob3cgaXQgaW4gdGhlIHJlcG9ydCBiYXIsXG4gICAgICAgICAgICAgICAgdGhlbiBzZXQgaXRzIGRlZmF1bHQgaGVyZS5cbiAgICAgICAgICAgICAgPC9mcy1tZXNzYWdlLWluZm8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgPGZzLWZvcm0tZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUoKVwiPlxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+Il19
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL3JlcG9ydC1zZXR0aW5ncy9yZXBvcnQtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUs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LENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQzt3R0FuTlUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsd0VDaEdwQyxnZ09BbU1PLGdIRDFISCxXQUFXLCtqREFDWCxZQUFZLDBwREFDWixZQUFZLGlIQUNaLGNBQWMsZ01BQ2QsZUFBZSxtSEFDZixZQUFZLG1hQUNaLGtCQUFrQixnUEFDbEIseUJBQXlCLGcxQkFDekIsYUFBYSw2b0JBQ2IsU0FBUyxpTEFDVCxjQUFjLCtIQUNkLGdCQUFnQix5R0FDaEIsZ0JBQWdCLDRIQUNoQixZQUFZLDRMQUNaLFFBQVEsc0RBQ1IsT0FBTyw4RUFDUCxTQUFTLHFIQUNULFFBQVEsaVVBQ1IsU0FBUyx3ZUFDVCxTQUFTLHFKQUNULHVCQUF1Qjs7NEZBR2QsdUJBQXVCO2tCQTdCbkMsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLHlCQUF5Qjt3QkFDekIsYUFBYTt3QkFDYixTQUFTO3dCQUNULGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsUUFBUTt3QkFDUixTQUFTO3dCQUNULFNBQVM7d0JBQ1QsdUJBQXVCO3FCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIE9uSW5pdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dBY3Rpb25zLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwsIE1hdEhpbnQsIE1hdFN1ZmZpeCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRPcHRpb24sIE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IEZzQXV0b2NvbXBsZXRlQ2hpcHNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9hdXRvY29tcGxldGUtY2hpcHMnO1xuaW1wb3J0IHsgRnNEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBGc0RpYWxvZ01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RpYWxvZyc7XG5pbXBvcnQgeyBGc0Zvcm1Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcbmltcG9ydCB7IEZzTWFza01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21hc2snO1xuaW1wb3J0IHsgRnNNZXNzYWdlLCBGc01lc3NhZ2VNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcbmltcG9ydCB7IEZzVGFic01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3RhYnMnO1xuXG5pbXBvcnQgeyBUaW1lem9uZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGltZXpvbmUtc2VsZWN0L3RpbWV6b25lLXNlbGVjdC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIEZpbHRlckdyb3VwRGVmYXVsdCxcbiAgUmVwb3J0LFxuICBSZXBvcnRGaWx0ZXJHcm91cCxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IERFRkFVTFRfSEVBRElOR19TSVpFLCBQQUdFX0RJTUVOU0lPTl9NQVgsIFBBR0VfRElNRU5TSU9OX01JTiB9IGZyb20gJy4uLy4uL2xheW91dCc7XG5pbXBvcnQgeyBsb2FkR3JvdXBPcHRpb25zLCBtYXRjaE9wdGlvbnMsIHJlc29sdmVPcHRpb25WYWx1ZXMgfSBmcm9tICcuLi8uLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IGRhdGVGcm9tQm91bmQsIGRhdGVUb0JvdW5kIH0gZnJvbSAnLi9yZXBvcnQtc2V0dGluZ3MtZGVmYXVsdCc7XG5cblxuLy8gV2hhdCB0aGUgZGlhbG9nIGhhbmRzIGJhY2sgd2hlbiBpdCBjbG9zZXMsIHNvIHRoZSBwYWdlIGtub3dzIHdoYXQgaGFwcGVuZWRcbi8vIHdpdGhvdXQgc25pZmZpbmcgbWFnaWMgc3RyaW5ncy4gQSBkaXNtaXNzZWQgZGlhbG9nIGNsb3NlcyB3aXRoIGB1bmRlZmluZWRgLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB7XG4gIGFjdGlvbjogJ3NhdmVkJyB8ICdkZWxldGVkJztcbn1cblxuXG4vLyBPbmUgcmVwb3J0LWxldmVsIGZpbHRlciBpbiB0aGUgRmlsdGVycyB0YWI6IGl0cyBncm91cCwgdGhlIGluZmVycmVkIGludGVyZmFjZSxcbi8vIGFuZCBhbiBlZGl0YWJsZSBkcmFmdCBkZWZhdWx0LiBUaGUgZHJhZnQgZmllbGRzIHVzZWQgZGVwZW5kIG9uIHRoZSB0eXBlXG4vLyAoZGF0ZVJhbmdlIOKGkiBzdGFydC9lbmQgRGF0ZXM7IHNlbGVjdCDihpIgdmFsdWVzOyBrZXl3b3JkIOKGkiB0ZXh0KS4gYGZldGNoYCBsb2Fkc1xuLy8gdGhlIHNlbGVjdCBvcHRpb25zIHRoZSBzYW1lIHdheSB0aGUgcmVwb3J0IGJhciBkb2VzLlxuaW50ZXJmYWNlIEZpbHRlckRlZmF1bHRSb3cge1xuICBncm91cDogUmVwb3J0RmlsdGVyR3JvdXA7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlIHwgbnVsbDtcbiAgZW5kOiBEYXRlIHwgbnVsbDtcbiAgdmFsdWVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuICB2YWx1ZTogc3RyaW5nO1xuICBmZXRjaDogKGtleXdvcmQ/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXT47XG59XG5cblxuLy8gUmVwb3J0IHNldHRpbmdzLCBpbiB0aHJlZSB0YWJzOlxuLy8gICBTZXR0aW5ncyDigJQgbmFtZSArIHBhZ2Ugc2V0dXAgKHNpemUgaW4gaW5jaGVzLCBsYXlvdXQgbW9kZSkuXG4vLyAgIFN0eWxlcyAgIOKAlCB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoaWMgc3R5bGVzIChzaXplcyBpbiBQT0lOVFMsIDE6MSB3aXRoXG4vLyAgIFBERi9Qb3dlclBvaW50KTsgdGhlIEhlYWRpbmcgc2l6ZSB0byBzdGFydC5cbi8vICAgRmlsdGVycyAg4oCUIHRoZSByZXBvcnQtbGV2ZWwgZmlsdGVycyBhbmQgdGhlaXIgREVGQVVMVCB2YWx1ZXMuIEEgZGVmYXVsdFxuLy8gICBzZWVkcyB0aGUgcmVwb3J0IGJhciBvbiBldmVyeSBvcGVuIChmb3IgZXZlcnkgdmlld2VyKSBidXQgc3RheXNcbi8vICAgdXNlci1jaGFuZ2VhYmxlIOKAlCBpdCBwcmUtZmlsbHMgdGhlIGNvbnRyb2wsIGl0IGRvZXNuJ3QgbG9jayBpdC4gVGhpcyBpcyB0aGVcbi8vICAgZml4IGZvciBoZWF2eSByZXBvcnRzIG9wZW5pbmcgYmxhbmsgYW5kIHRpbWluZyBvdXQ6IGEgZGVmYXVsdCBtb250aCArXG4vLyAgIG9yZ2FuaXphdGlvbiBzY29wZXMgdGhlIGxhbmRpbmcgcGFnZSBmcm9tIHRoZSBmaXJzdCBsb2FkLlxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBvcnQtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnQtc2V0dGluZ3MuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBGc0Zvcm1Nb2R1bGUsXG4gICAgRnNNYXNrTW9kdWxlLFxuICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgIEZzTWVzc2FnZU1vZHVsZSxcbiAgICBGc1RhYnNNb2R1bGUsXG4gICAgRnNEYXRlUGlja2VyTW9kdWxlLFxuICAgIEZzQXV0b2NvbXBsZXRlQ2hpcHNNb2R1bGUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0RGlhbG9nVGl0bGUsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRMYWJlbCxcbiAgICBNYXRIaW50LFxuICAgIE1hdFN1ZmZpeCxcbiAgICBNYXRJbnB1dCxcbiAgICBNYXRTZWxlY3QsXG4gICAgTWF0T3B0aW9uLFxuICAgIFRpbWV6b25lU2VsZWN0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIHNlbGVjdGVkVGFiID0gJ3NldHRpbmdzJztcblxuICBwdWJsaWMgbmFtZSA9ICcnO1xuICAvLyBUaGUgcGFnZSBpbiBpbmNoZXMuIE5vIGluaXRpYWxpemVyOiBldmVyeSByZXBvcnQgY2FycmllcyBhIHNpemUsIGFuZFxuICAvLyBuZ09uSW5pdCBzZWVkcyBib3RoIGJlZm9yZSB0aGUgdGFiIHJlbmRlcnMsIHNvIGEgcGxhY2Vob2xkZXIgaGVyZSBjb3VsZCBvbmx5XG4gIC8vIGV2ZXIgYmUgYSB3cm9uZyBudW1iZXIgYnJpZWZseSBzaG93aW5nIGFzIHRoZSBvcGVyYXRvcidzIG93bi5cbiAgLy9cbiAgLy8gVHlwZWQgYG51bWJlciB8IHN0cmluZ2AgYmVjYXVzZSBmc01hc2tOdW1iZXIgaXMgdGhlIGNvbnRyb2w6IGl0IGlzIHNlZWRlZFxuICAvLyB3aXRoIHRoZSByZXBvcnQncyBudW1iZXIgYnV0IGhhbmRzIGJhY2sgdGhlIHVubWFza2VkIFNUUklORyB0aGUgb3BlcmF0b3JcbiAgLy8gdHlwZWQuIFNhdmUgY2FzdHMgaXQgb25jZSwgb24gdGhlIHdheSBvdXQg4oCUIHNlZSBgX3BhZ2VEaW1lbnNpb24oKWAuXG4gIHB1YmxpYyBwYWdlV2lkdGg6IG51bWJlciB8IHN0cmluZztcbiAgcHVibGljIHBhZ2VIZWlnaHQ6IG51bWJlciB8IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VEaW1lbnNpb25NaW4gPSBQQUdFX0RJTUVOU0lPTl9NSU47XG4gIHB1YmxpYyByZWFkb25seSBwYWdlRGltZW5zaW9uTWF4ID0gUEFHRV9ESU1FTlNJT05fTUFYO1xuICBwdWJsaWMgbGF5b3V0OiAnZnJlZWZvcm0nIHwgJ2Zsb3cnID0gJ2ZyZWVmb3JtJztcbiAgLy8gRW1wdHkgdW50aWwgdGhlIHJlcG9ydCBoYXMgb25lOyBhcHAtdGltZXpvbmUtc2VsZWN0IHRoZW4gZGVmYXVsdHMgaXQgdG8gdGhlXG4gIC8vIHZpZXdlcidzIGJyb3dzZXIgem9uZSAod2hpY2ggU2F2ZSBwZXJzaXN0cywgbWFraW5nIHRoZSByZXBvcnQncyB6b25lIGV4cGxpY2l0KS5cbiAgcHVibGljIHRpbWV6b25lID0gJyc7XG4gIHB1YmxpYyBoZWFkaW5nU2l6ZSA9IERFRkFVTFRfSEVBRElOR19TSVpFO1xuXG4gIC8vIFRoZSByZXBvcnQtbGV2ZWwgZmlsdGVycyBhbmQgdGhlaXIgZWRpdGFibGUgZGVmYXVsdCB2YWx1ZXMgKEZpbHRlcnMgdGFiKS5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlclJvd3MgPSBzaWduYWw8RmlsdGVyRGVmYXVsdFJvd1tdPihbXSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YTogeyByZXBvcnQ6IFJlcG9ydCB9ID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8UmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIFJlcG9ydFNldHRpbmdzUmVzdWx0Pj4oTWF0RGlhbG9nUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLl9kYXRhLnJlcG9ydDtcbiAgICB0aGlzLm5hbWUgPSByZXBvcnQubmFtZTtcbiAgICB0aGlzLnBhZ2VXaWR0aCA9IHJlcG9ydC5wYWdlV2lkdGg7XG4gICAgdGhpcy5wYWdlSGVpZ2h0ID0gcmVwb3J0LnBhZ2VIZWlnaHQ7XG4gICAgdGhpcy5sYXlvdXQgPSByZXBvcnQubGF5b3V0ID8/ICdmcmVlZm9ybSc7XG4gICAgdGhpcy50aW1lem9uZSA9IHJlcG9ydC50aW1lem9uZSA/PyAnJztcbiAgICB0aGlzLmhlYWRpbmdTaXplID0gcmVwb3J0LmNvbmZpZz8uc3R5bGVzPy5oZWFkaW5nPy5zaXplID8/IERFRkFVTFRfSEVBRElOR19TSVpFO1xuXG4gICAgdGhpcy5fYnVpbGRGaWx0ZXJSb3dzKHJlcG9ydCk7XG4gIH1cblxuICAvLyBDb25maXJtIGFuZCBkZWxldGUgaGVyZSwgd2hpbGUgdGhlIGRpYWxvZyBpcyBzdGlsbCBvcGVuLCB0aGVuIGNsb3NlIHdpdGhcbiAgLy8gYSBgZGVsZXRlZGAgcmVzdWx0LiBUaGUgcGFnZSByZWFjdHMgdG8gdGhlIHJlc3VsdDsgaXQgbm8gbG9uZ2VyIG93bnMgdGhlXG4gIC8vIHByb21wdCBvciB0aGUgQVBJIGNhbGwuXG4gIHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5fcHJvbXB0LmNvbmZpcm0oe1xuICAgICAgdGl0bGU6ICdEZWxldGUgUmVwb3J0JyxcbiAgICAgIHRlbXBsYXRlOiBgRGVsZXRlIFwiJHt0aGlzLl9kYXRhLnJlcG9ydC5uYW1lfVwiPyBUaGlzIGNhbm5vdCBiZSB1bmRvbmUuYCxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9yZXBvcnREYXRhLmRlbGV0ZSh0aGlzLl9kYXRhLnJlcG9ydC5pZCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdSZXBvcnQgZGVsZXRlZCcpO1xuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UoeyBhY3Rpb246ICdkZWxldGVkJyB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmUgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVwb3J0SWQgPSB0aGlzLl9kYXRhLnJlcG9ydC5pZDtcblxuICAgIC8vIFBlcnNpc3QgdGhlIHJlcG9ydCBzZXR0aW5ncyBhbmQgZWFjaCBjaGFuZ2VkIGZpbHRlciBkZWZhdWx0IHRvZ2V0aGVyLCBzb1xuICAgIC8vIHRoZSBzaW5nbGUgU2F2ZSBjb3ZlcnMgYWxsIHRocmVlIHRhYnMuIFRoZSByZXBvcnQgcmVsb2FkcyBvbiB0aGUgYHNhdmVkYFxuICAgIC8vIHJlc3VsdCwgcmUtc2VlZGluZyB0aGUgYmFyIGZyb20gdGhlIG5ldyBkZWZhdWx0cy5cbiAgICBjb25zdCBzZXR0aW5ncyQgPSB0aGlzLl9yZXBvcnREYXRhLnVwZGF0ZShyZXBvcnRJZCwge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgcGFnZVdpZHRoOiB0aGlzLl9wYWdlRGltZW5zaW9uKHRoaXMucGFnZVdpZHRoKSxcbiAgICAgIHBhZ2VIZWlnaHQ6IHRoaXMuX3BhZ2VEaW1lbnNpb24odGhpcy5wYWdlSGVpZ2h0KSxcbiAgICAgIGxheW91dDogdGhpcy5sYXlvdXQsXG4gICAgICB0aW1lem9uZTogdGhpcy50aW1lem9uZSxcbiAgICAgIHN0eWxlczogeyBoZWFkaW5nOiB7IHNpemU6IHRoaXMuaGVhZGluZ1NpemUgfSB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdHMkID0gdGhpcy5maWx0ZXJSb3dzKClcbiAgICAgIC5maWx0ZXIoKHJvdykgPT4gdGhpcy5fZGVmYXVsdENoYW5nZWQocm93KSlcbiAgICAgIC5tYXAoKHJvdykgPT4gdGhpcy5fcmVwb3J0RGF0YS51cGRhdGVGaWx0ZXJHcm91cChyZXBvcnRJZCwgcm93Lmdyb3VwLmlkLCB7XG4gICAgICAgIGRlZmF1bHQ6IHRoaXMuX3Jvd0RlZmF1bHQocm93KSxcbiAgICAgIH0pKTtcblxuICAgIHJldHVybiBmb3JrSm9pbihbc2V0dGluZ3MkLCAuLi5kZWZhdWx0cyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdSZXBvcnQgc2V0dGluZ3Mgc2F2ZWQnKTtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UoeyBhY3Rpb246ICdzYXZlZCcgfSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfTtcblxuICAvLyBUaGUgcGFnZSBkaW1lbnNpb24gYXMgYSByZWFsIG51bWJlciBmb3IgdGhlIHdpcmUuIGZzTWFza051bWJlciBoYW5kcyBiYWNrXG4gIC8vIHRoZSB1bm1hc2tlZCBzdHJpbmcgaXQgYnVpbHQgd2l0aCBhIGZpeGVkICcuJyByYWRpeCAod2hpY2ggaXMgdGhlIHdob2xlXG4gIC8vIHBvaW50IG9mIHRoZSBtYXNrIC0gYSBuYXRpdmUgbnVtYmVyIGlucHV0IHBhaW50cyB0aGUgdmlld2VyJ3MgbG9jYWxlXG4gIC8vIHNlcGFyYXRvciBpbnN0ZWFkKSwgc28gdGhlIGNhc3QgaGVyZSBpcyBhIHN0cmFpZ2h0IHBhcnNlIGFuZCBuZXZlciBzZWVzIGFcbiAgLy8gY29tbWEuIFRoZSBiYWNrZW5kIHJlamVjdHMgYW55dGhpbmcgbm9uLW51bWVyaWMgcmF0aGVyIHRoYW4gY29lcmNpbmcsIHNvIGFcbiAgLy8gTmFOIGZhaWxzIGxvdWRseSBpbnN0ZWFkIG9mIHNpbGVudGx5IHN0b3JpbmcgYSB3cm9uZyBwYWdlIHNpemUuXG4gIHByaXZhdGUgX3BhZ2VEaW1lbnNpb24odmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IHBhcnNlRmxvYXQodmFsdWUpO1xuICB9XG5cbiAgLy8gQnVpbGQgb25lIGVkaXRhYmxlIHJvdyBwZXIgcmVwb3J0LWxldmVsIGZpbHRlciBncm91cCAobGV2ZWwgcmVwb3J0IG9yIGJvdGgpLFxuICAvLyBpbiBiYXIgb3JkZXIsIHNlZWRpbmcgZWFjaCBkcmFmdCBmcm9tIHRoZSBncm91cCdzIHN0b3JlZCBkZWZhdWx0LlxuICBwcml2YXRlIF9idWlsZEZpbHRlclJvd3MocmVwb3J0OiBSZXBvcnQpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnRJZCA9IHJlcG9ydC5pZDtcblxuICAgIGNvbnN0IGJ1aWx0ID0gKHJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10pXG4gICAgICAuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAubGV2ZWwgPT09ICdyZXBvcnQnIHx8IGdyb3VwLmxldmVsID09PSAnYm90aCcpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpXG4gICAgICAubWFwKChncm91cCkgPT4ge1xuICAgICAgICBjb25zdCBncm91cERlZmF1bHQgPSBncm91cC5jb25maWc/LmRlZmF1bHQ7XG4gICAgICAgIC8vIE9uZSBzaGFyZWQsIHJlcGxheWVkIG9wdGlvbiBzdHJlYW0gcGVyIGdyb3VwOiB0aGUgY2hpcHMgZmV0Y2ggYW5kIHRoZVxuICAgICAgICAvLyBzdG9yZWQgZGVmYXVsdCdzIGxhYmVscyByZWFkIHRoZSBzYW1lIGxpc3QsIHNvIGl0IGlzIGZldGNoZWQgb25jZS5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyQgPSBsb2FkR3JvdXBPcHRpb25zKGdyb3VwLCB0aGlzLl9yZXBvcnREYXRhLCByZXBvcnRJZCk7XG5cbiAgICAgICAgY29uc3Qgcm93OiBGaWx0ZXJEZWZhdWx0Um93ID0ge1xuICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgIGxhYmVsOiBncm91cC5sYWJlbCB8fCBncm91cC5maWx0ZXJzPy5bMF0/LmZpbHRlckNvbHVtbiB8fCAnRmlsdGVyJyxcbiAgICAgICAgICBzdGFydDogZGF0ZUZyb21Cb3VuZChncm91cERlZmF1bHQ/LnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IGRhdGVGcm9tQm91bmQoZ3JvdXBEZWZhdWx0Py5lbmQpLFxuICAgICAgICAgIC8vIE5hbWVkIGJlbG93LCBvbmNlIHRoZSBvcHRpb24gbGlzdCBjYXJyeWluZyB0aGVpciBsYWJlbHMgaXMgaW4uXG4gICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICB2YWx1ZTogZ3JvdXBEZWZhdWx0Py52YWx1ZSA/PyAnJyxcbiAgICAgICAgICAvLyBmcy1hdXRvY29tcGxldGUtY2hpcHMgZmV0Y2g6IHRoZSBncm91cCdzIGRpc3RpbmN0IG9wdGlvbnMsIG5hbWUtZmlsdGVyZWQuXG4gICAgICAgICAgLy8gU2FtZSBsb2FkZXIgdGhlIHJlcG9ydCBiYXIgdXNlcywgc28gdGhlIHR3byBuZXZlciBkcmlmdC5cbiAgICAgICAgICBmZXRjaDogKGtleXdvcmQ/OiBzdHJpbmcpID0+IG1hdGNoT3B0aW9ucyhvcHRpb25zJCwga2V5d29yZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHsgcm93LCBvcHRpb25zJCwgdmFsdWVzOiBncm91cERlZmF1bHQ/LnZhbHVlcyA/PyBbXSB9O1xuICAgICAgfSk7XG5cbiAgICBjb25zdCByb3dzID0gYnVpbHQubWFwKChlbnRyeSkgPT4gZW50cnkucm93KTtcbiAgICBjb25zdCBzZWVkZWQgPSBidWlsdC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMubGVuZ3RoKTtcblxuICAgIC8vIE5vdGhpbmcgdG8gbmFtZSDigJQgcHVibGlzaCBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiB3YWl0aW5nIG9uIGEgcmVxdWVzdFxuICAgIC8vIG5vIHJvdyBuZWVkcy5cbiAgICBpZiAoIXNlZWRlZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyUm93cy5zZXQocm93cyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIHN0b3JlZCBzZWxlY3QgZGVmYXVsdCBob2xkcyBpZHMsIHNvIGl0cyBjaGlwcyBjYW4gb25seSBiZSBuYW1lZCBvbmNlIHRoZVxuICAgIC8vIG9wdGlvbiBsaXN0IGlzIGluLiBSZXNvbHZlIGV2ZXJ5IHNlZWRlZCByb3cgZmlyc3QgYW5kIHB1Ymxpc2ggdGhlIHJvd3MgaW5cbiAgICAvLyBvbmUgZ28sIHNvIHRoZSB0YWIgbmV2ZXIgcmVuZGVycyBhIGNoaXAgc2hvd2luZyBhIHJhdyBpZC5cbiAgICBmb3JrSm9pbihzZWVkZWQubWFwKChlbnRyeSkgPT4gcmVzb2x2ZU9wdGlvblZhbHVlcyhlbnRyeS5vcHRpb25zJCwgZW50cnkudmFsdWVzKSkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXNvbHZlZCkgPT4ge1xuICAgICAgICByZXNvbHZlZC5mb3JFYWNoKCh2YWx1ZXMsIGluZGV4KSA9PiBzZWVkZWRbaW5kZXhdLnJvdy52YWx1ZXMgPSB2YWx1ZXMpO1xuICAgICAgICB0aGlzLmZpbHRlclJvd3Muc2V0KHJvd3MpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUgZHJhZnQgZGVmYXVsdCBub3JtYWxpemVkIHRvIHRoZSB3aXJlIHNoYXBlIGZvciB0aGlzIHJvdydzIHR5cGUsIG9yIG51bGxcbiAgLy8gd2hlbiBlbXB0eSAod2hpY2ggY2xlYXJzIHRoZSBzdG9yZWQgZGVmYXVsdCkuXG4gIHByaXZhdGUgX3Jvd0RlZmF1bHQocm93OiBGaWx0ZXJEZWZhdWx0Um93KTogRmlsdGVyR3JvdXBEZWZhdWx0IHwgbnVsbCB7XG4gICAgc3dpdGNoIChyb3cuZ3JvdXAudHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZVJhbmdlJzoge1xuICAgICAgICBjb25zdCBzdGFydCA9IGRhdGVUb0JvdW5kKHJvdy5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IGRhdGVUb0JvdW5kKHJvdy5lbmQpO1xuXG4gICAgICAgIHJldHVybiAoc3RhcnQgfHwgZW5kKSA/IHsgc3RhcnQ6IHN0YXJ0ID8/IHVuZGVmaW5lZCwgZW5kOiBlbmQgPz8gdW5kZWZpbmVkIH0gOiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gcm93LnZhbHVlcy5sZW5ndGggPyB7IHZhbHVlczogcm93LnZhbHVlcy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKSB9IDogbnVsbDtcblxuICAgICAgY2FzZSAna2V5d29yZCc6XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93LnZhbHVlLnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gdmFsdWUgPyB7IHZhbHVlIH0gOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFdoZXRoZXIgdGhlIHJvdydzIGRyYWZ0IGRpZmZlcnMgZnJvbSB0aGUgZ3JvdXAncyBzdG9yZWQgZGVmYXVsdCDigJQgb25seVxuICAvLyBjaGFuZ2VkIHJvd3MgYXJlIHBlcnNpc3RlZCBvbiBTYXZlLlxuICBwcml2YXRlIF9kZWZhdWx0Q2hhbmdlZChyb3c6IEZpbHRlckRlZmF1bHRSb3cpOiBib29sZWFuIHtcbiAgICBjb25zdCBiZWZvcmUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLl9ub3JtYWxpemUocm93Lmdyb3VwLmNvbmZpZz8uZGVmYXVsdCA/PyBudWxsKSk7XG4gICAgY29uc3QgYWZ0ZXIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLl9ub3JtYWxpemUodGhpcy5fcm93RGVmYXVsdChyb3cpKSk7XG5cbiAgICByZXR1cm4gYmVmb3JlICE9PSBhZnRlcjtcbiAgfVxuXG4gIC8vIEEgc3RhYmxlIGNvbXBhcmlzb24gZm9ybTogZHJvcCByZWxhdGl2ZSAobm90IGF1dGhvcmVkIGhlcmUpIGFuZCB1bmRlZmluZWRcbiAgLy8ga2V5cyBzbyBhIG5vLW9wIGVkaXQgZG9lc24ndCByZWFkIGFzIGEgY2hhbmdlLlxuICBwcml2YXRlIF9ub3JtYWxpemUodmFsdWU6IEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGwpOiBGaWx0ZXJHcm91cERlZmF1bHQgfCBudWxsIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkOiBGaWx0ZXJHcm91cERlZmF1bHQgPSB7fTtcbiAgICBpZiAodmFsdWUuc3RhcnQpIHtcbiAgICAgIG5vcm1hbGl6ZWQuc3RhcnQgPSB2YWx1ZS5zdGFydDtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmVuZCkge1xuICAgICAgbm9ybWFsaXplZC5lbmQgPSB2YWx1ZS5lbmQ7XG4gICAgfVxuICAgIGlmICh2YWx1ZS52YWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgbm9ybWFsaXplZC52YWx1ZXMgPSB2YWx1ZS52YWx1ZXM7XG4gICAgfVxuICAgIGlmICh2YWx1ZS52YWx1ZSkge1xuICAgICAgbm9ybWFsaXplZC52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUucmVsYXRpdmUpIHtcbiAgICAgIG5vcm1hbGl6ZWQucmVsYXRpdmUgPSB2YWx1ZS5yZWxhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobm9ybWFsaXplZCkubGVuZ3RoID8gbm9ybWFsaXplZCA6IG51bGw7XG4gIH1cbn1cbiIsIjxmb3JtXG4gICAgZnNGb3JtXG4gICAgW3N1Ym1pdF09XCJzYXZlXCI+XG4gIDxmcy1kaWFsb2c+XG4gICAgPGgxIG1hdC1kaWFsb2ctdGl0bGU+XG4gICAgICBSZXBvcnQgU2V0dGluZ3NcbiAgICA8L2gxPlxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICA8bWF0LXRhYi1ncm91cCBbKHNlbGVjdGVkKV09XCJzZWxlY3RlZFRhYlwiPlxuICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgbGFiZWw9XCJTZXR0aW5nc1wiXG4gICAgICAgICAgICBuYW1lPVwic2V0dGluZ3NcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uIHRhYi1ib2R5XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgTmFtZVxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbZnNGb3JtUmVxdWlyZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgVGhlIHBhZ2UsIHR5cGVkIGluIGluY2hlcy4gT3JpZW50YXRpb24gaXMgbm90IGFza2VkIGZvciBiZWNhdXNlIGl0XG4gICAgICAgICAgICAgIGlzIG5vdCBhbiBpbmRlcGVuZGVudCBjaG9pY2UgLSBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTXG4gICAgICAgICAgICAgIGxhbmRzY2FwZSAtIHNvIHRoZSB0d28gbnVtYmVycyBzYXkgZXZlcnl0aGluZyB0aGVyZSBpcyB0byBzYXkuXG4gICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLXNtLmFsaWduLXN0YXJ0XCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZzLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgV2lkdGhcbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgZnNNYXNrTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIFtzY2FsZV09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYWdlV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFnZVdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZzRm9ybVJlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZnNGb3JtTWluXT1cInBhZ2VEaW1lbnNpb25NaW5cIlxuICAgICAgICAgICAgICAgICAgICBbZnNGb3JtTWF4XT1cInBhZ2VEaW1lbnNpb25NYXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFRleHRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICBpbmNoZXNcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnMtZmxleFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBIZWlnaHRcbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgZnNNYXNrTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIFtzY2FsZV09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYWdlSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInBhZ2VIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbZnNGb3JtUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmc0Zvcm1NaW5dPVwicGFnZURpbWVuc2lvbk1pblwiXG4gICAgICAgICAgICAgICAgICAgIFtmc0Zvcm1NYXhdPVwicGFnZURpbWVuc2lvbk1heFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0VGV4dFN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgIGluY2hlc1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgTGF5b3V0XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJsYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImxheW91dFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiZnJlZWZvcm1cIj5cbiAgICAgICAgICAgICAgICAgIEZyZWVmb3JtIOKAlCBwb3NpdGlvbiBjb21wb25lbnRzIGFueXdoZXJlIG9uIHRoZSBwYWdlXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiZmxvd1wiPlxuICAgICAgICAgICAgICAgICAgRmxvdyDigJQgY29tcG9uZW50cyBmbG93IGludG8gcm93cyBieSB3aWR0aCAlXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgICBGcmVlZm9ybSBpcyBsaWtlIFBvd2VyUG9pbnQ7IEZsb3cgaXMgbGlrZSBhIHJlc3BvbnNpdmUgZGFzaGJvYXJkLlxuICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxmcy1haS1yZXBvcnQtdGltZXpvbmUtc2VsZWN0IFsodGltZXpvbmUpXT1cInRpbWV6b25lXCI+PC9mcy1haS1yZXBvcnQtdGltZXpvbmUtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIlN0eWxlc1wiXG4gICAgICAgICAgICBuYW1lPVwic3R5bGVzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtbiB0YWItYm9keVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIEhlYWRpbmcgU2l6ZVxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgbWluPVwiNlwiXG4gICAgICAgICAgICAgICAgbWF4PVwiOTZcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGluZ1NpemVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJoZWFkaW5nU2l6ZVwiXG4gICAgICAgICAgICAgICAgW2ZzRm9ybU1pbl09XCI2XCJcbiAgICAgICAgICAgICAgICBbZnNGb3JtTWF4XT1cIjk2XCI+XG4gICAgICAgICAgICAgIDxzcGFuIG1hdFRleHRTdWZmaXg+XG4gICAgICAgICAgICAgICAgcHRcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgQXBwbGllcyB0byBjb21wb25lbnQgdGl0bGVzLiBQb2ludHMgbWFwIDE6MSB0byBQREYgYW5kIFBvd2VyUG9pbnQuXG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlcnNcIlxuICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uIHRhYi1ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKGZpbHRlclJvd3MoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgQGZvciAocm93IG9mIGZpbHRlclJvd3MoKTsgdHJhY2sgcm93Lmdyb3VwLmlkKSB7XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAocm93Lmdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnZGF0ZVJhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1zbS5hbGlnbi1jZW50ZXIgZnMtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZzLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgRnJvbSB7eyByb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZzRGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidzdGFydCcgKyByb3cuZ3JvdXAuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZzLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgVG8ge3sgcm93LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmc0RhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2VuZCcgKyByb3cuZ3JvdXAuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICA8ZnMtYXV0b2NvbXBsZXRlLWNoaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLWZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidEZWZhdWx0ICcgKyByb3cubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZldGNoXT1cInJvdy5mZXRjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy52YWx1ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3ZhbHVlcycgKyByb3cuZ3JvdXAuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZldGNoT25Gb2N1c109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZzQXV0b2NvbXBsZXRlQ2hpcHNUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQtb2JqZWN0PVwib2JqZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvYmplY3QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZnMtYXV0b2NvbXBsZXRlLWNoaXBzPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmcy1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQge3sgcm93LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3ZhbHVlJyArIHJvdy5ncm91cC5pZFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxmcy1tZXNzYWdlLWluZm8+XG4gICAgICAgICAgICAgICAgVGhpcyByZXBvcnQgaGFzIG5vIHJlcG9ydC1sZXZlbCBmaWx0ZXJzIHlldC4gQWRkIGEgZmlsdGVyIHRvIGFcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgKGl0cyBzZXR0aW5ncyDihpIgRmlsdGVycykgYW5kIHNob3cgaXQgaW4gdGhlIHJlcG9ydCBiYXIsXG4gICAgICAgICAgICAgICAgdGhlbiBzZXQgaXRzIGRlZmF1bHQgaGVyZS5cbiAgICAgICAgICAgICAgPC9mcy1tZXNzYWdlLWluZm8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgPGZzLWZvcm0tZGlhbG9nLWFjdGlvbnM+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUoKVwiPlxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+Il19
|
|
@@ -31,4 +31,4 @@ export const ReportStates = [
|
|
|
31
31
|
{ name: 'Active', value: ReportState.Active },
|
|
32
32
|
{ name: 'Deleted', value: ReportState.Deleted },
|
|
33
33
|
];
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQW1IbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUFxTUYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFnQkQsZ0ZBQWdGO0FBQ2hGLDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcclxuLy8gc2VydmVyLXNpZGUgZnJvbSB0aGUgbm9ybWFsaXplZCB0YWJsZXMgKHJlcG9ydHMg4oaSIHJlcG9ydF9wYWdlcyDihpJcclxuLy8gcmVwb3J0X2NvbXBvbmVudHMgKyByZXBvcnRfZmlsdGVycywgcGx1cyByZXBvcnRfZmlsdGVyX2dyb3VwcykuIEFsbCBrZXlzIGFyZVxyXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXHJcbi8vIEVDaGFydHMgb3B0aW9ucyAvIEZzTGlzdCBjb25maWcuXHJcblxyXG4vLyBMYXlvdXQgbW9kZXM6IEZyZWVmb3JtID0gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGNvbXBvbmVudHMgKGRyYWcgYW55d2hlcmUpO1xyXG4vLyBGbG93ID0gY29tcG9uZW50cyBmbG93IGxpa2Ugcm93cywgZWFjaCB0YWtpbmcgZmxvd1dpZHRoICUgb2YgdGhlIHBhZ2Ugd2lkdGguXHJcbmV4cG9ydCB0eXBlIFJlcG9ydExheW91dCA9ICdmcmVlZm9ybScgfCAnZmxvdyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydCB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgbGF5b3V0OiBSZXBvcnRMYXlvdXQ7XHJcbiAgLy8gSUFOQSB0aW1lem9uZSAoZS5nLiBBbWVyaWNhL05ld19Zb3JrKSBhbmNob3JpbmcgZGF0ZSBmaWx0ZXJpbmcgKyBjaGFydCBkYXRlXHJcbiAgLy8gYnVja2V0aW5nLiBudWxsIGZhbGxzIGJhY2sgdG8gdGhlIGFjY291bnQgem9uZSB0aGVuIFVUQyAocmVzb2x2ZWQgc2VydmVyLXNpZGUpLlxyXG4gIHRpbWV6b25lOiBzdHJpbmcgfCBudWxsO1xyXG4gIC8vIFJlcG9ydC1sZXZlbCBjb25maWc6IHR5cG9ncmFwaGljIHN0eWxlcywgZXRjLiAoY2FtZWxDYXNlIEpTT04gY29sdW1uKS5cclxuICBjb25maWc6IFJlcG9ydENvbmZpZztcclxuICAvLyBUaGUgcGFnZSBpbiBJTkNIRVMgKHRoZSByZXBvcnQncyBuYXRpdmUgdW5pdCDigJQgUERGcyBhbmQgUG93ZXJQb2ludCBhcmVcclxuICAvLyBpbmNoLWJhc2VkLCBzbyBleHBvcnRzIGFyZSBkaW1lbnNpb25hbGx5IGV4YWN0KS4gT3JpZW50YXRpb24gaXMgbm90IGEgZmllbGRcclxuICAvLyBvZiBpdHMgb3duOiBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTIGxhbmRzY2FwZS5cclxuICBwYWdlV2lkdGg6IG51bWJlcjtcclxuICBwYWdlSGVpZ2h0OiBudW1iZXI7XHJcbiAgcGFnZXM6IFJlcG9ydFBhZ2VbXTtcclxuICBmaWx0ZXJHcm91cHM6IFJlcG9ydEZpbHRlckdyb3VwW107XHJcbn1cclxuXHJcbi8vIFJlcG9ydC1sZXZlbCBzdHlsaW5nLiBTaXplcyBhcmUgaW4gUE9JTlRTICgxLzcyXCIpIOKAlCB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoeVxyXG4vLyBtYXBzIDE6MSB0byBQREYgKDcycHQvaW4pIGFuZCBQb3dlclBvaW50IChwb2ludCBmb250IHNpemVzKSwgc28gYSBwb2ludFxyXG4vLyB2YWx1ZSBpcyBkaW1lbnNpb25hbGx5IGV4YWN0IG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbmZpZyB7XHJcbiAgc3R5bGVzPzogUmVwb3J0U3R5bGVzO1xyXG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sLiBPcHRpb25hbCBvbiB0aGUgdHlwZSBiZWNhdXNlIGEgUmVwb3J0Q29uZmlnXHJcbiAgLy8gbGl0ZXJhbCBuZWVkIG5vdCBjYXJyeSBpdDsgdGhlIEFQSSBhbHdheXMgc2VuZHMgaXQsIHJlc29sdmVkLlxyXG4gIGdyb3VwQnk/OiBSZXBvcnRHcm91cEJ5O1xyXG59XHJcblxyXG4vLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCDigJQgdGhlIG9uZSBzd2l0Y2ggdGhhdCByZS1idWNrZXRzIGV2ZXJ5XHJcbi8vIHRpbWUtc2VyaWVzIGNoYXJ0IG9uIHRoZSByZXBvcnQgYmV0d2VlbiBkYXksIHdlZWssIG1vbnRoLCBxdWFydGVyIGFuZCB5ZWFyLlxyXG4vL1xyXG4vLyBJdCBpcyBOT1QgYSBmaWx0ZXI6IGEgZmlsdGVyIG5hcnJvd3Mgd2hpY2ggcm93cyBhcmUgY291bnRlZCwgdGhpcyBjaGFuZ2VzIGhvd1xyXG4vLyB0aGUgc3Vydml2aW5nIHJvd3MgYXJlIGJ1Y2tldGVkLiBJdCBzaGFyZXMgdGhlIHJlcG9ydCdzIGZpbHRlciBiYXIgYmVjYXVzZVxyXG4vLyB0aGF0IGlzIHRoZSBvbmUgcm93IG9mIGNvbnRyb2xzIGEgdmlld2VyIHJlYWRzIGEgcmVwb3J0IHRocm91Z2gg4oCUIHRoZVxyXG4vLyBzZXBhcmF0aW9uIHRoYXQgbWF0dGVycyBpcyBpbiB0aGUgbW9kZWwsIG5vdCBpbiB3aGVyZSB0aGUgY29udHJvbCBpcyBwYWludGVkLlxyXG4vL1xyXG4vLyBBbHdheXMgYXJyaXZlcyBSRVNPTFZFRCAodGhlIGJhY2tlbmQgZmlsbHMgYW4gYWJzZW50IG9yIHBhcnRpYWwgc3RvcmVkIGJsb2NrXHJcbi8vIGluIGZyb20gaXRzIG93biBkZWZhdWx0cyksIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGVmYXVsdCBoZXJlIOKAlCByZW5kZXIgd2hhdFxyXG4vLyB5b3UgYXJlIGdpdmVuLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyb3VwQnkge1xyXG4gIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBncmFudWxhcml0aWVzOiBDaGFydEdyYW51bGFyaXR5W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3R5bGVzIHtcclxuICBoZWFkaW5nPzogeyBzaXplPzogbnVtYmVyIH07XHJcbn1cclxuXHJcbi8vIENvbnRlbnQgcGFkZGluZyBhcm91bmQgYSBjb21wb25lbnQncyBib2R5LCBpbiBJTkNIRVMgKHRoZSBnZW9tZXRyeSB1bml0KS5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQYWRkaW5nIHtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgcmlnaHQ/OiBudW1iZXI7XHJcbiAgYm90dG9tPzogbnVtYmVyO1xyXG4gIGxlZnQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFnZSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xyXG4gIG9yZGVyOiBudW1iZXI7XHJcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlcG9ydENvbXBvbmVudFR5cGUgPSAnY2hhcnQnIHwgJ2xpc3QnIHwgJ2twaSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudCB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICB0eXBlOiBSZXBvcnRDb21wb25lbnRUeXBlO1xyXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xyXG4gIC8vIEdlb21ldHJ5IGluIElOQ0hFUy4gRnJlZWZvcm06IGFic29sdXRlIHBvc2l0aW9uIG9uIHRoZSBwYWdlIGNhbnZhcy5cclxuICAvLyBGbG93OiBvbmx5IGZsb3dXaWR0aC9vcmRlciBhcHBseTsgeC95IGFyZSByZW1lbWJlcmVkIGZvciBhIHN3aXRjaCBiYWNrIHRvXHJcbiAgLy8gZnJlZWZvcm0uXHJcbiAgeDogbnVtYmVyO1xyXG4gIHk6IG51bWJlcjtcclxuICB3OiBudW1iZXI7XHJcbiAgaDogbnVtYmVyO1xyXG4gIC8vIEhlaWdodCBtb2RlLCBERVJJVkVEIGZyb20gdHlwZSBzZXJ2ZXItc2lkZSAobm90IHN0b3JlZCwgcmVhZC1vbmx5KTogbGlzdHNcclxuICAvLyBhbmQgS1BJIHRpbGVzIGFyZSBhdXRvICh0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LCBgaGAgaWdub3JlZCk7IGNoYXJ0c1xyXG4gIC8vIGFyZSBhbHdheXMgZml4ZWQgKHVzZSBgaGApIHNvIHRoZXkgZml0IHRoZSBib3ggYW5kIG5ldmVyIG92ZXJmbG93LlxyXG4gIGF1dG9IZWlnaHQ6IGJvb2xlYW47XHJcbiAgLy8gRmxvdyBsYXlvdXQ6ICUgb2YgdGhlIHBhZ2UgY29udGVudCB3aWR0aCB0aGlzIGNvbXBvbmVudCB0YWtlcy5cclxuICBmbG93V2lkdGg6IG51bWJlcjtcclxuICAvLyBGbG93IGxheW91dCBvcmRlcmluZy5cclxuICBvcmRlcjogbnVtYmVyO1xyXG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcclxuICBjb25maWc6IENoYXJ0Q29uZmlnICYgTGlzdENvbmZpZyAmIEtwaUNvbmZpZyAmIENvbXBvbmVudExheW91dENvbmZpZyAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xyXG59XHJcblxyXG4vLyBDcm9zcy10eXBlIGxheW91dC9zdHlsZSBrZXlzIGNhcnJpZWQgaW4gYSBjb21wb25lbnQncyBjb25maWcgKGFsb25nc2lkZSB0aGVcclxuLy8gdHlwZS1zcGVjaWZpYyBjaGFydC9saXN0L2twaSBrZXlzKS5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRMYXlvdXRDb25maWcge1xyXG4gIHBhZGRpbmc/OiBDb21wb25lbnRQYWRkaW5nO1xyXG59XHJcblxyXG4vLyBUaGUgcHJlc2VudGF0aW9uIHNldHRpbmdzIGEgY29tcG9uZW50J3Mgc2V0dGluZ3MgZGlhbG9nIGVkaXRzLiBOZWl0aGVyIGZpZWxkXHJcbi8vIGlzIHBhcnQgb2Ygd2hhdCB0aGUgY29tcG9uZW50IHF1ZXJpZXMsIHNvIGEgY2hhbmdlIHRvIHRoZW0gcmVwYWludHMgd2l0aG91dFxyXG4vLyByZS1ydW5uaW5nIGFueXRoaW5nLlxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFNldHRpbmdzIHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHBhZGRpbmc6IENvbXBvbmVudFBhZGRpbmc7XHJcbn1cclxuXHJcbi8vIFdoZXJlIGEgY2hhcnQncyBsZWdlbmQgc2l0cyByZWxhdGl2ZSB0byB0aGUgcGxvdCwgb3IgJ2hpZGRlbicgdG8gZHJvcCBpdC5cclxuZXhwb3J0IHR5cGUgTGVnZW5kUG9zaXRpb24gPSAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdoaWRkZW4nO1xyXG5cclxuZXhwb3J0IHR5cGUgQ2hhcnRHcmFudWxhcml0eSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICd5ZWFyJztcclxuXHJcbi8vIEhvdyBlYWNoIGdyYW51bGFyaXR5IHJlYWRzIGluIHRoZSBncm91cC1ieSBjb250cm9sIGFuZCBvbiBhbiBleHBvcnQgY292ZXJcclxuLy8gc2hlZXQuIFdISUNIIG9mIHRoZW0gYSBnaXZlbiByZXBvcnQgb2ZmZXJzIGNvbWVzIGZyb20gaXRzIFJlcG9ydEdyb3VwQnk7XHJcbi8vIHRoaXMgaXMgb25seSB0aGUgbmFtaW5nLiAneWVhcicgcmVhZHMgYXMgXCJBbm51YWxseVwiLlxyXG5leHBvcnQgY29uc3QgR1JBTlVMQVJJVFlfT1BUSU9OUzogeyB2YWx1ZTogQ2hhcnRHcmFudWxhcml0eTsgbmFtZTogc3RyaW5nIH1bXSA9IFtcclxuICB7IHZhbHVlOiAnZGF5JywgbmFtZTogJ0RheScgfSxcclxuICB7IHZhbHVlOiAnd2VlaycsIG5hbWU6ICdXZWVrJyB9LFxyXG4gIHsgdmFsdWU6ICdtb250aCcsIG5hbWU6ICdNb250aCcgfSxcclxuICB7IHZhbHVlOiAncXVhcnRlcicsIG5hbWU6ICdRdWFydGVyJyB9LFxyXG4gIHsgdmFsdWU6ICd5ZWFyJywgbmFtZTogJ0FubnVhbGx5JyB9LFxyXG5dO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFydENvbmZpZyB7XHJcbiAgY2hhcnRUeXBlPzogJ2JhcicgfCAnbGluZScgfCAnYXJlYScgfCAncGllJyB8ICdkb251dCc7XHJcbiAgLy8gRm9yIGtpbmQgJ3RpbWUnLCB0aGUgc2VydmVyIGJ1Y2tldHMgdGhlIHJhdyBkYXRldGltZSBjb2x1bW4gdG8gYGdyYW51bGFyaXR5YFxyXG4gIC8vIGluIHRoZSByZXBvcnQncyB0aW1lem9uZSAodGhlIFNRTCBleHBvc2VzIHRoZSByYXcgY29sdW1uLCB1bmJ1Y2tldGVkKS5cclxuICB4QXhpcz86IHsgY29sdW1uOiBzdHJpbmc7IGtpbmQ/OiAnY2F0ZWdvcnknIHwgJ3RpbWUnOyBncmFudWxhcml0eT86IENoYXJ0R3JhbnVsYXJpdHk7IGxhYmVsPzogc3RyaW5nIH07XHJcbiAgbWVhc3VyZXM/OiBDaGFydE1lYXN1cmVbXTtcclxuICBzcGxpdEJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcclxuICAvLyBTaW5nbGUtZGltZW5zaW9uIGJhciBjaGFydHMgb25seTogY29sb3IgZWFjaCBiYXIgYnkgaXRzIG93biBjYXRlZ29yeSBhbmRcclxuICAvLyBzaG93IGEgbGVnZW5kLCBXSVRIT1VUIHNwbGl0dGluZyBpbnRvIG11bHRpcGxlIHNlcmllcyAod2hpY2ggc2xpdmVycyB0aGVcclxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xyXG4gIC8vIHNldCBvciB0aGUgY2hhcnQgaXNuJ3QgYSBiYXIgY2hhcnQuXHJcbiAgY29sb3JCeT86IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH07XHJcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xyXG4gIHN0YWNrZWQ/OiBib29sZWFuO1xyXG4gIGxlZ2VuZD86IExlZ2VuZFBvc2l0aW9uO1xyXG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xyXG4gIGxpbWl0PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0TWVhc3VyZSB7XHJcbiAgY29sdW1uOiBzdHJpbmc7XHJcbiAgYWdncmVnYXRpb24/OiAnc3VtJyB8ICdjb3VudCcgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCc7XHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgLy8gQXBwbGllZCB0byBhIEtQSSdzIHNpbmdsZSB2YWx1ZSBvbmx5IOKAlCBpdCBpcyBhZ2dyZWdhdGVkIHNlcnZlci1zaWRlIGFmdGVyXHJcbiAgLy8gdGhlIFNRTCBydW5zLCBzbyB0aGUgU1FMIGNhbm5vdCBmb3JtYXQgaXQuIENoYXJ0IG1lYXN1cmVzIHN0YXkgbnVtZXJpYy5cclxuICBmb3JtYXQ/OiAnbnVtYmVyJyB8ICdwZXJjZW50JyB8ICdjdXJyZW5jeSc7XHJcbiAgLy8gSG93IG1hbnkgZGVjaW1hbCBwbGFjZXMgdGhlIHZhbHVlIGlzIHNob3duIHRvLiBGaXhlZCByYXRoZXIgdGhhbiBtYXhpbXVtOlxyXG4gIC8vIGEgY29sdW1uIG9mIHJhdGVzIGlzIHVucmVhZGFibGUgd2hlbiBlYWNoIG9uZSBzaG93cyBhIGRpZmZlcmVudCBudW1iZXIgb2ZcclxuICAvLyBkZWNpbWFscy4gT21pdHRlZCBsZWF2ZXMgdGhlIGxvY2FsZSdzIG93biBkZWZhdWx0LCB3aGljaCBpcyB3aGF0IGV2ZXJ5XHJcbiAgLy8gcmVwb3J0IGF1dGhvcmVkIGJlZm9yZSB0aGlzIGRpZC5cclxuICAvL1xyXG4gIC8vIEl0IGNhbm5vdCBiZSBhcHBsaWVkIGluIHRoZSBTUUw6IHRoZSB2YWx1ZSBpcyBhZ2dyZWdhdGVkIGFmdGVyIHRoZSByZXBvcnQnc1xyXG4gIC8vIGZpbHRlcnMgcnVuLCBzbyBwcmUtcm91bmRpbmcgd291bGQgYnJlYWsgbGl2ZSByZS1maWx0ZXJpbmcgYnkgZGF0ZSByYW5nZSBvclxyXG4gIC8vIHBhcnRuZXIuXHJcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExpc3RDb25maWcge1xyXG4gIC8vIEEgbGlzdCBjZWxsIHJlbmRlcnMgdGhlIHZhbHVlIHZlcmJhdGltOiBwZXJjZW50IHNpZ25zLCBjdXJyZW5jeSBzeW1ib2xzLFxyXG4gIC8vIHRob3VzYW5kcyBzZXBhcmF0b3JzIGFuZCBkZWNpbWFsIHBsYWNlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIGNvbXBvbmVudCdzXHJcbiAgLy8gU1FMICh0aGUgYmFja2VuZCByZWplY3RzIGFueSBvdGhlciBgZm9ybWF0YCBoZXJlKS4gYGRhdGVgIGlzIHRoZSBleGNlcHRpb25cclxuICAvLyDigJQgYSBkYXRlIGNvbHVtbiBzdGF5cyBhIFJBVyB0aW1lc3RhbXAgc28gdGhlIHJlcG9ydCB0aW1lem9uZSBhbmQgaXRzXHJcbiAgLy8gZGF0ZVJhbmdlIGZpbHRlcnMga2VlcCB3b3JraW5nLCBhbmQgdGhlIHZpZXdlciBsb2NhbGlzZXMgaXQgYXQgcmVuZGVyLlxyXG4gIC8vIEEgU1FMLWZvcm1hdHRlZCBjb2x1bW4gaXMgdGV4dCwgc28gaXQgbmFtZXMgYHNvcnRDb2x1bW5gOiB0aGUgcmF3IG51bWVyaWNcclxuICAvLyBhbGlhcyB0aGUgcXVlcnkgYWxzbyBvdXRwdXRzLCB3aGljaCB0aGUgc2VydmVyIG9yZGVycyBieSBpbnN0ZWFkLlxyXG4gIGNvbHVtbnM/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgZm9ybWF0PzogJ2RhdGUnOyBzb3J0Q29sdW1uPzogc3RyaW5nIH1bXTtcclxuICBzb3J0PzogUmVwb3J0U29ydDtcclxuICBwYWdlU2l6ZT86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBLcGlDb25maWcge1xyXG4gIG1lYXN1cmU/OiBDaGFydE1lYXN1cmU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U29ydCB7XHJcbiAgY29sdW1uOiBzdHJpbmc7XHJcbiAgZGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYyc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlcG9ydEZpbHRlclR5cGUgPSAnZGF0ZVJhbmdlJyB8ICdzZWxlY3QnIHwgJ2tleXdvcmQnO1xyXG5cclxuLy8gV2hlcmUgYSBmaWx0ZXIgZ3JvdXAncyBjb250cm9sIGlzIGV4cG9zZWQuIEEgZ3JvdXAgY2FuIGJlIHNob3duIG9uIGl0c1xyXG4vLyBjb21wb25lbnRzLCBpbiB0aGUgcmVwb3J0IGJhciwgb3IgQk9USCBhdCBvbmNlICh0aGUgdHdvIGFyZSBpbmRlcGVuZGVudFxyXG4vLyB0b2dnbGVzIGluIHRoZSBVSSk7IGEgY29sdW1uIHdpdGggbmVpdGhlciBleHBvc2VkIHNpbXBseSBoYXMgbm8gZmlsdGVyLlxyXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJMZXZlbCA9ICdjb21wb25lbnQnIHwgJ3JlcG9ydCcgfCAnYm90aCc7XHJcblxyXG4vLyBPbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIG9mIGEgY29tcG9uZW50J3MgU1FMLCB3aXRoIHRoZSBmaWx0ZXIgaW50ZXJmYWNlXHJcbi8vIElORkVSUkVEIGZyb20gaXRzIGRhdGEgKHRoZSBodW1hbiBuZXZlciBwaWNrcyB0aGUgaW50ZXJmYWNlIOKAlCBpdCBmb2xsb3dzIHRoZVxyXG4vLyBjb2x1bW4ncyB0eXBlKS4gRHJpdmVzIHRoZSBGaWx0ZXJzIHRhYiBsaXN0aW5nLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlcmFibGVDb2x1bW4ge1xyXG4gIGNvbHVtbjogc3RyaW5nO1xyXG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XHJcbn1cclxuXHJcbi8vIEdyb3VuZCB0cnV0aDogb25lIGZpbHRlcmFibGUgb3V0cHV0IGNvbHVtbiBPTiBvbmUgY29tcG9uZW50J3MgU1FMLiBBbHdheXMgYVxyXG4vLyBtZW1iZXIgb2YgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSB1bml0IHRoYXQgbGlua3MgZXF1aXZhbGVudCBmaWx0ZXJzIGFjcm9zc1xyXG4vLyBjb21wb25lbnRzIGFuZCBkZWNpZGVzIHdoZXJlIHRoZSBjb250cm9sIHJlbmRlcnMgKGNvbXBvbmVudCB2cyByZXBvcnQgYmFyKS5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXIge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcclxuICBmaWx0ZXJHcm91cElkOiBudW1iZXI7XHJcbiAgZmlsdGVyQ29sdW1uOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICBoYXNPcHRpb25zOiBib29sZWFuO1xyXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbn1cclxuXHJcbi8vIE9uZSBjaG9pY2UgaW4gYSBzZWxlY3QgZmlsdGVyJ3Mgb3B0aW9uIGxpc3QuIFRoZSB2YWx1ZSBpcyB3aGF0IHRoZSBmaWx0ZXJcclxuLy8gbWF0Y2hlcyBvbiBhbmQgZ2V0cyBzdG9yZWQgaW4gYSBzYXZlZCBkZWZhdWx0IOKAlCBmb3IgYW4gZW50aXR5IHRoYXQgaXMgaXRzXHJcbi8vIHN0YWJsZSBpZCwgbmV2ZXIgaXRzIG5hbWUsIHNvIHJlbmFtaW5nIHRoZSBlbnRpdHkgbW92ZXMgdGhlIGxhYmVsIHdpdGhvdXRcclxuLy8gYnJlYWtpbmcgdGhlIGRlZmF1bHQuIFRoZSBsYWJlbCBpcyBvbmx5IGV2ZXIgd2hhdCB0aGUgdmlld2VyIHJlYWRzLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlck9wdGlvbiB7XHJcbiAgdmFsdWU6IHVua25vd247XHJcbiAgbGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJHcm91cCB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcclxuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xyXG4gIGxldmVsOiBSZXBvcnRGaWx0ZXJMZXZlbDtcclxuICBvcmRlcjogbnVtYmVyO1xyXG4gIGNvbmZpZzogeyBkZWZhdWx0PzogRmlsdGVyR3JvdXBEZWZhdWx0IH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcclxufVxyXG5cclxuLy8gQSBmaWx0ZXIgZ3JvdXAncyBhdXRob3JlZCBkZWZhdWx0IOKAlCB0aGUgdmFsdWUgdGhhdCBzZWVkcyB0aGUgcmVwb3J0IGJhciBvblxyXG4vLyBldmVyeSBvcGVuLiBTaGFwZSBmb2xsb3dzIHRoZSBncm91cCdzIHR5cGU6IGRhdGVSYW5nZSB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZFxyXG4vLyBjYWxlbmRhci1kYXkgcmFuZ2UpIG9yIGEgcmVsYXRpdmUgcHJlc2V0OyBzZWxlY3QgdXNlcyB2YWx1ZXM7IGtleXdvcmQgdXNlc1xyXG4vLyB2YWx1ZS5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cERlZmF1bHQge1xyXG4gIC8vIGRhdGVSYW5nZSByZWxhdGl2ZSBwcmVzZXQsIHJlc29sdmVkIGFnYWluc3QgXCJub3dcIiBvbiBldmVyeSBvcGVuLiBPbmUgb2Y6XHJcbiAgLy8gdGhpc1dlZWssIGxhc3RXZWVrLCBsYXN0N0RheXMsIGxhc3QzMERheXMsIGxhc3QzTW9udGhzLCBsYXN0Nk1vbnRocyxcclxuICAvLyBsYXN0MTJNb250aHMsIHRoaXNNb250aCwgdGhpc1F1YXJ0ZXIsIHRoaXNZZWFyL3llYXJUb0RhdGUuIFRoZSB3ZWVrIG9uZXNcclxuICAvLyBhcmUgd2hvbGUgY2FsZW5kYXIgZGF5cywgU3VuZGF5IHRvIFNhdHVyZGF5LCBpbiB0aGUgcmVwb3J0J3MgdGltZXpvbmUuXHJcbiAgcmVsYXRpdmU/OiBzdHJpbmc7XHJcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcclxuICBlbmQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBlbmQgKHl5eXktTU0tZGQpXHJcbiAgdmFsdWVzPzogdW5rbm93bltdOyAvLyBzZWxlY3QgZGVmYXVsdCBwaWNrZWQgdmFsdWVzXHJcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XHJcbn1cclxuXHJcbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwIChuZXZlciBwZXJzaXN0ZWQpOiBzaGFwZSBkZXBlbmRzIG9uIHRoZVxyXG4vLyBncm91cCdzIHR5cGUuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXBWYWx1ZSB7XHJcbiAgc3RhcnQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXHJcbiAgZW5kPzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxyXG4gIHZhbHVlcz86IHVua25vd25bXTsgLy8gc2VsZWN0XHJcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmRcclxufVxyXG5cclxuLy8gT25lIHJlc29sdmVkIGZpbHRlciBzZW50IHdpdGggYSBjb21wb25lbnQncyBkYXRhIHJlcXVlc3QuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRGaWx0ZXJWYWx1ZSB7XHJcbiAgZmlsdGVySWQ6IG51bWJlcjtcclxuICBzdGFydD86IHN0cmluZztcclxuICBlbmQ/OiBzdHJpbmc7XHJcbiAgdmFsdWVzPzogdW5rbm93bltdO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG4vLyBQZXItY29tcG9uZW50IGludGVyYWN0aW9uIHN0YXRlIHNlbnQgd2l0aCB0aGUgZGF0YSByZXF1ZXN0OiBsaXN0cyBzZW5kXHJcbi8vIHNvcnQvcGFnaW5nOyB0aW1lLXNlcmllcyBjaGFydHMgc2VuZCB0aGUgZ3JhaW4gcGlja2VkIG9uIHRoZSByZXBvcnQncyBncm91cC1ieVxyXG4vLyBjb250cm9sLCB3aGljaCBvdmVycmlkZXMgdGhlIGF1dGhvcmVkIGdyYW51bGFyaXR5IGZvciB0aGF0IHJlcXVlc3Qgb25seS4gVGhlXHJcbi8vIHdpcmUga2V5IHN0YXlzIGBmcmVxdWVuY3lgIOKAlCBpdCBpcyB0aGUgYnVja2V0aW5nIGZyZXF1ZW5jeSB0aGUgc2VydmVyIGFwcGxpZXMuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YVN0YXRlIHtcclxuICBzb3J0PzogUmVwb3J0U29ydDtcclxuICBwYWdlPzogbnVtYmVyO1xyXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xyXG4gIGZyZXF1ZW5jeT86IENoYXJ0R3JhbnVsYXJpdHk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YSB7XHJcbiAgY29sdW1uczogc3RyaW5nW107XHJcbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcclxuICBwYWdpbmc/OiB7IHRvdGFsOiBudW1iZXI7IHBhZ2U6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9O1xyXG4gIHRydW5jYXRlZDogYm9vbGVhbjtcclxuICAvLyBUaGUgZWZmZWN0aXZlIHRpbWUgYnVja2V0IHRoZSByb3dzIHdlcmUgZ3JvdXBlZCBpbnRvIChhZnRlciBhbnkgZ3JvdXAtYnlcclxuICAvLyBvdmVycmlkZSksIG9yIG51bGwgZm9yIGEgbm9uLXRpbWUgYXhpcy4gRHJpdmVzIHRoZSBjb21wYWN0IHgtYXhpcyBsYWJlbHMuXHJcbiAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMaXN0SXRlbSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgbW9kaWZ5RGF0ZTogc3RyaW5nO1xyXG4gIHN0YXRlPzogUmVwb3J0U3RhdGU7XHJcbiAgLy8gVGhlIGZvbGRlciB0aGUgcmVwb3J0IGlzIGZpbGVkIHVuZGVyLiBudWxsIGlzIGEgcmVhbCwgY29tbW9uIHZhbHVlIOKAlCB0aGVcclxuICAvLyByZXBvcnQgc2l0cyBhdCB0aGUgcm9vdCBvZiB0aGUgbGlzdGluZyB0cmVlIGFsb25nc2lkZSB0aGUgZm9sZGVycy5cclxuICAvL1xyXG4gIC8vIE9wdGlvbmFsIGxpa2UgYHN0YXRlYCBiZXNpZGUgaXQ6IHRoZSBiYWNrZW5kIGFsd2F5cyBzZW5kcyBpdCwgYnV0IG1ha2luZyBpdFxyXG4gIC8vIHJlcXVpcmVkIGlzIGEgYnJlYWtpbmcgdHlwZSBjaGFuZ2UgZm9yIGV2ZXJ5IGNvbnN1bWVyIGhvbGRpbmcgYVxyXG4gIC8vIFJlcG9ydExpc3RJdGVtIGxpdGVyYWwgKGZpeHR1cmVzLCBtb2NrcykgYW5kIGJ1eXMgbm90aGluZyDigJQgdGhlIGxpc3RpbmdcclxuICAvLyByZWFkcyBpdCBhcyBgPz8gbnVsbGAgZWl0aGVyIHdheS5cclxuICByZXBvcnRGb2xkZXJJZD86IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbi8vIE9uZSBmb2xkZXIgaW4gdGhlIGxpc3RpbmcgdHJlZSDigJQgYW4gYXVkaWVuY2UgYnVja2V0IChcIk1hbmFnZW1lbnRcIixcclxuLy8gXCJPcGVyYXRpb25zXCIpIHJlcG9ydHMgYXJlIGZpbGVkIGludG8uIEZvbGRlcnMgbmVzdCB2aWEgcGFyZW50UmVwb3J0Rm9sZGVySWQ7XHJcbi8vIHJlcG9ydHMgbmV2ZXIgZG8sIHNvIHRoZSB0cmVlJ3Mgb25seSBicmFuY2ggbm9kZXMgYXJlIGZvbGRlcnMuXHJcbi8vXHJcbi8vIE5vIHN0YXRlOiBhIGZvbGRlciBpcyBvbmx5IGRlbGV0YWJsZSBvbmNlIGl0IGlzIGVtcHR5LCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvXHJcbi8vIHNvZnQtZGVsZXRlIGFuZCBcIlNob3cgRGVsZXRlZFwiIGlzIGEgcmVwb3J0cy1vbmx5IGNvbmNlcHQuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9sZGVyIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcclxufVxyXG5cclxuLy8gR0VUIC9hcGkvcmVwb3J0cyByZXR1cm5zIGJvdGggaGFsdmVzIGZsYXQ7IHRoZSBsaXN0aW5nIG5lc3RzIHRoZW0gaXRzZWxmLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFRyZWUge1xyXG4gIHJlcG9ydHM6IFJlcG9ydExpc3RJdGVtW107XHJcbiAgZm9sZGVyczogUmVwb3J0Rm9sZGVyW107XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJlcG9ydE5vZGVUeXBlIHtcclxuICBGb2xkZXIgPSAnZm9sZGVyJyxcclxuICBSZXBvcnQgPSAncmVwb3J0JyxcclxufVxyXG5cclxuLy8gT25lIG5vZGUgYXMgZnMtdHJlZSBzZWVzIGl0LiBGb2xkZXJzIGFuZCByZXBvcnRzIHNoYXJlIG9uZSBpZCBzcGFjZSBpbiB0aGVcclxuLy8gdmlldywgc28gdGhlIGlkcyBhcmUgcHJlZml4ZWQgKCdmOjEyJyAvICdyOjM0Jykg4oCUIGBpZGAgaXMgdGhlIG9yaWdpbmFsLFxyXG4vLyBwZXItdGFibGUgaWQgdGhhdCB0aGUgQVBJIGVuZHBvaW50cyB0YWtlLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydE5vZGUge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IFJlcG9ydE5vZGVUeXBlO1xyXG4gIC8vIE9ubHkgZXZlciBwb3B1bGF0ZWQgb24gYSBmb2xkZXI7IGEgcmVwb3J0IGlzIGFsd2F5cyBhIGxlYWYuXHJcbiAgY2hpbGRyZW46IFJlcG9ydE5vZGVbXTtcclxuICAvLyBQcmVzZW50IG9uIHJlcG9ydCBub2RlcyBvbmx5LlxyXG4gIHJlcG9ydD86IFJlcG9ydExpc3RJdGVtO1xyXG59XHJcblxyXG4vLyBSZXBvcnRzIGFyZSBzb2Z0LWRlbGV0YWJsZTogYSBkZWxldGVkIHJlcG9ydCBsZWF2ZXMgdGhlIGxpc3RpbmcgYnV0IGtlZXBzIGl0c1xyXG4vLyBwYWdlcyBhbmQgY29tcG9uZW50cywgYW5kIHRoZSBsaXN0aW5nJ3MgXCJTaG93IERlbGV0ZWRcIiBtb2RlIHJlc3RvcmVzIGl0LlxyXG4vLyBGb2xkZXJzIGhhdmUgbm8gZXF1aXZhbGVudCDigJQgdGhleSBhcmUgb25seSBkZWxldGFibGUgb25jZSBlbXB0eSwgc28gdGhleSBoYXJkXHJcbi8vIGRlbGV0ZSBhbmQgdGhlcmUgaXMgbm90aGluZyB0byByZXN0b3JlLlxyXG5leHBvcnQgZW51bSBSZXBvcnRTdGF0ZSB7XHJcbiAgQWN0aXZlID0gJ2FjdGl2ZScsXHJcbiAgRGVsZXRlZCA9ICdkZWxldGVkJyxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJlcG9ydFN0YXRlcyA9IFtcclxuICB7IG5hbWU6ICdBY3RpdmUnLCB2YWx1ZTogUmVwb3J0U3RhdGUuQWN0aXZlIH0sXHJcbiAgeyBuYW1lOiAnRGVsZXRlZCcsIHZhbHVlOiBSZXBvcnRTdGF0ZS5EZWxldGVkIH0sXHJcbl07XHJcblxyXG4vLyBUaGUgY2hhdCB0dXJuIGZsYWdzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgYWRkcyAoUmVwb3J0c1xcQWlWaWV3KS5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDaGF0UmVzcG9uc2Uge1xyXG4gIHJlcG9ydENoYW5nZWQ/OiBib29sZWFuO1xyXG4gIHJlcG9ydFJlbmFtZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG4vLyBPbmUgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIEFJIGtub3dsZWRnZSBkb2N1bWVudCDigJQgdGhlIG9wZXJhdG9yLWF1dGhvcmVkXHJcbi8vIG1hcmtkb3duIGFwcGVuZGVkIHRvIHRoZSByZXBvcnQgYWdlbnQncyBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIG9uIGV2ZXJ5IHR1cm4uXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb24ge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgY29udGVudDogc3RyaW5nO1xyXG4gIGN1cnJlbnQ6IGJvb2xlYW47XHJcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcclxuICBtb2RpZnlEYXRlOiBEYXRlO1xyXG4gIGFjY291bnRJZDogbnVtYmVyIHwgbnVsbDtcclxuICBhY2NvdW50TmFtZTogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuLy8gR0VUL1BVVCBpbnN0cnVjdGlvbnMgcGF5bG9hZDogdGhlIGN1cnJlbnQgdmVyc2lvbiAobnVsbCB1bnRpbCBvbmUgaXNcclxuLy8gYXV0aG9yZWQpIHBsdXMgdGhlIGZ1bGwgaGlzdG9yeSwgbmV3ZXN0IGZpcnN0LlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEluc3RydWN0aW9ucyB7XHJcbiAgaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbiB8IG51bGw7XHJcbiAgdmVyc2lvbnM6IFJlcG9ydEluc3RydWN0aW9uW107XHJcbn1cclxuXHJcbi8vIFRoZSBsYXRlc3Qgc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQgKGFuIGZmX3Byb2Nlc3NlcyByb3cpIOKAlCBlbm91Z2ggZm9yIHRoZVxyXG4vLyBzZXR0aW5ncyBkaWFsb2cgdG8gc2F5IHdoYXQgc3RhdGUgdGhlIGJ1aWxkIGlzIGluIGFuZCB3aGVuIGl0IGxhc3QgcmFuLlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGQge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgc3RhdGU6IHN0cmluZztcclxuICBwZXJjZW50OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIGR1cmF0aW9uOiBudW1iZXI7XHJcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcclxuICBzdGFydERhdGU6IERhdGU7XHJcbiAgZW5kRGF0ZTogRGF0ZTtcclxufVxyXG5cclxuLy8gQSBidWlsZCBzdGFnZSdzIHN0YXRlIG9uIHRoZSBlbnRpdHkgc2NvcmVib2FyZDogJ2RvbmUnID0gYnVpbHQsICdtaXNzaW5nJyA9XHJcbi8vIHN0aWxsIG5lZWRzIGJ1aWxkaW5nIChhIG1pc3Npbmcgc3RhZ2UgaXMgdW5idWlsdCBjb250ZW50LCBuZXZlciBhbiBlcnJvcikuXHJcbmV4cG9ydCB0eXBlIFNlbWFudGljQnVpbGRTdGFnZSA9ICdkb25lJyB8ICdtaXNzaW5nJztcclxuXHJcbi8vIE9uZSBlbnVtIGNvbHVtbiBvZiBhbiBlbnRpdHksIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzIHRoZSBidWlsZCBpbmxpbmVkLlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRFbnVtIHtcclxuICBjb2x1bW46IHN0cmluZztcclxuICB2YWx1ZXM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG4vLyBPbmUgZW50aXR5IHJvdyBvZiB0aGUgc2NvcmVib2FyZCAoYW4gZW50aXR5ID0gYSB0YWJsZSArIGEgbW9kZWwgKyBhXHJcbi8vIGhhbmRsZXIpOiBpdHMgdGFibGUvc2hhcGUgY291bnRzLCBpbmxpbmVkIGVudW0gdmFsdWVzLCBjb21wdXRlZCBmaWVsZHMsIGhvd1xyXG4vLyBtYW55IGNvZGUgZnVuY3Rpb25zIHdlcmUgY2FjaGVkIChzcGxpdCBtb2RlbCB2cyBoYW5kbGVyKSwgYW5kIHRoZSBwZXItc3RhZ2VcclxuLy8gYnVpbHQvbWlzc2luZyBzdGF0ZS5cclxuLy9cclxuLy8gYG1vZGVsYC9gaGFuZGxlcmAgYXJlIHRoZSBjbGFzc2VzIHRoZSBmdW5jdGlvbnMgd2VyZSByZWFkIGZyb20g4oCUIHdoYXQgYVxyXG4vLyByZWFkZXIgcmVjb2duaXplcyB0aGUgcm93IGJ5LCB3aGVyZSBga2V5YCBpcyB3aGF0IHRoZSByZXBvcnQgQUkgYWRkcmVzc2VzIGl0XHJcbi8vIGJ5IGluIGRlc2NyaWJlX2VudGl0eSAvIGNvbXBpbGVfcXVlcnkuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZEVudGl0eSB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgdGFibGU6IHN0cmluZztcclxuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcclxuICBoYW5kbGVyOiBzdHJpbmcgfCBudWxsO1xyXG4gIGNvbHVtbnM6IG51bWJlcjtcclxuICByZWxhdGlvbnNoaXBzOiBudW1iZXI7XHJcbiAgZW51bXM6IFNlbWFudGljQnVpbGRFbnVtW107XHJcbiAgY29tcHV0ZWRGaWVsZHM6IHN0cmluZ1tdO1xyXG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcclxuICBtb2RlbEZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcclxuICBoYW5kbGVyRnVuY3Rpb25Db3VudDogbnVtYmVyO1xyXG4gIHN0YWdlczogUmVjb3JkPHN0cmluZywgU2VtYW50aWNCdWlsZFN0YWdlPjtcclxufVxyXG5cclxuLy8gT25lIHN0YW5kYWxvbmUgY29kZSBjbGFzcyB0aGUgYnVpbGQgcmVhZDogZG9tYWluIGxvZ2ljIHdpdGggbm8gdGFibGUgb2YgaXRzXHJcbi8vIG93biAoYSBzdW1tYXJ5IG1vZGVsLCBhIGNhbGN1bGF0aW9uIHNlcnZpY2UpLiBUaGUgcmVwb3J0IEFJIHJlYWRzIGl0cyBjb2RlXHJcbi8vIGV4YWN0bHkgbGlrZSBhbiBlbnRpdHkncywgYnV0IGl0IGNhbiBuZXZlciBiZSBxdWVyaWVkIOKAlCB0aGVyZSBpcyBub3RoaW5nIHRvXHJcbi8vIHNlbGVjdCBmcm9tIOKAlCBzbyBpdCBjYXJyaWVzIG5vIHRhYmxlLCBjb2x1bW5zIG9yIHJlbGF0aW9uc2hpcHMuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZENsYXNzIHtcclxuICBrZXk6IHN0cmluZztcclxuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcclxuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbi8vIFdoYXQgdGhlIGJ1aWxkIGRlY2lkZWQgYSBwaHlzaWNhbCB0YWJsZSBpcy4gRW50aXR5IGFuZCBqdW5jdGlvbiBhcmUgYm90aFxyXG4vLyByZWFjaGFibGUgYnkgdGhlIHJlcG9ydCBBSSDigJQgYW4gZW50aXR5IGRpcmVjdGx5LCBhIGp1bmN0aW9uIHRocm91Z2ggdGhlXHJcbi8vIG1hbnktdG8tbWFueSBpdCBicmlkZ2VzLiBFeGNsdWRlZCBpcyBub3QgcmVhY2hhYmxlIGF0IGFsbC5cclxuZXhwb3J0IHR5cGUgU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uID0gJ2VudGl0eScgfCAnanVuY3Rpb24nIHwgJ2V4Y2x1ZGVkJztcclxuXHJcbi8vIE9uZSBwaHlzaWNhbCB0YWJsZSBhcyB0aGUgYnVpbGQgY2xhc3NpZmllZCBpdC4gYHJlYXNvbmAgYW5zd2VycyBhIHNpbmdsZVxyXG4vLyBxdWVzdGlvbiDigJQgd2h5IGNhbid0IHRoZSByZXBvcnQgQUkgc2VlIHRoaXMgdGFibGU/IOKAlCBhbmQgaXMgbnVsbCB3aGVuIGl0IGNhbi5cclxuLy8gQSBqdW5jdGlvbiB3aXRoIGEgcmVhc29uIGJyaWRnZWQgbm90aGluZywgc28gaXQgaXMganVzdCBhcyBpbnZpc2libGUgYXMgYW5cclxuLy8gZXhjbHVkZWQgdGFibGUuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFRhYmxlIHtcclxuICB0YWJsZTogc3RyaW5nO1xyXG4gIGNsYXNzaWZpY2F0aW9uOiBTZW1hbnRpY1RhYmxlQ2xhc3NpZmljYXRpb247XHJcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XHJcbiAgcmVhc29uOiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG4vLyBUaGUgYnVpbGQgc2NvcmVib2FyZCBzaGlwcGVkIGFsb25nc2lkZSB0aGUgYnVpbGQgc3RhdHVzOiB0aGUgc3VtbWFyeSBjb3VudHMsXHJcbi8vIHRoZSBmdWxsIGJyZWFrZG93biB0aGUgc2V0dGluZ3MgZGlhbG9nIGRyaWxscyBpbnRvIOKAlCBCT1RIIGtpbmRzIG9mIHVuaXQgdGhlXHJcbi8vIGJ1aWxkIGNhY2hlcywgdGFibGUtYmFja2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIGNvZGUgY2xhc3NlcyDigJQgYW5kIHRoZVxyXG4vLyBjYXRhbG9nIG9mIGV2ZXJ5IHRhYmxlIHRoZSBidWlsZCBzYXcsIHNvIHRoZSB0YWIgY2FuIHNob3cgd2hhdCB0aGUgcmVwb3J0IEFJXHJcbi8vIGNhbid0IHNlZSwgbm90IGp1c3Qgd2hhdCBpdCBjYW4uXHJcbi8vXHJcbi8vIGBmdW5jdGlvbkNvdW50YCBzcGFucyBlbnRpdGllcyBhbmQgY2xhc3NlcyBhbGlrZTogaXQgaXMgdGhlIHNhbWUgdG90YWwgdGhlXHJcbi8vIGJ1aWxkIGl0c2VsZiByZXBvcnRzIHdoZW4gaXQgZmluaXNoZXMuXHJcbi8vXHJcbi8vIGB0YWJsZXNgIGlzIGVtcHR5IGZvciBhbiBhcnRpZmFjdCBidWlsdCBiZWZvcmUgdGhlIGNhdGFsb2cgZXhpc3RlZC4gUmVhZCB0aGF0XHJcbi8vIGFzIFwibm8gY2F0YWxvZ1wiLCBuZXZlciBhcyBcIm5vdGhpbmcgd2FzIGV4Y2x1ZGVkXCIuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZERldGFpbCB7XHJcbiAgZ2VuZXJhdGVkQXQ6IERhdGUgfCBudWxsO1xyXG4gIGVudGl0eUNvdW50OiBudW1iZXI7XHJcbiAgY2xhc3NDb3VudDogbnVtYmVyO1xyXG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcclxuICBlbnRpdGllczogU2VtYW50aWNCdWlsZEVudGl0eVtdO1xyXG4gIGNsYXNzZXM6IFNlbWFudGljQnVpbGRDbGFzc1tdO1xyXG4gIHRhYmxlQ291bnQ6IG51bWJlcjtcclxuICBqdW5jdGlvbkNvdW50OiBudW1iZXI7XHJcbiAgdW5saW5rZWRKdW5jdGlvbkNvdW50OiBudW1iZXI7XHJcbiAgZXhjbHVkZWRDb3VudDogbnVtYmVyO1xyXG4gIHRhYmxlczogU2VtYW50aWNCdWlsZFRhYmxlW107XHJcbn1cclxuXHJcbi8vIFdoaWNoIGNsYXNzIGEgY2FjaGVkIGZ1bmN0aW9uIHdhcyByZWFkIGZyb20uIEFuIGVudGl0eSdzIGNhY2hlIHNwbGl0cyBpbnRvXHJcbi8vICdtb2RlbCcgYW5kICdoYW5kbGVyJzsgYSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgaGFzIG9uZSBncm91cCwgJ2NsYXNzJy5cclxuZXhwb3J0IHR5cGUgU2VtYW50aWNGdW5jdGlvblNvdXJjZSA9ICdtb2RlbCcgfCAnaGFuZGxlcicgfCAnY2xhc3MnO1xyXG5cclxuLy8gT25lIEFJLWNsYXNzaWZpZWQgY29kZSBmdW5jdGlvbiBmcm9tIGEgbW9kZWwsIGhhbmRsZXIgb3Igc3RhbmRhbG9uZSBjbGFzczpcclxuLy8gd2hhdCBraW5kIG9mIGxvZ2ljIGl0IGlzLCB3aGF0IGl0IGRvZXMsIGFuZCB3aGF0IGl0IHByb2R1Y2VzIOKAlCB0aGUgYnVpbGQnc1xyXG4vLyBjYWNoZWQgXCJ3aGF0IHRoZSBjb2RlIGRvZXNcIiBrbm93bGVkZ2Ugc2hvd24gaW4gdGhlIGZ1bmN0aW9ucyBkaWFsb2cuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbiB7XHJcbiAgY2xhc3M6IHN0cmluZztcclxuICBtZXRob2Q6IHN0cmluZztcclxuICBzaWduYXR1cmU6IHN0cmluZztcclxuICBraW5kOiBzdHJpbmc7XHJcbiAgc3VtbWFyeTogc3RyaW5nO1xyXG4gIHByb2R1Y2VzOiBzdHJpbmc7XHJcbiAgc291cmNlOiBTZW1hbnRpY0Z1bmN0aW9uU291cmNlO1xyXG59XHJcblxyXG4vLyBPbmUgZW50aXR5J3MgY2FjaGVkIGNvZGUtZnVuY3Rpb24ga25vd2xlZGdlLCBmZXRjaGVkIHdoZW4gYSBmdW5jdGlvbnMgZGlhbG9nXHJcbi8vIG9wZW5zICh0aGUgZnVsbCBzZXQgYWNyb3NzIGFsbCBlbnRpdGllcyBpcyB0b28gYmlnIHRvIHNoaXAgd2l0aCB0aGVcclxuLy8gc2NvcmVib2FyZCkuIE9uZSBwYXlsb2FkIHNlcnZlcyBib3RoIGRpYWxvZ3Mg4oCUIGNvbnN1bWVycyBmaWx0ZXIgYnkgc291cmNlLlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljRW50aXR5RnVuY3Rpb25zIHtcclxuICBlbnRpdHk6IHN0cmluZztcclxuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XHJcbiAgbW9kZWxDbGFzczogc3RyaW5nIHwgbnVsbDtcclxuICBoYW5kbGVyQ2xhc3M6IHN0cmluZyB8IG51bGw7XHJcbiAgZnVuY3Rpb25zOiBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFN0YXR1cyB7XHJcbiAgYnVpbGQ6IFNlbWFudGljQnVpbGQgfCBudWxsO1xyXG4gIGRldGFpbDogU2VtYW50aWNCdWlsZERldGFpbDtcclxufVxyXG5cclxuLy8gVGhlIHJlcG9ydCBtb2R1bGUncyBHZW5lcmFsIHNldHRpbmdzIChhIHNtYWxsIGdsb2JhbCBrZXkvdmFsdWUgc3RvcmUsIHRoZVxyXG4vLyByZXBvcnRpbmcgY291bnRlcnBhcnQgb2YgdGhlIGFwcC13aWRlIHNldHRpbmdzKS4gRWFjaCB2YWx1ZSBzaGlwcyB3aXRoIHRoZVxyXG4vLyBzYWZlIGJhbmQgaXRzIGVkaXRvciBmaWVsZCBpcyBib3VuZGVkIHRvLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNldHRpbmdzIHtcclxuICAvLyBIb3cgbWFueSBzdW1tYXJ5IGNhbGxzIHRoZSBzZW1hbnRpYyBidWlsZCBydW5zIGF0IG9uY2UuXHJcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5OiBudW1iZXI7XHJcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWluOiBudW1iZXI7XHJcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWF4OiBudW1iZXI7XHJcbn1cclxuIl19
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQTBJbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUFxTUYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFnQkQsZ0ZBQWdGO0FBQ2hGLDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcclxuLy8gc2VydmVyLXNpZGUgZnJvbSB0aGUgbm9ybWFsaXplZCB0YWJsZXMgKHJlcG9ydHMg4oaSIHJlcG9ydF9wYWdlcyDihpJcclxuLy8gcmVwb3J0X2NvbXBvbmVudHMgKyByZXBvcnRfZmlsdGVycywgcGx1cyByZXBvcnRfZmlsdGVyX2dyb3VwcykuIEFsbCBrZXlzIGFyZVxyXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXHJcbi8vIEVDaGFydHMgb3B0aW9ucyAvIEZzTGlzdCBjb25maWcuXHJcblxyXG4vLyBMYXlvdXQgbW9kZXM6IEZyZWVmb3JtID0gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGNvbXBvbmVudHMgKGRyYWcgYW55d2hlcmUpO1xyXG4vLyBGbG93ID0gY29tcG9uZW50cyBmbG93IGxpa2Ugcm93cywgZWFjaCB0YWtpbmcgZmxvd1dpZHRoICUgb2YgdGhlIHBhZ2Ugd2lkdGguXHJcbmV4cG9ydCB0eXBlIFJlcG9ydExheW91dCA9ICdmcmVlZm9ybScgfCAnZmxvdyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydCB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgbGF5b3V0OiBSZXBvcnRMYXlvdXQ7XHJcbiAgLy8gSUFOQSB0aW1lem9uZSAoZS5nLiBBbWVyaWNhL05ld19Zb3JrKSBhbmNob3JpbmcgZGF0ZSBmaWx0ZXJpbmcgKyBjaGFydCBkYXRlXHJcbiAgLy8gYnVja2V0aW5nLiBudWxsIGZhbGxzIGJhY2sgdG8gdGhlIGFjY291bnQgem9uZSB0aGVuIFVUQyAocmVzb2x2ZWQgc2VydmVyLXNpZGUpLlxyXG4gIHRpbWV6b25lOiBzdHJpbmcgfCBudWxsO1xyXG4gIC8vIFJlcG9ydC1sZXZlbCBjb25maWc6IHR5cG9ncmFwaGljIHN0eWxlcywgZXRjLiAoY2FtZWxDYXNlIEpTT04gY29sdW1uKS5cclxuICBjb25maWc6IFJlcG9ydENvbmZpZztcclxuICAvLyBUaGUgcGFnZSBpbiBJTkNIRVMgKHRoZSByZXBvcnQncyBuYXRpdmUgdW5pdCDigJQgUERGcyBhbmQgUG93ZXJQb2ludCBhcmVcclxuICAvLyBpbmNoLWJhc2VkLCBzbyBleHBvcnRzIGFyZSBkaW1lbnNpb25hbGx5IGV4YWN0KS4gT3JpZW50YXRpb24gaXMgbm90IGEgZmllbGRcclxuICAvLyBvZiBpdHMgb3duOiBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTIGxhbmRzY2FwZS5cclxuICBwYWdlV2lkdGg6IG51bWJlcjtcclxuICBwYWdlSGVpZ2h0OiBudW1iZXI7XHJcbiAgcGFnZXM6IFJlcG9ydFBhZ2VbXTtcclxuICBmaWx0ZXJHcm91cHM6IFJlcG9ydEZpbHRlckdyb3VwW107XHJcbn1cclxuXHJcbi8vIFJlcG9ydC1sZXZlbCBzdHlsaW5nLiBTaXplcyBhcmUgaW4gUE9JTlRTICgxLzcyXCIpIOKAlCB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoeVxyXG4vLyBtYXBzIDE6MSB0byBQREYgKDcycHQvaW4pIGFuZCBQb3dlclBvaW50IChwb2ludCBmb250IHNpemVzKSwgc28gYSBwb2ludFxyXG4vLyB2YWx1ZSBpcyBkaW1lbnNpb25hbGx5IGV4YWN0IG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbmZpZyB7XHJcbiAgc3R5bGVzPzogUmVwb3J0U3R5bGVzO1xyXG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sLiBPcHRpb25hbCBvbiB0aGUgdHlwZSBiZWNhdXNlIGEgUmVwb3J0Q29uZmlnXHJcbiAgLy8gbGl0ZXJhbCBuZWVkIG5vdCBjYXJyeSBpdDsgdGhlIEFQSSBhbHdheXMgc2VuZHMgaXQsIHJlc29sdmVkLlxyXG4gIGdyb3VwQnk/OiBSZXBvcnRHcm91cEJ5O1xyXG59XHJcblxyXG4vLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCDigJQgdGhlIG9uZSBzd2l0Y2ggdGhhdCByZS1idWNrZXRzIGV2ZXJ5XHJcbi8vIHRpbWUtc2VyaWVzIGNoYXJ0IG9uIHRoZSByZXBvcnQgYmV0d2VlbiBkYXksIHdlZWssIG1vbnRoLCBxdWFydGVyIGFuZCB5ZWFyLlxyXG4vL1xyXG4vLyBJdCBpcyBOT1QgYSBmaWx0ZXI6IGEgZmlsdGVyIG5hcnJvd3Mgd2hpY2ggcm93cyBhcmUgY291bnRlZCwgdGhpcyBjaGFuZ2VzIGhvd1xyXG4vLyB0aGUgc3Vydml2aW5nIHJvd3MgYXJlIGJ1Y2tldGVkLiBJdCBzaGFyZXMgdGhlIHJlcG9ydCdzIGZpbHRlciBiYXIgYmVjYXVzZVxyXG4vLyB0aGF0IGlzIHRoZSBvbmUgcm93IG9mIGNvbnRyb2xzIGEgdmlld2VyIHJlYWRzIGEgcmVwb3J0IHRocm91Z2gg4oCUIHRoZVxyXG4vLyBzZXBhcmF0aW9uIHRoYXQgbWF0dGVycyBpcyBpbiB0aGUgbW9kZWwsIG5vdCBpbiB3aGVyZSB0aGUgY29udHJvbCBpcyBwYWludGVkLlxyXG4vL1xyXG4vLyBBbHdheXMgYXJyaXZlcyBSRVNPTFZFRCAodGhlIGJhY2tlbmQgZmlsbHMgYW4gYWJzZW50IG9yIHBhcnRpYWwgc3RvcmVkIGJsb2NrXHJcbi8vIGluIGZyb20gaXRzIG93biBkZWZhdWx0cyksIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGVmYXVsdCBoZXJlIOKAlCByZW5kZXIgd2hhdFxyXG4vLyB5b3UgYXJlIGdpdmVuLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyb3VwQnkge1xyXG4gIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBncmFudWxhcml0aWVzOiBDaGFydEdyYW51bGFyaXR5W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3R5bGVzIHtcclxuICBoZWFkaW5nPzogeyBzaXplPzogbnVtYmVyIH07XHJcbn1cclxuXHJcbi8vIENvbnRlbnQgcGFkZGluZyBhcm91bmQgYSBjb21wb25lbnQncyBib2R5LCBpbiBJTkNIRVMgKHRoZSBnZW9tZXRyeSB1bml0KS5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQYWRkaW5nIHtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgcmlnaHQ/OiBudW1iZXI7XHJcbiAgYm90dG9tPzogbnVtYmVyO1xyXG4gIGxlZnQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFnZSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xyXG4gIG9yZGVyOiBudW1iZXI7XHJcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlcG9ydENvbXBvbmVudFR5cGUgPSAnY2hhcnQnIHwgJ2xpc3QnIHwgJ2twaSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudCB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICB0eXBlOiBSZXBvcnRDb21wb25lbnRUeXBlO1xyXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xyXG4gIC8vIEdlb21ldHJ5IGluIElOQ0hFUy4gRnJlZWZvcm06IGFic29sdXRlIHBvc2l0aW9uIG9uIHRoZSBwYWdlIGNhbnZhcy5cclxuICAvLyBGbG93OiBvbmx5IGZsb3dXaWR0aC9vcmRlciBhcHBseTsgeC95IGFyZSByZW1lbWJlcmVkIGZvciBhIHN3aXRjaCBiYWNrIHRvXHJcbiAgLy8gZnJlZWZvcm0uXHJcbiAgeDogbnVtYmVyO1xyXG4gIHk6IG51bWJlcjtcclxuICB3OiBudW1iZXI7XHJcbiAgaDogbnVtYmVyO1xyXG4gIC8vIEhlaWdodCBtb2RlLCBERVJJVkVEIGZyb20gdHlwZSBzZXJ2ZXItc2lkZSAobm90IHN0b3JlZCwgcmVhZC1vbmx5KTogbGlzdHNcclxuICAvLyBhbmQgS1BJIHRpbGVzIGFyZSBhdXRvICh0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LCBgaGAgaWdub3JlZCk7IGNoYXJ0c1xyXG4gIC8vIGFyZSBhbHdheXMgZml4ZWQgKHVzZSBgaGApIHNvIHRoZXkgZml0IHRoZSBib3ggYW5kIG5ldmVyIG92ZXJmbG93LlxyXG4gIGF1dG9IZWlnaHQ6IGJvb2xlYW47XHJcbiAgLy8gRmxvdyBsYXlvdXQ6ICUgb2YgdGhlIHBhZ2UgY29udGVudCB3aWR0aCB0aGlzIGNvbXBvbmVudCB0YWtlcy5cclxuICBmbG93V2lkdGg6IG51bWJlcjtcclxuICAvLyBGbG93IGxheW91dCBvcmRlcmluZy5cclxuICBvcmRlcjogbnVtYmVyO1xyXG4gIC8vIFRoZSBzdG9yZWQgU1FMIG9mIGEgbGVnYWN5IHNxbC1tb2RlIGNvbXBvbmVudC4gTlVMTCBmb3IgYSBkZXJpdmVkIG9uZSxcclxuICAvLyB3aG9zZSBzdGF0ZW1lbnQgZG9lcyBub3QgZXhpc3QgdW50aWwgaXRzIGRvY3VtZW50IGlzIGNvbXBpbGVkIOKAlCB0aGUgU1FMIHRhYlxyXG4gIC8vIGZldGNoZXMgdGhhdCBzZXBhcmF0ZWx5IChzZWUgUmVwb3J0Q29tcG9uZW50U3FsKS5cclxuICBzcWw6IHN0cmluZyB8IG51bGw7XHJcbiAgY29uZmlnOiBDaGFydENvbmZpZyAmIExpc3RDb25maWcgJiBLcGlDb25maWcgJiBDb21wb25lbnRMYXlvdXRDb25maWcgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcclxufVxyXG5cclxuLy8gV2hhdCB0aGUgU1FMIHRhYiBmZXRjaGVzOiB0aGUgc3RhdGVtZW50IGEgY29tcG9uZW50IHJ1bnMuXHJcbi8vXHJcbi8vIEZvciBhIGRlcml2ZWQgY29tcG9uZW50IGBiYXNlbGluZWAgaXMgdHJ1ZSBhbmQgYHNxbGAgaXMgd2hhdCBpdHMgZG9jdW1lbnRcclxuLy8gY29tcGlsZXMgdG8gd2l0aCBOTyB2aWV3ZXIgc3RhdGUg4oCUIG5vIGZpbHRlcnMsIFVUQywgdGhlIGF1dGhvcmVkIGdyYWluLiBUaGVcclxuLy8gbnVtYmVycyBvbiBzY3JlZW4gY29tZSBmcm9tIHRoYXQgc3RhdGVtZW50IHBsdXMgd2hhdGV2ZXIgdGhlIHZpZXdlciBwaWNrZWQsXHJcbi8vIHNvIHRoZSB0d28gY2FuIGxlZ2l0aW1hdGVseSBkaWZmZXIgYW5kIHRoZSB0YWIgc2F5cyBzbyByYXRoZXIgdGhhbiBpbXBseWluZ1xyXG4vLyB0aGV5IG1hdGNoLlxyXG4vL1xyXG4vLyBgZXJyb3JgIGlzIG5vdCBhIGZhaWx1cmUgb2YgdGhlIHJlcXVlc3Q6IGEgZG9jdW1lbnQgdGhhdCBubyBsb25nZXIgY29tcGlsZXNcclxuLy8gaXMgcHJlY2lzZWx5IHdoYXQgc29tZW9uZSBvcGVucyB0aGlzIHRhYiB0byBkaXNjb3Zlciwgc28gaXQgYXJyaXZlcyBhcyBhXHJcbi8vIG1lc3NhZ2UgdG8gcmVuZGVyIHdpdGggYGVycm9yVHlwZWAgbmFtaW5nIHdoaWNoIGtpbmQgKCdzdGFsZS1xdWVyeScgb3JcclxuLy8gJ3NlbnNpdGl2ZS1jb2x1bW4nKSwgYW5kIGBzcWxgIG51bGwuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29tcG9uZW50U3FsIHtcclxuICBzcWw6IHN0cmluZyB8IG51bGw7XHJcbiAgb3JpZ2luOiAnc3FsJyB8ICdkYnEnIHwgJ2Rlcml2ZWQnO1xyXG4gIGJhc2VsaW5lOiBib29sZWFuO1xyXG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG4gIGVycm9yVHlwZTogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuLy8gQ3Jvc3MtdHlwZSBsYXlvdXQvc3R5bGUga2V5cyBjYXJyaWVkIGluIGEgY29tcG9uZW50J3MgY29uZmlnIChhbG9uZ3NpZGUgdGhlXHJcbi8vIHR5cGUtc3BlY2lmaWMgY2hhcnQvbGlzdC9rcGkga2V5cykuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50TGF5b3V0Q29uZmlnIHtcclxuICBwYWRkaW5nPzogQ29tcG9uZW50UGFkZGluZztcclxufVxyXG5cclxuLy8gVGhlIHByZXNlbnRhdGlvbiBzZXR0aW5ncyBhIGNvbXBvbmVudCdzIHNldHRpbmdzIGRpYWxvZyBlZGl0cy4gTmVpdGhlciBmaWVsZFxyXG4vLyBpcyBwYXJ0IG9mIHdoYXQgdGhlIGNvbXBvbmVudCBxdWVyaWVzLCBzbyBhIGNoYW5nZSB0byB0aGVtIHJlcGFpbnRzIHdpdGhvdXRcclxuLy8gcmUtcnVubmluZyBhbnl0aGluZy5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRTZXR0aW5ncyB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBwYWRkaW5nOiBDb21wb25lbnRQYWRkaW5nO1xyXG59XHJcblxyXG4vLyBXaGVyZSBhIGNoYXJ0J3MgbGVnZW5kIHNpdHMgcmVsYXRpdmUgdG8gdGhlIHBsb3QsIG9yICdoaWRkZW4nIHRvIGRyb3AgaXQuXHJcbmV4cG9ydCB0eXBlIExlZ2VuZFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnaGlkZGVuJztcclxuXHJcbmV4cG9ydCB0eXBlIENoYXJ0R3JhbnVsYXJpdHkgPSAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAncXVhcnRlcicgfCAneWVhcic7XHJcblxyXG4vLyBIb3cgZWFjaCBncmFudWxhcml0eSByZWFkcyBpbiB0aGUgZ3JvdXAtYnkgY29udHJvbCBhbmQgb24gYW4gZXhwb3J0IGNvdmVyXHJcbi8vIHNoZWV0LiBXSElDSCBvZiB0aGVtIGEgZ2l2ZW4gcmVwb3J0IG9mZmVycyBjb21lcyBmcm9tIGl0cyBSZXBvcnRHcm91cEJ5O1xyXG4vLyB0aGlzIGlzIG9ubHkgdGhlIG5hbWluZy4gJ3llYXInIHJlYWRzIGFzIFwiQW5udWFsbHlcIi5cclxuZXhwb3J0IGNvbnN0IEdSQU5VTEFSSVRZX09QVElPTlM6IHsgdmFsdWU6IENoYXJ0R3JhbnVsYXJpdHk7IG5hbWU6IHN0cmluZyB9W10gPSBbXHJcbiAgeyB2YWx1ZTogJ2RheScsIG5hbWU6ICdEYXknIH0sXHJcbiAgeyB2YWx1ZTogJ3dlZWsnLCBuYW1lOiAnV2VlaycgfSxcclxuICB7IHZhbHVlOiAnbW9udGgnLCBuYW1lOiAnTW9udGgnIH0sXHJcbiAgeyB2YWx1ZTogJ3F1YXJ0ZXInLCBuYW1lOiAnUXVhcnRlcicgfSxcclxuICB7IHZhbHVlOiAneWVhcicsIG5hbWU6ICdBbm51YWxseScgfSxcclxuXTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRDb25maWcge1xyXG4gIGNoYXJ0VHlwZT86ICdiYXInIHwgJ2xpbmUnIHwgJ2FyZWEnIHwgJ3BpZScgfCAnZG9udXQnO1xyXG4gIC8vIEZvciBraW5kICd0aW1lJywgdGhlIHNlcnZlciBidWNrZXRzIHRoZSByYXcgZGF0ZXRpbWUgY29sdW1uIHRvIGBncmFudWxhcml0eWBcclxuICAvLyBpbiB0aGUgcmVwb3J0J3MgdGltZXpvbmUgKHRoZSBTUUwgZXhwb3NlcyB0aGUgcmF3IGNvbHVtbiwgdW5idWNrZXRlZCkuXHJcbiAgeEF4aXM/OiB7IGNvbHVtbjogc3RyaW5nOyBraW5kPzogJ2NhdGVnb3J5JyB8ICd0aW1lJzsgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5OyBsYWJlbD86IHN0cmluZyB9O1xyXG4gIG1lYXN1cmVzPzogQ2hhcnRNZWFzdXJlW107XHJcbiAgc3BsaXRCeT86IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH07XHJcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXHJcbiAgLy8gc2hvdyBhIGxlZ2VuZCwgV0lUSE9VVCBzcGxpdHRpbmcgaW50byBtdWx0aXBsZSBzZXJpZXMgKHdoaWNoIHNsaXZlcnMgdGhlXHJcbiAgLy8gYmFycykuIHYxIGV4cGVjdHMgY29sb3JCeS5jb2x1bW4gPT09IHhBeGlzLmNvbHVtbi4gSWdub3JlZCB3aGVuIHNwbGl0QnkgaXNcclxuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxyXG4gIGNvbG9yQnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xyXG4gIG9yaWVudGF0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcclxuICBzdGFja2VkPzogYm9vbGVhbjtcclxuICBsZWdlbmQ/OiBMZWdlbmRQb3NpdGlvbjtcclxuICBzb3J0PzogUmVwb3J0U29ydDtcclxuICBsaW1pdD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFydE1lYXN1cmUge1xyXG4gIGNvbHVtbjogc3RyaW5nO1xyXG4gIGFnZ3JlZ2F0aW9uPzogJ3N1bScgfCAnY291bnQnIHwgJ2F2ZycgfCAnbWluJyB8ICdtYXgnO1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG4gIC8vIEFwcGxpZWQgdG8gYSBLUEkncyBzaW5nbGUgdmFsdWUgb25seSDigJQgaXQgaXMgYWdncmVnYXRlZCBzZXJ2ZXItc2lkZSBhZnRlclxyXG4gIC8vIHRoZSBTUUwgcnVucywgc28gdGhlIFNRTCBjYW5ub3QgZm9ybWF0IGl0LiBDaGFydCBtZWFzdXJlcyBzdGF5IG51bWVyaWMuXHJcbiAgZm9ybWF0PzogJ251bWJlcicgfCAncGVyY2VudCcgfCAnY3VycmVuY3knO1xyXG4gIC8vIEhvdyBtYW55IGRlY2ltYWwgcGxhY2VzIHRoZSB2YWx1ZSBpcyBzaG93biB0by4gRml4ZWQgcmF0aGVyIHRoYW4gbWF4aW11bTpcclxuICAvLyBhIGNvbHVtbiBvZiByYXRlcyBpcyB1bnJlYWRhYmxlIHdoZW4gZWFjaCBvbmUgc2hvd3MgYSBkaWZmZXJlbnQgbnVtYmVyIG9mXHJcbiAgLy8gZGVjaW1hbHMuIE9taXR0ZWQgbGVhdmVzIHRoZSBsb2NhbGUncyBvd24gZGVmYXVsdCwgd2hpY2ggaXMgd2hhdCBldmVyeVxyXG4gIC8vIHJlcG9ydCBhdXRob3JlZCBiZWZvcmUgdGhpcyBkaWQuXHJcbiAgLy9cclxuICAvLyBJdCBjYW5ub3QgYmUgYXBwbGllZCBpbiB0aGUgU1FMOiB0aGUgdmFsdWUgaXMgYWdncmVnYXRlZCBhZnRlciB0aGUgcmVwb3J0J3NcclxuICAvLyBmaWx0ZXJzIHJ1biwgc28gcHJlLXJvdW5kaW5nIHdvdWxkIGJyZWFrIGxpdmUgcmUtZmlsdGVyaW5nIGJ5IGRhdGUgcmFuZ2Ugb3JcclxuICAvLyBwYXJ0bmVyLlxyXG4gIHByZWNpc2lvbj86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaXN0Q29uZmlnIHtcclxuICAvLyBBIGxpc3QgY2VsbCByZW5kZXJzIHRoZSB2YWx1ZSB2ZXJiYXRpbTogcGVyY2VudCBzaWducywgY3VycmVuY3kgc3ltYm9scyxcclxuICAvLyB0aG91c2FuZHMgc2VwYXJhdG9ycyBhbmQgZGVjaW1hbCBwbGFjZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSBjb21wb25lbnQnc1xyXG4gIC8vIFNRTCAodGhlIGJhY2tlbmQgcmVqZWN0cyBhbnkgb3RoZXIgYGZvcm1hdGAgaGVyZSkuIGBkYXRlYCBpcyB0aGUgZXhjZXB0aW9uXHJcbiAgLy8g4oCUIGEgZGF0ZSBjb2x1bW4gc3RheXMgYSBSQVcgdGltZXN0YW1wIHNvIHRoZSByZXBvcnQgdGltZXpvbmUgYW5kIGl0c1xyXG4gIC8vIGRhdGVSYW5nZSBmaWx0ZXJzIGtlZXAgd29ya2luZywgYW5kIHRoZSB2aWV3ZXIgbG9jYWxpc2VzIGl0IGF0IHJlbmRlci5cclxuICAvLyBBIFNRTC1mb3JtYXR0ZWQgY29sdW1uIGlzIHRleHQsIHNvIGl0IG5hbWVzIGBzb3J0Q29sdW1uYDogdGhlIHJhdyBudW1lcmljXHJcbiAgLy8gYWxpYXMgdGhlIHF1ZXJ5IGFsc28gb3V0cHV0cywgd2hpY2ggdGhlIHNlcnZlciBvcmRlcnMgYnkgaW5zdGVhZC5cclxuICBjb2x1bW5zPzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGZvcm1hdD86ICdkYXRlJzsgc29ydENvbHVtbj86IHN0cmluZyB9W107XHJcbiAgc29ydD86IFJlcG9ydFNvcnQ7XHJcbiAgcGFnZVNpemU/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS3BpQ29uZmlnIHtcclxuICBtZWFzdXJlPzogQ2hhcnRNZWFzdXJlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNvcnQge1xyXG4gIGNvbHVtbjogc3RyaW5nO1xyXG4gIGRpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJUeXBlID0gJ2RhdGVSYW5nZScgfCAnc2VsZWN0JyB8ICdrZXl3b3JkJztcclxuXHJcbi8vIFdoZXJlIGEgZmlsdGVyIGdyb3VwJ3MgY29udHJvbCBpcyBleHBvc2VkLiBBIGdyb3VwIGNhbiBiZSBzaG93biBvbiBpdHNcclxuLy8gY29tcG9uZW50cywgaW4gdGhlIHJlcG9ydCBiYXIsIG9yIEJPVEggYXQgb25jZSAodGhlIHR3byBhcmUgaW5kZXBlbmRlbnRcclxuLy8gdG9nZ2xlcyBpbiB0aGUgVUkpOyBhIGNvbHVtbiB3aXRoIG5laXRoZXIgZXhwb3NlZCBzaW1wbHkgaGFzIG5vIGZpbHRlci5cclxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyTGV2ZWwgPSAnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnO1xyXG5cclxuLy8gT25lIGZpbHRlcmFibGUgb3V0cHV0IGNvbHVtbiBvZiBhIGNvbXBvbmVudCdzIFNRTCwgd2l0aCB0aGUgZmlsdGVyIGludGVyZmFjZVxyXG4vLyBJTkZFUlJFRCBmcm9tIGl0cyBkYXRhICh0aGUgaHVtYW4gbmV2ZXIgcGlja3MgdGhlIGludGVyZmFjZSDigJQgaXQgZm9sbG93cyB0aGVcclxuLy8gY29sdW1uJ3MgdHlwZSkuIERyaXZlcyB0aGUgRmlsdGVycyB0YWIgbGlzdGluZy5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJhYmxlQ29sdW1uIHtcclxuICBjb2x1bW46IHN0cmluZztcclxuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xyXG59XHJcblxyXG4vLyBHcm91bmQgdHJ1dGg6IG9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gT04gb25lIGNvbXBvbmVudCdzIFNRTC4gQWx3YXlzIGFcclxuLy8gbWVtYmVyIG9mIGEgZmlsdGVyIGdyb3VwIOKAlCB0aGUgdW5pdCB0aGF0IGxpbmtzIGVxdWl2YWxlbnQgZmlsdGVycyBhY3Jvc3NcclxuLy8gY29tcG9uZW50cyBhbmQgZGVjaWRlcyB3aGVyZSB0aGUgY29udHJvbCByZW5kZXJzIChjb21wb25lbnQgdnMgcmVwb3J0IGJhcikuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGNvbXBvbmVudElkOiBudW1iZXI7XHJcbiAgZmlsdGVyR3JvdXBJZDogbnVtYmVyO1xyXG4gIGZpbHRlckNvbHVtbjogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xyXG4gIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgaGFzT3B0aW9uczogYm9vbGVhbjtcclxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG59XHJcblxyXG4vLyBPbmUgY2hvaWNlIGluIGEgc2VsZWN0IGZpbHRlcidzIG9wdGlvbiBsaXN0LiBUaGUgdmFsdWUgaXMgd2hhdCB0aGUgZmlsdGVyXHJcbi8vIG1hdGNoZXMgb24gYW5kIGdldHMgc3RvcmVkIGluIGEgc2F2ZWQgZGVmYXVsdCDigJQgZm9yIGFuIGVudGl0eSB0aGF0IGlzIGl0c1xyXG4vLyBzdGFibGUgaWQsIG5ldmVyIGl0cyBuYW1lLCBzbyByZW5hbWluZyB0aGUgZW50aXR5IG1vdmVzIHRoZSBsYWJlbCB3aXRob3V0XHJcbi8vIGJyZWFraW5nIHRoZSBkZWZhdWx0LiBUaGUgbGFiZWwgaXMgb25seSBldmVyIHdoYXQgdGhlIHZpZXdlciByZWFkcy5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJPcHRpb24ge1xyXG4gIHZhbHVlOiB1bmtub3duO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyR3JvdXAge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XHJcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcclxuICBsZXZlbDogUmVwb3J0RmlsdGVyTGV2ZWw7XHJcbiAgb3JkZXI6IG51bWJlcjtcclxuICBjb25maWc6IHsgZGVmYXVsdD86IEZpbHRlckdyb3VwRGVmYXVsdCB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgZmlsdGVyczogUmVwb3J0RmlsdGVyW107XHJcbn1cclxuXHJcbi8vIEEgZmlsdGVyIGdyb3VwJ3MgYXV0aG9yZWQgZGVmYXVsdCDigJQgdGhlIHZhbHVlIHRoYXQgc2VlZHMgdGhlIHJlcG9ydCBiYXIgb25cclxuLy8gZXZlcnkgb3Blbi4gU2hhcGUgZm9sbG93cyB0aGUgZ3JvdXAncyB0eXBlOiBkYXRlUmFuZ2UgdXNlcyBzdGFydC9lbmQgKGEgZml4ZWRcclxuLy8gY2FsZW5kYXItZGF5IHJhbmdlKSBvciBhIHJlbGF0aXZlIHByZXNldDsgc2VsZWN0IHVzZXMgdmFsdWVzOyBrZXl3b3JkIHVzZXNcclxuLy8gdmFsdWUuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXBEZWZhdWx0IHtcclxuICAvLyBkYXRlUmFuZ2UgcmVsYXRpdmUgcHJlc2V0LCByZXNvbHZlZCBhZ2FpbnN0IFwibm93XCIgb24gZXZlcnkgb3Blbi4gT25lIG9mOlxyXG4gIC8vIHRoaXNXZWVrLCBsYXN0V2VlaywgbGFzdDdEYXlzLCBsYXN0MzBEYXlzLCBsYXN0M01vbnRocywgbGFzdDZNb250aHMsXHJcbiAgLy8gbGFzdDEyTW9udGhzLCB0aGlzTW9udGgsIHRoaXNRdWFydGVyLCB0aGlzWWVhci95ZWFyVG9EYXRlLiBUaGUgd2VlayBvbmVzXHJcbiAgLy8gYXJlIHdob2xlIGNhbGVuZGFyIGRheXMsIFN1bmRheSB0byBTYXR1cmRheSwgaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lLlxyXG4gIHJlbGF0aXZlPzogc3RyaW5nO1xyXG4gIHN0YXJ0Pzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgc3RhcnQgKHl5eXktTU0tZGQpXHJcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxyXG4gIHZhbHVlcz86IHVua25vd25bXTsgLy8gc2VsZWN0IGRlZmF1bHQgcGlja2VkIHZhbHVlc1xyXG4gIHZhbHVlPzogc3RyaW5nOyAvLyBrZXl3b3JkIGRlZmF1bHQgdGV4dFxyXG59XHJcblxyXG4vLyBUaGUgc2Vzc2lvbiB2YWx1ZSBvZiBhIGZpbHRlciBncm91cCAobmV2ZXIgcGVyc2lzdGVkKTogc2hhcGUgZGVwZW5kcyBvbiB0aGVcclxuLy8gZ3JvdXAncyB0eXBlLlxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwVmFsdWUge1xyXG4gIHN0YXJ0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxyXG4gIGVuZD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcclxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdFxyXG4gIHZhbHVlPzogc3RyaW5nOyAvLyBrZXl3b3JkXHJcbn1cclxuXHJcbi8vIE9uZSByZXNvbHZlZCBmaWx0ZXIgc2VudCB3aXRoIGEgY29tcG9uZW50J3MgZGF0YSByZXF1ZXN0LlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRmlsdGVyVmFsdWUge1xyXG4gIGZpbHRlcklkOiBudW1iZXI7XHJcbiAgc3RhcnQ/OiBzdHJpbmc7XHJcbiAgZW5kPzogc3RyaW5nO1xyXG4gIHZhbHVlcz86IHVua25vd25bXTtcclxuICB2YWx1ZT86IHN0cmluZztcclxufVxyXG5cclxuLy8gUGVyLWNvbXBvbmVudCBpbnRlcmFjdGlvbiBzdGF0ZSBzZW50IHdpdGggdGhlIGRhdGEgcmVxdWVzdDogbGlzdHMgc2VuZFxyXG4vLyBzb3J0L3BhZ2luZzsgdGltZS1zZXJpZXMgY2hhcnRzIHNlbmQgdGhlIGdyYWluIHBpY2tlZCBvbiB0aGUgcmVwb3J0J3MgZ3JvdXAtYnlcclxuLy8gY29udHJvbCwgd2hpY2ggb3ZlcnJpZGVzIHRoZSBhdXRob3JlZCBncmFudWxhcml0eSBmb3IgdGhhdCByZXF1ZXN0IG9ubHkuIFRoZVxyXG4vLyB3aXJlIGtleSBzdGF5cyBgZnJlcXVlbmN5YCDigJQgaXQgaXMgdGhlIGJ1Y2tldGluZyBmcmVxdWVuY3kgdGhlIHNlcnZlciBhcHBsaWVzLlxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFTdGF0ZSB7XHJcbiAgc29ydD86IFJlcG9ydFNvcnQ7XHJcbiAgcGFnZT86IG51bWJlcjtcclxuICBwYWdlU2l6ZT86IG51bWJlcjtcclxuICBmcmVxdWVuY3k/OiBDaGFydEdyYW51bGFyaXR5O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGEge1xyXG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XHJcbiAgcGFnaW5nPzogeyB0b3RhbDogbnVtYmVyOyBwYWdlOiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfTtcclxuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XHJcbiAgLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoYWZ0ZXIgYW55IGdyb3VwLWJ5XHJcbiAgLy8gb3ZlcnJpZGUpLCBvciBudWxsIGZvciBhIG5vbi10aW1lIGF4aXMuIERyaXZlcyB0aGUgY29tcGFjdCB4LWF4aXMgbGFiZWxzLlxyXG4gIGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TGlzdEl0ZW0ge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIG1vZGlmeURhdGU6IHN0cmluZztcclxuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xyXG4gIC8vIFRoZSBmb2xkZXIgdGhlIHJlcG9ydCBpcyBmaWxlZCB1bmRlci4gbnVsbCBpcyBhIHJlYWwsIGNvbW1vbiB2YWx1ZSDigJQgdGhlXHJcbiAgLy8gcmVwb3J0IHNpdHMgYXQgdGhlIHJvb3Qgb2YgdGhlIGxpc3RpbmcgdHJlZSBhbG9uZ3NpZGUgdGhlIGZvbGRlcnMuXHJcbiAgLy9cclxuICAvLyBPcHRpb25hbCBsaWtlIGBzdGF0ZWAgYmVzaWRlIGl0OiB0aGUgYmFja2VuZCBhbHdheXMgc2VuZHMgaXQsIGJ1dCBtYWtpbmcgaXRcclxuICAvLyByZXF1aXJlZCBpcyBhIGJyZWFraW5nIHR5cGUgY2hhbmdlIGZvciBldmVyeSBjb25zdW1lciBob2xkaW5nIGFcclxuICAvLyBSZXBvcnRMaXN0SXRlbSBsaXRlcmFsIChmaXh0dXJlcywgbW9ja3MpIGFuZCBidXlzIG5vdGhpbmcg4oCUIHRoZSBsaXN0aW5nXHJcbiAgLy8gcmVhZHMgaXQgYXMgYD8/IG51bGxgIGVpdGhlciB3YXkuXHJcbiAgcmVwb3J0Rm9sZGVySWQ/OiBudW1iZXIgfCBudWxsO1xyXG59XHJcblxyXG4vLyBPbmUgZm9sZGVyIGluIHRoZSBsaXN0aW5nIHRyZWUg4oCUIGFuIGF1ZGllbmNlIGJ1Y2tldCAoXCJNYW5hZ2VtZW50XCIsXHJcbi8vIFwiT3BlcmF0aW9uc1wiKSByZXBvcnRzIGFyZSBmaWxlZCBpbnRvLiBGb2xkZXJzIG5lc3QgdmlhIHBhcmVudFJlcG9ydEZvbGRlcklkO1xyXG4vLyByZXBvcnRzIG5ldmVyIGRvLCBzbyB0aGUgdHJlZSdzIG9ubHkgYnJhbmNoIG5vZGVzIGFyZSBmb2xkZXJzLlxyXG4vL1xyXG4vLyBObyBzdGF0ZTogYSBmb2xkZXIgaXMgb25seSBkZWxldGFibGUgb25jZSBpdCBpcyBlbXB0eSwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xyXG4vLyBzb2Z0LWRlbGV0ZSBhbmQgXCJTaG93IERlbGV0ZWRcIiBpcyBhIHJlcG9ydHMtb25seSBjb25jZXB0LlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZvbGRlciB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbi8vIEdFVCAvYXBpL3JlcG9ydHMgcmV0dXJucyBib3RoIGhhbHZlcyBmbGF0OyB0aGUgbGlzdGluZyBuZXN0cyB0aGVtIGl0c2VsZi5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRUcmVlIHtcclxuICByZXBvcnRzOiBSZXBvcnRMaXN0SXRlbVtdO1xyXG4gIGZvbGRlcnM6IFJlcG9ydEZvbGRlcltdO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSZXBvcnROb2RlVHlwZSB7XHJcbiAgRm9sZGVyID0gJ2ZvbGRlcicsXHJcbiAgUmVwb3J0ID0gJ3JlcG9ydCcsXHJcbn1cclxuXHJcbi8vIE9uZSBub2RlIGFzIGZzLXRyZWUgc2VlcyBpdC4gRm9sZGVycyBhbmQgcmVwb3J0cyBzaGFyZSBvbmUgaWQgc3BhY2UgaW4gdGhlXHJcbi8vIHZpZXcsIHNvIHRoZSBpZHMgYXJlIHByZWZpeGVkICgnZjoxMicgLyAncjozNCcpIOKAlCBgaWRgIGlzIHRoZSBvcmlnaW5hbCxcclxuLy8gcGVyLXRhYmxlIGlkIHRoYXQgdGhlIEFQSSBlbmRwb2ludHMgdGFrZS5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnROb2RlIHtcclxuICBrZXk6IHN0cmluZztcclxuICBpZDogbnVtYmVyO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBSZXBvcnROb2RlVHlwZTtcclxuICAvLyBPbmx5IGV2ZXIgcG9wdWxhdGVkIG9uIGEgZm9sZGVyOyBhIHJlcG9ydCBpcyBhbHdheXMgYSBsZWFmLlxyXG4gIGNoaWxkcmVuOiBSZXBvcnROb2RlW107XHJcbiAgLy8gUHJlc2VudCBvbiByZXBvcnQgbm9kZXMgb25seS5cclxuICByZXBvcnQ/OiBSZXBvcnRMaXN0SXRlbTtcclxufVxyXG5cclxuLy8gUmVwb3J0cyBhcmUgc29mdC1kZWxldGFibGU6IGEgZGVsZXRlZCByZXBvcnQgbGVhdmVzIHRoZSBsaXN0aW5nIGJ1dCBrZWVwcyBpdHNcclxuLy8gcGFnZXMgYW5kIGNvbXBvbmVudHMsIGFuZCB0aGUgbGlzdGluZydzIFwiU2hvdyBEZWxldGVkXCIgbW9kZSByZXN0b3JlcyBpdC5cclxuLy8gRm9sZGVycyBoYXZlIG5vIGVxdWl2YWxlbnQg4oCUIHRoZXkgYXJlIG9ubHkgZGVsZXRhYmxlIG9uY2UgZW1wdHksIHNvIHRoZXkgaGFyZFxyXG4vLyBkZWxldGUgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVzdG9yZS5cclxuZXhwb3J0IGVudW0gUmVwb3J0U3RhdGUge1xyXG4gIEFjdGl2ZSA9ICdhY3RpdmUnLFxyXG4gIERlbGV0ZWQgPSAnZGVsZXRlZCcsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSZXBvcnRTdGF0ZXMgPSBbXHJcbiAgeyBuYW1lOiAnQWN0aXZlJywgdmFsdWU6IFJlcG9ydFN0YXRlLkFjdGl2ZSB9LFxyXG4gIHsgbmFtZTogJ0RlbGV0ZWQnLCB2YWx1ZTogUmVwb3J0U3RhdGUuRGVsZXRlZCB9LFxyXG5dO1xyXG5cclxuLy8gVGhlIGNoYXQgdHVybiBmbGFncyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGFkZHMgKFJlcG9ydHNcXEFpVmlldykuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q2hhdFJlc3BvbnNlIHtcclxuICByZXBvcnRDaGFuZ2VkPzogYm9vbGVhbjtcclxuICByZXBvcnRSZW5hbWVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuLy8gT25lIHZlcnNpb24gb2YgdGhlIGdsb2JhbCBBSSBrbm93bGVkZ2UgZG9jdW1lbnQg4oCUIHRoZSBvcGVyYXRvci1hdXRob3JlZFxyXG4vLyBtYXJrZG93biBhcHBlbmRlZCB0byB0aGUgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSB0dXJuLlxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEluc3RydWN0aW9uIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGNvbnRlbnQ6IHN0cmluZztcclxuICBjdXJyZW50OiBib29sZWFuO1xyXG4gIGNyZWF0ZURhdGU6IERhdGU7XHJcbiAgbW9kaWZ5RGF0ZTogRGF0ZTtcclxuICBhY2NvdW50SWQ6IG51bWJlciB8IG51bGw7XHJcbiAgYWNjb3VudE5hbWU6IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbi8vIEdFVC9QVVQgaW5zdHJ1Y3Rpb25zIHBheWxvYWQ6IHRoZSBjdXJyZW50IHZlcnNpb24gKG51bGwgdW50aWwgb25lIGlzXHJcbi8vIGF1dGhvcmVkKSBwbHVzIHRoZSBmdWxsIGhpc3RvcnksIG5ld2VzdCBmaXJzdC5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbnMge1xyXG4gIGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb24gfCBudWxsO1xyXG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xyXG59XHJcblxyXG4vLyBUaGUgbGF0ZXN0IHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkIChhbiBmZl9wcm9jZXNzZXMgcm93KSDigJQgZW5vdWdoIGZvciB0aGVcclxuLy8gc2V0dGluZ3MgZGlhbG9nIHRvIHNheSB3aGF0IHN0YXRlIHRoZSBidWlsZCBpcyBpbiBhbmQgd2hlbiBpdCBsYXN0IHJhbi5cclxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIHN0YXRlOiBzdHJpbmc7XHJcbiAgcGVyY2VudDogbnVtYmVyIHwgc3RyaW5nO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBkdXJhdGlvbjogbnVtYmVyO1xyXG4gIGNyZWF0ZURhdGU6IERhdGU7XHJcbiAgc3RhcnREYXRlOiBEYXRlO1xyXG4gIGVuZERhdGU6IERhdGU7XHJcbn1cclxuXHJcbi8vIEEgYnVpbGQgc3RhZ2UncyBzdGF0ZSBvbiB0aGUgZW50aXR5IHNjb3JlYm9hcmQ6ICdkb25lJyA9IGJ1aWx0LCAnbWlzc2luZycgPVxyXG4vLyBzdGlsbCBuZWVkcyBidWlsZGluZyAoYSBtaXNzaW5nIHN0YWdlIGlzIHVuYnVpbHQgY29udGVudCwgbmV2ZXIgYW4gZXJyb3IpLlxyXG5leHBvcnQgdHlwZSBTZW1hbnRpY0J1aWxkU3RhZ2UgPSAnZG9uZScgfCAnbWlzc2luZyc7XHJcblxyXG4vLyBPbmUgZW51bSBjb2x1bW4gb2YgYW4gZW50aXR5LCB3aXRoIHRoZSBhbGxvd2VkIHZhbHVlcyB0aGUgYnVpbGQgaW5saW5lZC5cclxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW51bSB7XHJcbiAgY29sdW1uOiBzdHJpbmc7XHJcbiAgdmFsdWVzOiBzdHJpbmdbXTtcclxufVxyXG5cclxuLy8gT25lIGVudGl0eSByb3cgb2YgdGhlIHNjb3JlYm9hcmQgKGFuIGVudGl0eSA9IGEgdGFibGUgKyBhIG1vZGVsICsgYVxyXG4vLyBoYW5kbGVyKTogaXRzIHRhYmxlL3NoYXBlIGNvdW50cywgaW5saW5lZCBlbnVtIHZhbHVlcywgY29tcHV0ZWQgZmllbGRzLCBob3dcclxuLy8gbWFueSBjb2RlIGZ1bmN0aW9ucyB3ZXJlIGNhY2hlZCAoc3BsaXQgbW9kZWwgdnMgaGFuZGxlciksIGFuZCB0aGUgcGVyLXN0YWdlXHJcbi8vIGJ1aWx0L21pc3Npbmcgc3RhdGUuXHJcbi8vXHJcbi8vIGBtb2RlbGAvYGhhbmRsZXJgIGFyZSB0aGUgY2xhc3NlcyB0aGUgZnVuY3Rpb25zIHdlcmUgcmVhZCBmcm9tIOKAlCB3aGF0IGFcclxuLy8gcmVhZGVyIHJlY29nbml6ZXMgdGhlIHJvdyBieSwgd2hlcmUgYGtleWAgaXMgd2hhdCB0aGUgcmVwb3J0IEFJIGFkZHJlc3NlcyBpdFxyXG4vLyBieSBpbiBkZXNjcmliZV9lbnRpdHkgLyBjb21waWxlX3F1ZXJ5LlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRFbnRpdHkge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHRhYmxlOiBzdHJpbmc7XHJcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XHJcbiAgaGFuZGxlcjogc3RyaW5nIHwgbnVsbDtcclxuICBjb2x1bW5zOiBudW1iZXI7XHJcbiAgcmVsYXRpb25zaGlwczogbnVtYmVyO1xyXG4gIGVudW1zOiBTZW1hbnRpY0J1aWxkRW51bVtdO1xyXG4gIGNvbXB1dGVkRmllbGRzOiBzdHJpbmdbXTtcclxuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XHJcbiAgbW9kZWxGdW5jdGlvbkNvdW50OiBudW1iZXI7XHJcbiAgaGFuZGxlckZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcclxuICBzdGFnZXM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljQnVpbGRTdGFnZT47XHJcbn1cclxuXHJcbi8vIE9uZSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgdGhlIGJ1aWxkIHJlYWQ6IGRvbWFpbiBsb2dpYyB3aXRoIG5vIHRhYmxlIG9mIGl0c1xyXG4vLyBvd24gKGEgc3VtbWFyeSBtb2RlbCwgYSBjYWxjdWxhdGlvbiBzZXJ2aWNlKS4gVGhlIHJlcG9ydCBBSSByZWFkcyBpdHMgY29kZVxyXG4vLyBleGFjdGx5IGxpa2UgYW4gZW50aXR5J3MsIGJ1dCBpdCBjYW4gbmV2ZXIgYmUgcXVlcmllZCDigJQgdGhlcmUgaXMgbm90aGluZyB0b1xyXG4vLyBzZWxlY3QgZnJvbSDigJQgc28gaXQgY2FycmllcyBubyB0YWJsZSwgY29sdW1ucyBvciByZWxhdGlvbnNoaXBzLlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRDbGFzcyB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XHJcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xyXG59XHJcblxyXG4vLyBXaGF0IHRoZSBidWlsZCBkZWNpZGVkIGEgcGh5c2ljYWwgdGFibGUgaXMuIEVudGl0eSBhbmQganVuY3Rpb24gYXJlIGJvdGhcclxuLy8gcmVhY2hhYmxlIGJ5IHRoZSByZXBvcnQgQUkg4oCUIGFuIGVudGl0eSBkaXJlY3RseSwgYSBqdW5jdGlvbiB0aHJvdWdoIHRoZVxyXG4vLyBtYW55LXRvLW1hbnkgaXQgYnJpZGdlcy4gRXhjbHVkZWQgaXMgbm90IHJlYWNoYWJsZSBhdCBhbGwuXHJcbmV4cG9ydCB0eXBlIFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbiA9ICdlbnRpdHknIHwgJ2p1bmN0aW9uJyB8ICdleGNsdWRlZCc7XHJcblxyXG4vLyBPbmUgcGh5c2ljYWwgdGFibGUgYXMgdGhlIGJ1aWxkIGNsYXNzaWZpZWQgaXQuIGByZWFzb25gIGFuc3dlcnMgYSBzaW5nbGVcclxuLy8gcXVlc3Rpb24g4oCUIHdoeSBjYW4ndCB0aGUgcmVwb3J0IEFJIHNlZSB0aGlzIHRhYmxlPyDigJQgYW5kIGlzIG51bGwgd2hlbiBpdCBjYW4uXHJcbi8vIEEganVuY3Rpb24gd2l0aCBhIHJlYXNvbiBicmlkZ2VkIG5vdGhpbmcsIHNvIGl0IGlzIGp1c3QgYXMgaW52aXNpYmxlIGFzIGFuXHJcbi8vIGV4Y2x1ZGVkIHRhYmxlLlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRUYWJsZSB7XHJcbiAgdGFibGU6IHN0cmluZztcclxuICBjbGFzc2lmaWNhdGlvbjogU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uO1xyXG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xyXG4gIHJlYXNvbjogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuLy8gVGhlIGJ1aWxkIHNjb3JlYm9hcmQgc2hpcHBlZCBhbG9uZ3NpZGUgdGhlIGJ1aWxkIHN0YXR1czogdGhlIHN1bW1hcnkgY291bnRzLFxyXG4vLyB0aGUgZnVsbCBicmVha2Rvd24gdGhlIHNldHRpbmdzIGRpYWxvZyBkcmlsbHMgaW50byDigJQgQk9USCBraW5kcyBvZiB1bml0IHRoZVxyXG4vLyBidWlsZCBjYWNoZXMsIHRhYmxlLWJhY2tlZCBlbnRpdGllcyBhbmQgc3RhbmRhbG9uZSBjb2RlIGNsYXNzZXMg4oCUIGFuZCB0aGVcclxuLy8gY2F0YWxvZyBvZiBldmVyeSB0YWJsZSB0aGUgYnVpbGQgc2F3LCBzbyB0aGUgdGFiIGNhbiBzaG93IHdoYXQgdGhlIHJlcG9ydCBBSVxyXG4vLyBjYW4ndCBzZWUsIG5vdCBqdXN0IHdoYXQgaXQgY2FuLlxyXG4vL1xyXG4vLyBgZnVuY3Rpb25Db3VudGAgc3BhbnMgZW50aXRpZXMgYW5kIGNsYXNzZXMgYWxpa2U6IGl0IGlzIHRoZSBzYW1lIHRvdGFsIHRoZVxyXG4vLyBidWlsZCBpdHNlbGYgcmVwb3J0cyB3aGVuIGl0IGZpbmlzaGVzLlxyXG4vL1xyXG4vLyBgdGFibGVzYCBpcyBlbXB0eSBmb3IgYW4gYXJ0aWZhY3QgYnVpbHQgYmVmb3JlIHRoZSBjYXRhbG9nIGV4aXN0ZWQuIFJlYWQgdGhhdFxyXG4vLyBhcyBcIm5vIGNhdGFsb2dcIiwgbmV2ZXIgYXMgXCJub3RoaW5nIHdhcyBleGNsdWRlZFwiLlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGREZXRhaWwge1xyXG4gIC8vIFdoZXRoZXIgdGhlIGFydGlmYWN0IHdhcyBwcm9kdWNlZCBieSBhIGJ1aWxkIHRoYXQgcmFuIHRvIHRoZSBlbmQuIFJlYWQgaXRcclxuICAvLyBiZXNpZGUgYGdlbmVyYXRlZEF0YCwgbmV2ZXIgaW5zdGVhZCBvZiBpdDogdGhlIHN0cnVjdHVyYWwgYXJ0aWZhY3QgaXNcclxuICAvLyBwdWJsaXNoZWQgQkVGT1JFIHRoZSBBSSBmdW5jdGlvbiBwYXNzLCBzbyBhIGJ1aWxkIHdob3NlIEFJIHBhc3MgZmFpbGVkIHN0aWxsXHJcbiAgLy8gY2FycmllcyBhIGRhdGUgYW5kIGEgZnVsbCBzZXQgb2YgY291bnRzLiBUaGUgZGF0ZSBzYXlzIHNvbWV0aGluZyB3YXNcclxuICAvLyB3cml0dGVuOyBvbmx5IHRoaXMgc2F5cyB0aGUgYnVpbGQgZmluaXNoZWQgd3JpdGluZyBpdC5cclxuICBjb21wbGV0ZTogYm9vbGVhbjtcclxuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XHJcbiAgZW50aXR5Q291bnQ6IG51bWJlcjtcclxuICBjbGFzc0NvdW50OiBudW1iZXI7XHJcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xyXG4gIGVudGl0aWVzOiBTZW1hbnRpY0J1aWxkRW50aXR5W107XHJcbiAgY2xhc3NlczogU2VtYW50aWNCdWlsZENsYXNzW107XHJcbiAgdGFibGVDb3VudDogbnVtYmVyO1xyXG4gIGp1bmN0aW9uQ291bnQ6IG51bWJlcjtcclxuICB1bmxpbmtlZEp1bmN0aW9uQ291bnQ6IG51bWJlcjtcclxuICBleGNsdWRlZENvdW50OiBudW1iZXI7XHJcbiAgdGFibGVzOiBTZW1hbnRpY0J1aWxkVGFibGVbXTtcclxufVxyXG5cclxuLy8gV2hpY2ggY2xhc3MgYSBjYWNoZWQgZnVuY3Rpb24gd2FzIHJlYWQgZnJvbS4gQW4gZW50aXR5J3MgY2FjaGUgc3BsaXRzIGludG9cclxuLy8gJ21vZGVsJyBhbmQgJ2hhbmRsZXInOyBhIHN0YW5kYWxvbmUgY29kZSBjbGFzcyBoYXMgb25lIGdyb3VwLCAnY2xhc3MnLlxyXG5leHBvcnQgdHlwZSBTZW1hbnRpY0Z1bmN0aW9uU291cmNlID0gJ21vZGVsJyB8ICdoYW5kbGVyJyB8ICdjbGFzcyc7XHJcblxyXG4vLyBPbmUgQUktY2xhc3NpZmllZCBjb2RlIGZ1bmN0aW9uIGZyb20gYSBtb2RlbCwgaGFuZGxlciBvciBzdGFuZGFsb25lIGNsYXNzOlxyXG4vLyB3aGF0IGtpbmQgb2YgbG9naWMgaXQgaXMsIHdoYXQgaXQgZG9lcywgYW5kIHdoYXQgaXQgcHJvZHVjZXMg4oCUIHRoZSBidWlsZCdzXHJcbi8vIGNhY2hlZCBcIndoYXQgdGhlIGNvZGUgZG9lc1wiIGtub3dsZWRnZSBzaG93biBpbiB0aGUgZnVuY3Rpb25zIGRpYWxvZy5cclxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uIHtcclxuICBjbGFzczogc3RyaW5nO1xyXG4gIG1ldGhvZDogc3RyaW5nO1xyXG4gIHNpZ25hdHVyZTogc3RyaW5nO1xyXG4gIGtpbmQ6IHN0cmluZztcclxuICBzdW1tYXJ5OiBzdHJpbmc7XHJcbiAgcHJvZHVjZXM6IHN0cmluZztcclxuICBzb3VyY2U6IFNlbWFudGljRnVuY3Rpb25Tb3VyY2U7XHJcbn1cclxuXHJcbi8vIE9uZSBlbnRpdHkncyBjYWNoZWQgY29kZS1mdW5jdGlvbiBrbm93bGVkZ2UsIGZldGNoZWQgd2hlbiBhIGZ1bmN0aW9ucyBkaWFsb2dcclxuLy8gb3BlbnMgKHRoZSBmdWxsIHNldCBhY3Jvc3MgYWxsIGVudGl0aWVzIGlzIHRvbyBiaWcgdG8gc2hpcCB3aXRoIHRoZVxyXG4vLyBzY29yZWJvYXJkKS4gT25lIHBheWxvYWQgc2VydmVzIGJvdGggZGlhbG9ncyDigJQgY29uc3VtZXJzIGZpbHRlciBieSBzb3VyY2UuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbnMge1xyXG4gIGVudGl0eTogc3RyaW5nO1xyXG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcclxuICBtb2RlbENsYXNzOiBzdHJpbmcgfCBudWxsO1xyXG4gIGhhbmRsZXJDbGFzczogc3RyaW5nIHwgbnVsbDtcclxuICBmdW5jdGlvbnM6IFNlbWFudGljRW50aXR5RnVuY3Rpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkU3RhdHVzIHtcclxuICBidWlsZDogU2VtYW50aWNCdWlsZCB8IG51bGw7XHJcbiAgZGV0YWlsOiBTZW1hbnRpY0J1aWxkRGV0YWlsO1xyXG59XHJcblxyXG4vLyBUaGUgcmVwb3J0IG1vZHVsZSdzIEdlbmVyYWwgc2V0dGluZ3MgKGEgc21hbGwgZ2xvYmFsIGtleS92YWx1ZSBzdG9yZSwgdGhlXHJcbi8vIHJlcG9ydGluZyBjb3VudGVycGFydCBvZiB0aGUgYXBwLXdpZGUgc2V0dGluZ3MpLiBFYWNoIHZhbHVlIHNoaXBzIHdpdGggdGhlXHJcbi8vIHNhZmUgYmFuZCBpdHMgZWRpdG9yIGZpZWxkIGlzIGJvdW5kZWQgdG8uXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U2V0dGluZ3Mge1xyXG4gIC8vIEhvdyBtYW55IHN1bW1hcnkgY2FsbHMgdGhlIHNlbWFudGljIGJ1aWxkIHJ1bnMgYXQgb25jZS5cclxuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IG51bWJlcjtcclxuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNaW46IG51bWJlcjtcclxuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNYXg6IG51bWJlcjtcclxufVxyXG4iXX0=
|