ontimize-web-ngx 15.2.0 → 15.2.2
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/assets/svg/ontimize-icon-set.svg +0 -1
- package/esm2020/lib/components/form/navigation/o-form.navigation.class.mjs +5 -4
- package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +3 -3
- package/esm2020/lib/components/input/integer-input/o-integer-input.component.mjs +6 -6
- package/esm2020/lib/components/input/listpicker/o-list-picker-dialog.component.mjs +2 -2
- package/esm2020/lib/components/input/listpicker/o-list-picker.component.mjs +18 -8
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +3 -3
- package/esm2020/lib/components/input/percent-input/o-percent-input.component.mjs +3 -3
- package/esm2020/lib/components/input/radio/o-radio.component.mjs +3 -3
- package/esm2020/lib/components/input/real-input/o-real-input.component.mjs +3 -3
- package/esm2020/lib/components/input/text-input/o-text-input.component.mjs +31 -22
- package/esm2020/lib/components/table/column/cell-editor/integer/o-table-cell-editor-integer.component.mjs +6 -6
- package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +6 -6
- package/esm2020/lib/components/table/column/cell-renderer/cell-renderer.mjs +5 -3
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +2 -2
- package/esm2020/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.mjs +80 -19
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +97 -40
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.component.mjs +10 -11
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +5 -3
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +30 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-export-configuration.class.mjs +1 -1
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +11 -2
- package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +12 -7
- package/esm2020/lib/components/table/o-table.component.mjs +12 -13
- package/esm2020/lib/config/o-directives.mjs +4 -2
- package/esm2020/lib/directives/index.mjs +2 -1
- package/esm2020/lib/directives/input-regulate.directive.mjs +70 -0
- package/esm2020/lib/i18n/i18n.mjs +30 -3
- package/esm2020/lib/interfaces/export-service.interface.mjs +1 -1
- package/esm2020/lib/services/ontimize/ontimize-export-3xx.service.mjs +7 -5
- package/esm2020/lib/services/ontimize-export-data-provider-3x.service.mjs +6 -3
- package/esm2020/lib/shared/shared.module.mjs +4 -3
- package/esm2020/lib/validators/o-validators.mjs +1 -1
- package/fesm2015/ontimize-web-ngx.mjs +2980 -2711
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +2967 -2699
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/input/listpicker/o-list-picker.component.d.ts +2 -2
- package/lib/components/input/o-form-service-component.class.d.ts +1 -1
- package/lib/components/input/text-input/o-text-input.component.d.ts +4 -2
- package/lib/components/table/column/o-table-column.component.d.ts +1 -1
- package/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.d.ts +24 -1
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +18 -4
- package/lib/components/table/extensions/dialog/o-table-dialog-components.d.ts +1 -1
- package/lib/components/table/extensions/export-button/o-table-export-button.component.d.ts +2 -2
- package/lib/components/table/extensions/footer/o-table-footer-components.d.ts +1 -1
- package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
- package/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.d.ts +5 -1
- package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +4 -1
- package/lib/components/table/extensions/header/table-menu/o-table-export-configuration.class.d.ts +1 -0
- package/lib/components/table/extensions/header/table-menu/o-table-menu.component.d.ts +1 -0
- package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +6 -3
- package/lib/components/table/o-table.component.d.ts +12 -10
- package/lib/directives/index.d.ts +1 -0
- package/lib/directives/input-regulate.directive.d.ts +23 -0
- package/lib/i18n/i18n.d.ts +27 -0
- package/lib/interfaces/export-service.interface.d.ts +1 -1
- package/lib/services/ontimize/ontimize-export-3xx.service.d.ts +1 -1
- package/lib/shared/shared.module.d.ts +15 -14
- package/package.json +1 -1
- package/theming/styles/ontimize-v8/containers.scss +0 -5
package/esm2020/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.mjs
CHANGED
|
@@ -2,8 +2,8 @@ import { HttpErrorResponse } from '@angular/common/http';
|
|
|
2
2
|
import { ChangeDetectionStrategy, Component, Inject, Injector, ViewEncapsulation } from '@angular/core';
|
|
3
3
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
4
4
|
import { Subscription } from 'rxjs';
|
|
5
|
-
import { filter } from 'rxjs/operators';
|
|
6
5
|
import { AppConfig } from '../../../../../config/app-config';
|
|
6
|
+
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
7
7
|
import { OntimizeExportServiceProvider } from '../../../../../services/factories';
|
|
8
8
|
import { OntimizeExportService } from '../../../../../services/ontimize/ontimize-export.service';
|
|
9
9
|
import { SnackBarService } from '../../../../../services/snackbar.service';
|
|
@@ -16,21 +16,54 @@ import * as i0 from "@angular/core";
|
|
|
16
16
|
import * as i1 from "@angular/material/dialog";
|
|
17
17
|
import * as i2 from "@angular/common";
|
|
18
18
|
import * as i3 from "@angular/flex-layout/flex";
|
|
19
|
-
import * as i4 from "@angular/
|
|
20
|
-
import * as i5 from "@angular/material/
|
|
21
|
-
import * as i6 from "
|
|
22
|
-
import * as i7 from "
|
|
23
|
-
import * as i8 from "
|
|
19
|
+
import * as i4 from "@angular/forms";
|
|
20
|
+
import * as i5 from "@angular/material/button";
|
|
21
|
+
import * as i6 from "@angular/material/button-toggle";
|
|
22
|
+
import * as i7 from "@angular/material/expansion";
|
|
23
|
+
import * as i8 from "@angular/material/icon";
|
|
24
|
+
import * as i9 from "@angular/material/input";
|
|
25
|
+
import * as i10 from "@angular/material/form-field";
|
|
26
|
+
import * as i11 from "@angular/material/list";
|
|
27
|
+
import * as i12 from "@angular/material/radio";
|
|
28
|
+
import * as i13 from "@angular/cdk/drag-drop";
|
|
29
|
+
import * as i14 from "../../../../../pipes/o-translate.pipe";
|
|
30
|
+
import * as i15 from "../../header/table-menu/o-table-export-configuration.class";
|
|
24
31
|
export class OTableExportDialogComponent {
|
|
25
32
|
constructor(dialogRef, injector, config) {
|
|
26
33
|
this.dialogRef = dialogRef;
|
|
27
34
|
this.injector = injector;
|
|
28
35
|
this.config = config;
|
|
29
36
|
this.subscription = new Subscription();
|
|
37
|
+
this.orientations = [{ text: "EXPORT.DIALOG.VERTICAL", value: true }, { text: "EXPORT.DIALOG.HORIZONTAL", value: false }];
|
|
38
|
+
this.exportTypes = [{
|
|
39
|
+
exportType: 'xlsx',
|
|
40
|
+
svgIcon: 'ontimize:EXCEL',
|
|
41
|
+
olabel: 'TABLE.BUTTONS.EXCEL',
|
|
42
|
+
className: 'excel-button'
|
|
43
|
+
}, {
|
|
44
|
+
exportType: 'html',
|
|
45
|
+
svgIcon: 'ontimize:HTML',
|
|
46
|
+
olabel: 'TABLE.BUTTONS.HTML',
|
|
47
|
+
className: 'html-button'
|
|
48
|
+
}, {
|
|
49
|
+
exportType: 'pdf',
|
|
50
|
+
svgIcon: 'ontimize:PDF',
|
|
51
|
+
olabel: 'TABLE.BUTTONS.PDF',
|
|
52
|
+
className: 'pdf-button'
|
|
53
|
+
}, {
|
|
54
|
+
exportType: 'csv',
|
|
55
|
+
svgIcon: 'ontimize:CSV',
|
|
56
|
+
olabel: 'TABLE.BUTTONS.CSV',
|
|
57
|
+
className: 'csv-button'
|
|
58
|
+
}];
|
|
59
|
+
this.vertical = true;
|
|
60
|
+
this.filename = '';
|
|
61
|
+
this.isExpanded = false;
|
|
30
62
|
this.snackBarService = injector.get(SnackBarService);
|
|
31
63
|
this.translateService = this.injector.get(OTranslateService);
|
|
32
64
|
this.oTableExportButtonService = this.injector.get(OTableExportButtonService);
|
|
33
65
|
this.appConfig = this.injector.get(AppConfig);
|
|
66
|
+
this.selectedExportFormat = this.getDefaultSelection();
|
|
34
67
|
if (config && Util.isDefined(config.visibleButtons)) {
|
|
35
68
|
this.visibleButtons = Util.parseArray(config.visibleButtons.toLowerCase(), true);
|
|
36
69
|
}
|
|
@@ -42,8 +75,9 @@ export class OTableExportDialogComponent {
|
|
|
42
75
|
this.subscription.unsubscribe();
|
|
43
76
|
}
|
|
44
77
|
initialize() {
|
|
78
|
+
this.columnsData = this.config.columns;
|
|
79
|
+
this.columns = [...this.columnsData];
|
|
45
80
|
this.configureService();
|
|
46
|
-
this.subscription.add(this.oTableExportButtonService.export$.pipe(filter(type => ['xlsx', 'html', 'pdf'].indexOf(type) === -1)).subscribe(e => this.export(e)));
|
|
47
81
|
}
|
|
48
82
|
configureService() {
|
|
49
83
|
let loadingService = OntimizeExportService;
|
|
@@ -54,15 +88,29 @@ export class OTableExportDialogComponent {
|
|
|
54
88
|
const serviceCfg = this.exportService.getDefaultServiceConfiguration(this.config.service);
|
|
55
89
|
this.exportService.configureService(serviceCfg);
|
|
56
90
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
91
|
+
updateColumnsSort() {
|
|
92
|
+
this.columns.sort((a, b) => {
|
|
93
|
+
let indexA = this.columnsData.findIndex(x => x === a);
|
|
94
|
+
let indexB = this.columnsData.findIndex(x => x === b);
|
|
95
|
+
return indexA - indexB;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
dropColumns(event) {
|
|
99
|
+
moveItemInArray(this.columnsData, event.previousIndex, event.currentIndex);
|
|
100
|
+
this.updateColumnsSort();
|
|
101
|
+
}
|
|
102
|
+
columnsCompareFunction(co1, co2) {
|
|
103
|
+
return co1.id === co2.id;
|
|
104
|
+
}
|
|
105
|
+
export() {
|
|
61
106
|
this.dialogRef.close(true);
|
|
62
|
-
this.exportService.exportData(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
107
|
+
this.exportService.exportData(this.selectedExportFormat, this.columns, !this.vertical, this.filename).subscribe({
|
|
108
|
+
next: () => {
|
|
109
|
+
this.snackBarService.open('MESSAGES.SUCCESS_EXPORT_TABLE_DATA', { icon: 'check_circle' });
|
|
110
|
+
},
|
|
111
|
+
error: (err) => {
|
|
112
|
+
this.handleError(err);
|
|
113
|
+
}
|
|
66
114
|
});
|
|
67
115
|
}
|
|
68
116
|
isButtonVisible(btn) {
|
|
@@ -81,6 +129,15 @@ export class OTableExportDialogComponent {
|
|
|
81
129
|
}
|
|
82
130
|
return isVisible;
|
|
83
131
|
}
|
|
132
|
+
getDefaultSelection() {
|
|
133
|
+
const useExportConfiguration3X = this.appConfig.useExportConfiguration();
|
|
134
|
+
if (useExportConfiguration3X) {
|
|
135
|
+
return Codes.VISIBLE_EXPORT_BUTTONS3X[0];
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return Codes.VISIBLE_EXPORT_BUTTONS[0];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
84
141
|
handleError(err) {
|
|
85
142
|
if (err instanceof HttpErrorResponse) {
|
|
86
143
|
this.snackBarService.open(err.message, { icon: 'error' });
|
|
@@ -89,20 +146,24 @@ export class OTableExportDialogComponent {
|
|
|
89
146
|
this.snackBarService.open('MESSAGES.ERROR_EXPORT_TABLE_DATA', { icon: 'error' });
|
|
90
147
|
}
|
|
91
148
|
}
|
|
149
|
+
onChangeMatButtonToggleGroup(event) {
|
|
150
|
+
event.source.buttonToggleGroup.value = event.value;
|
|
151
|
+
this.selectedExportFormat = event.value;
|
|
152
|
+
}
|
|
92
153
|
}
|
|
93
154
|
OTableExportDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableExportDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i0.Injector }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
94
155
|
OTableExportDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableExportDialogComponent, selector: "o-table-export-dialog", host: { classAttribute: "o-table-export-dialog" }, providers: [
|
|
95
156
|
OntimizeExportServiceProvider
|
|
96
|
-
], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.EXPORT' | oTranslate }}</span>\n<mat-dialog-content>\n <div mat-subheader>{{ 'TABLE.DIALOG.EXPORT.DESCRIPTION' | oTranslate }}</div>\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-around center\" fxLayoutGap=\"8px\">\n <o-table-export-button #excelButton *ngIf=\"isButtonVisible('xlsx')\" svg-icon=\"ontimize:EXCEL\" label=\"TABLE.BUTTONS.EXCEL\" export-type=\"xlsx\"\n (onClick)=\"export('xlsx', excelButton)\" class=\"excel-button\"></o-table-export-button>\n <o-table-export-button #htmlButton *ngIf=\"isButtonVisible('html')\" svg-icon=\"ontimize:HTML\" label=\"TABLE.BUTTONS.HTML\" export-type=\"html\"\n (onClick)=\"export('html', htmlButton)\" class=\"html-button\"></o-table-export-button>\n <o-table-export-button #pdfButton *ngIf=\"isButtonVisible('pdf')\" svg-icon=\"ontimize:PDF\" label=\"TABLE.BUTTONS.PDF\" export-type=\"pdf\"\n (onClick)=\"export('pdf', pdfButton)\" class=\"pdf-button\"></o-table-export-button>\n <o-table-export-button #csvButton *ngIf=\"isButtonVisible('csv')\" svg-icon=\"ontimize:CSV\" label=\"TABLE.BUTTONS.CSV\" export-type=\"pdf\"\n (onClick)=\"export('csv', csvButton)\" class=\"pdf-button\"></o-table-export-button>\n <ng-container *ngTemplateOutlet=\"config.options\"></ng-container>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions fxLayoutAlign=\"end center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"false\" class=\"o-button-default cancel\">{{ 'CANCEL' | oTranslate }}</button>\n</mat-dialog-actions>\n", styles: [".o-table-export-dialog .mat-icon{padding:6px 6px 0;width:48px;height:48px;font-size:48px}.o-table-export-dialog .mat-mdc-raised-button{height:initial}.o-table-export-dialog .mat-mdc-raised-button .mdc-button__label{line-height:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i5.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i6.OTableExportButtonComponent, selector: "o-table-export-button", inputs: ["icon", "svg-icon", "label", "export-type"], outputs: ["onClick"] }, { kind: "pipe", type: i7.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
157
|
+
], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.EXPORT' | oTranslate }}</span>\n<mat-dialog-content class=\"dialog_content\">\n <div mat-subheader>{{ 'TABLE.DIALOG.EXPORT.DESCRIPTION' | oTranslate }}</div>\n <mat-button-toggle-group class=\"type_toggle_group\" #group=\"matButtonToggleGroup\" [(ngModel)]=\"selectedExportFormat\">\n <ng-container *ngFor=\"let button of exportTypes\">\n <mat-button-toggle [value]=\"button.exportType\" *ngIf=\"isButtonVisible(button.exportType)\" class=\"button.className\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate;context:{button:button}\"></ng-container>\n </mat-button-toggle>\n </ng-container>\n\n <ng-container *ngFor=\"let customButton of config.options\">\n <mat-button-toggle [value]=\"customButton.exportType\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate;context:{button:customButton}\"></ng-container>\n </mat-button-toggle>\n </ng-container>\n </mat-button-toggle-group>\n <mat-expansion-panel class=\"acordion\" [expanded]=\"isExpanded\">\n <mat-expansion-panel-header collapsedHeight=\"32px\" expandedHeight=\"32px\">\n <mat-panel-title>\n {{ 'EXPORT.DIALOG.ADVANCED_OPTIONS' | oTranslate }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"inputs_container\">\n <mat-label class=\"dialog-titles\">{{'EXPORT.DIALOG.FILE_NAME'|oTranslate}}</mat-label>\n <mat-form-field subscriptSizing=\"dynamic\" class=\"filename_input\">\n <input matInput [(ngModel)]=\"filename\" placeholder=\"{{ 'EXPORT.DIALOG.FILE_NAME.PLACEHOLDER' | oTranslate }}\" />\n </mat-form-field>\n <span class=\"dialog-titles\">{{'EXPORT.DIALOG.ORIENTATION'|oTranslate}}</span>\n <mat-radio-group name=\"Orientation\" [(ngModel)]=\"vertical\" fxLayout=\"row\" fxLayoutGap=\"12px\" [disabled]=\"selectedExportFormat !== 'pdf'\">\n <mat-radio-button *ngFor=\"let orientation of orientations\" name=\"Orientation\" [value]=\"orientation.value\"\n [checked]=\"vertical === orientation.value\">\n {{ orientation.text | oTranslate}}\n </mat-radio-button>\n </mat-radio-group>\n <span class=\"dialog-titles\">{{'EXPORT.DIALOG.COLUMNS'|oTranslate}}</span>\n <mat-selection-list dense #columnsList cdkDropList [cdkDropListData]=\"columnsData\" (cdkDropListDropped)=\"dropColumns($event)\" class=\"columns\"\n [(ngModel)]=\"columns\" [compareWith]=\"columnsCompareFunction\">\n <mat-list-option checkboxPosition=\"before\" *ngFor=\"let column of columnsData\" [value]=\"column\" cdkDrag>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <span matListItemLine fxFlex>\n {{column | oTranslate}}\n </span>\n <mat-icon mat-list-icon class=\"button-edit\">drag_handle</mat-icon>\n </div>\n </mat-list-option>\n </mat-selection-list>\n\n </div>\n </mat-expansion-panel>\n</mat-dialog-content>\n\n<mat-dialog-actions fxLayoutAlign=\"end center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"false\" class=\"o-button-default cancel\">{{ 'CANCEL' | oTranslate }}</button>\n <button type=\"button\" mat-stroked-button class=\"export_button\" (click)=\"export()\">\n <mat-icon>ios_share</mat-icon>\n <span>{{ 'EXPORT.DIALOG.EXPORT_BUTTON' | oTranslate }}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #buttonTemplate let-button=\"button\">\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"button.icon!==undefined\" style=\"vertical-align:middle\">{{ button.icon }}</mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"button.svgIcon!==undefined\" style=\"vertical-align:middle\"\n [svgIcon]=\"button.svgIcon\"></mat-icon>\n {{ button.olabel | oTranslate }}\n</ng-template>\n", styles: [".o-table-export-dialog .mat-mdc-raised-button{height:initial}.o-table-export-dialog .mat-mdc-raised-button .mdc-button__label{line-height:initial}.o-table-export-dialog mat-selection-list{margin-bottom:20px}.o-table-export-dialog .filename_input{margin-top:10px;display:flex;margin-bottom:20px}.o-table-export-dialog mat-radio-group{margin-top:10px;margin-bottom:20px}.o-table-export-dialog span.dialog-titles{font-weight:500}.o-table-export-dialog .acordion.mat-expansion-panel{box-shadow:none}.o-table-export-dialog .acordion.mat-expansion-panel .mat-expansion-panel-body{padding:0}.o-table-export-dialog .mat-expansion-panel-header:not([aria-disabled=true]){border-bottom:1px solid rgba(0,0,0,.16)}.o-table-export-dialog .mat-expansion-panel-header{border-radius:initial;margin-bottom:10px}.o-table-export-dialog .dialog_content{display:flex;flex-direction:column;height:100%;padding-bottom:0}.o-table-export-dialog .acordion{flex-grow:1;max-height:100%}.o-table-export-dialog .acordion.mat-expansion-panel.mat-expanded{overflow-y:auto}.o-table-export-dialog mat-expanded .inputs-container{max-height:100%;overflow-y:auto}.o-table-export-dialog .type_toggle_group{margin-bottom:20px}.o-table-export-dialog .type_toggle_group .mat-button-toggle{flex:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.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: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i11.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i11.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "directive", type: i11.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "pipe", type: i14.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
97
158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableExportDialogComponent, decorators: [{
|
|
98
159
|
type: Component,
|
|
99
160
|
args: [{ selector: 'o-table-export-dialog', providers: [
|
|
100
161
|
OntimizeExportServiceProvider
|
|
101
162
|
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
102
163
|
class: 'o-table-export-dialog'
|
|
103
|
-
}, encapsulation: ViewEncapsulation.None, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.EXPORT' | oTranslate }}</span>\n<mat-dialog-content>\n <div mat-subheader>{{ 'TABLE.DIALOG.EXPORT.DESCRIPTION' | oTranslate }}</div>\n <
|
|
104
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i0.Injector }, { type:
|
|
164
|
+
}, encapsulation: ViewEncapsulation.None, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.EXPORT' | oTranslate }}</span>\n<mat-dialog-content class=\"dialog_content\">\n <div mat-subheader>{{ 'TABLE.DIALOG.EXPORT.DESCRIPTION' | oTranslate }}</div>\n <mat-button-toggle-group class=\"type_toggle_group\" #group=\"matButtonToggleGroup\" [(ngModel)]=\"selectedExportFormat\">\n <ng-container *ngFor=\"let button of exportTypes\">\n <mat-button-toggle [value]=\"button.exportType\" *ngIf=\"isButtonVisible(button.exportType)\" class=\"button.className\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate;context:{button:button}\"></ng-container>\n </mat-button-toggle>\n </ng-container>\n\n <ng-container *ngFor=\"let customButton of config.options\">\n <mat-button-toggle [value]=\"customButton.exportType\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate;context:{button:customButton}\"></ng-container>\n </mat-button-toggle>\n </ng-container>\n </mat-button-toggle-group>\n <mat-expansion-panel class=\"acordion\" [expanded]=\"isExpanded\">\n <mat-expansion-panel-header collapsedHeight=\"32px\" expandedHeight=\"32px\">\n <mat-panel-title>\n {{ 'EXPORT.DIALOG.ADVANCED_OPTIONS' | oTranslate }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n <div class=\"inputs_container\">\n <mat-label class=\"dialog-titles\">{{'EXPORT.DIALOG.FILE_NAME'|oTranslate}}</mat-label>\n <mat-form-field subscriptSizing=\"dynamic\" class=\"filename_input\">\n <input matInput [(ngModel)]=\"filename\" placeholder=\"{{ 'EXPORT.DIALOG.FILE_NAME.PLACEHOLDER' | oTranslate }}\" />\n </mat-form-field>\n <span class=\"dialog-titles\">{{'EXPORT.DIALOG.ORIENTATION'|oTranslate}}</span>\n <mat-radio-group name=\"Orientation\" [(ngModel)]=\"vertical\" fxLayout=\"row\" fxLayoutGap=\"12px\" [disabled]=\"selectedExportFormat !== 'pdf'\">\n <mat-radio-button *ngFor=\"let orientation of orientations\" name=\"Orientation\" [value]=\"orientation.value\"\n [checked]=\"vertical === orientation.value\">\n {{ orientation.text | oTranslate}}\n </mat-radio-button>\n </mat-radio-group>\n <span class=\"dialog-titles\">{{'EXPORT.DIALOG.COLUMNS'|oTranslate}}</span>\n <mat-selection-list dense #columnsList cdkDropList [cdkDropListData]=\"columnsData\" (cdkDropListDropped)=\"dropColumns($event)\" class=\"columns\"\n [(ngModel)]=\"columns\" [compareWith]=\"columnsCompareFunction\">\n <mat-list-option checkboxPosition=\"before\" *ngFor=\"let column of columnsData\" [value]=\"column\" cdkDrag>\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <span matListItemLine fxFlex>\n {{column | oTranslate}}\n </span>\n <mat-icon mat-list-icon class=\"button-edit\">drag_handle</mat-icon>\n </div>\n </mat-list-option>\n </mat-selection-list>\n\n </div>\n </mat-expansion-panel>\n</mat-dialog-content>\n\n<mat-dialog-actions fxLayoutAlign=\"end center\">\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"false\" class=\"o-button-default cancel\">{{ 'CANCEL' | oTranslate }}</button>\n <button type=\"button\" mat-stroked-button class=\"export_button\" (click)=\"export()\">\n <mat-icon>ios_share</mat-icon>\n <span>{{ 'EXPORT.DIALOG.EXPORT_BUTTON' | oTranslate }}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #buttonTemplate let-button=\"button\">\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"button.icon!==undefined\" style=\"vertical-align:middle\">{{ button.icon }}</mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"button.svgIcon!==undefined\" style=\"vertical-align:middle\"\n [svgIcon]=\"button.svgIcon\"></mat-icon>\n {{ button.olabel | oTranslate }}\n</ng-template>\n", styles: [".o-table-export-dialog .mat-mdc-raised-button{height:initial}.o-table-export-dialog .mat-mdc-raised-button .mdc-button__label{line-height:initial}.o-table-export-dialog mat-selection-list{margin-bottom:20px}.o-table-export-dialog .filename_input{margin-top:10px;display:flex;margin-bottom:20px}.o-table-export-dialog mat-radio-group{margin-top:10px;margin-bottom:20px}.o-table-export-dialog span.dialog-titles{font-weight:500}.o-table-export-dialog .acordion.mat-expansion-panel{box-shadow:none}.o-table-export-dialog .acordion.mat-expansion-panel .mat-expansion-panel-body{padding:0}.o-table-export-dialog .mat-expansion-panel-header:not([aria-disabled=true]){border-bottom:1px solid rgba(0,0,0,.16)}.o-table-export-dialog .mat-expansion-panel-header{border-radius:initial;margin-bottom:10px}.o-table-export-dialog .dialog_content{display:flex;flex-direction:column;height:100%;padding-bottom:0}.o-table-export-dialog .acordion{flex-grow:1;max-height:100%}.o-table-export-dialog .acordion.mat-expansion-panel.mat-expanded{overflow-y:auto}.o-table-export-dialog mat-expanded .inputs-container{max-height:100%;overflow-y:auto}.o-table-export-dialog .type_toggle_group{margin-bottom:20px}.o-table-export-dialog .type_toggle_group .mat-button-toggle{flex:1}\n"] }]
|
|
165
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i0.Injector }, { type: i15.OTableExportConfiguration, decorators: [{
|
|
105
166
|
type: Inject,
|
|
106
167
|
args: [MAT_DIALOG_DATA]
|
|
107
168
|
}] }]; } });
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1leHBvcnQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2V4cG9ydC9vLXRhYmxlLWV4cG9ydC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9kaWFsb2cvZXhwb3J0L28tdGFibGUtZXhwb3J0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1B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Q2xGO0lBQ0gsQ0FBQzs7eUhBMUZVLDJCQUEyQixzRUFhNUIsZUFBZTs2R0FiZCwyQkFBMkIsbUdBVDNCO1FBQ1QsNkJBQTZCO0tBQzlCLDBCQ3ZCSCwraERBbUJBOzRGRFdhLDJCQUEyQjtrQkFidkMsU0FBUzsrQkFDRSx1QkFBdUIsYUFHdEI7d0JBQ1QsNkJBQTZCO3FCQUM5QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsdUJBQXVCO3FCQUMvQixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzswQkFlbEMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uZmlnL2FwcC1jb25maWcnO1xuXG5pbXBvcnQgeyBJRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZXhwb3J0LXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9udGltaXplRXhwb3J0U2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9udGltaXplRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL29udGltaXplL29udGltaXplLWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPVGFibGVFeHBvcnRCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0LWJ1dHRvbi9vLXRhYmxlLWV4cG9ydC1idXR0b24uc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVFeHBvcnRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1leHBvcnQtY29uZmlndXJhdGlvbi5jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtZXhwb3J0LWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnby10YWJsZS1leHBvcnQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ28tdGFibGUtZXhwb3J0LWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBPbnRpbWl6ZUV4cG9ydFNlcnZpY2VQcm92aWRlclxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnby10YWJsZS1leHBvcnQtZGlhbG9nJ1xuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUV4cG9ydERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcm90ZWN0ZWQgc25hY2tCYXJTZXJ2aWNlOiBTbmFja0JhclNlcnZpY2U7XG4gIHByb3RlY3RlZCBleHBvcnRTZXJ2aWNlOiBJRXhwb3J0U2VydmljZTtcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IE9UcmFuc2xhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgb1RhYmxlRXhwb3J0QnV0dG9uU2VydmljZTogT1RhYmxlRXhwb3J0QnV0dG9uU2VydmljZTtcbiAgcHJvdGVjdGVkIHZpc2libGVCdXR0b25zOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T1RhYmxlRXhwb3J0RGlhbG9nQ29tcG9uZW50PixcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgY29uZmlnOiBPVGFibGVFeHBvcnRDb25maWd1cmF0aW9uXG4gICkge1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNuYWNrQmFyU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMub1RhYmxlRXhwb3J0QnV0dG9uU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZUV4cG9ydEJ1dHRvblNlcnZpY2UpO1xuICAgIHRoaXMuYXBwQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwQ29uZmlnKVxuXG4gICAgaWYgKGNvbmZpZyAmJiBVdGlsLmlzRGVmaW5lZChjb25maWcudmlzaWJsZUJ1dHRvbnMpKSB7XG4gICAgICB0aGlzLnZpc2libGVCdXR0b25zID0gVXRpbC5wYXJzZUFycmF5KGNvbmZpZy52aXNpYmxlQnV0dG9ucy50b0xvd2VyQ2FzZSgpLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMub1RhYmxlRXhwb3J0QnV0dG9uU2VydmljZS5leHBvcnQkLnBpcGUoZmlsdGVyKHR5cGUgPT4gWyd4bHN4JywgJ2h0bWwnLCAncGRmJ10uaW5kZXhPZih0eXBlKSA9PT0gLTEpKS5zdWJzY3JpYmUoZSA9PiB0aGlzLmV4cG9ydChlKSlcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlU2VydmljZSgpOiB2b2lkIHtcbiAgICBsZXQgbG9hZGluZ1NlcnZpY2U6IGFueSA9IE9udGltaXplRXhwb3J0U2VydmljZTtcbiAgICBpZiAodGhpcy5jb25maWcuc2VydmljZVR5cGUpIHtcbiAgICAgIGxvYWRpbmdTZXJ2aWNlID0gdGhpcy5jb25maWcuc2VydmljZVR5cGU7XG4gICAgfVxuICAgIHRoaXMuZXhwb3J0U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KGxvYWRpbmdTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXJ2aWNlQ2ZnID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldERlZmF1bHRTZXJ2aWNlQ29uZmlndXJhdGlvbih0aGlzLmNvbmZpZy5zZXJ2aWNlKTtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuY29uZmlndXJlU2VydmljZShzZXJ2aWNlQ2ZnKTtcbiAgfVxuXG4gIGV4cG9ydChleHBvcnRUeXBlOiBzdHJpbmcsIGJ1dHRvbj86IGFueSk6IHZvaWQge1xuXG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0RGF0YShleHBvcnRUeXBlKS5zdWJzY3JpYmUoXG4gICAgICByZXMgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5TVUNDRVNTX0VYUE9SVF9UQUJMRV9EQVRBJywgeyBpY29uOiAnY2hlY2tfY2lyY2xlJyB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGlzQnV0dG9uVmlzaWJsZShidG46IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgdXNlRXhwb3J0Q29uZmlndXJhdGlvbjNYID0gdGhpcy5hcHBDb25maWcudXNlRXhwb3J0Q29uZmlndXJhdGlvbigpO1xuICAgIGxldCBpc1Zpc2libGUgPSB0cnVlO1xuICAgIGlmICh0aGlzLnZpc2libGVCdXR0b25zKSB7XG4gICAgICBpc1Zpc2libGUgPSB0aGlzLnZpc2libGVCdXR0b25zLmluZGV4T2YoYnRuKSAhPT0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh1c2VFeHBvcnRDb25maWd1cmF0aW9uM1gpIHtcbiAgICAgICAgaXNWaXNpYmxlID0gQ29kZXMuVklTSUJMRV9FWFBPUlRfQlVUVE9OUzNYLmluZGV4T2YoYnRuKSAhPT0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc1Zpc2libGUgPSBDb2Rlcy5WSVNJQkxFX0VYUE9SVF9CVVRUT05TLmluZGV4T2YoYnRuKSAhPT0gLTFcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNWaXNpYmxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUVycm9yKGVycik6IHZvaWQge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihlcnIubWVzc2FnZSwgeyBpY29uOiAnZXJyb3InIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5FUlJPUl9FWFBPUlRfVEFCTEVfREFUQScsIHsgaWNvbjogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxzcGFuIG1hdC1kaWFsb2ctdGl0bGU+e3sgJ1RBQkxFLkJVVFRPTlMuRVhQT1JUJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG48bWF0LWRpYWxvZy1jb250ZW50PlxuICA8ZGl2IG1hdC1zdWJoZWFkZXI+e3sgJ1RBQkxFLkRJQUxPRy5FWFBPUlQuREVTQ1JJUFRJT04nIHwgb1RyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYXJvdW5kIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiOHB4XCI+XG4gICAgPG8tdGFibGUtZXhwb3J0LWJ1dHRvbiAjZXhjZWxCdXR0b24gKm5nSWY9XCJpc0J1dHRvblZpc2libGUoJ3hsc3gnKVwiIHN2Zy1pY29uPVwib250aW1pemU6RVhDRUxcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuRVhDRUxcIiBleHBvcnQtdHlwZT1cInhsc3hcIlxuICAgICAgKG9uQ2xpY2spPVwiZXhwb3J0KCd4bHN4JywgZXhjZWxCdXR0b24pXCIgY2xhc3M9XCJleGNlbC1idXR0b25cIj48L28tdGFibGUtZXhwb3J0LWJ1dHRvbj5cbiAgICA8by10YWJsZS1leHBvcnQtYnV0dG9uICNodG1sQnV0dG9uICpuZ0lmPVwiaXNCdXR0b25WaXNpYmxlKCdodG1sJylcIiBzdmctaWNvbj1cIm9udGltaXplOkhUTUxcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuSFRNTFwiIGV4cG9ydC10eXBlPVwiaHRtbFwiXG4gICAgICAob25DbGljayk9XCJleHBvcnQoJ2h0bWwnLCBodG1sQnV0dG9uKVwiIGNsYXNzPVwiaHRtbC1idXR0b25cIj48L28tdGFibGUtZXhwb3J0LWJ1dHRvbj5cbiAgICA8by10YWJsZS1leHBvcnQtYnV0dG9uICNwZGZCdXR0b24gKm5nSWY9XCJpc0J1dHRvblZpc2libGUoJ3BkZicpXCIgc3ZnLWljb249XCJvbnRpbWl6ZTpQREZcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuUERGXCIgZXhwb3J0LXR5cGU9XCJwZGZcIlxuICAgICAgKG9uQ2xpY2spPVwiZXhwb3J0KCdwZGYnLCBwZGZCdXR0b24pXCIgY2xhc3M9XCJwZGYtYnV0dG9uXCI+PC9vLXRhYmxlLWV4cG9ydC1idXR0b24+XG4gICAgPG8tdGFibGUtZXhwb3J0LWJ1dHRvbiAjY3N2QnV0dG9uICpuZ0lmPVwiaXNCdXR0b25WaXNpYmxlKCdjc3YnKVwiIHN2Zy1pY29uPVwib250aW1pemU6Q1NWXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkNTVlwiIGV4cG9ydC10eXBlPVwicGRmXCJcbiAgICAgIChvbkNsaWNrKT1cImV4cG9ydCgnY3N2JywgY3N2QnV0dG9uKVwiIGNsYXNzPVwicGRmLWJ1dHRvblwiPjwvby10YWJsZS1leHBvcnQtYnV0dG9uPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb25maWcub3B0aW9uc1wiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuXG48bWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJmYWxzZVwiIGNsYXNzPVwiby1idXR0b24tZGVmYXVsdCBjYW5jZWxcIj57eyAnQ0FOQ0VMJyB8IG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1leHBvcnQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvZGlhbG9nL2V4cG9ydC9vLXRhYmxlLWV4cG9ydC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9kaWFsb2cvZXhwb3J0L28tdGFibGUtZXhwb3J0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFN0QsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1B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aW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uZmlnL2FwcC1jb25maWcnO1xuXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBJRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZXhwb3J0LXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9udGltaXplRXhwb3J0U2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9udGltaXplRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL29udGltaXplL29udGltaXplLWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPVGFibGVFeHBvcnRCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0LWJ1dHRvbi9vLXRhYmxlLWV4cG9ydC1idXR0b24uc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVFeHBvcnRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1leHBvcnQtY29uZmlndXJhdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10YWJsZS1leHBvcnQtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICdvLXRhYmxlLWV4cG9ydC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnby10YWJsZS1leHBvcnQtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplRXhwb3J0U2VydmljZVByb3ZpZGVyXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdvLXRhYmxlLWV4cG9ydC1kaWFsb2cnXG4gIH0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlRXhwb3J0RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcbiAgcHJvdGVjdGVkIGV4cG9ydFNlcnZpY2U6IElFeHBvcnRTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBvVGFibGVFeHBvcnRCdXR0b25TZXJ2aWNlOiBPVGFibGVFeHBvcnRCdXR0b25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdmlzaWJsZUJ1dHRvbnM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnO1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgY29sdW1uc0RhdGE6IHN0cmluZ1tdO1xuICBwdWJsaWMgb3JpZW50YXRpb25zID0gW3sgdGV4dDogXCJFWFBPUlQuRElBTE9HLlZFUlRJQ0FMXCIsIHZhbHVlOiB0cnVlIH0sIHsgdGV4dDogXCJFWFBPUlQuRElBTE9HLkhPUklaT05UQUxcIiwgdmFsdWU6IGZhbHNlIH1dO1xuICBwdWJsaWMgZXhwb3J0VHlwZXMgPSBbe1xuICAgIGV4cG9ydFR5cGU6ICd4bHN4JyxcbiAgICBzdmdJY29uOiAnb250aW1pemU6RVhDRUwnLFxuICAgIG9sYWJlbDogJ1RBQkxFLkJVVFRPTlMuRVhDRUwnLFxuICAgIGNsYXNzTmFtZTogJ2V4Y2VsLWJ1dHRvbidcbiAgfSwge1xuICAgIGV4cG9ydFR5cGU6ICdodG1sJyxcbiAgICBzdmdJY29uOiAnb250aW1pemU6SFRNTCcsXG4gICAgb2xhYmVsOiAnVEFCTEUuQlVUVE9OUy5IVE1MJyxcbiAgICBjbGFzc05hbWU6ICdodG1sLWJ1dHRvbidcbiAgfSwge1xuICAgIGV4cG9ydFR5cGU6ICdwZGYnLFxuICAgIHN2Z0ljb246ICdvbnRpbWl6ZTpQREYnLFxuICAgIG9sYWJlbDogJ1RBQkxFLkJVVFRPTlMuUERGJyxcbiAgICBjbGFzc05hbWU6ICdwZGYtYnV0dG9uJ1xuICB9LCB7XG4gICAgZXhwb3J0VHlwZTogJ2NzdicsXG4gICAgc3ZnSWNvbjogJ29udGltaXplOkNTVicsXG4gICAgb2xhYmVsOiAnVEFCTEUuQlVUVE9OUy5DU1YnLFxuICAgIGNsYXNzTmFtZTogJ2Nzdi1idXR0b24nXG4gIH1dO1xuICB2ZXJ0aWNhbDogYm9vbGVhbiA9IHRydWU7XG4gIHNlbGVjdGVkRXhwb3J0Rm9ybWF0OiBzdHJpbmc7XG4gIGZpbGVuYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T1RhYmxlRXhwb3J0RGlhbG9nQ29tcG9uZW50PixcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgY29uZmlnOiBPVGFibGVFeHBvcnRDb25maWd1cmF0aW9uXG4gICkge1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNuYWNrQmFyU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMub1RhYmxlRXhwb3J0QnV0dG9uU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZUV4cG9ydEJ1dHRvblNlcnZpY2UpO1xuICAgIHRoaXMuYXBwQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwQ29uZmlnKTtcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0Rm9ybWF0ID0gdGhpcy5nZXREZWZhdWx0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoY29uZmlnICYmIFV0aWwuaXNEZWZpbmVkKGNvbmZpZy52aXNpYmxlQnV0dG9ucykpIHtcbiAgICAgIHRoaXMudmlzaWJsZUJ1dHRvbnMgPSBVdGlsLnBhcnNlQXJyYXkoY29uZmlnLnZpc2libGVCdXR0b25zLnRvTG93ZXJDYXNlKCksIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5zRGF0YSA9IHRoaXMuY29uZmlnLmNvbHVtbnM7XG4gICAgdGhpcy5jb2x1bW5zID0gWy4uLnRoaXMuY29sdW1uc0RhdGFdO1xuICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICB9XG5cbiAgY29uZmlndXJlU2VydmljZSgpOiB2b2lkIHtcbiAgICBsZXQgbG9hZGluZ1NlcnZpY2U6IGFueSA9IE9udGltaXplRXhwb3J0U2VydmljZTtcbiAgICBpZiAodGhpcy5jb25maWcuc2VydmljZVR5cGUpIHtcbiAgICAgIGxvYWRpbmdTZXJ2aWNlID0gdGhpcy5jb25maWcuc2VydmljZVR5cGU7XG4gICAgfVxuICAgIHRoaXMuZXhwb3J0U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KGxvYWRpbmdTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXJ2aWNlQ2ZnID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldERlZmF1bHRTZXJ2aWNlQ29uZmlndXJhdGlvbih0aGlzLmNvbmZpZy5zZXJ2aWNlKTtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuY29uZmlndXJlU2VydmljZShzZXJ2aWNlQ2ZnKTtcbiAgfVxuICB1cGRhdGVDb2x1bW5zU29ydCgpIHtcbiAgICB0aGlzLmNvbHVtbnMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgIGxldCBpbmRleEEgPSB0aGlzLmNvbHVtbnNEYXRhLmZpbmRJbmRleCh4ID0+IHggPT09IGEpO1xuICAgICAgbGV0IGluZGV4QiA9IHRoaXMuY29sdW1uc0RhdGEuZmluZEluZGV4KHggPT4geCA9PT0gYik7XG4gICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xuICAgIH0pO1xuICB9XG4gIGRyb3BDb2x1bW5zKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb2x1bW5zRGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnNTb3J0KCk7XG4gIH1cbiAgY29sdW1uc0NvbXBhcmVGdW5jdGlvbihjbzE6IGFueSwgY28yOiBhbnkpIHtcbiAgICByZXR1cm4gY28xLmlkID09PSBjbzIuaWQ7XG4gIH1cblxuICBleHBvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSk7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5zZWxlY3RlZEV4cG9ydEZvcm1hdCwgdGhpcy5jb2x1bW5zLCAhdGhpcy52ZXJ0aWNhbCwgdGhpcy5maWxlbmFtZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuU1VDQ0VTU19FWFBPUlRfVEFCTEVfREFUQScsIHsgaWNvbjogJ2NoZWNrX2NpcmNsZScgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuICAgICk7XG4gIH1cblxuICBpc0J1dHRvblZpc2libGUoYnRuOiBzdHJpbmcpOiBib29sZWFuIHtcblxuICAgIGNvbnN0IHVzZUV4cG9ydENvbmZpZ3VyYXRpb24zWCA9IHRoaXMuYXBwQ29uZmlnLnVzZUV4cG9ydENvbmZpZ3VyYXRpb24oKTtcbiAgICBsZXQgaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICBpZiAodGhpcy52aXNpYmxlQnV0dG9ucykge1xuICAgICAgaXNWaXNpYmxlID0gdGhpcy52aXNpYmxlQnV0dG9ucy5pbmRleE9mKGJ0bikgIT09IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodXNlRXhwb3J0Q29uZmlndXJhdGlvbjNYKSB7XG4gICAgICAgIGlzVmlzaWJsZSA9IENvZGVzLlZJU0lCTEVfRVhQT1JUX0JVVFRPTlMzWC5pbmRleE9mKGJ0bikgIT09IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNWaXNpYmxlID0gQ29kZXMuVklTSUJMRV9FWFBPUlRfQlVUVE9OUy5pbmRleE9mKGJ0bikgIT09IC0xXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmlzaWJsZTtcbiAgfVxuXG4gIGdldERlZmF1bHRTZWxlY3Rpb24oKSB7XG4gICAgY29uc3QgdXNlRXhwb3J0Q29uZmlndXJhdGlvbjNYID0gdGhpcy5hcHBDb25maWcudXNlRXhwb3J0Q29uZmlndXJhdGlvbigpO1xuXG4gICAgaWYgKHVzZUV4cG9ydENvbmZpZ3VyYXRpb24zWCkge1xuICAgICAgcmV0dXJuIENvZGVzLlZJU0lCTEVfRVhQT1JUX0JVVFRPTlMzWFswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIENvZGVzLlZJU0lCTEVfRVhQT1JUX0JVVFRPTlNbMF07XG4gICAgfVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRXJyb3IoZXJyKTogdm9pZCB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKGVyci5tZXNzYWdlLCB7IGljb246ICdlcnJvcicgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLkVSUk9SX0VYUE9SVF9UQUJMRV9EQVRBJywgeyBpY29uOiAnZXJyb3InIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlTWF0QnV0dG9uVG9nZ2xlR3JvdXAoZXZlbnQ6IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSkge1xuICAgIGV2ZW50LnNvdXJjZS5idXR0b25Ub2dnbGVHcm91cC52YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRGb3JtYXQgPSBldmVudC52YWx1ZTtcbiAgfVxufVxuIiwiPHNwYW4gbWF0LWRpYWxvZy10aXRsZT57eyAnVEFCTEUuQlVUVE9OUy5FWFBPUlQnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJkaWFsb2dfY29udGVudFwiPlxuICA8ZGl2IG1hdC1zdWJoZWFkZXI+e3sgJ1RBQkxFLkRJQUxPRy5FWFBPUlQuREVTQ1JJUFRJT04nIHwgb1RyYW5zbGF0ZSB9fTwvZGl2PlxuICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJ0eXBlX3RvZ2dsZV9ncm91cFwiICNncm91cD1cIm1hdEJ1dHRvblRvZ2dsZUdyb3VwXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEV4cG9ydEZvcm1hdFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBleHBvcnRUeXBlc1wiPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJidXR0b24uZXhwb3J0VHlwZVwiICpuZ0lmPVwiaXNCdXR0b25WaXNpYmxlKGJ1dHRvbi5leHBvcnRUeXBlKVwiIGNsYXNzPVwiYnV0dG9uLmNsYXNzTmFtZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGU7Y29udGV4dDp7YnV0dG9uOmJ1dHRvbn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjdXN0b21CdXR0b24gb2YgY29uZmlnLm9wdGlvbnNcIj5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiY3VzdG9tQnV0dG9uLmV4cG9ydFR5cGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlO2NvbnRleHQ6e2J1dHRvbjpjdXN0b21CdXR0b259XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz1cImFjb3JkaW9uXCIgW2V4cGFuZGVkXT1cImlzRXhwYW5kZWRcIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY29sbGFwc2VkSGVpZ2h0PVwiMzJweFwiIGV4cGFuZGVkSGVpZ2h0PVwiMzJweFwiPlxuICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAge3sgJ0VYUE9SVC5ESUFMT0cuQURWQU5DRURfT1BUSU9OUycgfCBvVHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dHNfY29udGFpbmVyXCI+XG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZGlhbG9nLXRpdGxlc1wiPnt7J0VYUE9SVC5ESUFMT0cuRklMRV9OQU1FJ3xvVHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJmaWxlbmFtZV9pbnB1dFwiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWxlbmFtZVwiIHBsYWNlaG9sZGVyPVwie3sgJ0VYUE9SVC5ESUFMT0cuRklMRV9OQU1FLlBMQUNFSE9MREVSJyB8IG9UcmFuc2xhdGUgfX1cIiAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZGlhbG9nLXRpdGxlc1wiPnt7J0VYUE9SVC5ESUFMT0cuT1JJRU5UQVRJT04nfG9UcmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgbmFtZT1cIk9yaWVudGF0aW9uXCIgWyhuZ01vZGVsKV09XCJ2ZXJ0aWNhbFwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMnB4XCIgW2Rpc2FibGVkXT1cInNlbGVjdGVkRXhwb3J0Rm9ybWF0ICE9PSAncGRmJ1wiPlxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb3JpZW50YXRpb24gb2Ygb3JpZW50YXRpb25zXCIgbmFtZT1cIk9yaWVudGF0aW9uXCIgW3ZhbHVlXT1cIm9yaWVudGF0aW9uLnZhbHVlXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJ2ZXJ0aWNhbCA9PT0gb3JpZW50YXRpb24udmFsdWVcIj5cbiAgICAgICAgICB7eyBvcmllbnRhdGlvbi50ZXh0IHwgb1RyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkaWFsb2ctdGl0bGVzXCI+e3snRVhQT1JULkRJQUxPRy5DT0xVTU5TJ3xvVHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICA8bWF0LXNlbGVjdGlvbi1saXN0IGRlbnNlICNjb2x1bW5zTGlzdCBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cImNvbHVtbnNEYXRhXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ29sdW1ucygkZXZlbnQpXCIgY2xhc3M9XCJjb2x1bW5zXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5zXCIgW2NvbXBhcmVXaXRoXT1cImNvbHVtbnNDb21wYXJlRnVuY3Rpb25cIj5cbiAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zRGF0YVwiIFt2YWx1ZV09XCJjb2x1bW5cIiBjZGtEcmFnPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYXJvdW5kIGNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1MaW5lIGZ4RmxleD5cbiAgICAgICAgICAgICAge3tjb2x1bW4gfCBvVHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXQtbGlzdC1pY29uIGNsYXNzPVwiYnV0dG9uLWVkaXRcIj5kcmFnX2hhbmRsZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImZhbHNlXCIgY2xhc3M9XCJvLWJ1dHRvbi1kZWZhdWx0IGNhbmNlbFwiPnt7ICdDQU5DRUwnIHwgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJleHBvcnRfYnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydCgpXCI+XG4gICAgPG1hdC1pY29uPmlvc19zaGFyZTwvbWF0LWljb24+XG4gICAgPHNwYW4+e3sgJ0VYUE9SVC5ESUFMT0cuRVhQT1JUX0JVVFRPTicgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvblRlbXBsYXRlIGxldC1idXR0b249XCJidXR0b25cIj5cbiAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgby1idXR0b24taWNvblwiICpuZ0lmPVwiYnV0dG9uLmljb24hPT11bmRlZmluZWRcIiBzdHlsZT1cInZlcnRpY2FsLWFsaWduOm1pZGRsZVwiPnt7IGJ1dHRvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgby1idXR0b24taWNvblwiICpuZ0lmPVwiYnV0dG9uLnN2Z0ljb24hPT11bmRlZmluZWRcIiBzdHlsZT1cInZlcnRpY2FsLWFsaWduOm1pZGRsZVwiXG4gICAgW3N2Z0ljb25dPVwiYnV0dG9uLnN2Z0ljb25cIj48L21hdC1pY29uPlxuICB7eyBidXR0b24ub2xhYmVsIHwgb1RyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|