@ajf/material 13.0.0-next.9 → 13.0.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/{report-builder/index.d.ts → barcode/barcode_public_index.d.ts} +1 -1
- package/barcode/index.d.ts +19 -1
- package/barcode/package.json +2 -2
- package/calendar/calendar_public_index.d.ts +4 -0
- package/calendar/index.d.ts +19 -1
- package/calendar/package.json +2 -2
- package/checkbox-group/checkbox-group_public_index.d.ts +4 -0
- package/checkbox-group/index.d.ts +19 -1
- package/checkbox-group/package.json +2 -2
- package/esm2020/barcode/barcode-module.mjs +7 -11
- package/esm2020/barcode/barcode.mjs +6 -6
- package/esm2020/barcode/barcode_public_index.mjs +5 -0
- package/esm2020/barcode/index.mjs +20 -2
- package/esm2020/calendar/calendar-module.mjs +8 -28
- package/esm2020/calendar/calendar.mjs +7 -11
- package/esm2020/calendar/calendar_public_index.mjs +5 -0
- package/esm2020/calendar/index.mjs +20 -2
- package/esm2020/checkbox-group/checkbox-group-item.mjs +6 -6
- package/esm2020/checkbox-group/checkbox-group-module.mjs +8 -27
- package/esm2020/checkbox-group/checkbox-group_public_index.mjs +5 -0
- package/esm2020/checkbox-group/index.mjs +20 -2
- package/esm2020/form-builder/branch-line.mjs +5 -5
- package/esm2020/form-builder/choices-origin-data-source.mjs +1 -1
- package/esm2020/form-builder/choices-origin-editor-dialog.mjs +10 -7
- package/esm2020/form-builder/choices-origin-editor.mjs +4 -4
- package/esm2020/form-builder/condition-editor-dialog.mjs +4 -4
- package/esm2020/form-builder/condition-editor.mjs +12 -11
- package/esm2020/form-builder/form-builder-module.mjs +85 -34
- package/esm2020/form-builder/form-builder-service.mjs +135 -128
- package/esm2020/form-builder/form-builder-utils.mjs +4 -3
- package/esm2020/form-builder/form-builder.mjs +33 -29
- package/esm2020/form-builder/form-builder_public_index.mjs +5 -0
- package/esm2020/form-builder/index.mjs +20 -2
- package/esm2020/form-builder/node-entry.mjs +10 -8
- package/esm2020/form-builder/node-properties.mjs +320 -315
- package/esm2020/form-builder/node-type-entry.mjs +5 -5
- package/esm2020/form-builder/string-identifier-dialog.mjs +8 -10
- package/esm2020/form-builder/validation-condition-editor-dialog.mjs +4 -4
- package/esm2020/form-builder/warning-condition-editor-dialog.mjs +4 -4
- package/esm2020/forms/barcode-field.mjs +6 -6
- package/esm2020/forms/boolean-field.mjs +6 -6
- package/esm2020/forms/date-field.mjs +5 -5
- package/esm2020/forms/date-input-field.mjs +6 -6
- package/esm2020/forms/empty-field.mjs +6 -6
- package/esm2020/forms/field-service.mjs +45 -45
- package/esm2020/forms/field-warning-dialog.mjs +4 -4
- package/esm2020/forms/field.mjs +5 -5
- package/esm2020/forms/form.mjs +5 -5
- package/esm2020/forms/forms-module.mjs +119 -43
- package/esm2020/forms/forms_public_index.mjs +5 -0
- package/esm2020/forms/index.mjs +20 -2
- package/esm2020/forms/input-field.mjs +5 -5
- package/esm2020/forms/multiple-choice-field.mjs +6 -6
- package/esm2020/forms/range-field.mjs +6 -6
- package/esm2020/forms/single-choice-field.mjs +6 -6
- package/esm2020/forms/table-field.mjs +6 -6
- package/esm2020/forms/text-field.mjs +5 -5
- package/esm2020/forms/time-field.mjs +6 -6
- package/esm2020/forms/video-url-field.mjs +5 -5
- package/esm2020/forms/warning-alert-service.mjs +4 -4
- package/esm2020/image/image-module.mjs +8 -19
- package/esm2020/image/image.mjs +5 -5
- package/esm2020/image/image_public_index.mjs +5 -0
- package/esm2020/image/index.mjs +20 -2
- package/esm2020/monaco-editor/autocomplete-singleton-model.mjs +3 -2
- package/esm2020/monaco-editor/editor-options-model.mjs +1 -1
- package/esm2020/monaco-editor/index.mjs +20 -2
- package/esm2020/monaco-editor/monaco-editor-module.mjs +7 -11
- package/esm2020/monaco-editor/monaco-editor.mjs +6 -6
- package/esm2020/monaco-editor/monaco-editor_public_index.mjs +5 -0
- package/esm2020/node-icon/index.mjs +20 -2
- package/esm2020/node-icon/node-icon-module.mjs +8 -19
- package/esm2020/node-icon/node-icon.mjs +4 -4
- package/esm2020/node-icon/node-icon_public_index.mjs +5 -0
- package/esm2020/page-slider/index.mjs +20 -2
- package/esm2020/page-slider/page-slider-module.mjs +8 -14
- package/esm2020/page-slider/page-slider.mjs +5 -5
- package/esm2020/page-slider/page-slider_public_index.mjs +5 -0
- package/esm2020/reports/chart-widget.mjs +5 -5
- package/esm2020/reports/filter-widget.mjs +71 -0
- package/esm2020/reports/formula-widget.mjs +5 -5
- package/esm2020/reports/image-container-widget.mjs +5 -5
- package/esm2020/reports/image-widget.mjs +5 -5
- package/esm2020/reports/index.mjs +20 -2
- package/esm2020/reports/map-widget.mjs +5 -5
- package/esm2020/reports/page-break-widget.mjs +5 -5
- package/esm2020/reports/public-api.mjs +2 -1
- package/esm2020/reports/report.mjs +5 -5
- package/esm2020/reports/reports-module.mjs +15 -12
- package/esm2020/reports/reports_public_index.mjs +5 -0
- package/esm2020/reports/table-widget.mjs +6 -6
- package/esm2020/reports/text-widget.mjs +5 -5
- package/esm2020/reports/widget.mjs +19 -16
- package/esm2020/time/index.mjs +20 -2
- package/esm2020/time/time-module.mjs +8 -22
- package/esm2020/time/time.mjs +6 -6
- package/esm2020/time/time_public_index.mjs +5 -0
- package/fesm2015/barcode.mjs +32 -14
- package/fesm2015/barcode.mjs.map +1 -1
- package/fesm2015/calendar.mjs +34 -36
- package/fesm2015/calendar.mjs.map +1 -1
- package/fesm2015/checkbox-group.mjs +33 -30
- package/fesm2015/checkbox-group.mjs.map +1 -1
- package/fesm2015/form-builder.mjs +638 -544
- package/fesm2015/form-builder.mjs.map +1 -1
- package/fesm2015/forms.mjs +235 -137
- package/fesm2015/forms.mjs.map +1 -1
- package/fesm2015/image.mjs +32 -21
- package/fesm2015/image.mjs.map +1 -1
- package/fesm2015/monaco-editor.mjs +34 -15
- package/fesm2015/monaco-editor.mjs.map +1 -1
- package/fesm2015/node-icon.mjs +32 -21
- package/fesm2015/node-icon.mjs.map +1 -1
- package/fesm2015/page-slider.mjs +32 -16
- package/fesm2015/page-slider.mjs.map +1 -1
- package/fesm2015/reports.mjs +156 -66
- package/fesm2015/reports.mjs.map +1 -1
- package/fesm2015/time.mjs +33 -25
- package/fesm2015/time.mjs.map +1 -1
- package/fesm2020/barcode.mjs +32 -14
- package/fesm2020/barcode.mjs.map +1 -1
- package/fesm2020/calendar.mjs +34 -36
- package/fesm2020/calendar.mjs.map +1 -1
- package/fesm2020/checkbox-group.mjs +33 -30
- package/fesm2020/checkbox-group.mjs.map +1 -1
- package/fesm2020/form-builder.mjs +638 -544
- package/fesm2020/form-builder.mjs.map +1 -1
- package/fesm2020/forms.mjs +235 -137
- package/fesm2020/forms.mjs.map +1 -1
- package/fesm2020/image.mjs +32 -21
- package/fesm2020/image.mjs.map +1 -1
- package/fesm2020/monaco-editor.mjs +34 -15
- package/fesm2020/monaco-editor.mjs.map +1 -1
- package/fesm2020/node-icon.mjs +32 -21
- package/fesm2020/node-icon.mjs.map +1 -1
- package/fesm2020/page-slider.mjs +32 -16
- package/fesm2020/page-slider.mjs.map +1 -1
- package/fesm2020/reports.mjs +156 -66
- package/fesm2020/reports.mjs.map +1 -1
- package/fesm2020/time.mjs +33 -25
- package/fesm2020/time.mjs.map +1 -1
- package/form-builder/form-builder_public_index.d.ts +4 -0
- package/form-builder/index.d.ts +19 -1
- package/form-builder/node-properties.d.ts +1 -0
- package/form-builder/package.json +2 -2
- package/forms/forms_public_index.d.ts +4 -0
- package/forms/index.d.ts +19 -1
- package/forms/package.json +2 -2
- package/image/image_public_index.d.ts +4 -0
- package/image/index.d.ts +19 -1
- package/image/package.json +2 -2
- package/monaco-editor/index.d.ts +19 -1
- package/monaco-editor/monaco-editor_public_index.d.ts +4 -0
- package/monaco-editor/package.json +2 -2
- package/node-icon/index.d.ts +19 -1
- package/node-icon/node-icon_public_index.d.ts +4 -0
- package/node-icon/package.json +2 -2
- package/package.json +26 -36
- package/page-slider/index.d.ts +19 -1
- package/page-slider/package.json +2 -2
- package/page-slider/page-slider_public_index.d.ts +4 -0
- package/reports/filter-widget.d.ts +37 -0
- package/reports/index.d.ts +19 -1
- package/reports/package.json +2 -2
- package/reports/public-api.d.ts +1 -0
- package/reports/reports-module.d.ts +21 -19
- package/reports/reports_public_index.d.ts +4 -0
- package/time/index.d.ts +19 -1
- package/time/package.json +2 -2
- package/time/time_public_index.d.ts +4 -0
- package/esm2020/report-builder/column.mjs +0 -76
- package/esm2020/report-builder/condition-editor.mjs +0 -162
- package/esm2020/report-builder/content.mjs +0 -256
- package/esm2020/report-builder/custom-widget-dialog.mjs +0 -50
- package/esm2020/report-builder/custom-widget-toolbar-button.mjs +0 -67
- package/esm2020/report-builder/custom-widgets-toolbar.mjs +0 -124
- package/esm2020/report-builder/forms-analyzer-dialog.mjs +0 -328
- package/esm2020/report-builder/forms-analyzer.mjs +0 -244
- package/esm2020/report-builder/image-filter.mjs +0 -38
- package/esm2020/report-builder/image-group.mjs +0 -112
- package/esm2020/report-builder/index.mjs +0 -5
- package/esm2020/report-builder/models.mjs +0 -23
- package/esm2020/report-builder/operations.mjs +0 -23
- package/esm2020/report-builder/properties.mjs +0 -761
- package/esm2020/report-builder/public-api.mjs +0 -26
- package/esm2020/report-builder/quill-editor.mjs +0 -307
- package/esm2020/report-builder/renderer-widget.mjs +0 -243
- package/esm2020/report-builder/report-builder-drag-data.mjs +0 -23
- package/esm2020/report-builder/report-builder-module.mjs +0 -155
- package/esm2020/report-builder/report-builder-service.mjs +0 -1690
- package/esm2020/report-builder/report-builder.mjs +0 -51
- package/esm2020/report-builder/theme-color-dialog.mjs +0 -67
- package/esm2020/report-builder/theme-color.mjs +0 -196
- package/esm2020/report-builder/tokens.mjs +0 -24
- package/esm2020/report-builder/toolbar-dialog.mjs +0 -54
- package/esm2020/report-builder/toolbar.mjs +0 -91
- package/esm2020/report-builder/utils.mjs +0 -48
- package/esm2020/report-builder/widget-toolbar-button.mjs +0 -46
- package/esm2020/report-builder/widgets-row-buttons.mjs +0 -136
- package/esm2020/report-builder/widgets-toolbar.mjs +0 -80
- package/fesm2015/report-builder.mjs +0 -5184
- package/fesm2015/report-builder.mjs.map +0 -1
- package/fesm2020/report-builder.mjs +0 -5182
- package/fesm2020/report-builder.mjs.map +0 -1
- package/report-builder/_report-builder.scss +0 -0
- package/report-builder/column.d.ts +0 -66
- package/report-builder/condition-editor.d.ts +0 -70
- package/report-builder/content.d.ts +0 -145
- package/report-builder/custom-widget-dialog.d.ts +0 -13
- package/report-builder/custom-widget-toolbar-button.d.ts +0 -48
- package/report-builder/custom-widgets-toolbar.d.ts +0 -74
- package/report-builder/forms-analyzer-dialog.d.ts +0 -94
- package/report-builder/forms-analyzer.d.ts +0 -105
- package/report-builder/image-filter.d.ts +0 -29
- package/report-builder/image-group.d.ts +0 -72
- package/report-builder/models.d.ts +0 -43
- package/report-builder/operations.d.ts +0 -45
- package/report-builder/package.json +0 -9
- package/report-builder/properties.d.ts +0 -368
- package/report-builder/public-api.d.ts +0 -26
- package/report-builder/quill-editor.d.ts +0 -116
- package/report-builder/renderer-widget.d.ts +0 -83
- package/report-builder/report-builder-drag-data.d.ts +0 -32
- package/report-builder/report-builder-module.d.ts +0 -52
- package/report-builder/report-builder-service.d.ts +0 -725
- package/report-builder/report-builder.d.ts +0 -39
- package/report-builder/theme-color-dialog.d.ts +0 -45
- package/report-builder/theme-color.d.ts +0 -111
- package/report-builder/tokens.d.ts +0 -24
- package/report-builder/toolbar-dialog.d.ts +0 -12
- package/report-builder/toolbar.d.ts +0 -30
- package/report-builder/utils.d.ts +0 -29
- package/report-builder/widget-toolbar-button.d.ts +0 -31
- package/report-builder/widgets-row-buttons.d.ts +0 -60
- package/report-builder/widgets-toolbar.d.ts +0 -26
|
@@ -1,761 +0,0 @@
|
|
|
1
|
-
import { AjfAggregationType, AjfWidgetType } from '@ajf/core/reports';
|
|
2
|
-
import { deepCopy } from '@ajf/core/utils';
|
|
3
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, ViewEncapsulation } from '@angular/core';
|
|
4
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
5
|
-
import { Subscription } from 'rxjs';
|
|
6
|
-
import { distinctUntilChanged, filter, map, startWith, withLatestFrom } from 'rxjs/operators';
|
|
7
|
-
import { AjfReportBuilderFormsAnalyzerDialog } from './forms-analyzer-dialog';
|
|
8
|
-
import { AjfReportBuilderService } from './report-builder-service';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/material/dialog";
|
|
11
|
-
import * as i2 from "./report-builder-service";
|
|
12
|
-
import * as i3 from "@angular/material/button";
|
|
13
|
-
import * as i4 from "@angular/material/icon";
|
|
14
|
-
import * as i5 from "@angular/material/button-toggle";
|
|
15
|
-
import * as i6 from "@angular/material/tabs";
|
|
16
|
-
import * as i7 from "./theme-color";
|
|
17
|
-
import * as i8 from "@angular/material/grid-list";
|
|
18
|
-
import * as i9 from "@angular/material/slider";
|
|
19
|
-
import * as i10 from "@angular/material/form-field";
|
|
20
|
-
import * as i11 from "@angular/material/select";
|
|
21
|
-
import * as i12 from "@angular/material/core";
|
|
22
|
-
import * as i13 from "@angular/material/toolbar";
|
|
23
|
-
import * as i14 from "./image-group";
|
|
24
|
-
import * as i15 from "./forms-analyzer";
|
|
25
|
-
import * as i16 from "./quill-editor";
|
|
26
|
-
import * as i17 from "@angular/material/card";
|
|
27
|
-
import * as i18 from "@angular/material/list";
|
|
28
|
-
import * as i19 from "./condition-editor";
|
|
29
|
-
import * as i20 from "@angular/common";
|
|
30
|
-
import * as i21 from "@angular/material/tooltip";
|
|
31
|
-
import * as i22 from "@angular/forms";
|
|
32
|
-
import * as i23 from "@ngneat/transloco";
|
|
33
|
-
export class AjfReportBuilderProperties {
|
|
34
|
-
constructor(_dialog, _service) {
|
|
35
|
-
this._dialog = _dialog;
|
|
36
|
-
this._service = _service;
|
|
37
|
-
/**
|
|
38
|
-
* true when the first time chart type is setted
|
|
39
|
-
*
|
|
40
|
-
* @memberOf AjfReportBuilderProperties
|
|
41
|
-
*/
|
|
42
|
-
this.initChartType = false;
|
|
43
|
-
/**
|
|
44
|
-
* the current widget
|
|
45
|
-
*
|
|
46
|
-
* @memberOf AjfReportBuilderProperties
|
|
47
|
-
*/
|
|
48
|
-
this.currentWidget = null;
|
|
49
|
-
/**
|
|
50
|
-
* this array contains the forms exploited for generate data labels
|
|
51
|
-
*
|
|
52
|
-
* @memberOf AjfReportBuilderProperties
|
|
53
|
-
*/
|
|
54
|
-
this.forms = [];
|
|
55
|
-
this.colors = [];
|
|
56
|
-
/**
|
|
57
|
-
* FAKE DATA
|
|
58
|
-
*/
|
|
59
|
-
this.formsJson = { forms: [] };
|
|
60
|
-
/**
|
|
61
|
-
* WIDGET
|
|
62
|
-
*/
|
|
63
|
-
this.widgetName = '';
|
|
64
|
-
this.marginExpanded = false;
|
|
65
|
-
this.paddingExpanded = false;
|
|
66
|
-
this.borderWidthExpanded = false;
|
|
67
|
-
this.borderRadiusExpanded = false;
|
|
68
|
-
this.backgroundColor = '#127bdc';
|
|
69
|
-
this.styleBackgroundColor = 'rgb(255,255,255,0)';
|
|
70
|
-
this.borderColor = '#127bdc';
|
|
71
|
-
this.styleColor = 'rgb(0,0,0,0)';
|
|
72
|
-
this.align = [false, 'center', 'right', 'justify'];
|
|
73
|
-
this.fonts = [
|
|
74
|
-
false, 'blackr', 'black-italic', 'bold', 'bold-condensed', 'bold-condensed-italic',
|
|
75
|
-
'bold-italic', 'condensed', 'condensed-italic', 'italic', 'light', 'light-italic', 'medium',
|
|
76
|
-
'medium-italic', 'thinr', 'thin-italic'
|
|
77
|
-
];
|
|
78
|
-
this.currentModule = {};
|
|
79
|
-
this.quillModules = {
|
|
80
|
-
toolbar: [
|
|
81
|
-
['formula'], ['bold', 'italic', 'underline', 'strike'],
|
|
82
|
-
// ['blockquote', 'code-block'],
|
|
83
|
-
[{ 'header': 1 }, { 'header': 2 }],
|
|
84
|
-
[{ 'list': 'ordered' }, { 'list': 'bullet' }],
|
|
85
|
-
[{ 'script': 'sub' }, { 'script': 'super' }],
|
|
86
|
-
// [{ 'indent': '-1'}, { 'indent': '+1' }], // outdent/indent
|
|
87
|
-
// [{ 'direction': 'rtl' }], // text direction
|
|
88
|
-
[{ 'size': ['small', false, 'large', 'huge'] }],
|
|
89
|
-
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
|
|
90
|
-
[{ 'color': this.colors }, { 'background': this.colors }],
|
|
91
|
-
[{ 'font': this.fonts }], [{ 'align': this.align }],
|
|
92
|
-
['clean'], // remove formatting button
|
|
93
|
-
// ['link', 'class', 'video'] // link and image, video
|
|
94
|
-
]
|
|
95
|
-
};
|
|
96
|
-
this.chartBorderColor = [];
|
|
97
|
-
this.chartBorderWidth = 3;
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
100
|
-
* IMAGE
|
|
101
|
-
*/
|
|
102
|
-
this.imageUrl = 'https://angular.io/resources/images/logos/angular2/angular.png';
|
|
103
|
-
/**
|
|
104
|
-
*
|
|
105
|
-
* TEXT
|
|
106
|
-
*/
|
|
107
|
-
this.htmlText = '';
|
|
108
|
-
/**
|
|
109
|
-
* these variables indicate that the user want to change section
|
|
110
|
-
*/
|
|
111
|
-
this.reportStyles = false;
|
|
112
|
-
this.sectionStyles = false;
|
|
113
|
-
this.widgetStyles = true;
|
|
114
|
-
this.sectionColor = false;
|
|
115
|
-
this.widgetColor = false;
|
|
116
|
-
this.visibilitySection = false;
|
|
117
|
-
this.currentColor = '';
|
|
118
|
-
this._icon = null;
|
|
119
|
-
this.iconSet = { 'icon': 'true', 'title': 'report', 'data': null };
|
|
120
|
-
this.flagSet = {
|
|
121
|
-
'icon': 'false',
|
|
122
|
-
'class': ['flag-icon'],
|
|
123
|
-
'prefixClass': 'flag-icon-',
|
|
124
|
-
'title': 'flags',
|
|
125
|
-
'data': [
|
|
126
|
-
{ 'class': 'dz', 'info': 'Algeria' },
|
|
127
|
-
{ 'class': 'ao', 'info': 'Angola' },
|
|
128
|
-
{ 'class': 'bj', 'info': 'Benin' },
|
|
129
|
-
{ 'class': 'bw', 'info': 'Botswana' },
|
|
130
|
-
{ 'class': 'bf', 'info': 'Burkina Faso' },
|
|
131
|
-
{ 'class': 'bi', 'info': 'Burundi' },
|
|
132
|
-
{ 'class': 'cm', 'info': 'Cameroon' },
|
|
133
|
-
{ 'class': 'cv', 'info': 'Cabo Verde' },
|
|
134
|
-
{ 'class': 'cf', 'info': 'The Central African Republic' },
|
|
135
|
-
{ 'class': 'td', 'info': 'Chad' },
|
|
136
|
-
{ 'class': 'km', 'info': 'The Comoros' },
|
|
137
|
-
{ 'class': 'ci', 'info': 'Cote D\'avoire' },
|
|
138
|
-
{ 'class': 'cd', 'info': 'The Democratic Republic of Congo' },
|
|
139
|
-
{ 'class': 'dj', 'info': 'Dijibouti' },
|
|
140
|
-
{ 'class': 'eg', 'info': 'Egypt' },
|
|
141
|
-
{ 'class': 'gq', 'info': 'Equatorial Guinea' },
|
|
142
|
-
{ 'class': 'er', 'info': 'Eritrea' },
|
|
143
|
-
{ 'class': 'et', 'info': 'Ethiopia' },
|
|
144
|
-
{ 'class': 'tf', 'info': 'French Southern Territories' },
|
|
145
|
-
{ 'class': 'ga', 'info': 'Gabon' },
|
|
146
|
-
{ 'class': 'gm', 'info': 'The Gambia' },
|
|
147
|
-
{ 'class': 'gh', 'info': 'Ghana' },
|
|
148
|
-
{ 'class': 'gn', 'info': 'Guinea' },
|
|
149
|
-
{ 'class': 'gw', 'info': 'Guinea-Bissau' },
|
|
150
|
-
{ 'class': 'ke', 'info': 'Kenya' },
|
|
151
|
-
{ 'class': 'ls', 'info': 'Leshotho' },
|
|
152
|
-
{ 'class': 'lr', 'info': 'Liberia' },
|
|
153
|
-
{ 'class': 'ly', 'info': 'Libya' },
|
|
154
|
-
{ 'class': 'mg', 'info': 'Madagascar' },
|
|
155
|
-
{ 'class': 'mw', 'info': 'Malawy' },
|
|
156
|
-
{ 'class': 'ml', 'info': 'Mali' },
|
|
157
|
-
{ 'class': 'mr', 'info': 'Mauritania' },
|
|
158
|
-
{ 'class': 'mu', 'info': 'Mauritius' },
|
|
159
|
-
{ 'class': 'yt', 'info': 'Mayotte' },
|
|
160
|
-
{ 'class': 'ma', 'info': 'Marocco' },
|
|
161
|
-
{ 'class': 'mz', 'info': 'Mozambique' },
|
|
162
|
-
{ 'class': 'na', 'info': 'Namibia' },
|
|
163
|
-
{ 'class': 'ne', 'info': 'Niger' },
|
|
164
|
-
{ 'class': 'ng', 'info': 'Nigeria' },
|
|
165
|
-
{ 'class': 'cg', 'info': 'Republic of the Congo' },
|
|
166
|
-
{ 'class': 'rw', 'info': 'Rwnda' },
|
|
167
|
-
{ 'class': 're', 'info': 'rèunion' },
|
|
168
|
-
{ 'class': 'sh', 'info': 'Saint Helena, Ascension and Tristan da Cunha' },
|
|
169
|
-
{ 'class': 'st', 'info': 'Sao Tome and Principe' },
|
|
170
|
-
{ 'class': 'sn', 'info': 'Senegal' },
|
|
171
|
-
{ 'class': 'sc', 'info': 'Seychelles' },
|
|
172
|
-
{ 'class': 'sl', 'info': 'Sierra Leone' },
|
|
173
|
-
{ 'class': 'so', 'info': 'Somalia' },
|
|
174
|
-
{ 'class': 'za', 'info': 'South Africa' },
|
|
175
|
-
{ 'class': 'ss', 'info': 'South Sudan' },
|
|
176
|
-
{ 'class': 'sd', 'info': 'Sudan' },
|
|
177
|
-
{ 'class': 'sz', 'info': 'Swaziland' },
|
|
178
|
-
{ 'class': 'tz', 'info': 'Tanzania' },
|
|
179
|
-
{ 'class': 'tg', 'info': 'Togo' },
|
|
180
|
-
{ 'class': 'tn', 'info': 'Tunisia' },
|
|
181
|
-
{ 'class': 'ug', 'info': 'Uganda' },
|
|
182
|
-
{ 'class': 'eh', 'info': 'Western Sahara' },
|
|
183
|
-
{ 'class': 'zm', 'info': 'Zambia' },
|
|
184
|
-
{ 'class': 'zw', 'info': 'Zimbawe' },
|
|
185
|
-
{ 'class': 'iq', 'info': 'Iraq' },
|
|
186
|
-
{ 'class': 'lb', 'info': 'Lebanon' },
|
|
187
|
-
{ 'class': 'bd', 'info': 'Bangladesh' },
|
|
188
|
-
{ 'class': 'ir', 'info': 'Iran (Islamic Republic of)' },
|
|
189
|
-
{ 'class': 'my', 'info': 'Malaysia' },
|
|
190
|
-
{ 'class': 'np', 'info': 'Nepal' },
|
|
191
|
-
{ 'class': 'pk', 'info': 'Pakistan' },
|
|
192
|
-
{ 'class': 'th', 'info': 'Thailand' },
|
|
193
|
-
{ 'class': 'jo', 'info': 'Jordan' },
|
|
194
|
-
{ 'class': 'ye', 'info': 'Yemen' }
|
|
195
|
-
]
|
|
196
|
-
};
|
|
197
|
-
this._currentWidgetSub = Subscription.EMPTY;
|
|
198
|
-
this._formsSub = Subscription.EMPTY;
|
|
199
|
-
this._colorSub = Subscription.EMPTY;
|
|
200
|
-
this._headerStyleSub = Subscription.EMPTY;
|
|
201
|
-
this._contentStylesSub = Subscription.EMPTY;
|
|
202
|
-
this._footerStylesSub = Subscription.EMPTY;
|
|
203
|
-
this._originSub = Subscription.EMPTY;
|
|
204
|
-
this._stylesUpdatesSubs = Subscription.EMPTY;
|
|
205
|
-
this._updateWidgetMarginEvt = new EventEmitter();
|
|
206
|
-
this._updateWidgetPaddingEvt = new EventEmitter();
|
|
207
|
-
this._updateWidgetBorderWidthEvt = new EventEmitter();
|
|
208
|
-
this._updateWidgetBorderRadiusEvt = new EventEmitter();
|
|
209
|
-
this.tabValue = 'backgroundColor';
|
|
210
|
-
this.setForms();
|
|
211
|
-
this.iconSet.data = Object.keys(_service.iconSets).filter(x => x != 'ajf-icon').map(i => {
|
|
212
|
-
return { name: i, icons: _service.iconSets[i] };
|
|
213
|
-
});
|
|
214
|
-
this._headerStyleSub = this._service.headerStyles.subscribe(s => {
|
|
215
|
-
if (s['background-color'] != null) {
|
|
216
|
-
this.styleBackgroundColor = s['background-color'];
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
this._contentStylesSub = this._service.contentStyles.subscribe(s => {
|
|
220
|
-
if (s['background-color'] != null) {
|
|
221
|
-
this.styleBackgroundColor = s['background-color'];
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
this._footerStylesSub = this._service.footerStyles.subscribe(s => {
|
|
225
|
-
if (s['background-color'] != null) {
|
|
226
|
-
this.styleBackgroundColor = s['background-color'];
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
this._originSub = this._service.origin.subscribe(s => {
|
|
230
|
-
this.origin = s;
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
get currentLayoutWidget() {
|
|
234
|
-
return this.currentWidget;
|
|
235
|
-
}
|
|
236
|
-
get currentTextWidget() {
|
|
237
|
-
return this.currentWidget;
|
|
238
|
-
}
|
|
239
|
-
get icon() {
|
|
240
|
-
return this._icon;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
*
|
|
244
|
-
* UTILS
|
|
245
|
-
*/
|
|
246
|
-
/**
|
|
247
|
-
* return a number value
|
|
248
|
-
*
|
|
249
|
-
* @param value
|
|
250
|
-
*
|
|
251
|
-
* @memberOf AjfReportBuilderProperties
|
|
252
|
-
*/
|
|
253
|
-
toNumber(value) {
|
|
254
|
-
let numberPattern = /^(-)?\d+/g;
|
|
255
|
-
if (value == null) {
|
|
256
|
-
return 0;
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
const matches = value.match(numberPattern);
|
|
260
|
-
if (matches == null || matches.length == 0) {
|
|
261
|
-
return 0;
|
|
262
|
-
}
|
|
263
|
-
return Number(matches[0]);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
toNumberArray(value) {
|
|
267
|
-
if (value == null) {
|
|
268
|
-
return [];
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
return (value || '')
|
|
272
|
-
.replace('px', '')
|
|
273
|
-
.split(' ')
|
|
274
|
-
.filter(v => v !== '' && v != null)
|
|
275
|
-
.map(v => this.toNumber(v));
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
fillPxNumberArray(value) {
|
|
279
|
-
const vl = value.length;
|
|
280
|
-
switch (vl) {
|
|
281
|
-
case 0:
|
|
282
|
-
return [0, 0, 0, 0];
|
|
283
|
-
case 1:
|
|
284
|
-
const v = value[0];
|
|
285
|
-
return [v, v, v, v];
|
|
286
|
-
case 2:
|
|
287
|
-
const v21 = value[0];
|
|
288
|
-
const v22 = value[1];
|
|
289
|
-
return [v21, v22, v21, v22];
|
|
290
|
-
case 3:
|
|
291
|
-
const v31 = value[0];
|
|
292
|
-
const v32 = value[1];
|
|
293
|
-
const v33 = value[2];
|
|
294
|
-
return [v31, v32, v33, v32];
|
|
295
|
-
default:
|
|
296
|
-
return value;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
percent(value) {
|
|
300
|
-
let temp = this.roundTo(value * 100, 3);
|
|
301
|
-
return temp;
|
|
302
|
-
}
|
|
303
|
-
roundTo(value, decimalPositions) {
|
|
304
|
-
let i = value * Math.pow(10, decimalPositions);
|
|
305
|
-
i = Math.floor(i);
|
|
306
|
-
return i / Math.pow(10, decimalPositions);
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* call to service to set the forms
|
|
310
|
-
*
|
|
311
|
-
* @memberOf AjfReportBuilderProperties
|
|
312
|
-
*/
|
|
313
|
-
setForms() {
|
|
314
|
-
let forms = [];
|
|
315
|
-
try {
|
|
316
|
-
for (let i = 0; i < this.formsJson.forms.length; i++) {
|
|
317
|
-
forms.push(deepCopy(this.formsJson.forms[i]));
|
|
318
|
-
}
|
|
319
|
-
this._service.setReportForms(forms);
|
|
320
|
-
}
|
|
321
|
-
catch (e) {
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* call to service to set the width of the idx column of layout widget
|
|
326
|
-
*
|
|
327
|
-
* @param col
|
|
328
|
-
* @param idx
|
|
329
|
-
*
|
|
330
|
-
* @memberOf AjfReportBuilderProperties
|
|
331
|
-
*/
|
|
332
|
-
instantColumnValue(col, idx) {
|
|
333
|
-
if (col === null) {
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
this._service.instantColumnValue(col, idx);
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* force copy of style
|
|
340
|
-
*
|
|
341
|
-
* @memberOf AjfReportBuilderProperties
|
|
342
|
-
*/
|
|
343
|
-
// TODO delete this
|
|
344
|
-
setStyle() {
|
|
345
|
-
if (this.currentWidget == null) {
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
this.currentWidget.styles = deepCopy(this.currentWidget.styles);
|
|
349
|
-
this._service.updateCurrentWidget(this.currentWidget);
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* call to service to add new style to widget
|
|
353
|
-
*
|
|
354
|
-
* @param label
|
|
355
|
-
* @param value
|
|
356
|
-
*
|
|
357
|
-
* @memberOf AjfReportBuilderProperties
|
|
358
|
-
*/
|
|
359
|
-
setWidgetStyles(label, value) {
|
|
360
|
-
this._service.setWidgetStyles(label, value);
|
|
361
|
-
this.currentColor = value;
|
|
362
|
-
this.setStyle();
|
|
363
|
-
}
|
|
364
|
-
setWidgetMargin(idx, value) {
|
|
365
|
-
this._updateWidgetMarginEvt.emit({ idx, value });
|
|
366
|
-
}
|
|
367
|
-
setWidgetPadding(idx, value) {
|
|
368
|
-
this._updateWidgetPaddingEvt.emit({ idx, value });
|
|
369
|
-
}
|
|
370
|
-
setWidgetBorderWidth(idx, value) {
|
|
371
|
-
this._updateWidgetBorderWidthEvt.emit({ idx, value });
|
|
372
|
-
}
|
|
373
|
-
setWidgetBorderRadius(idx, value) {
|
|
374
|
-
this._updateWidgetBorderRadiusEvt.emit({ idx, value });
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* call to service to add new style to section
|
|
378
|
-
*
|
|
379
|
-
* @param label
|
|
380
|
-
* @param value
|
|
381
|
-
*
|
|
382
|
-
* @memberOf AjfReportBuilderProperties
|
|
383
|
-
*/
|
|
384
|
-
setSectionStyles(label, value) {
|
|
385
|
-
this._service.setSectionStyles(this.origin, label, value);
|
|
386
|
-
this.styleColor = value;
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* call to service to add new style to report
|
|
390
|
-
*
|
|
391
|
-
* @param label
|
|
392
|
-
* @param value
|
|
393
|
-
*
|
|
394
|
-
* @memberOf AjfReportBuilderProperties
|
|
395
|
-
*/
|
|
396
|
-
setReportStyles(label, value) {
|
|
397
|
-
this._service.setReportStyles(label, value);
|
|
398
|
-
this.styleBackgroundColor = value;
|
|
399
|
-
}
|
|
400
|
-
/**
|
|
401
|
-
* add custom color
|
|
402
|
-
*
|
|
403
|
-
*
|
|
404
|
-
* @memberOf AjfReportBuilderProperties
|
|
405
|
-
*/
|
|
406
|
-
addCustomColor() {
|
|
407
|
-
this._service.addCustomColor(this.currentColor);
|
|
408
|
-
this._service.updateCurrentWidget(this.currentWidget);
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* get the module exploit to quill text editor
|
|
412
|
-
*
|
|
413
|
-
* @returns
|
|
414
|
-
*
|
|
415
|
-
* @memberOf AjfReportBuilderProperties
|
|
416
|
-
*/
|
|
417
|
-
getModule() {
|
|
418
|
-
return this.quillModules;
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* true is the input type value is equal to current widget type
|
|
422
|
-
*
|
|
423
|
-
* @param value
|
|
424
|
-
* @returns
|
|
425
|
-
*
|
|
426
|
-
* @memberOf AjfReportBuilderProperties
|
|
427
|
-
*/
|
|
428
|
-
isChartTypeSelected(value) {
|
|
429
|
-
if (this.initChartType == false) {
|
|
430
|
-
return false;
|
|
431
|
-
}
|
|
432
|
-
const myObj = this.currentWidget;
|
|
433
|
-
if (value === myObj.chartType) {
|
|
434
|
-
return true;
|
|
435
|
-
}
|
|
436
|
-
else {
|
|
437
|
-
return false;
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
/* layout functions */
|
|
441
|
-
/**
|
|
442
|
-
* call to service to add a column to current layout widget
|
|
443
|
-
*
|
|
444
|
-
*
|
|
445
|
-
* @memberOf AjfReportBuilderProperties
|
|
446
|
-
*/
|
|
447
|
-
addColumn() {
|
|
448
|
-
this._service.addColumn();
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* call to service to add a obj to current layout widget
|
|
452
|
-
*
|
|
453
|
-
* @param idx
|
|
454
|
-
*
|
|
455
|
-
* @memberOf AjfReportBuilderProperties
|
|
456
|
-
*/
|
|
457
|
-
fixedColumn(idx) {
|
|
458
|
-
this._service.fixedColumn(idx);
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* call to service to remove obj of current layout widget
|
|
462
|
-
*
|
|
463
|
-
* @param idx
|
|
464
|
-
*
|
|
465
|
-
* @memberOf AjfReportBuilderProperties
|
|
466
|
-
*/
|
|
467
|
-
unfixedColumn(idx) {
|
|
468
|
-
this._service.remove('unfixedColumn', idx);
|
|
469
|
-
}
|
|
470
|
-
/* image functions */
|
|
471
|
-
/**
|
|
472
|
-
* call to service to set image url
|
|
473
|
-
*
|
|
474
|
-
*
|
|
475
|
-
* @memberOf AjfReportBuilderProperties
|
|
476
|
-
*/
|
|
477
|
-
setImageUrl() {
|
|
478
|
-
this._service.setImageUrl(this.imageUrl);
|
|
479
|
-
}
|
|
480
|
-
setIcon(icon) {
|
|
481
|
-
this._icon = icon;
|
|
482
|
-
this._service.setIcon(icon);
|
|
483
|
-
}
|
|
484
|
-
/* chart functions */
|
|
485
|
-
/**
|
|
486
|
-
* call to service to set the type of chart
|
|
487
|
-
*
|
|
488
|
-
* @param type
|
|
489
|
-
*
|
|
490
|
-
* @memberOf AjfReportBuilderProperties
|
|
491
|
-
*/
|
|
492
|
-
setChartType(type) {
|
|
493
|
-
this.initChartType = true;
|
|
494
|
-
this._service.setChartType(type);
|
|
495
|
-
}
|
|
496
|
-
setChartBorderColor(value) {
|
|
497
|
-
if (value == null) {
|
|
498
|
-
return;
|
|
499
|
-
}
|
|
500
|
-
this._service.setChartBorderWidth(value);
|
|
501
|
-
}
|
|
502
|
-
setTab(event) {
|
|
503
|
-
if (event.index === 0) {
|
|
504
|
-
this.tabValue = 'backgroundColor';
|
|
505
|
-
}
|
|
506
|
-
else {
|
|
507
|
-
this.tabValue = 'borderColor';
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* call to service to remove background color to current chart
|
|
512
|
-
*
|
|
513
|
-
* @param index
|
|
514
|
-
*
|
|
515
|
-
* @memberOf AjfReportBuilderProperties
|
|
516
|
-
*/
|
|
517
|
-
removeChartBackgroundColor(index) {
|
|
518
|
-
this._service.removeChartBackgroundColor(index);
|
|
519
|
-
}
|
|
520
|
-
/**
|
|
521
|
-
* call to service to remove border color to current chart
|
|
522
|
-
*
|
|
523
|
-
* @param index
|
|
524
|
-
*
|
|
525
|
-
* @memberOf AjfReportBuilderProperties
|
|
526
|
-
*/
|
|
527
|
-
removeChartBorderColor(index) {
|
|
528
|
-
this._service.removeChartBorderColor(index);
|
|
529
|
-
}
|
|
530
|
-
hideMenu() {
|
|
531
|
-
this._service.updateCurrentWidget(null);
|
|
532
|
-
}
|
|
533
|
-
openFormulaDialog(event) {
|
|
534
|
-
this.dialogRef = this._dialog.open(AjfReportBuilderFormsAnalyzerDialog);
|
|
535
|
-
this.dialogRef.componentInstance.aggregation = AjfAggregationType.None;
|
|
536
|
-
this.dialogRef.componentInstance.isFormula = true;
|
|
537
|
-
if (event != null && event.reference != null) {
|
|
538
|
-
this.dialogRef.componentInstance.formula = event.formula;
|
|
539
|
-
this.dialogRef.componentInstance.reference = event.reference;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
ngOnInit() {
|
|
543
|
-
this._formsSub = this._service.reportForms.subscribe(x => {
|
|
544
|
-
this.forms = x || [];
|
|
545
|
-
});
|
|
546
|
-
this._currentWidgetSub = this._service.currentWidget.subscribe(x => {
|
|
547
|
-
if (x != null) {
|
|
548
|
-
if (this.currentWidget !== x) {
|
|
549
|
-
this.currentWidget = x;
|
|
550
|
-
this.widgetName = AjfWidgetType[x.widgetType];
|
|
551
|
-
this.reportStyles = false;
|
|
552
|
-
this.sectionStyles = false;
|
|
553
|
-
this.widgetStyles = false;
|
|
554
|
-
this.sectionColor = false;
|
|
555
|
-
this.widgetColor = false;
|
|
556
|
-
this.visibilitySection = false;
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
else {
|
|
560
|
-
this.currentWidget = null;
|
|
561
|
-
this.widgetName = '';
|
|
562
|
-
}
|
|
563
|
-
});
|
|
564
|
-
this._colorSub = this._service.colors.subscribe(x => {
|
|
565
|
-
if (x && x.length > 0) {
|
|
566
|
-
this.colors = x;
|
|
567
|
-
this.quillModules = {
|
|
568
|
-
toolbar: [
|
|
569
|
-
['bold', 'italic', 'underline', 'strike'],
|
|
570
|
-
// ['blockquote', 'code-block'],
|
|
571
|
-
[{ 'header': 1 }, { 'header': 2 }],
|
|
572
|
-
[{ 'list': 'ordered' }, { 'list': 'bullet' }],
|
|
573
|
-
[{ 'script': 'sub' }, { 'script': 'super' }],
|
|
574
|
-
// [{ 'indent': '-1'}, { 'indent': '+1' }], // outdent/indent
|
|
575
|
-
// [{ 'direction': 'rtl' }], // text direction
|
|
576
|
-
[{ 'size': ['small', false, 'large', 'huge'] }],
|
|
577
|
-
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
|
|
578
|
-
[
|
|
579
|
-
{ 'color': this.colors }, { 'background': this.colors }
|
|
580
|
-
],
|
|
581
|
-
[{ 'font': this.fonts }], [{ 'align': this.align }], ['formula'],
|
|
582
|
-
['clean'], // remove formatting button
|
|
583
|
-
// ['link', 'class', 'video'] // link and image, video
|
|
584
|
-
]
|
|
585
|
-
};
|
|
586
|
-
}
|
|
587
|
-
});
|
|
588
|
-
this.getHTML = this._service.currentWidget.pipe(map((widget) => {
|
|
589
|
-
if (widget != null) {
|
|
590
|
-
const myObj = this.currentWidget;
|
|
591
|
-
return myObj.htmlText;
|
|
592
|
-
}
|
|
593
|
-
return '';
|
|
594
|
-
}), distinctUntilChanged(), startWith('<p><br></p>'));
|
|
595
|
-
this.getHeightWidget = this._service.currentWidget.pipe(filter(x => x != null), map((myObj) => {
|
|
596
|
-
if (myObj != null) {
|
|
597
|
-
let value = this.toNumber(myObj.styles['height']);
|
|
598
|
-
if (value != null || value != null) {
|
|
599
|
-
return value;
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
return undefined;
|
|
603
|
-
}), distinctUntilChanged());
|
|
604
|
-
this.getFontSizeWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
605
|
-
if (myObj != null) {
|
|
606
|
-
return (this.toNumber(myObj.styles['font-size']) || 12);
|
|
607
|
-
}
|
|
608
|
-
return undefined;
|
|
609
|
-
}), distinctUntilChanged());
|
|
610
|
-
this.getFontAlignWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
611
|
-
if (myObj != null) {
|
|
612
|
-
return ((myObj.styles['text-align']) || 'center');
|
|
613
|
-
}
|
|
614
|
-
return undefined;
|
|
615
|
-
}), distinctUntilChanged());
|
|
616
|
-
this.getBorderWidthWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
617
|
-
if (myObj != null) {
|
|
618
|
-
return this.fillPxNumberArray(this.toNumberArray(myObj.styles['border-width']));
|
|
619
|
-
}
|
|
620
|
-
return undefined;
|
|
621
|
-
}), distinctUntilChanged(), startWith([0, 0, 0, 0]));
|
|
622
|
-
this.getBorderWidthWidgetTop =
|
|
623
|
-
this.getBorderWidthWidget.pipe(filter(m => m != null), map(m => m[0]));
|
|
624
|
-
this.getBorderWidthWidgetRight =
|
|
625
|
-
this.getBorderWidthWidget.pipe(filter(m => m != null), map(m => m[1]));
|
|
626
|
-
this.getBorderWidthWidgetBottom =
|
|
627
|
-
this.getBorderWidthWidget.pipe(filter(m => m != null), map(m => m[2]));
|
|
628
|
-
this.getBorderWidthWidgetLeft =
|
|
629
|
-
this.getBorderWidthWidget.pipe(filter(m => m != null), map(m => m[3]));
|
|
630
|
-
this.getBorderRadiusWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
631
|
-
if (myObj != null) {
|
|
632
|
-
return this.fillPxNumberArray(this.toNumberArray(myObj.styles['border-radius']));
|
|
633
|
-
}
|
|
634
|
-
return undefined;
|
|
635
|
-
}), distinctUntilChanged(), startWith([0, 0, 0, 0]));
|
|
636
|
-
this.getBorderRadiusWidgetTopLeft =
|
|
637
|
-
this.getBorderRadiusWidget.pipe(filter(m => m != null), map(m => m[0]));
|
|
638
|
-
this.getBorderRadiusWidgetTopRight =
|
|
639
|
-
this.getBorderRadiusWidget.pipe(filter(m => m != null), map(m => m[1]));
|
|
640
|
-
this.getBorderRadiusWidgetBottomRight =
|
|
641
|
-
this.getBorderRadiusWidget.pipe(filter(m => m != null), map(m => m[2]));
|
|
642
|
-
this.getBorderRadiusWidgetBottomLeft =
|
|
643
|
-
this.getBorderRadiusWidget.pipe(filter(m => m != null), map(m => m[3]));
|
|
644
|
-
this.getMarginWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
645
|
-
if (myObj != null && myObj.styles != null && myObj.styles['margin'] != null) {
|
|
646
|
-
return this.fillPxNumberArray(this.toNumberArray(myObj.styles['margin']));
|
|
647
|
-
}
|
|
648
|
-
return undefined;
|
|
649
|
-
}), distinctUntilChanged(), startWith([0, 0, 0, 0]));
|
|
650
|
-
this.getMarginWidgetTop = this.getMarginWidget.pipe(filter(m => m != null), map(m => m[0]));
|
|
651
|
-
this.getMarginWidgetRight = this.getMarginWidget.pipe(filter(m => m != null), map(m => m[1]));
|
|
652
|
-
this.getMarginWidgetBottom = this.getMarginWidget.pipe(filter(m => m != null), map(m => m[2]));
|
|
653
|
-
this.getMarginWidgetLeft = this.getMarginWidget.pipe(filter(m => m != null), map(m => m[3]));
|
|
654
|
-
this.getPaddingWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
655
|
-
if (myObj != null && myObj.styles != null && myObj.styles['padding'] != null) {
|
|
656
|
-
return this.fillPxNumberArray(this.toNumberArray(myObj.styles['padding']));
|
|
657
|
-
}
|
|
658
|
-
return undefined;
|
|
659
|
-
}), distinctUntilChanged());
|
|
660
|
-
this.getPaddingWidgetTop = this.getPaddingWidget.pipe(filter(m => m != null), map(m => m[0]));
|
|
661
|
-
this.getPaddingWidgetRight =
|
|
662
|
-
this.getPaddingWidget.pipe(filter(m => m != null), map(m => m[1]));
|
|
663
|
-
this.getPaddingWidgetBottom =
|
|
664
|
-
this.getPaddingWidget.pipe(filter(m => m != null), map(m => m[2]));
|
|
665
|
-
this.getPaddingWidgetLeft = this.getPaddingWidget.pipe(filter(m => m != null), map(m => m[3]));
|
|
666
|
-
this.getBackgroundColorWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
667
|
-
if (myObj != null && myObj.styles != null) {
|
|
668
|
-
return myObj.styles['backgroundColor'] || '';
|
|
669
|
-
}
|
|
670
|
-
}), distinctUntilChanged());
|
|
671
|
-
this.getColorWidget = this._service.currentWidget.pipe(map((myObj) => {
|
|
672
|
-
if (myObj != null && myObj.styles != null) {
|
|
673
|
-
return myObj.styles['color'] || '';
|
|
674
|
-
}
|
|
675
|
-
}), distinctUntilChanged());
|
|
676
|
-
this._stylesUpdatesSubs = this._updateWidgetMarginEvt
|
|
677
|
-
.pipe(withLatestFrom(this.getMarginWidget))
|
|
678
|
-
.subscribe(r => {
|
|
679
|
-
if (r == null) {
|
|
680
|
-
return;
|
|
681
|
-
}
|
|
682
|
-
const idx = r[0].idx;
|
|
683
|
-
const value = r[0].value;
|
|
684
|
-
const v = (r[1] || [0, 0, 0, 0]);
|
|
685
|
-
if (v == null || v.length < idx) {
|
|
686
|
-
return;
|
|
687
|
-
}
|
|
688
|
-
v[idx] = value;
|
|
689
|
-
this.setWidgetStyles('margin', v);
|
|
690
|
-
});
|
|
691
|
-
this._stylesUpdatesSubs.add(this._updateWidgetPaddingEvt
|
|
692
|
-
.pipe(withLatestFrom(this.getPaddingWidget))
|
|
693
|
-
.subscribe(r => {
|
|
694
|
-
if (r == null) {
|
|
695
|
-
return;
|
|
696
|
-
}
|
|
697
|
-
const idx = r[0].idx;
|
|
698
|
-
const value = r[0].value;
|
|
699
|
-
const v = (r[1] || [0, 0, 0, 0]);
|
|
700
|
-
if (v == null || v.length < idx) {
|
|
701
|
-
return;
|
|
702
|
-
}
|
|
703
|
-
v[idx] = value;
|
|
704
|
-
this.setWidgetStyles('padding', v);
|
|
705
|
-
}));
|
|
706
|
-
this._stylesUpdatesSubs.add(this._updateWidgetBorderWidthEvt
|
|
707
|
-
.pipe(withLatestFrom(this.getBorderWidthWidget))
|
|
708
|
-
.subscribe(r => {
|
|
709
|
-
if (r == null) {
|
|
710
|
-
return;
|
|
711
|
-
}
|
|
712
|
-
const idx = r[0].idx;
|
|
713
|
-
const value = r[0].value;
|
|
714
|
-
const v = (r[1] || [0, 0, 0, 0]);
|
|
715
|
-
if (v == null || v.length < idx) {
|
|
716
|
-
return;
|
|
717
|
-
}
|
|
718
|
-
v[idx] = value;
|
|
719
|
-
this.setWidgetStyles('border-width', v);
|
|
720
|
-
}));
|
|
721
|
-
this._stylesUpdatesSubs.add(this._updateWidgetBorderRadiusEvt
|
|
722
|
-
.pipe(withLatestFrom(this.getBorderRadiusWidget))
|
|
723
|
-
.subscribe(r => {
|
|
724
|
-
if (r == null) {
|
|
725
|
-
return;
|
|
726
|
-
}
|
|
727
|
-
const idx = r[0].idx;
|
|
728
|
-
const value = r[0].value;
|
|
729
|
-
const v = (r[1] || [0, 0, 0, 0]);
|
|
730
|
-
if (v == null || v.length < idx) {
|
|
731
|
-
return;
|
|
732
|
-
}
|
|
733
|
-
v[idx] = value;
|
|
734
|
-
this.setWidgetStyles('border-radius', v);
|
|
735
|
-
}));
|
|
736
|
-
}
|
|
737
|
-
ngOnChanges(changes) {
|
|
738
|
-
this.currentWidget = changes.widget.currentValue;
|
|
739
|
-
if (this.currentWidget == null) {
|
|
740
|
-
return;
|
|
741
|
-
}
|
|
742
|
-
this.widgetName = AjfWidgetType[this.currentWidget.widgetType];
|
|
743
|
-
}
|
|
744
|
-
ngOnDestroy() {
|
|
745
|
-
this._currentWidgetSub.unsubscribe();
|
|
746
|
-
this._formsSub.unsubscribe();
|
|
747
|
-
this._colorSub.unsubscribe();
|
|
748
|
-
this._headerStyleSub.unsubscribe();
|
|
749
|
-
this._contentStylesSub.unsubscribe();
|
|
750
|
-
this._footerStylesSub.unsubscribe();
|
|
751
|
-
this._originSub.unsubscribe();
|
|
752
|
-
this._stylesUpdatesSubs.unsubscribe();
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
AjfReportBuilderProperties.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: AjfReportBuilderProperties, deps: [{ token: i1.MatDialog }, { token: i2.AjfReportBuilderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
756
|
-
AjfReportBuilderProperties.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0-next.15", type: AjfReportBuilderProperties, selector: "ajf-report-builder-properties", usesOnChanges: true, ngImport: i0, template: "<ng-template [ngIf]=\"currentWidget != null\">\n <div class=\"ajf-content\">\n <button\n mat-button\n class=\"ajf-hide-menu\"\n matTooltip=\"hide-menu\"\n (click)=\"hideMenu()\"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>remove_circle_outline</mat-icon>\n </button>\n <mat-button-toggle-group class=\"ajf-menu-css\">\n <mat-button-toggle\n (click)=\"reportStyles = !reportStyles; sectionStyles = false; widgetStyles = false\"\n value=\"left\"\n [ngClass]=\"{'ajf-selected': reportStyles}\"\n >\n report\n <ng-container>{{'CSS style'|transloco}}</ng-container>\n </mat-button-toggle>\n <mat-button-toggle\n (click)=\"sectionStyles = !sectionStyles; reportStyles = false; widgetStyles = false\"\n [ngClass]=\"{'ajf-selected': sectionStyles}\"\n >\n {{ origin }}\n <ng-container>{{'CSS style'|transloco}}</ng-container>\n </mat-button-toggle>\n <mat-button-toggle\n (click)=\"widgetStyles = !widgetStyles; sectionStyles = false; reportStyles = false\"\n [ngClass]=\"{'ajf-selected': widgetStyles}\"\n >\n {{ widgetName }}\n <ng-container>{{'CSS style'|transloco}}</ng-container>\n </mat-button-toggle>\n </mat-button-toggle-group>\n <div class=\"ajf-style-container\" *ngIf=\"(reportStyles) ? true : false \">\n <mat-tab-group>\n <mat-tab label=\"Background Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'report'\"\n [label]=\"'color'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n <div class=\"ajf-style-container\" *ngIf=\"(sectionStyles) ? true : false \">\n <mat-tab-group>\n <mat-tab label=\"Background Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'section'\"\n [label]=\"'color'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n <div class=\"ajf-style-container\" *ngIf=\"(widgetStyles) ? true : false \">\n <mat-tab-group *ngIf=\"(currentWidget.widgetType != 4)\">\n <mat-tab label=\"Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'widget'\"\n [label]=\"'color'\"\n [init]=\"'icon'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n <mat-tab label=\"Background Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'widget'\"\n [label]=\"'background-color'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n </mat-tab-group>\n <div\n class=\"properties-container\"\n *ngIf=\"(currentWidget.widgetType !== 8)\"\n >\n <div class=\"ajf-layout-preview\">\n <div class=\"ajf-vbottom\">\n <div>{{'height'|transloco}}</div>\n <div>{{ getHeightWidget|async }}</div>\n </div>\n <div class=\"ajf-margin-box\">\n <div class=\"ajf-top-label\">{{'margin'|transloco}}</div>\n <div class=\"ajf-vtop\">{{ getMarginWidgetTop|async }}</div>\n <div class=\"ajf-vright\">{{ getMarginWidgetRight|async }}</div>\n <div class=\"ajf-vbottom\">{{ getMarginWidgetBottom|async }}</div>\n <div class=\"ajf-vleft\">{{ getMarginWidgetLeft|async }}</div>\n <div class=\"ajf-border-box\">\n <div class=\"ajf-vtop\">{{ getBorderWidthWidgetTop|async }}</div>\n <div class=\"ajf-vright\">\n {{ getBorderWidthWidgetRight|async }}\n </div>\n <div class=\"ajf-vbottom\">\n {{ getBorderWidthWidgetBottom|async }}\n </div>\n <div class=\"ajf-vleft\">{{ getBorderWidthWidgetLeft|async }}</div>\n <div class=\"ajf-vtl\">\n {{ getBorderRadiusWidgetTopLeft|async }}\n </div>\n <div class=\"ajf-vtr\">\n {{ getBorderRadiusWidgetTopRight|async }}\n </div>\n <div class=\"ajf-vbr\">\n {{ getBorderRadiusWidgetBottomRight|async }}\n </div>\n <div class=\"ajf-vbl\">\n {{ getBorderRadiusWidgetBottomLeft|async }}\n </div>\n <div class=\"ajf-top-label\">{{'border'|transloco}}</div>\n <div class=\"ajf-padding-box\">\n <div class=\"ajf-top-label\">{{'padding'|transloco}}</div>\n <div class=\"ajf-vtop\">{{ getPaddingWidgetTop|async }}</div>\n <div class=\"ajf-vright\">{{ getPaddingWidgetRight|async }}</div>\n <div class=\"ajf-vbottom\">\n {{ getPaddingWidgetBottom|async }}\n </div>\n <div class=\"ajf-vleft\">{{ getPaddingWidgetLeft|async }}</div>\n <div class=\"ajf-content-box\">{{'content'|transloco}}</div>\n </div>\n </div>\n </div>\n </div>\n <mat-grid-list rowHeight=\"2em\" cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'height'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('height', $event.value)\"\n min=\"0\"\n max=\"200\"\n step=\"1\"\n [value]=\"getHeightWidget|async\"\n tickInterval=\"1\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!marginExpanded\"\n (click)=\"marginExpanded = !marginExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"marginExpanded\"\n (click)=\"marginExpanded = !marginExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n [disabled]=\"marginExpanded\"\n (change)=\"setWidgetStyles('margin', $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"marginExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin top'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(0, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(1, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin bottom'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(2, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetBottom|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(3, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!paddingExpanded\"\n (click)=\"paddingExpanded = !paddingExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"paddingExpanded\"\n (click)=\"paddingExpanded = !paddingExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('padding', $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"paddingExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding top'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(0, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(1, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding bottom'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(2, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetBottom|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(3, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!borderWidthExpanded\"\n (click)=\"borderWidthExpanded = !borderWidthExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"borderWidthExpanded\"\n (click)=\"borderWidthExpanded = !borderWidthExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('border-width', $event.value)\"\n min=\"0\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetTop|async\"\n tickInterval=\"1\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"borderWidthExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width top'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(0, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(1, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width bottom'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(2, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetBottom|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(3, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!borderRadiusExpanded\"\n (click)=\"borderRadiusExpanded = !borderRadiusExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"borderRadiusExpanded\"\n (click)=\"borderRadiusExpanded = !borderRadiusExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('border-radius', $event.value)\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n tickInterval=\"10\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"borderRadiusExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius top left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(0, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetTopLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius top right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(1, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetTopRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius bottom left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(2, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetBottomLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span\n >{{'border radius bottom right'|transloco}}</span\n >\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(3, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetBottomRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n </div>\n <div class=\"properties-container\" *ngIf=\"currentWidget.widgetType === 2\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"3\">\n <span>{{'font size'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('font-size', $event.value);\"\n min=\"1\"\n max=\"150\"\n step=\"1\"\n [value]=\"getFontSizeWidget|async\"\n tickInterval=\"1\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </div>\n <ng-template [ngIf]=\"currentWidget.widgetType === 5\">\n <br />\n <form>\n <mat-form-field>\n <input\n matInput\n [placeholder]=\"'Font size' | transloco\"\n [value]=\"getFontSizeWidget|async\"\n [(ngModel)]=\"fontSize\"\n [ngModelOptions]=\"{standalone: true}\"\n (change)=\"setWidgetStyles('font-size', fontSize)\"\n />\n </mat-form-field>\n <mat-select\n (selectionChange)=\"setWidgetStyles('font-style', $event.value)\"\n [placeholder]=\"'Font style' | transloco\"\n >\n <mat-option value=\"normal\">{{'Normal'|transloco}}</mat-option>\n <mat-option value=\"italic\">{{'Italic'|transloco}}</mat-option>\n <mat-option value=\"oblique\">{{'Oblique'|transloco}}</mat-option>\n </mat-select>\n <mat-select\n (selectionChange)=\"setWidgetStyles('text-align', $event.value)\"\n [placeholder]=\"'Align' | transloco\"\n >\n <mat-option value=\"center\">{{'Center'|transloco}}</mat-option>\n <mat-option value=\"left\">{{'Left'|transloco}}</mat-option>\n <mat-option value=\"right\">{{'Right'|transloco}}</mat-option>\n </mat-select>\n </form>\n </ng-template>\n <h1>\n <ng-container>{{'properties of'|transloco}}</ng-container>\n {{ widgetName|transloco }}\n </h1>\n </div>\n <div [ngSwitch]=\"currentWidget.widgetType\">\n <ng-template [ngSwitchCase]=\"0\">\n <h1>{{'Column'|transloco}}</h1>\n <ng-template\n ngFor\n let-col\n [ngForOf]=\"currentLayoutWidget.columns\"\n let-idx=\"index\"\n >\n <mat-toolbar>\n <mat-toolbar-row *ngIf=\"col !== -1\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile colspan=\"1\"> {{idx + 1}} </mat-grid-tile>\n <mat-grid-tile colspan=\"9\">\n <mat-slider\n style=\"width: 90%\"\n min=\"0.1\"\n max=\"1\"\n step=\"0.01\"\n value=\"{{col}}\"\n thumb-label=\"true\"\n tick-interval=\"true\"\n (change)=\"instantColumnValue($event.value,idx)\"\n >\n </mat-slider>\n {{percent(col)}}%\n </mat-grid-tile>\n <mat-grid-tile colspan=\"2\">\n <button\n style=\"width: 5%\"\n mat-button\n (click)=\"fixedColumn(idx)\"\n >\n fixed\n </button>\n </mat-grid-tile>\n </mat-grid-list>\n </mat-toolbar-row>\n <mat-toolbar-row *ngIf=\"col == -1\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile colspan=\"1\"> {{idx + 1}} </mat-grid-tile>\n <mat-grid-tile colspan=\"11\">\n <button\n style=\"width: 90%\"\n mat-button\n (click)=\"unfixedColumn(idx)\"\n >\n percent\n </button>\n </mat-grid-tile>\n </mat-grid-list>\n </mat-toolbar-row>\n </mat-toolbar>\n </ng-template>\n <mat-toolbar>\n <mat-toolbar-row>\n <button\n mat-button\n (click)=\"addColumn()\"\n *ngIf=\"currentLayoutWidget.columns.length < 10\"\n >\n {{'Add column'|transloco}}\n </button>\n </mat-toolbar-row>\n </mat-toolbar>\n </ng-template>\n <ng-template [ngSwitchCase]=\"2\">\n <ajf-image-group\n (formulaClick)=\"openFormulaDialog($event)\"\n [data]=\"iconSet\"\n ></ajf-image-group>\n <ajf-image-group\n (formulaClick)=\"openFormulaDialog($event)\"\n [data]=\"flagSet\"\n ></ajf-image-group>\n <ajf-report-builder-forms-analyzer></ajf-report-builder-forms-analyzer>\n <input\n mat-input\n [placeholder]=\"'paste a link' | transloco\"\n style=\"width: 100%\"\n [(ngModel)]=\"imageUrl\"\n />\n <button mat-button (click)=\"setImageUrl()\">\n {{'Set image'|transloco}}\n </button>\n </ng-template>\n <ng-template [ngSwitchCase]=\"3\">\n <div style=\"width: 500px\">\n <ajf-quill-editor\n [(ngModel)]=\"currentTextWidget.htmlText\"\n [modules]=\"getModule()\"\n [maxLength]=\"200\"\n [theme]=\"bubble\"\n [initHTML]=\"(getHTML|async) || ''\"\n (formulaClick)=\"openFormulaDialog($event)\"\n >\n </ajf-quill-editor>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"4\">\n <h3>{{'Choose type of Chart'|transloco}}</h3>\n <mat-button-toggle-group class=\"ajf-chart-buttons\">\n <div class=\"ajf-row\">\n <mat-button-toggle\n value=\"reportbuilder-linechart\"\n (click)=\"setChartType(0)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-linechart\">\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-barchartvertical\"\n (click)=\"setChartType(1)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-barchartvertical\"\n >\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-bubblechart\"\n (click)=\"setChartType(8)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-bubblechart\">\n </mat-icon>\n </mat-button-toggle>\n </div>\n <div class=\"row\">\n <mat-button-toggle\n value=\"reportbuilder-barcharthorizontal\"\n (click)=\"setChartType(2)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-barcharthorizontal\"\n >\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-radarchart\"\n (click)=\"setChartType(3)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-radarchart\">\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-barchartvertical\"\n (click)=\"setChartType(1)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-barchartvertical\"\n >\n </mat-icon>\n </mat-button-toggle>\n </div>\n <div class=\"ajf-row\">\n <mat-button-toggle\n value=\"reportbuilder-scatterchart\"\n (click)=\"setChartType(4)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-scatterchart\"\n >\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-polarareachart\"\n (click)=\"setChartType(5)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-polarareachart\"\n >\n </mat-icon>\n </mat-button-toggle>\n </div>\n <div class=\"ajf-row\">\n <mat-button-toggle\n value=\"reportbuilder-piechart\"\n (click)=\"setChartType(6)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-piechart\">\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-donoughtchart\"\n (click)=\"setChartType(7)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-donoughtchart\"\n >\n </mat-icon>\n </mat-button-toggle>\n </div>\n </mat-button-toggle-group>\n <h3>{{'Labels'|transloco}}</h3>\n <ajf-report-builder-forms-analyzer></ajf-report-builder-forms-analyzer>\n <ajf-theme-color\n [section]=\"'chart'\"\n [label]=\"tabValue\"\n ></ajf-theme-color>\n <mat-card>\n <mat-card-header>\n <mat-card-title>{{'Border width'|transloco}}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-slider\n min=\"1\"\n max=\"100\"\n style=\"width: 99%\"\n step=\"1\"\n (change)=\"setChartBorderColor($event.value)\"\n [value]=\"chartBorderWidth\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-card-content>\n </mat-card>\n <mat-tab-group (selectChange)=\"setTab($event)\">\n <mat-tab label=\"Background\">\n <mat-list>\n <ng-template\n ngFor\n let-color\n [ngForOf]=\"(getChartBackgroundColor|async)\"\n let-idx=\"index\"\n >\n <mat-list-item>\n <span [style.background]=\"color\"> {{ color }} </span>\n <button mat-button (click)=\"removeChartBackgroundColor(idx)\">\n {{'Remove'|transloco}}\n </button>\n </mat-list-item>\n </ng-template>\n </mat-list>\n </mat-tab>\n <mat-tab label=\"Border\">\n <mat-list>\n <ng-template\n ngFor\n let-color\n [ngForOf]=\"(getChartBorderColor|async)\"\n let-idx=\"index\"\n >\n <mat-list-item>\n <span [style.background]=\"color\"> {{ color }} </span>\n <button mat-button (click)=\"removeChartBorderColor(idx)\">\n remove\n </button>\n </mat-list-item>\n </ng-template>\n </mat-list>\n </mat-tab>\n </mat-tab-group>\n </ng-template>\n <ng-template [ngSwitchCase]=\"5\">\n <ajf-report-builder-forms-analyzer></ajf-report-builder-forms-analyzer>\n </ng-template>\n </div>\n <button\n mat-button\n (click)=\"visibilitySection = !visibilitySection\"\n [ngClass]=\"{'ajf-selected': visibilitySection}\"\n >\n {{ widgetName|transloco }}\n <ng-container>{{'Visibility'|transloco}}</ng-container>\n </button>\n <div [style.display]=\"visibilitySection ? 'block' : 'none'\">\n <ajf-report-builder-condition-editor\n [visibility]=\"currentWidget.visibility\"\n ></ajf-report-builder-condition-editor>\n </div>\n </div>\n</ng-template>\n", styles: ["ajf-report-builder-properties .ajf-selected{background-color:darkred;color:#fff}ajf-report-builder-properties .ajf-style-container{height:auto;width:100%;position:relative;margin-bottom:60px;text-align:center}ajf-report-builder-properties .ajf-style-container mat-tab-group .ajf-style-panel{min-height:350px}ajf-report-builder-properties .ajf-style-container .ajf-style-background,ajf-report-builder-properties .ajf-style-container .ajf-style-color{width:100%;height:350px;position:relative;margin:30px}ajf-report-builder-properties .ajf-style-container .mat-list-item-content{position:normal !important;display:block !important;height:350px !important}ajf-report-builder-properties .ajf-style-container mat-tab-group .mat-tab-body-wrapper,ajf-report-builder-properties .ajf-style-container mat-tab-group .mat-list-item-content{position:normal !important;display:block !important;height:350px !important}ajf-report-builder-properties .ajf-content{margin-top:10px;margin-right:15px;margin-bottom:290px;margin-left:15px}ajf-report-builder-properties .ajf-content .ajf-menu-css{width:100% !important;font-size:10px !important}ajf-report-builder-properties .ajf-content .ajf-menu-css mat-button-toggle{width:33% !important}ajf-report-builder-properties .ajf-content mat-button-toggle-group{width:100% !important}ajf-report-builder-properties .ajf-content mat-button-toggle-group mat-button-toggle{width:auto !important}ajf-report-builder-properties .ajf-content mat-button-toggle-group mat-button-toggle mat-icon{margin:15px}ajf-report-builder-properties button{width:100%;margin-bottom:30px}ajf-report-builder-properties .ajf-hide-menu{width:auto !important}ajf-report-builder-properties h1,ajf-report-builder-properties h3,ajf-report-builder-properties h5{text-align:center}ajf-report-builder-properties .ajf-row{display:flex;flex-direction:column;width:100%}ajf-report-builder-properties .mat-tab-body.mat-tab-active{min-height:600px}ajf-report-builder-properties mat-grid-list{width:100%}ajf-report-builder-properties mat-grid-tile{overflow:visible !important}ajf-report-builder-properties mat-grid-tile.ajf-lal{text-align:left}ajf-report-builder-properties .ajf-chart-buttons mat-icon{font-size:15px}ajf-report-builder-properties .ajf-layout-preview{background-color:#fff;width:100%;font-size:.9em;box-sizing:border-box;position:relative}ajf-report-builder-properties .ajf-layout-preview .ajf-top-label{position:absolute;top:1em;left:1em;text-align:left}ajf-report-builder-properties .ajf-layout-preview .ajf-vtop{position:absolute;top:1em;right:0;left:0}ajf-report-builder-properties .ajf-layout-preview .ajf-vbottom{position:absolute;bottom:0;right:0;left:0}ajf-report-builder-properties .ajf-layout-preview .ajf-vright{position:absolute;top:50%;right:1em;margin-top:.5em}ajf-report-builder-properties .ajf-layout-preview .ajf-vleft{position:absolute;top:50%;left:1em;margin-top:.5em}ajf-report-builder-properties .ajf-layout-preview .ajf-vtl{position:absolute;top:1em;left:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-vtr{position:absolute;top:1em;right:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-vbl{position:absolute;bottom:1em;left:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-vbr{position:absolute;bottom:1em;right:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box{background-color:#fff;padding:3em;position:relative;border:solid 1px #ccc}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box{background-color:#ddd;padding:3em;position:relative;box-sizing:border-box}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box>.ajf-top-label{left:4em}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box .ajf-padding-box{padding:3em;background-color:#aaa;position:relative;box-sizing:border-box}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box .ajf-padding-box .ajf-content-box{background-color:#888;padding:2em;text-align:center;box-sizing:border-box}\n"], components: [{ type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i7.AjfReportBuilderThemeColor, selector: "ajf-theme-color", inputs: ["section", "label", "init"] }, { type: i8.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { type: i8.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { type: i9.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "displayWith", "valueText", "vertical"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i13.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i14.AjfReportBuilderImageGroup, selector: "ajf-image-group", inputs: ["data"], outputs: ["formulaClick"] }, { type: i15.AjfReportBuilderFormsAnalyzer, selector: "ajf-report-builder-forms-analyzer" }, { type: i16.AjfQuillEditor, selector: "ajf-quill-editor", inputs: ["theme", "modules", "readOnly", "placeholder", "maxLength", "minLength", "formats", "initHTML"], outputs: ["editorCreated", "contentChanged", "selectionChanged", "formulaClick"] }, { type: i17.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i17.MatCardHeader, selector: "mat-card-header" }, { type: i18.MatList, selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { type: i18.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i19.AjfReportBuilderConditionEditor, selector: "ajf-report-builder-condition-editor", inputs: ["visibility"] }], directives: [{ type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i21.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i20.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i22.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i22.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i22.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i22.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i22.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i22.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i20.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i20.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i20.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.MatToolbarRow, selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }, { type: i17.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i17.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }], pipes: { "transloco": i23.TranslocoPipe, "async": i20.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
757
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0-next.15", ngImport: i0, type: AjfReportBuilderProperties, decorators: [{
|
|
758
|
-
type: Component,
|
|
759
|
-
args: [{ selector: 'ajf-report-builder-properties', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template [ngIf]=\"currentWidget != null\">\n <div class=\"ajf-content\">\n <button\n mat-button\n class=\"ajf-hide-menu\"\n matTooltip=\"hide-menu\"\n (click)=\"hideMenu()\"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>remove_circle_outline</mat-icon>\n </button>\n <mat-button-toggle-group class=\"ajf-menu-css\">\n <mat-button-toggle\n (click)=\"reportStyles = !reportStyles; sectionStyles = false; widgetStyles = false\"\n value=\"left\"\n [ngClass]=\"{'ajf-selected': reportStyles}\"\n >\n report\n <ng-container>{{'CSS style'|transloco}}</ng-container>\n </mat-button-toggle>\n <mat-button-toggle\n (click)=\"sectionStyles = !sectionStyles; reportStyles = false; widgetStyles = false\"\n [ngClass]=\"{'ajf-selected': sectionStyles}\"\n >\n {{ origin }}\n <ng-container>{{'CSS style'|transloco}}</ng-container>\n </mat-button-toggle>\n <mat-button-toggle\n (click)=\"widgetStyles = !widgetStyles; sectionStyles = false; reportStyles = false\"\n [ngClass]=\"{'ajf-selected': widgetStyles}\"\n >\n {{ widgetName }}\n <ng-container>{{'CSS style'|transloco}}</ng-container>\n </mat-button-toggle>\n </mat-button-toggle-group>\n <div class=\"ajf-style-container\" *ngIf=\"(reportStyles) ? true : false \">\n <mat-tab-group>\n <mat-tab label=\"Background Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'report'\"\n [label]=\"'color'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n <div class=\"ajf-style-container\" *ngIf=\"(sectionStyles) ? true : false \">\n <mat-tab-group>\n <mat-tab label=\"Background Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'section'\"\n [label]=\"'color'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n <div class=\"ajf-style-container\" *ngIf=\"(widgetStyles) ? true : false \">\n <mat-tab-group *ngIf=\"(currentWidget.widgetType != 4)\">\n <mat-tab label=\"Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'widget'\"\n [label]=\"'color'\"\n [init]=\"'icon'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n <mat-tab label=\"Background Color\">\n <div class=\"ajf-style-panel\">\n <ajf-theme-color\n [section]=\"'widget'\"\n [label]=\"'background-color'\"\n ></ajf-theme-color>\n </div>\n </mat-tab>\n </mat-tab-group>\n <div\n class=\"properties-container\"\n *ngIf=\"(currentWidget.widgetType !== 8)\"\n >\n <div class=\"ajf-layout-preview\">\n <div class=\"ajf-vbottom\">\n <div>{{'height'|transloco}}</div>\n <div>{{ getHeightWidget|async }}</div>\n </div>\n <div class=\"ajf-margin-box\">\n <div class=\"ajf-top-label\">{{'margin'|transloco}}</div>\n <div class=\"ajf-vtop\">{{ getMarginWidgetTop|async }}</div>\n <div class=\"ajf-vright\">{{ getMarginWidgetRight|async }}</div>\n <div class=\"ajf-vbottom\">{{ getMarginWidgetBottom|async }}</div>\n <div class=\"ajf-vleft\">{{ getMarginWidgetLeft|async }}</div>\n <div class=\"ajf-border-box\">\n <div class=\"ajf-vtop\">{{ getBorderWidthWidgetTop|async }}</div>\n <div class=\"ajf-vright\">\n {{ getBorderWidthWidgetRight|async }}\n </div>\n <div class=\"ajf-vbottom\">\n {{ getBorderWidthWidgetBottom|async }}\n </div>\n <div class=\"ajf-vleft\">{{ getBorderWidthWidgetLeft|async }}</div>\n <div class=\"ajf-vtl\">\n {{ getBorderRadiusWidgetTopLeft|async }}\n </div>\n <div class=\"ajf-vtr\">\n {{ getBorderRadiusWidgetTopRight|async }}\n </div>\n <div class=\"ajf-vbr\">\n {{ getBorderRadiusWidgetBottomRight|async }}\n </div>\n <div class=\"ajf-vbl\">\n {{ getBorderRadiusWidgetBottomLeft|async }}\n </div>\n <div class=\"ajf-top-label\">{{'border'|transloco}}</div>\n <div class=\"ajf-padding-box\">\n <div class=\"ajf-top-label\">{{'padding'|transloco}}</div>\n <div class=\"ajf-vtop\">{{ getPaddingWidgetTop|async }}</div>\n <div class=\"ajf-vright\">{{ getPaddingWidgetRight|async }}</div>\n <div class=\"ajf-vbottom\">\n {{ getPaddingWidgetBottom|async }}\n </div>\n <div class=\"ajf-vleft\">{{ getPaddingWidgetLeft|async }}</div>\n <div class=\"ajf-content-box\">{{'content'|transloco}}</div>\n </div>\n </div>\n </div>\n </div>\n <mat-grid-list rowHeight=\"2em\" cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'height'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('height', $event.value)\"\n min=\"0\"\n max=\"200\"\n step=\"1\"\n [value]=\"getHeightWidget|async\"\n tickInterval=\"1\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!marginExpanded\"\n (click)=\"marginExpanded = !marginExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"marginExpanded\"\n (click)=\"marginExpanded = !marginExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n [disabled]=\"marginExpanded\"\n (change)=\"setWidgetStyles('margin', $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"marginExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin top'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(0, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(1, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin bottom'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(2, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetBottom|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'margin left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetMargin(3, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getMarginWidgetLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!paddingExpanded\"\n (click)=\"paddingExpanded = !paddingExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"paddingExpanded\"\n (click)=\"paddingExpanded = !paddingExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('padding', $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"paddingExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding top'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(0, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(1, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding bottom'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(2, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetBottom|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'padding left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetPadding(3, $event.value)\"\n min=\"-50\"\n max=\"50\"\n step=\"1\"\n [value]=\"getPaddingWidgetLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!borderWidthExpanded\"\n (click)=\"borderWidthExpanded = !borderWidthExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"borderWidthExpanded\"\n (click)=\"borderWidthExpanded = !borderWidthExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('border-width', $event.value)\"\n min=\"0\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetTop|async\"\n tickInterval=\"1\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"borderWidthExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width top'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(0, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetTop|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(1, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width bottom'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(2, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetBottom|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border width left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderWidth(3, $event.value)\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n [value]=\"getBorderWidthWidgetLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile>\n <mat-icon\n *ngIf=\"!borderRadiusExpanded\"\n (click)=\"borderRadiusExpanded = !borderRadiusExpanded\"\n >keyboard_arrow_right</mat-icon\n >\n <mat-icon\n *ngIf=\"borderRadiusExpanded\"\n (click)=\"borderRadiusExpanded = !borderRadiusExpanded\"\n >keyboard_arrow_down</mat-icon\n >\n </mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('border-radius', $event.value)\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n tickInterval=\"10\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <ng-template [ngIf]=\"borderRadiusExpanded\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius top left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(0, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetTopLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius top right'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(1, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetTopRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span>{{'border radius bottom left'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(2, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetBottomLeft|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"4\">\n <span\n >{{'border radius bottom right'|transloco}}</span\n >\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetBorderRadius(3, $event.value)\"\n min=\"1\"\n max=\"100\"\n step=\"1\"\n [value]=\"getBorderRadiusWidgetBottomRight|async\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </ng-template>\n </div>\n <div class=\"properties-container\" *ngIf=\"currentWidget.widgetType === 2\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile></mat-grid-tile>\n <mat-grid-tile class=\"ajf-lal\" colspan=\"3\">\n <span>{{'font size'|transloco}}</span>\n </mat-grid-tile>\n <mat-grid-tile colspan=\"7\">\n <mat-slider\n (change)=\"setWidgetStyles('font-size', $event.value);\"\n min=\"1\"\n max=\"150\"\n step=\"1\"\n [value]=\"getFontSizeWidget|async\"\n tickInterval=\"1\"\n thumbLabel\n >\n </mat-slider>\n </mat-grid-tile>\n </mat-grid-list>\n </div>\n <ng-template [ngIf]=\"currentWidget.widgetType === 5\">\n <br />\n <form>\n <mat-form-field>\n <input\n matInput\n [placeholder]=\"'Font size' | transloco\"\n [value]=\"getFontSizeWidget|async\"\n [(ngModel)]=\"fontSize\"\n [ngModelOptions]=\"{standalone: true}\"\n (change)=\"setWidgetStyles('font-size', fontSize)\"\n />\n </mat-form-field>\n <mat-select\n (selectionChange)=\"setWidgetStyles('font-style', $event.value)\"\n [placeholder]=\"'Font style' | transloco\"\n >\n <mat-option value=\"normal\">{{'Normal'|transloco}}</mat-option>\n <mat-option value=\"italic\">{{'Italic'|transloco}}</mat-option>\n <mat-option value=\"oblique\">{{'Oblique'|transloco}}</mat-option>\n </mat-select>\n <mat-select\n (selectionChange)=\"setWidgetStyles('text-align', $event.value)\"\n [placeholder]=\"'Align' | transloco\"\n >\n <mat-option value=\"center\">{{'Center'|transloco}}</mat-option>\n <mat-option value=\"left\">{{'Left'|transloco}}</mat-option>\n <mat-option value=\"right\">{{'Right'|transloco}}</mat-option>\n </mat-select>\n </form>\n </ng-template>\n <h1>\n <ng-container>{{'properties of'|transloco}}</ng-container>\n {{ widgetName|transloco }}\n </h1>\n </div>\n <div [ngSwitch]=\"currentWidget.widgetType\">\n <ng-template [ngSwitchCase]=\"0\">\n <h1>{{'Column'|transloco}}</h1>\n <ng-template\n ngFor\n let-col\n [ngForOf]=\"currentLayoutWidget.columns\"\n let-idx=\"index\"\n >\n <mat-toolbar>\n <mat-toolbar-row *ngIf=\"col !== -1\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile colspan=\"1\"> {{idx + 1}} </mat-grid-tile>\n <mat-grid-tile colspan=\"9\">\n <mat-slider\n style=\"width: 90%\"\n min=\"0.1\"\n max=\"1\"\n step=\"0.01\"\n value=\"{{col}}\"\n thumb-label=\"true\"\n tick-interval=\"true\"\n (change)=\"instantColumnValue($event.value,idx)\"\n >\n </mat-slider>\n {{percent(col)}}%\n </mat-grid-tile>\n <mat-grid-tile colspan=\"2\">\n <button\n style=\"width: 5%\"\n mat-button\n (click)=\"fixedColumn(idx)\"\n >\n fixed\n </button>\n </mat-grid-tile>\n </mat-grid-list>\n </mat-toolbar-row>\n <mat-toolbar-row *ngIf=\"col == -1\">\n <mat-grid-list cols=\"12\">\n <mat-grid-tile colspan=\"1\"> {{idx + 1}} </mat-grid-tile>\n <mat-grid-tile colspan=\"11\">\n <button\n style=\"width: 90%\"\n mat-button\n (click)=\"unfixedColumn(idx)\"\n >\n percent\n </button>\n </mat-grid-tile>\n </mat-grid-list>\n </mat-toolbar-row>\n </mat-toolbar>\n </ng-template>\n <mat-toolbar>\n <mat-toolbar-row>\n <button\n mat-button\n (click)=\"addColumn()\"\n *ngIf=\"currentLayoutWidget.columns.length < 10\"\n >\n {{'Add column'|transloco}}\n </button>\n </mat-toolbar-row>\n </mat-toolbar>\n </ng-template>\n <ng-template [ngSwitchCase]=\"2\">\n <ajf-image-group\n (formulaClick)=\"openFormulaDialog($event)\"\n [data]=\"iconSet\"\n ></ajf-image-group>\n <ajf-image-group\n (formulaClick)=\"openFormulaDialog($event)\"\n [data]=\"flagSet\"\n ></ajf-image-group>\n <ajf-report-builder-forms-analyzer></ajf-report-builder-forms-analyzer>\n <input\n mat-input\n [placeholder]=\"'paste a link' | transloco\"\n style=\"width: 100%\"\n [(ngModel)]=\"imageUrl\"\n />\n <button mat-button (click)=\"setImageUrl()\">\n {{'Set image'|transloco}}\n </button>\n </ng-template>\n <ng-template [ngSwitchCase]=\"3\">\n <div style=\"width: 500px\">\n <ajf-quill-editor\n [(ngModel)]=\"currentTextWidget.htmlText\"\n [modules]=\"getModule()\"\n [maxLength]=\"200\"\n [theme]=\"bubble\"\n [initHTML]=\"(getHTML|async) || ''\"\n (formulaClick)=\"openFormulaDialog($event)\"\n >\n </ajf-quill-editor>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"4\">\n <h3>{{'Choose type of Chart'|transloco}}</h3>\n <mat-button-toggle-group class=\"ajf-chart-buttons\">\n <div class=\"ajf-row\">\n <mat-button-toggle\n value=\"reportbuilder-linechart\"\n (click)=\"setChartType(0)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-linechart\">\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-barchartvertical\"\n (click)=\"setChartType(1)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-barchartvertical\"\n >\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-bubblechart\"\n (click)=\"setChartType(8)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-bubblechart\">\n </mat-icon>\n </mat-button-toggle>\n </div>\n <div class=\"row\">\n <mat-button-toggle\n value=\"reportbuilder-barcharthorizontal\"\n (click)=\"setChartType(2)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-barcharthorizontal\"\n >\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-radarchart\"\n (click)=\"setChartType(3)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-radarchart\">\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-barchartvertical\"\n (click)=\"setChartType(1)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-barchartvertical\"\n >\n </mat-icon>\n </mat-button-toggle>\n </div>\n <div class=\"ajf-row\">\n <mat-button-toggle\n value=\"reportbuilder-scatterchart\"\n (click)=\"setChartType(4)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-scatterchart\"\n >\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-polarareachart\"\n (click)=\"setChartType(5)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-polarareachart\"\n >\n </mat-icon>\n </mat-button-toggle>\n </div>\n <div class=\"ajf-row\">\n <mat-button-toggle\n value=\"reportbuilder-piechart\"\n (click)=\"setChartType(6)\"\n >\n <mat-icon fontSet=\"ajf-icon\" fontIcon=\"reportbuilder-piechart\">\n </mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n value=\"reportbuilder-donoughtchart\"\n (click)=\"setChartType(7)\"\n >\n <mat-icon\n fontSet=\"ajf-icon\"\n fontIcon=\"reportbuilder-donoughtchart\"\n >\n </mat-icon>\n </mat-button-toggle>\n </div>\n </mat-button-toggle-group>\n <h3>{{'Labels'|transloco}}</h3>\n <ajf-report-builder-forms-analyzer></ajf-report-builder-forms-analyzer>\n <ajf-theme-color\n [section]=\"'chart'\"\n [label]=\"tabValue\"\n ></ajf-theme-color>\n <mat-card>\n <mat-card-header>\n <mat-card-title>{{'Border width'|transloco}}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-slider\n min=\"1\"\n max=\"100\"\n style=\"width: 99%\"\n step=\"1\"\n (change)=\"setChartBorderColor($event.value)\"\n [value]=\"chartBorderWidth\"\n tickInterval=\"auto\"\n thumbLabel\n >\n </mat-slider>\n </mat-card-content>\n </mat-card>\n <mat-tab-group (selectChange)=\"setTab($event)\">\n <mat-tab label=\"Background\">\n <mat-list>\n <ng-template\n ngFor\n let-color\n [ngForOf]=\"(getChartBackgroundColor|async)\"\n let-idx=\"index\"\n >\n <mat-list-item>\n <span [style.background]=\"color\"> {{ color }} </span>\n <button mat-button (click)=\"removeChartBackgroundColor(idx)\">\n {{'Remove'|transloco}}\n </button>\n </mat-list-item>\n </ng-template>\n </mat-list>\n </mat-tab>\n <mat-tab label=\"Border\">\n <mat-list>\n <ng-template\n ngFor\n let-color\n [ngForOf]=\"(getChartBorderColor|async)\"\n let-idx=\"index\"\n >\n <mat-list-item>\n <span [style.background]=\"color\"> {{ color }} </span>\n <button mat-button (click)=\"removeChartBorderColor(idx)\">\n remove\n </button>\n </mat-list-item>\n </ng-template>\n </mat-list>\n </mat-tab>\n </mat-tab-group>\n </ng-template>\n <ng-template [ngSwitchCase]=\"5\">\n <ajf-report-builder-forms-analyzer></ajf-report-builder-forms-analyzer>\n </ng-template>\n </div>\n <button\n mat-button\n (click)=\"visibilitySection = !visibilitySection\"\n [ngClass]=\"{'ajf-selected': visibilitySection}\"\n >\n {{ widgetName|transloco }}\n <ng-container>{{'Visibility'|transloco}}</ng-container>\n </button>\n <div [style.display]=\"visibilitySection ? 'block' : 'none'\">\n <ajf-report-builder-condition-editor\n [visibility]=\"currentWidget.visibility\"\n ></ajf-report-builder-condition-editor>\n </div>\n </div>\n</ng-template>\n", styles: ["ajf-report-builder-properties .ajf-selected{background-color:darkred;color:#fff}ajf-report-builder-properties .ajf-style-container{height:auto;width:100%;position:relative;margin-bottom:60px;text-align:center}ajf-report-builder-properties .ajf-style-container mat-tab-group .ajf-style-panel{min-height:350px}ajf-report-builder-properties .ajf-style-container .ajf-style-background,ajf-report-builder-properties .ajf-style-container .ajf-style-color{width:100%;height:350px;position:relative;margin:30px}ajf-report-builder-properties .ajf-style-container .mat-list-item-content{position:normal !important;display:block !important;height:350px !important}ajf-report-builder-properties .ajf-style-container mat-tab-group .mat-tab-body-wrapper,ajf-report-builder-properties .ajf-style-container mat-tab-group .mat-list-item-content{position:normal !important;display:block !important;height:350px !important}ajf-report-builder-properties .ajf-content{margin-top:10px;margin-right:15px;margin-bottom:290px;margin-left:15px}ajf-report-builder-properties .ajf-content .ajf-menu-css{width:100% !important;font-size:10px !important}ajf-report-builder-properties .ajf-content .ajf-menu-css mat-button-toggle{width:33% !important}ajf-report-builder-properties .ajf-content mat-button-toggle-group{width:100% !important}ajf-report-builder-properties .ajf-content mat-button-toggle-group mat-button-toggle{width:auto !important}ajf-report-builder-properties .ajf-content mat-button-toggle-group mat-button-toggle mat-icon{margin:15px}ajf-report-builder-properties button{width:100%;margin-bottom:30px}ajf-report-builder-properties .ajf-hide-menu{width:auto !important}ajf-report-builder-properties h1,ajf-report-builder-properties h3,ajf-report-builder-properties h5{text-align:center}ajf-report-builder-properties .ajf-row{display:flex;flex-direction:column;width:100%}ajf-report-builder-properties .mat-tab-body.mat-tab-active{min-height:600px}ajf-report-builder-properties mat-grid-list{width:100%}ajf-report-builder-properties mat-grid-tile{overflow:visible !important}ajf-report-builder-properties mat-grid-tile.ajf-lal{text-align:left}ajf-report-builder-properties .ajf-chart-buttons mat-icon{font-size:15px}ajf-report-builder-properties .ajf-layout-preview{background-color:#fff;width:100%;font-size:.9em;box-sizing:border-box;position:relative}ajf-report-builder-properties .ajf-layout-preview .ajf-top-label{position:absolute;top:1em;left:1em;text-align:left}ajf-report-builder-properties .ajf-layout-preview .ajf-vtop{position:absolute;top:1em;right:0;left:0}ajf-report-builder-properties .ajf-layout-preview .ajf-vbottom{position:absolute;bottom:0;right:0;left:0}ajf-report-builder-properties .ajf-layout-preview .ajf-vright{position:absolute;top:50%;right:1em;margin-top:.5em}ajf-report-builder-properties .ajf-layout-preview .ajf-vleft{position:absolute;top:50%;left:1em;margin-top:.5em}ajf-report-builder-properties .ajf-layout-preview .ajf-vtl{position:absolute;top:1em;left:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-vtr{position:absolute;top:1em;right:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-vbl{position:absolute;bottom:1em;left:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-vbr{position:absolute;bottom:1em;right:1em}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box{background-color:#fff;padding:3em;position:relative;border:solid 1px #ccc}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box{background-color:#ddd;padding:3em;position:relative;box-sizing:border-box}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box>.ajf-top-label{left:4em}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box .ajf-padding-box{padding:3em;background-color:#aaa;position:relative;box-sizing:border-box}ajf-report-builder-properties .ajf-layout-preview .ajf-margin-box .ajf-border-box .ajf-padding-box .ajf-content-box{background-color:#888;padding:2em;text-align:center;box-sizing:border-box}\n"] }]
|
|
760
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.AjfReportBuilderService }]; } });
|
|
761
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9yZXBvcnQtYnVpbGRlci9wcm9wZXJ0aWVzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3JlcG9ydC1idWlsZGVyL3Byb3BlcnRpZXMuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QkEsT0FBTyxFQUNMLGtCQUFrQixFQUtsQixhQUFhLEVBQ2QsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUlaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsU0FBUyxFQUFlLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFhLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFDLG1DQUFtQyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFNUUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTakUsTUFBTSxPQUFPLDBCQUEwQjtJQWdSckMsWUFBb0IsT0FBa0IsRUFBVSxRQUFpQztRQUE3RCxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBeUI7UUEvUWpGOzs7O1dBSUc7UUFDSCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0Qjs7OztXQUlHO1FBQ0gsa0JBQWEsR0FBbUIsSUFBSSxDQUFDO1FBUXJDOzs7O1dBSUc7UUFDSCxVQUFLLEdBQWMsRUFBRSxDQUFDO1FB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Q0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBWTtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2pELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUU7WUFDOUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLENBQUM7OytIQWo0QlUsMEJBQTBCO21IQUExQiwwQkFBMEIsMEZDekR2QywyamlDQWk0QkE7bUdEeDBCYSwwQkFBMEI7a0JBUHRDLFNBQVM7K0JBQ0UsK0JBQStCLGlCQUcxQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChDKSBHbnVjb29wIHNvYy4gY29vcC5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKS5cbiAqXG4gKiBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSxcbiAqIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgQWZmZXJvXG4gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKiBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLlxuICpcbiAqL1xuXG5pbXBvcnQge0FqZkZvcm19IGZyb20gJ0BhamYvY29yZS9mb3Jtcyc7XG5pbXBvcnQge0FqZkNvbmRpdGlvbn0gZnJvbSAnQGFqZi9jb3JlL21vZGVscyc7XG5pbXBvcnQge1xuICBBamZBZ2dyZWdhdGlvblR5cGUsXG4gIEFqZkNoYXJ0V2lkZ2V0LFxuICBBamZMYXlvdXRXaWRnZXQsXG4gIEFqZlRleHRXaWRnZXQsXG4gIEFqZldpZGdldCxcbiAgQWpmV2lkZ2V0VHlwZVxufSBmcm9tICdAYWpmL2NvcmUvcmVwb3J0cyc7XG5pbXBvcnQge2RlZXBDb3B5fSBmcm9tICdAYWpmL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dSZWZ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCB3aXRoTGF0ZXN0RnJvbX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0FqZlJlcG9ydEJ1aWxkZXJGb3Jtc0FuYWx5emVyRGlhbG9nfSBmcm9tICcuL2Zvcm1zLWFuYWx5emVyLWRpYWxvZyc7XG5pbXBvcnQge0FqZkZvcm1WYXJpYWJsZXN9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7QWpmUmVwb3J0QnVpbGRlclNlcnZpY2V9IGZyb20gJy4vcmVwb3J0LWJ1aWxkZXItc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FqZi1yZXBvcnQtYnVpbGRlci1wcm9wZXJ0aWVzJyxcbiAgdGVtcGxhdGVVcmw6ICdwcm9wZXJ0aWVzLmh0bWwnLFxuICBzdHlsZVVybHM6IFsncHJvcGVydGllcy5jc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXMgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqICB0cnVlIHdoZW4gdGhlIGZpcnN0IHRpbWUgY2hhcnQgdHlwZSBpcyBzZXR0ZWRcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICBpbml0Q2hhcnRUeXBlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIHRoZSBjdXJyZW50IHdpZGdldFxuICAgKlxuICAgKiBAbWVtYmVyT2YgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXNcbiAgICovXG4gIGN1cnJlbnRXaWRnZXQ6IEFqZldpZGdldHxudWxsID0gbnVsbDtcbiAgZ2V0IGN1cnJlbnRMYXlvdXRXaWRnZXQoKTogQWpmTGF5b3V0V2lkZ2V0IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50V2lkZ2V0IGFzIEFqZkxheW91dFdpZGdldDtcbiAgfVxuICBnZXQgY3VycmVudFRleHRXaWRnZXQoKTogQWpmVGV4dFdpZGdldCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFdpZGdldCBhcyBBamZUZXh0V2lkZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgYXJyYXkgY29udGFpbnMgdGhlIGZvcm1zIGV4cGxvaXRlZCBmb3IgZ2VuZXJhdGUgZGF0YSBsYWJlbHNcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICBmb3JtczogQWpmRm9ybVtdID0gW107XG5cblxuICBjb2xvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGN1cnJlbnRXaWRnZXRcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICBvcmlnaW46IHN0cmluZztcblxuICAvKipcbiAgICogRkFLRSBEQVRBXG4gICAqL1xuXG4gIGZvcm1zSnNvbjogYW55ID0ge2Zvcm1zOiBbXX07XG5cbiAgLyoqXG4gICAqIFdJREdFVFxuICAgKi9cblxuICB3aWRnZXROYW1lID0gJyc7XG4gIGdldEhUTUw6IE9ic2VydmFibGU8c3RyaW5nfHVuZGVmaW5lZD47XG4gIGdldEhlaWdodFdpZGdldDogT2JzZXJ2YWJsZTxudW1iZXJ8dW5kZWZpbmVkPjtcbiAgZ2V0Rm9udFNpemVXaWRnZXQ6IE9ic2VydmFibGU8bnVtYmVyfHVuZGVmaW5lZD47XG4gIGdldEZvbnRBbGlnbldpZGdldDogT2JzZXJ2YWJsZTxudW1iZXJ8dW5kZWZpbmVkPjtcbiAgZ2V0QmFja2dyb3VuZENvbG9yV2lkZ2V0OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldENvbG9yV2lkZ2V0OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldFN0eWxlOiBPYnNlcnZhYmxlPGFueT47XG4gIGdldENoYXJ0QmFja2dyb3VuZENvbG9yOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgZ2V0Q2hhcnRCb3JkZXJDb2xvcjogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIGdldFZpc2liaWxpdHk6IE9ic2VydmFibGU8QWpmQ29uZGl0aW9uPjtcbiAgZ2V0Q29sb3I6IE9ic2VydmFibGU8U3RyaW5nW10+O1xuXG4gIG1hcmdpbkV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGdldE1hcmdpbldpZGdldDogT2JzZXJ2YWJsZTxudW1iZXJbXXx1bmRlZmluZWQ+O1xuICBnZXRNYXJnaW5XaWRnZXRUb3A6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgZ2V0TWFyZ2luV2lkZ2V0UmlnaHQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgZ2V0TWFyZ2luV2lkZ2V0Qm90dG9tOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldE1hcmdpbldpZGdldExlZnQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBwYWRkaW5nRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2V0UGFkZGluZ1dpZGdldDogT2JzZXJ2YWJsZTxudW1iZXJbXXx1bmRlZmluZWQ+O1xuICBnZXRQYWRkaW5nV2lkZ2V0VG9wOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldFBhZGRpbmdXaWRnZXRSaWdodDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBnZXRQYWRkaW5nV2lkZ2V0Qm90dG9tOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldFBhZGRpbmdXaWRnZXRMZWZ0OiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgYm9yZGVyV2lkdGhFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBnZXRCb3JkZXJXaWR0aFdpZGdldDogT2JzZXJ2YWJsZTxudW1iZXJbXXx1bmRlZmluZWQ+O1xuICBnZXRCb3JkZXJXaWR0aFdpZGdldFRvcDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBnZXRCb3JkZXJXaWR0aFdpZGdldFJpZ2h0OiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldEJvcmRlcldpZHRoV2lkZ2V0Qm90dG9tOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldEJvcmRlcldpZHRoV2lkZ2V0TGVmdDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGJvcmRlclJhZGl1c0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGdldEJvcmRlclJhZGl1c1dpZGdldDogT2JzZXJ2YWJsZTxudW1iZXJbXXx1bmRlZmluZWQ+O1xuICBnZXRCb3JkZXJSYWRpdXNXaWRnZXRUb3BMZWZ0OiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldEJvcmRlclJhZGl1c1dpZGdldFRvcFJpZ2h0OiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldEJvcmRlclJhZGl1c1dpZGdldEJvdHRvbVJpZ2h0OiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGdldEJvcmRlclJhZGl1c1dpZGdldEJvdHRvbUxlZnQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBiYWNrZ3JvdW5kQ29sb3IgPSAnIzEyN2JkYyc7XG4gIHN0eWxlQmFja2dyb3VuZENvbG9yID0gJ3JnYigyNTUsMjU1LDI1NSwwKSc7XG4gIGJvcmRlckNvbG9yID0gJyMxMjdiZGMnO1xuICBzdHlsZUNvbG9yID0gJ3JnYigwLDAsMCwwKSc7XG4gIHdiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgZm9udFNpemU6IHN0cmluZztcbiAgYnViYmxlOiBzdHJpbmc7XG5cbiAgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWpmUmVwb3J0QnVpbGRlckZvcm1zQW5hbHl6ZXJEaWFsb2c+O1xuICBjb250YWluZXI6IEFqZkZvcm1WYXJpYWJsZXM7XG5cblxuICBhbGlnbiA9IFtmYWxzZSwgJ2NlbnRlcicsICdyaWdodCcsICdqdXN0aWZ5J107XG5cbiAgZm9udHMgPSBbXG4gICAgZmFsc2UsICdibGFja3InLCAnYmxhY2staXRhbGljJywgJ2JvbGQnLCAnYm9sZC1jb25kZW5zZWQnLCAnYm9sZC1jb25kZW5zZWQtaXRhbGljJyxcbiAgICAnYm9sZC1pdGFsaWMnLCAnY29uZGVuc2VkJywgJ2NvbmRlbnNlZC1pdGFsaWMnLCAnaXRhbGljJywgJ2xpZ2h0JywgJ2xpZ2h0LWl0YWxpYycsICdtZWRpdW0nLFxuICAgICdtZWRpdW0taXRhbGljJywgJ3RoaW5yJywgJ3RoaW4taXRhbGljJ1xuICBdO1xuICBjdXJyZW50TW9kdWxlOiBhbnkgPSB7fTtcbiAgcXVpbGxNb2R1bGVzID0ge1xuICAgIHRvb2xiYXI6IFtcbiAgICAgIFsnZm9ybXVsYSddLCBbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZScsICdzdHJpa2UnXSwgIC8vIHRvZ2dsZWQgYnV0dG9uc1xuICAgICAgLy8gWydibG9ja3F1b3RlJywgJ2NvZGUtYmxvY2snXSxcblxuICAgICAgW3snaGVhZGVyJzogMX0sIHsnaGVhZGVyJzogMn1dLCAgLy8gY3VzdG9tIGJ1dHRvbiB2YWx1ZXNcbiAgICAgIFt7J2xpc3QnOiAnb3JkZXJlZCd9LCB7J2xpc3QnOiAnYnVsbGV0J31dLFxuICAgICAgW3snc2NyaXB0JzogJ3N1Yid9LCB7J3NjcmlwdCc6ICdzdXBlcid9XSwgIC8vIHN1cGVyc2NyaXB0L3N1YnNjcmlwdFxuICAgICAgLy8gW3sgJ2luZGVudCc6ICctMSd9LCB7ICdpbmRlbnQnOiAnKzEnIH1dLCAgICAgICAgICAvLyBvdXRkZW50L2luZGVudFxuICAgICAgLy8gW3sgJ2RpcmVjdGlvbic6ICdydGwnIH1dLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0IGRpcmVjdGlvblxuXG4gICAgICBbeydzaXplJzogWydzbWFsbCcsIGZhbHNlLCAnbGFyZ2UnLCAnaHVnZSddfV0sICAvLyBjdXN0b20gZHJvcGRvd25cbiAgICAgIFt7J2hlYWRlcic6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV19XSxcblxuICAgICAgW3snY29sb3InOiB0aGlzLmNvbG9yc30sIHsnYmFja2dyb3VuZCc6IHRoaXMuY29sb3JzfV0sICAvLyBkcm9wZG93biB3aXRoIGRlZmF1bHRzIGZyb20gdGhlbWVcbiAgICAgIFt7J2ZvbnQnOiB0aGlzLmZvbnRzfV0sIFt7J2FsaWduJzogdGhpcy5hbGlnbn1dLFxuXG4gICAgICBbJ2NsZWFuJ10sICAvLyByZW1vdmUgZm9ybWF0dGluZyBidXR0b25cblxuICAgICAgLy8gWydsaW5rJywgJ2NsYXNzJywgJ3ZpZGVvJ10gICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluayBhbmQgaW1hZ2UsIHZpZGVvXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBDSEFSVFxuICAgKi9cblxuXG4gIGdldENoYXJ0WUxhYmVsczogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG5cbiAgY2hhcnRCb3JkZXJDb2xvcjogc3RyaW5nW10gPSBbXTtcbiAgY2hhcnRCb3JkZXJXaWR0aCA9IDM7XG5cbiAgLyoqXG4gICAqXG4gICAqIElNQUdFXG4gICAqL1xuXG4gIGltYWdlVXJsID0gJ2h0dHBzOi8vYW5ndWxhci5pby9yZXNvdXJjZXMvaW1hZ2VzL2xvZ29zL2FuZ3VsYXIyL2FuZ3VsYXIucG5nJztcblxuICAvKipcbiAgICpcbiAgICogVEVYVFxuICAgKi9cblxuICBodG1sVGV4dCA9ICcnO1xuXG5cbiAgLyoqXG4gICAqIHRoZXNlIHZhcmlhYmxlcyBpbmRpY2F0ZSB0aGF0IHRoZSB1c2VyIHdhbnQgdG8gY2hhbmdlIHNlY3Rpb25cbiAgICovXG4gIHJlcG9ydFN0eWxlcyA9IGZhbHNlO1xuICBzZWN0aW9uU3R5bGVzID0gZmFsc2U7XG4gIHdpZGdldFN0eWxlcyA9IHRydWU7XG4gIHNlY3Rpb25Db2xvciA9IGZhbHNlO1xuICB3aWRnZXRDb2xvciA9IGZhbHNlO1xuICB2aXNpYmlsaXR5U2VjdGlvbiA9IGZhbHNlO1xuICBjdXJyZW50Q29sb3IgPSAnJztcblxuICBwcml2YXRlIF9pY29uOiB7Zm9udFNldDogc3RyaW5nLCBmb250SWNvbjogc3RyaW5nfXxudWxsID0gbnVsbDtcbiAgZ2V0IGljb24oKToge2ZvbnRTZXQ6IHN0cmluZywgZm9udEljb246IHN0cmluZ318bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb247XG4gIH1cblxuICBpY29uU2V0OiBhbnkgPSB7J2ljb24nOiAndHJ1ZScsICd0aXRsZSc6ICdyZXBvcnQnLCAnZGF0YSc6IG51bGx9O1xuXG4gIGZsYWdTZXQ6IGFueSA9IHtcbiAgICAnaWNvbic6ICdmYWxzZScsXG4gICAgJ2NsYXNzJzogWydmbGFnLWljb24nXSxcbiAgICAncHJlZml4Q2xhc3MnOiAnZmxhZy1pY29uLScsXG4gICAgJ3RpdGxlJzogJ2ZsYWdzJyxcbiAgICAnZGF0YSc6XG4gICAgICAgIFtcbiAgICAgICAgICB7J2NsYXNzJzogJ2R6JywgJ2luZm8nOiAnQWxnZXJpYSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnYW8nLCAnaW5mbyc6ICdBbmdvbGEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2JqJywgJ2luZm8nOiAnQmVuaW4nfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2J3JywgJ2luZm8nOiAnQm90c3dhbmEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2JmJywgJ2luZm8nOiAnQnVya2luYSBGYXNvJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdiaScsICdpbmZvJzogJ0J1cnVuZGknfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2NtJywgJ2luZm8nOiAnQ2FtZXJvb24nfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2N2JywgJ2luZm8nOiAnQ2FibyBWZXJkZSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnY2YnLCAnaW5mbyc6ICdUaGUgQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICd0ZCcsICdpbmZvJzogJ0NoYWQnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2ttJywgJ2luZm8nOiAnVGhlIENvbW9yb3MnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2NpJywgJ2luZm8nOiAnQ290ZSBEXFwnYXZvaXJlJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdjZCcsICdpbmZvJzogJ1RoZSBEZW1vY3JhdGljIFJlcHVibGljIG9mIENvbmdvJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdkaicsICdpbmZvJzogJ0Rpamlib3V0aSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnZWcnLCAnaW5mbyc6ICdFZ3lwdCd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnZ3EnLCAnaW5mbyc6ICdFcXVhdG9yaWFsIEd1aW5lYSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnZXInLCAnaW5mbyc6ICdFcml0cmVhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdldCcsICdpbmZvJzogJ0V0aGlvcGlhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICd0ZicsICdpbmZvJzogJ0ZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnZ2EnLCAnaW5mbyc6ICdHYWJvbid9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnZ20nLCAnaW5mbyc6ICdUaGUgR2FtYmlhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdnaCcsICdpbmZvJzogJ0doYW5hJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdnbicsICdpbmZvJzogJ0d1aW5lYSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnZ3cnLCAnaW5mbyc6ICdHdWluZWEtQmlzc2F1J30sXG4gICAgICAgICAgeydjbGFzcyc6ICdrZScsICdpbmZvJzogJ0tlbnlhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdscycsICdpbmZvJzogJ0xlc2hvdGhvJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdscicsICdpbmZvJzogJ0xpYmVyaWEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2x5JywgJ2luZm8nOiAnTGlieWEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ21nJywgJ2luZm8nOiAnTWFkYWdhc2Nhcid9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnbXcnLCAnaW5mbyc6ICdNYWxhd3knfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ21sJywgJ2luZm8nOiAnTWFsaSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnbXInLCAnaW5mbyc6ICdNYXVyaXRhbmlhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdtdScsICdpbmZvJzogJ01hdXJpdGl1cyd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAneXQnLCAnaW5mbyc6ICdNYXlvdHRlJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdtYScsICdpbmZvJzogJ01hcm9jY28nfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ216JywgJ2luZm8nOiAnTW96YW1iaXF1ZSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnbmEnLCAnaW5mbyc6ICdOYW1pYmlhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICduZScsICdpbmZvJzogJ05pZ2VyJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICduZycsICdpbmZvJzogJ05pZ2VyaWEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2NnJywgJ2luZm8nOiAnUmVwdWJsaWMgb2YgdGhlIENvbmdvJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdydycsICdpbmZvJzogJ1J3bmRhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdyZScsICdpbmZvJzogJ3LDqHVuaW9uJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdzaCcsICdpbmZvJzogJ1NhaW50IEhlbGVuYSwgQXNjZW5zaW9uIGFuZCBUcmlzdGFuIGRhIEN1bmhhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdzdCcsICdpbmZvJzogJ1NhbyBUb21lIGFuZCBQcmluY2lwZSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnc24nLCAnaW5mbyc6ICdTZW5lZ2FsJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdzYycsICdpbmZvJzogJ1NleWNoZWxsZXMnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ3NsJywgJ2luZm8nOiAnU2llcnJhIExlb25lJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdzbycsICdpbmZvJzogJ1NvbWFsaWEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ3phJywgJ2luZm8nOiAnU291dGggQWZyaWNhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdzcycsICdpbmZvJzogJ1NvdXRoIFN1ZGFuJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdzZCcsICdpbmZvJzogJ1N1ZGFuJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdzeicsICdpbmZvJzogJ1N3YXppbGFuZCd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAndHonLCAnaW5mbyc6ICdUYW56YW5pYSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAndGcnLCAnaW5mbyc6ICdUb2dvJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICd0bicsICdpbmZvJzogJ1R1bmlzaWEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ3VnJywgJ2luZm8nOiAnVWdhbmRhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdlaCcsICdpbmZvJzogJ1dlc3Rlcm4gU2FoYXJhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICd6bScsICdpbmZvJzogJ1phbWJpYSd9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnencnLCAnaW5mbyc6ICdaaW1iYXdlJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdpcScsICdpbmZvJzogJ0lyYXEnfSxcbiAgICAgICAgICB7J2NsYXNzJzogJ2xiJywgJ2luZm8nOiAnTGViYW5vbid9LFxuICAgICAgICAgIHsnY2xhc3MnOiAnYmQnLCAnaW5mbyc6ICdCYW5nbGFkZXNoJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdpcicsICdpbmZvJzogJ0lyYW4gKElzbGFtaWMgUmVwdWJsaWMgb2YpJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdteScsICdpbmZvJzogJ01hbGF5c2lhJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICducCcsICdpbmZvJzogJ05lcGFsJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdwaycsICdpbmZvJzogJ1Bha2lzdGFuJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICd0aCcsICdpbmZvJzogJ1RoYWlsYW5kJ30sXG4gICAgICAgICAgeydjbGFzcyc6ICdqbycsICdpbmZvJzogJ0pvcmRhbid9LFxuICAgICAgICAgIHsnY2xhc3MnOiAneWUnLCAnaW5mbyc6ICdZZW1lbid9XG4gICAgICAgIF1cbiAgfTtcblxuICBwcml2YXRlIF9jdXJyZW50V2lkZ2V0U3ViOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2Zvcm1zU3ViOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2NvbG9yU3ViOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2hlYWRlclN0eWxlU3ViOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2NvbnRlbnRTdHlsZXNTdWI6IFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfZm9vdGVyU3R5bGVzU3ViOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX29yaWdpblN1YjogU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICBwcml2YXRlIF9zdHlsZXNVcGRhdGVzU3ViczogU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIHByaXZhdGUgX3VwZGF0ZVdpZGdldE1hcmdpbkV2dDogRXZlbnRFbWl0dGVyPHtpZHg6IG51bWJlciwgdmFsdWU6IGFueX0+ID1cbiAgICAgIG5ldyBFdmVudEVtaXR0ZXI8e2lkeDogbnVtYmVyLCB2YWx1ZTogYW55fT4oKTtcbiAgcHJpdmF0ZSBfdXBkYXRlV2lkZ2V0UGFkZGluZ0V2dDogRXZlbnRFbWl0dGVyPHtpZHg6IG51bWJlciwgdmFsdWU6IGFueX0+ID1cbiAgICAgIG5ldyBFdmVudEVtaXR0ZXI8e2lkeDogbnVtYmVyLCB2YWx1ZTogYW55fT4oKTtcbiAgcHJpdmF0ZSBfdXBkYXRlV2lkZ2V0Qm9yZGVyV2lkdGhFdnQ6IEV2ZW50RW1pdHRlcjx7aWR4OiBudW1iZXIsIHZhbHVlOiBhbnl9PiA9XG4gICAgICBuZXcgRXZlbnRFbWl0dGVyPHtpZHg6IG51bWJlciwgdmFsdWU6IGFueX0+KCk7XG4gIHByaXZhdGUgX3VwZGF0ZVdpZGdldEJvcmRlclJhZGl1c0V2dDogRXZlbnRFbWl0dGVyPHtpZHg6IG51bWJlciwgdmFsdWU6IGFueX0+ID1cbiAgICAgIG5ldyBFdmVudEVtaXR0ZXI8e2lkeDogbnVtYmVyLCB2YWx1ZTogYW55fT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSBfc2VydmljZTogQWpmUmVwb3J0QnVpbGRlclNlcnZpY2UpIHtcbiAgICB0aGlzLnNldEZvcm1zKCk7XG5cbiAgICB0aGlzLmljb25TZXQuZGF0YSA9IE9iamVjdC5rZXlzKF9zZXJ2aWNlLmljb25TZXRzKS5maWx0ZXIoeCA9PiB4ICE9ICdhamYtaWNvbicpLm1hcChpID0+IHtcbiAgICAgIHJldHVybiB7bmFtZTogaSwgaWNvbnM6IF9zZXJ2aWNlLmljb25TZXRzW2ldfTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2hlYWRlclN0eWxlU3ViID0gdGhpcy5fc2VydmljZS5oZWFkZXJTdHlsZXMuc3Vic2NyaWJlKHMgPT4ge1xuICAgICAgaWYgKHNbJ2JhY2tncm91bmQtY29sb3InXSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3R5bGVCYWNrZ3JvdW5kQ29sb3IgPSBzWydiYWNrZ3JvdW5kLWNvbG9yJ107XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fY29udGVudFN0eWxlc1N1YiA9IHRoaXMuX3NlcnZpY2UuY29udGVudFN0eWxlcy5zdWJzY3JpYmUocyA9PiB7XG4gICAgICBpZiAoc1snYmFja2dyb3VuZC1jb2xvciddICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zdHlsZUJhY2tncm91bmRDb2xvciA9IHNbJ2JhY2tncm91bmQtY29sb3InXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9mb290ZXJTdHlsZXNTdWIgPSB0aGlzLl9zZXJ2aWNlLmZvb3RlclN0eWxlcy5zdWJzY3JpYmUocyA9PiB7XG4gICAgICBpZiAoc1snYmFja2dyb3VuZC1jb2xvciddICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zdHlsZUJhY2tncm91bmRDb2xvciA9IHNbJ2JhY2tncm91bmQtY29sb3InXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9vcmlnaW5TdWIgPSB0aGlzLl9zZXJ2aWNlLm9yaWdpbi5zdWJzY3JpYmUocyA9PiB7XG4gICAgICB0aGlzLm9yaWdpbiA9IHM7XG4gICAgfSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKlxuICAgKiBVVElMU1xuICAgKi9cblxuXG4gIC8qKlxuICAgKiByZXR1cm4gYSBudW1iZXIgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBBamZSZXBvcnRCdWlsZGVyUHJvcGVydGllc1xuICAgKi9cbiAgdG9OdW1iZXIodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG51bWJlclBhdHRlcm4gPSAvXigtKT9cXGQrL2c7XG5cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSB2YWx1ZS5tYXRjaChudW1iZXJQYXR0ZXJuKTtcbiAgICAgIGlmIChtYXRjaGVzID09IG51bGwgfHwgbWF0Y2hlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBOdW1iZXIobWF0Y2hlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgdG9OdW1iZXJBcnJheSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAodmFsdWUgfHwgJycpXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXG4gICAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gJycgJiYgdiAhPSBudWxsKVxuICAgICAgICAgIC5tYXAodiA9PiB0aGlzLnRvTnVtYmVyKHYpKTtcbiAgICB9XG4gIH1cblxuICBmaWxsUHhOdW1iZXJBcnJheSh2YWx1ZTogbnVtYmVyW10pIHtcbiAgICBjb25zdCB2bCA9IHZhbHVlLmxlbmd0aDtcbiAgICBzd2l0Y2ggKHZsKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGNvbnN0IHYgPSB2YWx1ZVswXTtcbiAgICAgICAgcmV0dXJuIFt2LCB2LCB2LCB2XTtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgY29uc3QgdjIxID0gdmFsdWVbMF07XG4gICAgICAgIGNvbnN0IHYyMiA9IHZhbHVlWzFdO1xuICAgICAgICByZXR1cm4gW3YyMSwgdjIyLCB2MjEsIHYyMl07XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGNvbnN0IHYzMSA9IHZhbHVlWzBdO1xuICAgICAgICBjb25zdCB2MzIgPSB2YWx1ZVsxXTtcbiAgICAgICAgY29uc3QgdjMzID0gdmFsdWVbMl07XG4gICAgICAgIHJldHVybiBbdjMxLCB2MzIsIHYzMywgdjMyXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwZXJjZW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICBsZXQgdGVtcCA9IHRoaXMucm91bmRUbyh2YWx1ZSAqIDEwMCwgMyk7XG4gICAgcmV0dXJuIHRlbXA7XG4gIH1cblxuICByb3VuZFRvKHZhbHVlOiBudW1iZXIsIGRlY2ltYWxQb3NpdGlvbnM6IG51bWJlcikge1xuICAgIGxldCBpID0gdmFsdWUgKiBNYXRoLnBvdygxMCwgZGVjaW1hbFBvc2l0aW9ucyk7XG5cbiAgICBpID0gTWF0aC5mbG9vcihpKTtcblxuICAgIHJldHVybiBpIC8gTWF0aC5wb3coMTAsIGRlY2ltYWxQb3NpdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBjYWxsIHRvIHNlcnZpY2UgdG8gc2V0IHRoZSBmb3Jtc1xuICAgKlxuICAgKiBAbWVtYmVyT2YgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXNcbiAgICovXG5cbiAgc2V0Rm9ybXMoKTogdm9pZCB7XG4gICAgbGV0IGZvcm1zOiBBamZGb3JtW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZvcm1zSnNvbi5mb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3Jtcy5wdXNoKGRlZXBDb3B5KHRoaXMuZm9ybXNKc29uLmZvcm1zW2ldKSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXJ2aWNlLnNldFJlcG9ydEZvcm1zKGZvcm1zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdG8gc2VydmljZSB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSBpZHggY29sdW1uIG9mIGxheW91dCB3aWRnZXRcbiAgICpcbiAgICogQHBhcmFtIGNvbFxuICAgKiBAcGFyYW0gaWR4XG4gICAqXG4gICAqIEBtZW1iZXJPZiBBamZSZXBvcnRCdWlsZGVyUHJvcGVydGllc1xuICAgKi9cbiAgaW5zdGFudENvbHVtblZhbHVlKGNvbDogbnVtYmVyfG51bGwsIGlkeDogbnVtYmVyKSB7XG4gICAgaWYgKGNvbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXJ2aWNlLmluc3RhbnRDb2x1bW5WYWx1ZShjb2wsIGlkeCk7XG4gIH1cblxuICAvKipcbiAgICogIGZvcmNlIGNvcHkgb2Ygc3R5bGVcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICAvLyBUT0RPIGRlbGV0ZSB0aGlzXG4gIHNldFN0eWxlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRXaWRnZXQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRXaWRnZXQuc3R5bGVzID0gZGVlcENvcHkodGhpcy5jdXJyZW50V2lkZ2V0LnN0eWxlcyk7XG4gICAgdGhpcy5fc2VydmljZS51cGRhdGVDdXJyZW50V2lkZ2V0KHRoaXMuY3VycmVudFdpZGdldCk7XG4gIH1cblxuICAvKipcbiAgICogY2FsbCB0byBzZXJ2aWNlIHRvIGFkZCBuZXcgc3R5bGUgdG8gd2lkZ2V0XG4gICAqXG4gICAqIEBwYXJhbSBsYWJlbFxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICBzZXRXaWRnZXRTdHlsZXMobGFiZWw6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3NlcnZpY2Uuc2V0V2lkZ2V0U3R5bGVzKGxhYmVsLCB2YWx1ZSk7XG4gICAgdGhpcy5jdXJyZW50Q29sb3IgPSB2YWx1ZTtcbiAgICB0aGlzLnNldFN0eWxlKCk7XG4gIH1cblxuICBzZXRXaWRnZXRNYXJnaW4oaWR4OiBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVXaWRnZXRNYXJnaW5FdnQuZW1pdCh7aWR4LCB2YWx1ZX0pO1xuICB9XG5cbiAgc2V0V2lkZ2V0UGFkZGluZyhpZHg6IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3VwZGF0ZVdpZGdldFBhZGRpbmdFdnQuZW1pdCh7aWR4LCB2YWx1ZX0pO1xuICB9XG5cbiAgc2V0V2lkZ2V0Qm9yZGVyV2lkdGgoaWR4OiBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVXaWRnZXRCb3JkZXJXaWR0aEV2dC5lbWl0KHtpZHgsIHZhbHVlfSk7XG4gIH1cblxuICBzZXRXaWRnZXRCb3JkZXJSYWRpdXMoaWR4OiBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVXaWRnZXRCb3JkZXJSYWRpdXNFdnQuZW1pdCh7aWR4LCB2YWx1ZX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdG8gc2VydmljZSB0byBhZGQgbmV3IHN0eWxlIHRvIHNlY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIGxhYmVsXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKlxuICAgKiBAbWVtYmVyT2YgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXNcbiAgICovXG4gIHNldFNlY3Rpb25TdHlsZXMobGFiZWw6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3NlcnZpY2Uuc2V0U2VjdGlvblN0eWxlcyh0aGlzLm9yaWdpbiwgbGFiZWwsIHZhbHVlKTtcbiAgICB0aGlzLnN0eWxlQ29sb3IgPSB2YWx1ZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIGNhbGwgdG8gc2VydmljZSB0byBhZGQgbmV3IHN0eWxlIHRvIHJlcG9ydFxuICAgKlxuICAgKiBAcGFyYW0gbGFiZWxcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBBamZSZXBvcnRCdWlsZGVyUHJvcGVydGllc1xuICAgKi9cbiAgc2V0UmVwb3J0U3R5bGVzKGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9zZXJ2aWNlLnNldFJlcG9ydFN0eWxlcyhsYWJlbCwgdmFsdWUpO1xuICAgIHRoaXMuc3R5bGVCYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGQgY3VzdG9tIGNvbG9yXG4gICAqXG4gICAqXG4gICAqIEBtZW1iZXJPZiBBamZSZXBvcnRCdWlsZGVyUHJvcGVydGllc1xuICAgKi9cbiAgYWRkQ3VzdG9tQ29sb3IoKSB7XG4gICAgdGhpcy5fc2VydmljZS5hZGRDdXN0b21Db2xvcih0aGlzLmN1cnJlbnRDb2xvcik7XG4gICAgdGhpcy5fc2VydmljZS51cGRhdGVDdXJyZW50V2lkZ2V0KHRoaXMuY3VycmVudFdpZGdldCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBtb2R1bGUgZXhwbG9pdCB0byBxdWlsbCB0ZXh0IGVkaXRvclxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAbWVtYmVyT2YgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXNcbiAgICovXG4gIGdldE1vZHVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWlsbE1vZHVsZXM7XG4gIH1cblxuICAvKipcbiAgICogdHJ1ZSBpcyB0aGUgaW5wdXQgdHlwZSB2YWx1ZSBpcyBlcXVhbCB0byBjdXJyZW50IHdpZGdldCB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAbWVtYmVyT2YgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXNcbiAgICovXG4gIGlzQ2hhcnRUeXBlU2VsZWN0ZWQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmluaXRDaGFydFR5cGUgPT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbXlPYmogPSA8QWpmQ2hhcnRXaWRnZXQ+dGhpcy5jdXJyZW50V2lkZ2V0O1xuICAgIGlmICh2YWx1ZSA9PT0gbXlPYmouY2hhcnRUeXBlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG5cbiAgLyogbGF5b3V0IGZ1bmN0aW9ucyAqL1xuXG4gIC8qKlxuICAgKiBjYWxsIHRvIHNlcnZpY2UgdG8gYWRkIGEgY29sdW1uIHRvIGN1cnJlbnQgbGF5b3V0IHdpZGdldFxuICAgKlxuICAgKlxuICAgKiBAbWVtYmVyT2YgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXNcbiAgICovXG4gIGFkZENvbHVtbigpIHtcbiAgICB0aGlzLl9zZXJ2aWNlLmFkZENvbHVtbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdG8gc2VydmljZSB0byBhZGQgYSBvYmogdG8gY3VycmVudCBsYXlvdXQgd2lkZ2V0XG4gICAqXG4gICAqIEBwYXJhbSBpZHhcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICBmaXhlZENvbHVtbihpZHg6IG51bWJlcikge1xuICAgIHRoaXMuX3NlcnZpY2UuZml4ZWRDb2x1bW4oaWR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsIHRvIHNlcnZpY2UgdG8gcmVtb3ZlIG9iaiBvZiBjdXJyZW50IGxheW91dCB3aWRnZXRcbiAgICpcbiAgICogQHBhcmFtIGlkeFxuICAgKlxuICAgKiBAbWVtYmVyT2YgQWpmUmVwb3J0QnVpbGRlclByb3BlcnRpZXNcbiAgICovXG4gIHVuZml4ZWRDb2x1bW4oaWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZXJ2aWNlLnJlbW92ZSgndW5maXhlZENvbHVtbicsIGlkeCk7XG4gIH1cblxuICAvKiBpbWFnZSBmdW5jdGlvbnMgKi9cblxuICAvKipcbiAgICogY2FsbCB0byBzZXJ2aWNlIHRvIHNldCBpbWFnZSB1cmxcbiAgICpcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICBzZXRJbWFnZVVybCgpIHtcbiAgICB0aGlzLl9zZXJ2aWNlLnNldEltYWdlVXJsKHRoaXMuaW1hZ2VVcmwpO1xuICB9XG5cbiAgc2V0SWNvbihpY29uOiB7Zm9udFNldDogc3RyaW5nLCBmb250SWNvbjogc3RyaW5nfSkge1xuICAgIHRoaXMuX2ljb24gPSBpY29uO1xuICAgIHRoaXMuX3NlcnZpY2Uuc2V0SWNvbihpY29uKTtcbiAgfVxuXG4gIC8qIGNoYXJ0IGZ1bmN0aW9ucyAqL1xuXG4gIC8qKlxuICAgKiBjYWxsIHRvIHNlcnZpY2UgdG8gc2V0IHRoZSB0eXBlIG9mIGNoYXJ0XG4gICAqXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBBamZSZXBvcnRCdWlsZGVyUHJvcGVydGllc1xuICAgKi9cbiAgc2V0Q2hhcnRUeXBlKHR5cGU6IG51bWJlcikge1xuICAgIHRoaXMuaW5pdENoYXJ0VHlwZSA9IHRydWU7XG4gICAgdGhpcy5fc2VydmljZS5zZXRDaGFydFR5cGUodHlwZSk7XG4gIH1cblxuICBzZXRDaGFydEJvcmRlckNvbG9yKHZhbHVlOiBudW1iZXJ8bnVsbCkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NlcnZpY2Uuc2V0Q2hhcnRCb3JkZXJXaWR0aCh2YWx1ZSk7XG4gIH1cblxuICB0YWJWYWx1ZTogc3RyaW5nID0gJ2JhY2tncm91bmRDb2xvcic7XG4gIHNldFRhYihldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLnRhYlZhbHVlID0gJ2JhY2tncm91bmRDb2xvcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFiVmFsdWUgPSAnYm9yZGVyQ29sb3InO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsIHRvIHNlcnZpY2UgdG8gcmVtb3ZlIGJhY2tncm91bmQgY29sb3IgdG8gY3VycmVudCBjaGFydFxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICByZW1vdmVDaGFydEJhY2tncm91bmRDb2xvcihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fc2VydmljZS5yZW1vdmVDaGFydEJhY2tncm91bmRDb2xvcihpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogY2FsbCB0byBzZXJ2aWNlIHRvIHJlbW92ZSBib3JkZXIgY29sb3IgdG8gY3VycmVudCBjaGFydFxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICpcbiAgICogQG1lbWJlck9mIEFqZlJlcG9ydEJ1aWxkZXJQcm9wZXJ0aWVzXG4gICAqL1xuICByZW1vdmVDaGFydEJvcmRlckNvbG9yKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZXJ2aWNlLnJlbW92ZUNoYXJ0Qm9yZGVyQ29sb3IoaW5kZXgpO1xuICB9XG5cbiAgaGlkZU1lbnUoKSB7XG4gICAgdGhpcy5fc2VydmljZS51cGRhdGVDdXJyZW50V2lkZ2V0KG51bGwpO1xuICB9XG5cbiAgb3BlbkZvcm11bGFEaWFsb2coZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW4oQWpmUmVwb3J0QnVpbGRlckZvcm1zQW5hbHl6ZXJEaWFsb2cpO1xuICAgIHRoaXMuZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmFnZ3JlZ2F0aW9uID0gQWpmQWdncmVnYXRpb25UeXBlLk5vbmU7XG4gICAgdGhpcy5kaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNGb3JtdWxhID0gdHJ1ZTtcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCAmJiBldmVudC5yZWZlcmVuY2UgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZm9ybXVsYSA9IGV2ZW50LmZvcm11bGE7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5yZWZlcmVuY2UgPSBldmVudC5yZWZlcmVuY2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybXNTdWIgPSB0aGlzLl9zZXJ2aWNlLnJlcG9ydEZvcm1zLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgIHRoaXMuZm9ybXMgPSB4IHx8IFtdO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY3VycmVudFdpZGdldFN1YiA9IHRoaXMuX3NlcnZpY2UuY3VycmVudFdpZGdldC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICBpZiAoeCAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRXaWRnZXQgIT09IHgpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRXaWRnZXQgPSB4O1xuICAgICAgICAgIHRoaXMud2lkZ2V0TmFtZSA9IEFqZldpZGdldFR5cGVbeC53aWRnZXRUeXBlXTtcbiAgICAgICAgICB0aGlzLnJlcG9ydFN0eWxlcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2VjdGlvblN0eWxlcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMud2lkZ2V0U3R5bGVzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZWN0aW9uQ29sb3IgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLndpZGdldENvbG9yID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VjdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRXaWRnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLndpZGdldE5hbWUgPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9jb2xvclN1YiA9IHRoaXMuX3NlcnZpY2UuY29sb3JzLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgIGlmICh4ICYmIHgubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbG9ycyA9IHg7XG5cbiAgICAgICAgdGhpcy5xdWlsbE1vZHVsZXMgPSB7XG4gICAgICAgICAgdG9vbGJhcjogW1xuICAgICAgICAgICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnc3RyaWtlJ10sICAvLyB0b2dnbGVkIGJ1dHRvbnNcbiAgICAgICAgICAgIC8vIFsnYmxvY2txdW90ZScsICdjb2RlLWJsb2NrJ10sXG4gICAgICAgICAgICBbeydoZWFkZXInOiAxfSwgeydoZWFkZXInOiAyfV0sICAvLyBjdXN0b20gYnV0dG9uIHZhbHVlc1xuICAgICAgICAgICAgW3snbGlzdCc6ICdvcmRlcmVkJ30sIHsnbGlzdCc6ICdidWxsZXQnfV0sXG4gICAgICAgICAgICBbeydzY3JpcHQnOiAnc3ViJ30sIHsnc2NyaXB0JzogJ3N1cGVyJ31dLCAgLy8gc3VwZXJzY3JpcHQvc3Vic2NyaXB0XG4gICAgICAgICAgICAvLyBbeyAnaW5kZW50JzogJy0xJ30sIHsgJ2luZGVudCc6ICcrMScgfV0sICAgICAgICAgIC8vIG91dGRlbnQvaW5kZW50XG4gICAgICAgICAgICAvLyBbeyAnZGlyZWN0aW9uJzogJ3J0bCcgfV0sICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgZGlyZWN0aW9uXG5cbiAgICAgICAgICAgIFt7J3NpemUnOiBbJ3NtYWxsJywgZmFsc2UsICdsYXJnZScsICdodWdlJ119XSwgIC8vIGN1c3RvbSBkcm9wZG93blxuICAgICAgICAgICAgW3snaGVhZGVyJzogWzEsIDIsIDMsIDQsIDUsIDYsIGZhbHNlXX1dLFxuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHsnY29sb3InOiB0aGlzLmNvbG9yc30sIHsnYmFja2dyb3VuZCc6IHRoaXMuY29sb3JzfVxuICAgICAgICAgICAgXSwgIC8vIGRyb3Bkb3duIHdpdGggZGVmYXVsdHMgZnJvbSB0aGVtZVxuICAgICAgICAgICAgW3snZm9udCc6IHRoaXMuZm9udHN9XSwgW3snYWxpZ24nOiB0aGlzLmFsaWdufV0sIFsnZm9ybXVsYSddLFxuICAgICAgICAgICAgWydjbGVhbiddLCAgLy8gcmVtb3ZlIGZvcm1hdHRpbmcgYnV0dG9uXG5cbiAgICAgICAgICAgIC8vIFsnbGluaycsICdjbGFzcycsICd2aWRlbyddICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmsgYW5kIGltYWdlLCB2aWRlb1xuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgdGhpcy5nZXRIVE1MID0gdGhpcy5fc2VydmljZS5jdXJyZW50V2lkZ2V0LnBpcGUoXG4gICAgICAgIG1hcCgod2lkZ2V0OiBBamZXaWRnZXR8bnVsbCkgPT4ge1xuICAgICAgICAgIGlmICh3aWRnZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbXlPYmogPSA8QWpmVGV4dFdpZGdldD50aGlzLmN1cnJlbnRXaWRnZXQ7XG4gICAgICAgICAgICByZXR1cm4gbXlPYmouaHRtbFRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHN0YXJ0V2l0aCgnPHA+PGJyPjwvcD4nKSk7XG5cblxuICAgIHRoaXMuZ2V0SGVpZ2h0V2lkZ2V0ID0gdGhpcy5fc2VydmljZS5jdXJyZW50V2lkZ2V0LnBpcGUoXG4gICAgICAgIGZpbHRlcih4ID0+IHggIT0gbnVsbCksIG1hcCgobXlPYmo6IEFqZldpZGdldHxudWxsKSA9PiB7XG4gICAgICAgICAgaWYgKG15T2JqICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudG9OdW1iZXIobXlPYmouc3R5bGVzWydoZWlnaHQnXSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCB8fCB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgdGhpcy5nZXRGb250U2l6ZVdpZGdldCA9IHRoaXMuX3NlcnZpY2UuY3VycmVudFdpZGdldC5waXBlKFxuICAgICAgICBtYXAoKG15T2JqOiBBamZXaWRnZXR8bnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChteU9iaiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudG9OdW1iZXIobXlPYmouc3R5bGVzWydmb250LXNpemUnXSkgfHwgMTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICB0aGlzLmdldEZvbnRBbGlnbldpZGdldCA9IHRoaXMuX3NlcnZpY2UuY3VycmVudFdpZGdldC5waXBlKFxuICAgICAgICBtYXAoKG15T2JqOiBBamZXaWRnZXR8bnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChteU9iaiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gKChteU9iai5zdHlsZXNbJ3RleHQtYWxpZ24nXSkgfHwgJ2NlbnRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICB0aGlzLmdldEJvcmRlcldpZHRoV2lkZ2V0ID0gdGhpcy5fc2VydmljZS5jdXJyZW50V2lkZ2V0LnBpcGUoXG4gICAgICAgIG1hcCgobXlPYmo6IEFqZldpZGdldHxudWxsKSA9PiB7XG4gICAgICAgICAgaWYgKG15T2JqICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGxQeE51bWJlckFycmF5KHRoaXMudG9OdW1iZXJBcnJheShteU9iai5zdHlsZXNbJ2JvcmRlci13aWR0aCddKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzdGFydFdpdGgoWzAsIDAsIDAsIDBdKSk7XG4gICAgdGhpcy5nZXRCb3JkZXJXaWR0aFdpZGdldFRvcCA9XG4gICAgICAgIHRoaXMuZ2V0Qm9yZGVyV2lkdGhXaWRnZXQucGlwZShmaWx0ZXIobSA9PiBtICE9IG51bGwpLCBtYXAobSA9PiBtIVswXSkpO1xuICAgIHRoaXMuZ2V0Qm9yZGVyV2lkdGhXaWRnZXRSaWdodCA9XG4gICAgICAgIHRoaXMuZ2V0Qm9yZGVyV2lkdGhXaWRnZXQucGlwZShmaWx0ZXIobSA9PiBtICE9IG51bGwpLCBtYXAobSA9PiBtIVsxXSkpO1xuICAgIHRoaXMuZ2V0Qm9yZGVyV2lkdGhXaWRnZXRCb3R0b20gPVxuICAgICAgICB0aGlzLmdldEJvcmRlcldpZHRoV2lkZ2V0LnBpcGUoZmlsdGVyKG0gPT4gbSAhPSBudWxsKSwgbWFwKG0gPT4gbSFbMl0pKTtcbiAgICB0aGlzLmdldEJvcmRlcldpZHRoV2lkZ2V0TGVmdCA9XG4gICAgICAgIHRoaXMuZ2V0Qm9yZGVyV2lkdGhXaWRnZXQucGlwZShmaWx0ZXIobSA9PiBtICE9IG51bGwpLCBtYXAobSA9PiBtIVszXSkpO1xuXG4gICAgdGhpcy5nZXRCb3JkZXJSYWRpdXNXaWRnZXQgPSB0aGlzLl9zZXJ2aWNlLmN1cnJlbnRXaWRnZXQucGlwZShcbiAgICAgICAgbWFwKChteU9iajogQWpmV2lkZ2V0fG51bGwpID0+IHtcbiAgICAgICAgICBpZiAobXlPYmogIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsbFB4TnVtYmVyQXJyYXkodGhpcy50b051bWJlckFycmF5KG15T2JqLnN0eWxlc1snYm9yZGVyLXJhZGl1cyddKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzdGFydFdpdGgoWzAsIDAsIDAsIDBdKSk7XG4gICAgdGhpcy5nZXRCb3JkZXJSYWRpdXNXaWRnZXRUb3BMZWZ0ID1cbiAgICAgICAgdGhpcy5nZXRCb3JkZXJSYWRpdXNXaWRnZXQucGlwZShmaWx0ZXIobSA9PiBtICE9IG51bGwpLCBtYXAobSA9PiBtIVswXSkpO1xuICAgIHRoaXMuZ2V0Qm9yZGVyUmFkaXVzV2lkZ2V0VG9wUmlnaHQgPVxuICAgICAgICB0aGlzLmdldEJvcmRlclJhZGl1c1dpZGdldC5waXBlKGZpbHRlcihtID0+IG0gIT0gbnVsbCksIG1hcChtID0+IG0hWzFdKSk7XG4gICAgdGhpcy5nZXRCb3JkZXJSYWRpdXNXaWRnZXRCb3R0b21SaWdodCA9XG4gICAgICAgIHRoaXMuZ2V0Qm9yZGVyUmFkaXVzV2lkZ2V0LnBpcGUoZmlsdGVyKG0gPT4gbSAhPSBudWxsKSwgbWFwKG0gPT4gbSFbMl0pKTtcbiAgICB0aGlzLmdldEJvcmRlclJhZGl1c1dpZGdldEJvdHRvbUxlZnQgPVxuICAgICAgICB0aGlzLmdldEJvcmRlclJhZGl1c1dpZGdldC5waXBlKGZpbHRlcihtID0+IG0gIT0gbnVsbCksIG1hcChtID0+IG0hWzNdKSk7XG5cbiAgICB0aGlzLmdldE1hcmdpbldpZGdldCA9IHRoaXMuX3NlcnZpY2UuY3VycmVudFdpZGdldC5waXBlKFxuICAgICAgICBtYXAoKG15T2JqOiBBamZXaWRnZXR8bnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChteU9iaiAhPSBudWxsICYmIG15T2JqLnN0eWxlcyAhPSBudWxsICYmIG15T2JqLnN0eWxlc1snbWFyZ2luJ10gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsbFB4TnVtYmVyQXJyYXkodGhpcy50b051bWJlckFycmF5KG15T2JqLnN0eWxlc1snbWFyZ2luJ10pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHN0YXJ0V2l0aChbMCwgMCwgMCwgMF0pKTtcbiAgICB0aGlzLmdldE1hcmdpbldpZGdldFRvcCA9IHRoaXMuZ2V0TWFyZ2luV2lkZ2V0LnBpcGUoZmlsdGVyKG0gPT4gbSAhPSBudWxsKSwgbWFwKG0gPT4gbSFbMF0pKTtcbiAgICB0aGlzLmdldE1hcmdpbldpZGdldFJpZ2h0ID0gdGhpcy5nZXRNYXJnaW5XaWRnZXQucGlwZShmaWx0ZXIobSA9PiBtICE9IG51bGwpLCBtYXAobSA9PiBtIVsxXSkpO1xuICAgIHRoaXMuZ2V0TWFyZ2luV2lkZ2V0Qm90dG9tID0gdGhpcy5nZXRNYXJnaW5XaWRnZXQucGlwZShmaWx0ZXIobSA9PiBtICE9IG51bGwpLCBtYXAobSA9PiBtIVsyXSkpO1xuICAgIHRoaXMuZ2V0TWFyZ2luV2lkZ2V0TGVmdCA9IHRoaXMuZ2V0TWFyZ2luV2lkZ2V0LnBpcGUoZmlsdGVyKG0gPT4gbSAhPSBudWxsKSwgbWFwKG0gPT4gbSFbM10pKTtcblxuICAgIHRoaXMuZ2V0UGFkZGluZ1dpZGdldCA9IHRoaXMuX3NlcnZpY2UuY3VycmVudFdpZGdldC5waXBlKFxuICAgICAgICBtYXAoKG15T2JqOiBBamZXaWRnZXR8bnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChteU9iaiAhPSBudWxsICYmIG15T2JqLnN0eWxlcyAhPSBudWxsICYmIG15T2JqLnN0eWxlc1sncGFkZGluZyddICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGxQeE51bWJlckFycmF5KHRoaXMudG9OdW1iZXJBcnJheShteU9iai5zdHlsZXNbJ3BhZGRpbmcnXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgdGhpcy5nZXRQYWRkaW5nV2lkZ2V0VG9wID0gdGhpcy5nZXRQYWRkaW5nV2lkZ2V0LnBpcGUoZmlsdGVyKG0gPT4gbSAhPSBudWxsKSwgbWFwKG0gPT4gbSFbMF0pKTtcbiAgICB0aGlzLmdldFBhZGRpbmdXaWRnZXRSaWdodCA9XG4gICAgICAgIHRoaXMuZ2V0UGFkZGluZ1dpZGdldC5waXBlKGZpbHRlcihtID0+IG0gIT0gbnVsbCksIG1hcChtID0+IG0hWzFdKSk7XG4gICAgdGhpcy5nZXRQYWRkaW5nV2lkZ2V0Qm90dG9tID1cbiAgICAgICAgdGhpcy5nZXRQYWRkaW5nV2lkZ2V0LnBpcGUoZmlsdGVyKG0gPT4gbSAhPSBudWxsKSwgbWFwKG0gPT4gbSFbMl0pKTtcbiAgICB0aGlzLmdldFBhZGRpbmdXaWRnZXRMZWZ0ID0gdGhpcy5nZXRQYWRkaW5nV2lkZ2V0LnBpcGUoZmlsdGVyKG0gPT4gbSAhPSBudWxsKSwgbWFwKG0gPT4gbSFbM10pKTtcblxuICAgIHRoaXMuZ2V0QmFja2dyb3VuZENvbG9yV2lkZ2V0ID0gdGhpcy5fc2VydmljZS5jdXJyZW50V2lkZ2V0LnBpcGUoXG4gICAgICAgIG1hcCgobXlPYmo6IEFqZldpZGdldHxudWxsKSA9PiB7XG4gICAgICAgICAgaWYgKG15T2JqICE9IG51bGwgJiYgbXlPYmouc3R5bGVzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBteU9iai5zdHlsZXNbJ2JhY2tncm91bmRDb2xvciddIHx8ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgdGhpcy5nZXRDb2xvcldpZGdldCA9IHRoaXMuX3NlcnZpY2UuY3VycmVudFdpZGdldC5waXBlKFxuICAgICAgICBtYXAoKG15T2JqOiBBamZXaWRnZXR8bnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChteU9iaiAhPSBudWxsICYmIG15T2JqLnN0eWxlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbXlPYmouc3R5bGVzWydjb2xvciddIHx8ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgdGhpcy5fc3R5bGVzVXBkYXRlc1N1YnMgPSB0aGlzLl91cGRhdGVXaWRnZXRNYXJnaW5FdnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5nZXRNYXJnaW5XaWRnZXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gclswXS5pZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gKHJbMV0gfHwgWzAsIDAsIDAsIDBdKSBhcyBudW1iZXJbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwgfHwgdi5sZW5ndGggPCBpZHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdltpZHhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFdpZGdldFN0eWxlcygnbWFyZ2luJywgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdHlsZXNVcGRhdGVzU3Vicy5hZGQodGhpcy5fdXBkYXRlV2lkZ2V0UGFkZGluZ0V2dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5nZXRQYWRkaW5nV2lkZ2V0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHJbMF0uaWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSAoclsxXSB8fCBbMCwgMCwgMCwgMF0pIGFzIG51bWJlcltdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBudWxsIHx8IHYubGVuZ3RoIDwgaWR4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFdpZGdldFN0eWxlcygncGFkZGluZycsIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgdGhpcy5fc3R5bGVzVXBkYXRlc1N1YnMuYWRkKHRoaXMuX3VwZGF0ZVdpZGdldEJvcmRlcldpZHRoRXZ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmdldEJvcmRlcldpZHRoV2lkZ2V0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHJbMF0uaWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJbMF0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSAoclsxXSB8fCBbMCwgMCwgMCwgMF0pIGFzIG51bWJlcltdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBudWxsIHx8IHYubGVuZ3RoIDwgaWR4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFdpZGdldFN0eWxlcygnYm9yZGVyLXdpZHRoJywgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICB0aGlzLl9zdHlsZXNVcGRhdGVzU3Vicy5hZGQodGhpcy5fdXBkYXRlV2lkZ2V0Qm9yZGVyUmFkaXVzRXZ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmdldEJvcmRlclJhZGl1c1dpZGdldCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHggPSByWzBdLmlkeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByWzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gKHJbMV0gfHwgWzAsIDAsIDAsIDBdKSBhcyBudW1iZXJbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCB8fCB2Lmxlbmd0aCA8IGlkeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2W2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRXaWRnZXRTdHlsZXMoJ2JvcmRlci1yYWRpdXMnLCB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIHRoaXMuY3VycmVudFdpZGdldCA9IGNoYW5nZXMud2lkZ2V0LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAodGhpcy5jdXJyZW50V2lkZ2V0ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy53aWRnZXROYW1lID0gQWpmV2lkZ2V0VHlwZVt0aGlzLmN1cnJlbnRXaWRnZXQud2lkZ2V0VHlwZV07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50V2lkZ2V0U3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fZm9ybXNTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9jb2xvclN1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2hlYWRlclN0eWxlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fY29udGVudFN0eWxlc1N1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2Zvb3RlclN0eWxlc1N1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX29yaWdpblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3N0eWxlc1VwZGF0ZXNTdWJzLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjdXJyZW50V2lkZ2V0ICE9IG51bGxcIj5cbiAgPGRpdiBjbGFzcz1cImFqZi1jb250ZW50XCI+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgY2xhc3M9XCJhamYtaGlkZS1tZW51XCJcbiAgICAgIG1hdFRvb2x0aXA9XCJoaWRlLW1lbnVcIlxuICAgICAgKGNsaWNrKT1cImhpZGVNZW51KClcIlxuICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYWJvdmUnXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+cmVtb3ZlX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJhamYtbWVudS1jc3NcIj5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAoY2xpY2spPVwicmVwb3J0U3R5bGVzID0gIXJlcG9ydFN0eWxlczsgc2VjdGlvblN0eWxlcyA9IGZhbHNlOyB3aWRnZXRTdHlsZXMgPSBmYWxzZVwiXG4gICAgICAgIHZhbHVlPVwibGVmdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnYWpmLXNlbGVjdGVkJzogcmVwb3J0U3R5bGVzfVwiXG4gICAgICA+XG4gICAgICAgIHJlcG9ydFxuICAgICAgICA8bmctY29udGFpbmVyPnt7J0NTUyBzdHlsZSd8dHJhbnNsb2NvfX08L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgKGNsaWNrKT1cInNlY3Rpb25TdHlsZXMgPSAhc2VjdGlvblN0eWxlczsgcmVwb3J0U3R5bGVzID0gZmFsc2U7IHdpZGdldFN0eWxlcyA9IGZhbHNlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydhamYtc2VsZWN0ZWQnOiBzZWN0aW9uU3R5bGVzfVwiXG4gICAgICA+XG4gICAgICAgIHt7IG9yaWdpbiB9fVxuICAgICAgICA8bmctY29udGFpbmVyPnt7J0NTUyBzdHlsZSd8dHJhbnNsb2NvfX08L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgKGNsaWNrKT1cIndpZGdldFN0eWxlcyA9ICF3aWRnZXRTdHlsZXM7IHNlY3Rpb25TdHlsZXMgPSBmYWxzZTsgcmVwb3J0U3R5bGVzID0gZmFsc2VcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2FqZi1zZWxlY3RlZCc6IHdpZGdldFN0eWxlc31cIlxuICAgICAgPlxuICAgICAgICB7eyB3aWRnZXROYW1lIH19XG4gICAgICAgIDxuZy1jb250YWluZXI+e3snQ1NTIHN0eWxlJ3x0cmFuc2xvY299fTwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgIDxkaXYgY2xhc3M9XCJhamYtc3R5bGUtY29udGFpbmVyXCIgKm5nSWY9XCIocmVwb3J0U3R5bGVzKSA/IHRydWUgOiBmYWxzZSBcIj5cbiAgICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXN0eWxlLXBhbmVsXCI+XG4gICAgICAgICAgICA8YWpmLXRoZW1lLWNvbG9yXG4gICAgICAgICAgICAgIFtzZWN0aW9uXT1cIidyZXBvcnQnXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb2xvcidcIlxuICAgICAgICAgICAgPjwvYWpmLXRoZW1lLWNvbG9yPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFqZi1zdHlsZS1jb250YWluZXJcIiAqbmdJZj1cIihzZWN0aW9uU3R5bGVzKSA/IHRydWUgOiBmYWxzZSBcIj5cbiAgICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXN0eWxlLXBhbmVsXCI+XG4gICAgICAgICAgICA8YWpmLXRoZW1lLWNvbG9yXG4gICAgICAgICAgICAgIFtzZWN0aW9uXT1cIidzZWN0aW9uJ1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInY29sb3InXCJcbiAgICAgICAgICAgID48L2FqZi10aGVtZS1jb2xvcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhamYtc3R5bGUtY29udGFpbmVyXCIgKm5nSWY9XCIod2lkZ2V0U3R5bGVzKSA/IHRydWUgOiBmYWxzZSBcIj5cbiAgICAgIDxtYXQtdGFiLWdyb3VwICpuZ0lmPVwiKGN1cnJlbnRXaWRnZXQud2lkZ2V0VHlwZSAhPSA0KVwiPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkNvbG9yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi1zdHlsZS1wYW5lbFwiPlxuICAgICAgICAgICAgPGFqZi10aGVtZS1jb2xvclxuICAgICAgICAgICAgICBbc2VjdGlvbl09XCInd2lkZ2V0J1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInY29sb3InXCJcbiAgICAgICAgICAgICAgW2luaXRdPVwiJ2ljb24nXCJcbiAgICAgICAgICAgID48L2FqZi10aGVtZS1jb2xvcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXN0eWxlLXBhbmVsXCI+XG4gICAgICAgICAgICA8YWpmLXRoZW1lLWNvbG9yXG4gICAgICAgICAgICAgIFtzZWN0aW9uXT1cIid3aWRnZXQnXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidiYWNrZ3JvdW5kLWNvbG9yJ1wiXG4gICAgICAgICAgICA+PC9hamYtdGhlbWUtY29sb3I+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwcm9wZXJ0aWVzLWNvbnRhaW5lclwiXG4gICAgICAgICpuZ0lmPVwiKGN1cnJlbnRXaWRnZXQud2lkZ2V0VHlwZSAhPT0gOClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLWxheW91dC1wcmV2aWV3XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi12Ym90dG9tXCI+XG4gICAgICAgICAgICA8ZGl2Pnt7J2hlaWdodCd8dHJhbnNsb2NvfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+e3sgZ2V0SGVpZ2h0V2lkZ2V0fGFzeW5jIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi1tYXJnaW4tYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXRvcC1sYWJlbFwiPnt7J21hcmdpbid8dHJhbnNsb2NvfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdnRvcFwiPnt7IGdldE1hcmdpbldpZGdldFRvcHxhc3luYyB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi12cmlnaHRcIj57eyBnZXRNYXJnaW5XaWRnZXRSaWdodHxhc3luYyB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi12Ym90dG9tXCI+e3sgZ2V0TWFyZ2luV2lkZ2V0Qm90dG9tfGFzeW5jIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXZsZWZ0XCI+e3sgZ2V0TWFyZ2luV2lkZ2V0TGVmdHxhc3luYyB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi1ib3JkZXItYm94XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdnRvcFwiPnt7IGdldEJvcmRlcldpZHRoV2lkZ2V0VG9wfGFzeW5jIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdnJpZ2h0XCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0Qm9yZGVyV2lkdGhXaWRnZXRSaWdodHxhc3luYyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi12Ym90dG9tXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0Qm9yZGVyV2lkdGhXaWRnZXRCb3R0b218YXN5bmMgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdmxlZnRcIj57eyBnZXRCb3JkZXJXaWR0aFdpZGdldExlZnR8YXN5bmMgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi12dGxcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRCb3JkZXJSYWRpdXNXaWRnZXRUb3BMZWZ0fGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXZ0clwiPlxuICAgICAgICAgICAgICAgIHt7IGdldEJvcmRlclJhZGl1c1dpZGdldFRvcFJpZ2h0fGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXZiclwiPlxuICAgICAgICAgICAgICAgIHt7IGdldEJvcmRlclJhZGl1c1dpZGdldEJvdHRvbVJpZ2h0fGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXZibFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldEJvcmRlclJhZGl1c1dpZGdldEJvdHRvbUxlZnR8YXN5bmMgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdG9wLWxhYmVsXCI+e3snYm9yZGVyJ3x0cmFuc2xvY299fTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXBhZGRpbmctYm94XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi10b3AtbGFiZWxcIj57eydwYWRkaW5nJ3x0cmFuc2xvY299fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdnRvcFwiPnt7IGdldFBhZGRpbmdXaWRnZXRUb3B8YXN5bmMgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXZyaWdodFwiPnt7IGdldFBhZGRpbmdXaWRnZXRSaWdodHxhc3luYyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdmJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0UGFkZGluZ1dpZGdldEJvdHRvbXxhc3luYyB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtdmxlZnRcIj57eyBnZXRQYWRkaW5nV2lkZ2V0TGVmdHxhc3luYyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhamYtY29udGVudC1ib3hcIj57eydjb250ZW50J3x0cmFuc2xvY299fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1ncmlkLWxpc3Qgcm93SGVpZ2h0PVwiMmVtXCIgY29scz1cIjEyXCI+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGU+PC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICA8c3Bhbj57eydoZWlnaHQnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRTdHlsZXMoJ2hlaWdodCcsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgbWF4PVwiMjAwXCJcbiAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0SGVpZ2h0V2lkZ2V0fGFzeW5jXCJcbiAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiMVwiXG4gICAgICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgPG1hdC1ncmlkLWxpc3QgY29scz1cIjEyXCI+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWFyZ2luRXhwYW5kZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibWFyZ2luRXhwYW5kZWQgPSAhbWFyZ2luRXhwYW5kZWRcIlxuICAgICAgICAgICAgICA+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCJtYXJnaW5FeHBhbmRlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJtYXJnaW5FeHBhbmRlZCA9ICFtYXJnaW5FeHBhbmRlZFwiXG4gICAgICAgICAgICAgID5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjbGFzcz1cImFqZi1sYWxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgPHNwYW4+e3snbWFyZ2luJ3x0cmFuc2xvY299fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtYXJnaW5FeHBhbmRlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0V2lkZ2V0U3R5bGVzKCdtYXJnaW4nLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgbWluPVwiLTUwXCJcbiAgICAgICAgICAgICAgbWF4PVwiNTBcIlxuICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRNYXJnaW5XaWRnZXRUb3B8YXN5bmNcIlxuICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwibWFyZ2luRXhwYW5kZWRcIj5cbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPjwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxzcGFuPnt7J21hcmdpbiB0b3AnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldE1hcmdpbigwLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBtaW49XCItNTBcIlxuICAgICAgICAgICAgICAgIG1heD1cIjUwXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldE1hcmdpbldpZGdldFRvcHxhc3luY1wiXG4gICAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgICAgICAgPG1hdC1ncmlkLWxpc3QgY29scz1cIjEyXCI+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZT48L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjbGFzcz1cImFqZi1sYWxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgICAmbmJzcDsmbmJzcDs8c3Bhbj57eydtYXJnaW4gcmlnaHQnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldE1hcmdpbigxLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBtaW49XCItNTBcIlxuICAgICAgICAgICAgICAgIG1heD1cIjUwXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldE1hcmdpbldpZGdldFJpZ2h0fGFzeW5jXCJcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPjwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxzcGFuPnt7J21hcmdpbiBib3R0b20nfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldE1hcmdpbigyLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBtaW49XCItNTBcIlxuICAgICAgICAgICAgICAgIG1heD1cIjUwXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldE1hcmdpbldpZGdldEJvdHRvbXxhc3luY1wiXG4gICAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgICAgICAgPG1hdC1ncmlkLWxpc3QgY29scz1cIjEyXCI+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZT48L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjbGFzcz1cImFqZi1sYWxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgICAmbmJzcDsmbmJzcDs8c3Bhbj57eydtYXJnaW4gbGVmdCd8dHJhbnNsb2NvfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0V2lkZ2V0TWFyZ2luKDMsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgIG1pbj1cIi01MFwiXG4gICAgICAgICAgICAgICAgbWF4PVwiNTBcIlxuICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TWFyZ2luV2lkZ2V0TGVmdHxhc3luY1wiXG4gICAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxtYXQtZ3JpZC1saXN0IGNvbHM9XCIxMlwiPlxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXBhZGRpbmdFeHBhbmRlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYWRkaW5nRXhwYW5kZWQgPSAhcGFkZGluZ0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwicGFkZGluZ0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInBhZGRpbmdFeHBhbmRlZCA9ICFwYWRkaW5nRXhwYW5kZWRcIlxuICAgICAgICAgICAgICA+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb25cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY2xhc3M9XCJhamYtbGFsXCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7J3BhZGRpbmcnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRTdHlsZXMoJ3BhZGRpbmcnLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgbWluPVwiLTUwXCJcbiAgICAgICAgICAgICAgbWF4PVwiNTBcIlxuICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRQYWRkaW5nV2lkZ2V0VG9wfGFzeW5jXCJcbiAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInBhZGRpbmdFeHBhbmRlZFwiPlxuICAgICAgICAgIDxtYXQtZ3JpZC1saXN0IGNvbHM9XCIxMlwiPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGU+PC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY2xhc3M9XCJhamYtbGFsXCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PHNwYW4+e3sncGFkZGluZyB0b3AnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldFBhZGRpbmcoMCwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgbWluPVwiLTUwXCJcbiAgICAgICAgICAgICAgICBtYXg9XCI1MFwiXG4gICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRQYWRkaW5nV2lkZ2V0VG9wfGFzeW5jXCJcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPjwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxzcGFuPnt7J3BhZGRpbmcgcmlnaHQnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldFBhZGRpbmcoMSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgbWluPVwiLTUwXCJcbiAgICAgICAgICAgICAgICBtYXg9XCI1MFwiXG4gICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRQYWRkaW5nV2lkZ2V0UmlnaHR8YXN5bmNcIlxuICAgICAgICAgICAgICAgIHRpY2tJbnRlcnZhbD1cImF1dG9cIlxuICAgICAgICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZXI+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICAgIDxtYXQtZ3JpZC1saXN0IGNvbHM9XCIxMlwiPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGU+PC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY2xhc3M9XCJhamYtbGFsXCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PHNwYW4+e3sncGFkZGluZyBib3R0b20nfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldFBhZGRpbmcoMiwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgbWluPVwiLTUwXCJcbiAgICAgICAgICAgICAgICBtYXg9XCI1MFwiXG4gICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRQYWRkaW5nV2lkZ2V0Qm90dG9tfGFzeW5jXCJcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPjwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxzcGFuPnt7J3BhZGRpbmcgbGVmdCd8dHJhbnNsb2NvfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0V2lkZ2V0UGFkZGluZygzLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBtaW49XCItNTBcIlxuICAgICAgICAgICAgICAgIG1heD1cIjUwXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFBhZGRpbmdXaWRnZXRMZWZ0fGFzeW5jXCJcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG1hdC1ncmlkLWxpc3QgY29scz1cIjEyXCI+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhYm9yZGVyV2lkdGhFeHBhbmRlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJib3JkZXJXaWR0aEV4cGFuZGVkID0gIWJvcmRlcldpZHRoRXhwYW5kZWRcIlxuICAgICAgICAgICAgICA+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCJib3JkZXJXaWR0aEV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJvcmRlcldpZHRoRXhwYW5kZWQgPSAhYm9yZGVyV2lkdGhFeHBhbmRlZFwiXG4gICAgICAgICAgICAgID5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjbGFzcz1cImFqZi1sYWxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgPHNwYW4+e3snYm9yZGVyIHdpZHRoJ3x0cmFuc2xvY299fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0V2lkZ2V0U3R5bGVzKCdib3JkZXItd2lkdGgnLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgIG1heD1cIjEwXCJcbiAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Qm9yZGVyV2lkdGhXaWRnZXRUb3B8YXN5bmNcIlxuICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCIxXCJcbiAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiYm9yZGVyV2lkdGhFeHBhbmRlZFwiPlxuICAgICAgICAgIDxtYXQtZ3JpZC1saXN0IGNvbHM9XCIxMlwiPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGU+PC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY2xhc3M9XCJhamYtbGFsXCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PHNwYW4+e3snYm9yZGVyIHdpZHRoIHRvcCd8dHJhbnNsb2NvfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0V2lkZ2V0Qm9yZGVyV2lkdGgoMCwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTBcIlxuICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Qm9yZGVyV2lkdGhXaWRnZXRUb3B8YXN5bmNcIlxuICAgICAgICAgICAgICAgIHRpY2tJbnRlcnZhbD1cImF1dG9cIlxuICAgICAgICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZXI+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICAgIDxtYXQtZ3JpZC1saXN0IGNvbHM9XCIxMlwiPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGU+PC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY2xhc3M9XCJhamYtbGFsXCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PHNwYW4+e3snYm9yZGVyIHdpZHRoIHJpZ2h0J3x0cmFuc2xvY299fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCI3XCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRCb3JkZXJXaWR0aCgxLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMFwiXG4gICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRCb3JkZXJXaWR0aFdpZGdldFJpZ2h0fGFzeW5jXCJcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPjwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxzcGFuPnt7J2JvcmRlciB3aWR0aCBib3R0b20nfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldEJvcmRlcldpZHRoKDIsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldEJvcmRlcldpZHRoV2lkZ2V0Qm90dG9tfGFzeW5jXCJcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPjwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxzcGFuPnt7J2JvcmRlciB3aWR0aCBsZWZ0J3x0cmFuc2xvY299fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCI3XCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRCb3JkZXJXaWR0aCgzLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMFwiXG4gICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRCb3JkZXJXaWR0aFdpZGdldExlZnR8YXN5bmNcIlxuICAgICAgICAgICAgICAgIHRpY2tJbnRlcnZhbD1cImF1dG9cIlxuICAgICAgICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZXI+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cIiFib3JkZXJSYWRpdXNFeHBhbmRlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJib3JkZXJSYWRpdXNFeHBhbmRlZCA9ICFib3JkZXJSYWRpdXNFeHBhbmRlZFwiXG4gICAgICAgICAgICAgID5rZXlib2FyZF9hcnJvd19yaWdodDwvbWF0LWljb25cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cImJvcmRlclJhZGl1c0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJvcmRlclJhZGl1c0V4cGFuZGVkID0gIWJvcmRlclJhZGl1c0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICA8c3Bhbj57eydib3JkZXIgcmFkaXVzJ3x0cmFuc2xvY299fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0V2lkZ2V0U3R5bGVzKCdib3JkZXItcmFkaXVzJywgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIHRpY2tJbnRlcnZhbD1cIjEwXCJcbiAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiYm9yZGVyUmFkaXVzRXhwYW5kZWRcIj5cbiAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlPjwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxzcGFuPnt7J2JvcmRlciByYWRpdXMgdG9wIGxlZnQnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFdpZGdldEJvcmRlclJhZGl1cygwLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Qm9yZGVyUmFkaXVzV2lkZ2V0VG9wTGVmdHxhc3luY1wiXG4gICAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgICAgICAgPG1hdC1ncmlkLWxpc3QgY29scz1cIjEyXCI+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZT48L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjbGFzcz1cImFqZi1sYWxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgICAmbmJzcDsmbmJzcDs8c3Bhbj57eydib3JkZXIgcmFkaXVzIHRvcCByaWdodCd8dHJhbnNsb2NvfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0V2lkZ2V0Qm9yZGVyUmFkaXVzKDEsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRCb3JkZXJSYWRpdXNXaWRnZXRUb3BSaWdodHxhc3luY1wiXG4gICAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgdGh1bWJMYWJlbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgICAgICAgPG1hdC1ncmlkLWxpc3QgY29scz1cIjEyXCI+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZT48L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjbGFzcz1cImFqZi1sYWxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgICAmbmJzcDsmbmJzcDs8c3Bhbj57eydib3JkZXIgcmFkaXVzIGJvdHRvbSBsZWZ0J3x0cmFuc2xvY299fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCI3XCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRCb3JkZXJSYWRpdXMoMiwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldEJvcmRlclJhZGl1c1dpZGdldEJvdHRvbUxlZnR8YXN5bmNcIlxuICAgICAgICAgICAgICAgIHRpY2tJbnRlcnZhbD1cImF1dG9cIlxuICAgICAgICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZXI+XG4gICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICAgIDxtYXQtZ3JpZC1saXN0IGNvbHM9XCIxMlwiPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGU+PC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY2xhc3M9XCJhamYtbGFsXCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PHNwYW5cbiAgICAgICAgICAgICAgICA+e3snYm9yZGVyIHJhZGl1cyBib3R0b20gcmlnaHQnfHRyYW5zbG9jb319PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCI3XCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRCb3JkZXJSYWRpdXMoMywgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldEJvcmRlclJhZGl1c1dpZGdldEJvdHRvbVJpZ2h0fGFzeW5jXCJcbiAgICAgICAgICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnRpZXMtY29udGFpbmVyXCIgKm5nSWY9XCJjdXJyZW50V2lkZ2V0LndpZGdldFR5cGUgPT09IDJcIj5cbiAgICAgICAgPG1hdC1ncmlkLWxpc3QgY29scz1cIjEyXCI+XG4gICAgICAgICAgPG1hdC1ncmlkLXRpbGU+PC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNsYXNzPVwiYWpmLWxhbFwiIGNvbHNwYW49XCIzXCI+XG4gICAgICAgICAgICA8c3Bhbj57eydmb250IHNpemUnfHRyYW5zbG9jb319PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRTdHlsZXMoJ2ZvbnQtc2l6ZScsICRldmVudC52YWx1ZSk7XCJcbiAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgIG1heD1cIjE1MFwiXG4gICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldEZvbnRTaXplV2lkZ2V0fGFzeW5jXCJcbiAgICAgICAgICAgICAgdGlja0ludGVydmFsPVwiMVwiXG4gICAgICAgICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImN1cnJlbnRXaWRnZXQud2lkZ2V0VHlwZSA9PT0gNVwiPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPGZvcm0+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRm9udCBzaXplJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRGb250U2l6ZVdpZGdldHxhc3luY1wiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9udFNpemVcIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRXaWRnZXRTdHlsZXMoJ2ZvbnQtc2l6ZScsIGZvbnRTaXplKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2V0V2lkZ2V0U3R5bGVzKCdmb250LXN0eWxlJywgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0ZvbnQgc3R5bGUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIm5vcm1hbFwiPnt7J05vcm1hbCd8dHJhbnNsb2NvfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIml0YWxpY1wiPnt7J0l0YWxpYyd8dHJhbnNsb2NvfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIm9ibGlxdWVcIj57eydPYmxpcXVlJ3x0cmFuc2xvY299fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2V0V2lkZ2V0U3R5bGVzKCd0ZXh0LWFsaWduJywgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FsaWduJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJjZW50ZXJcIj57eydDZW50ZXInfHRyYW5zbG9jb319PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJsZWZ0XCI+e3snTGVmdCd8dHJhbnNsb2NvfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInJpZ2h0XCI+e3snUmlnaHQnfHRyYW5zbG9jb319PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxoMT5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj57eydwcm9wZXJ0aWVzIG9mJ3x0cmFuc2xvY299fTwvbmctY29udGFpbmVyPlxuICAgICAgICB7eyB3aWRnZXROYW1lfHRyYW5zbG9jbyB9fVxuICAgICAgPC9oMT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IFtuZ1N3aXRjaF09XCJjdXJyZW50V2lkZ2V0LndpZGdldFR5cGVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIjBcIj5cbiAgICAgICAgPGgxPnt7J0NvbHVtbid8dHJhbnNsb2NvfX08L2gxPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBuZ0ZvclxuICAgICAgICAgIGxldC1jb2xcbiAgICAgICAgICBbbmdGb3JPZl09XCJjdXJyZW50TGF5b3V0V2lkZ2V0LmNvbHVtbnNcIlxuICAgICAgICAgIGxldC1pZHg9XCJpbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LXRvb2xiYXI+XG4gICAgICAgICAgICA8bWF0LXRvb2xiYXItcm93ICpuZ0lmPVwiY29sICE9PSAtMVwiPlxuICAgICAgICAgICAgICA8bWF0LWdyaWQtbGlzdCBjb2xzPVwiMTJcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMVwiPiB7e2lkeCArIDF9fSA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjlcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDkwJVwiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjAuMVwiXG4gICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4wMVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tjb2x9fVwiXG4gICAgICAgICAgICAgICAgICAgIHRodW1iLWxhYmVsPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRpY2staW50ZXJ2YWw9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpbnN0YW50Q29sdW1uVmFsdWUoJGV2ZW50LnZhbHVlLGlkeClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgICAgICAgICAgICAge3twZXJjZW50KGNvbCl9fSVcbiAgICAgICAgICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgICAgICAgICAgICAgPG1hdC1ncmlkLXRpbGUgY29sc3Bhbj1cIjJcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNSVcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaXhlZENvbHVtbihpZHgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgZml4ZWRcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZ3JpZC1saXN0PlxuICAgICAgICAgICAgPC9tYXQtdG9vbGJhci1yb3c+XG4gICAgICAgICAgICA8bWF0LXRvb2xiYXItcm93ICpuZ0lmPVwiY29sID09IC0xXCI+XG4gICAgICAgICAgICAgIDxtYXQtZ3JpZC1saXN0IGNvbHM9XCIxMlwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZ3JpZC10aWxlIGNvbHNwYW49XCIxXCI+IHt7aWR4ICsgMX19IDwvbWF0LWdyaWQtdGlsZT5cbiAgICAgICAgICAgICAgICA8bWF0LWdyaWQtdGlsZSBjb2xzcGFuPVwiMTFcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogOTAlXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidW5maXhlZENvbHVtbihpZHgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudFxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgICAgICAgICAgICA8L21hdC1ncmlkLWxpc3Q+XG4gICAgICAgICAgICA8L21hdC10b29sYmFyLXJvdz5cbiAgICAgICAgICA8L21hdC10b29sYmFyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bWF0LXRvb2xiYXI+XG4gICAgICAgICAgPG1hdC10b29sYmFyLXJvdz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ29sdW1uKClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRMYXlvdXRXaWRnZXQuY29sdW1ucy5sZW5ndGggPCAxMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7J0FkZCBjb2x1bW4nfHRyYW5zbG9jb319XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L21hdC10b29sYmFyLXJvdz5cbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09XCIyXCI+XG4gICAgICAgIDxhamYtaW1hZ2UtZ3JvdXBcbiAgICAgICAgICAoZm9ybXVsYUNsaWNrKT1cIm9wZW5Gb3JtdWxhRGlhbG9nKCRldmVudClcIlxuICAgICAgICAgIFtkYXRhXT1cImljb25TZXRcIlxuICAgICAgICA+PC9hamYtaW1hZ2UtZ3JvdXA+XG4gICAgICAgIDxhamYtaW1hZ2UtZ3JvdXBcbiAgICAgICAgICAoZm9ybXVsYUNsaWNrKT1cIm9wZW5Gb3JtdWxhRGlhbG9nKCRldmVudClcIlxuICAgICAgICAgIFtkYXRhXT1cImZsYWdTZXRcIlxuICAgICAgICA+PC9hamYtaW1hZ2UtZ3JvdXA+XG4gICAgICAgIDxhamYtcmVwb3J0LWJ1aWxkZXItZm9ybXMtYW5hbHl6ZXI+PC9hamYtcmVwb3J0LWJ1aWxkZXItZm9ybXMtYW5hbHl6ZXI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdC1pbnB1dFxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGFzdGUgYSBsaW5rJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbWFnZVVybFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwic2V0SW1hZ2VVcmwoKVwiPlxuICAgICAgICAgIHt7J1NldCBpbWFnZSd8dHJhbnNsb2NvfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPVwiM1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDUwMHB4XCI+XG4gICAgICAgICAgPGFqZi1xdWlsbC1lZGl0b3JcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudFRleHRXaWRnZXQuaHRtbFRleHRcIlxuICAgICAgICAgICAgW21vZHVsZXNdPVwiZ2V0TW9kdWxlKClcIlxuICAgICAgICAgICAgW21heExlbmd0aF09XCIyMDBcIlxuICAgICAgICAgICAgW3RoZW1lXT1cImJ1YmJsZVwiXG4gICAgICAgICAgICBbaW5pdEhUTUxdPVwiKGdldEhUTUx8YXN5bmMpIHx8ICcnXCJcbiAgICAgICAgICAgIChmb3JtdWxhQ2xpY2spPVwib3BlbkZvcm11bGFEaWFsb2coJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYWpmLXF1aWxsLWVkaXRvcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPVwiNFwiPlxuICAgICAgICA8aDM+e3snQ2hvb3NlIHR5cGUgb2YgQ2hhcnQnfHRyYW5zbG9jb319PC9oMz5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIGNsYXNzPVwiYWpmLWNoYXJ0LWJ1dHRvbnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXJvd1wiPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgIHZhbHVlPVwicmVwb3J0YnVpbGRlci1saW5lY2hhcnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Q2hhcnRUeXBlKDApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJhamYtaWNvblwiIGZvbnRJY29uPVwicmVwb3J0YnVpbGRlci1saW5lY2hhcnRcIj5cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgdmFsdWU9XCJyZXBvcnRidWlsZGVyLWJhcmNoYXJ0dmVydGljYWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Q2hhcnRUeXBlKDEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgZm9udFNldD1cImFqZi1pY29uXCJcbiAgICAgICAgICAgICAgICBmb250SWNvbj1cInJlcG9ydGJ1aWxkZXItYmFyY2hhcnR2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgdmFsdWU9XCJyZXBvcnRidWlsZGVyLWJ1YmJsZWNoYXJ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldENoYXJ0VHlwZSg4KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiYWpmLWljb25cIiBmb250SWNvbj1cInJlcG9ydGJ1aWxkZXItYnViYmxlY2hhcnRcIj5cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgIHZhbHVlPVwicmVwb3J0YnVpbGRlci1iYXJjaGFydGhvcml6b250YWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Q2hhcnRUeXBlKDIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgZm9udFNldD1cImFqZi1pY29uXCJcbiAgICAgICAgICAgICAgICBmb250SWNvbj1cInJlcG9ydGJ1aWxkZXItYmFyY2hhcnRob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICB2YWx1ZT1cInJlcG9ydGJ1aWxkZXItcmFkYXJjaGFydFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRDaGFydFR5cGUoMylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImFqZi1pY29uXCIgZm9udEljb249XCJyZXBvcnRidWlsZGVyLXJhZGFyY2hhcnRcIj5cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgdmFsdWU9XCJyZXBvcnRidWlsZGVyLWJhcmNoYXJ0dmVydGljYWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Q2hhcnRUeXBlKDEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgZm9udFNldD1cImFqZi1pY29uXCJcbiAgICAgICAgICAgICAgICBmb250SWNvbj1cInJlcG9ydGJ1aWxkZXItYmFyY2hhcnR2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFqZi1yb3dcIj5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICB2YWx1ZT1cInJlcG9ydGJ1aWxkZXItc2NhdHRlcmNoYXJ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldENoYXJ0VHlwZSg0KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgIGZvbnRTZXQ9XCJhamYtaWNvblwiXG4gICAgICAgICAgICAgICAgZm9udEljb249XCJyZXBvcnRidWlsZGVyLXNjYXR0ZXJjaGFydFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgdmFsdWU9XCJyZXBvcnRidWlsZGVyLXBvbGFyYXJlYWNoYXJ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldENoYXJ0VHlwZSg1KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgIGZvbnRTZXQ9XCJhamYtaWNvblwiXG4gICAgICAgICAgICAgICAgZm9udEljb249XCJyZXBvcnRidWlsZGVyLXBvbGFyYXJlYWNoYXJ0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWpmLXJvd1wiPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgIHZhbHVlPVwicmVwb3J0YnVpbGRlci1waWVjaGFydFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRDaGFydFR5cGUoNilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImFqZi1pY29uXCIgZm9udEljb249XCJyZXBvcnRidWlsZGVyLXBpZWNoYXJ0XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgIHZhbHVlPVwicmVwb3J0YnVpbGRlci1kb25vdWdodGNoYXJ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldENoYXJ0VHlwZSg3KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgIGZvbnRTZXQ9XCJhamYtaWNvblwiXG4gICAgICAgICAgICAgICAgZm9udEljb249XCJyZXBvcnRidWlsZGVyLWRvbm91Z2h0Y2hhcnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgICA8aDM+e3snTGFiZWxzJ3x0cmFuc2xvY299fTwvaDM+XG4gICAgICAgIDxhamYtcmVwb3J0LWJ1aWxkZXItZm9ybXMtYW5hbHl6ZXI+PC9hamYtcmVwb3J0LWJ1aWxkZXItZm9ybXMtYW5hbHl6ZXI+XG4gICAgICAgIDxhamYtdGhlbWUtY29sb3JcbiAgICAgICAgICBbc2VjdGlvbl09XCInY2hhcnQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwidGFiVmFsdWVcIlxuICAgICAgICA+PC9hamYtdGhlbWUtY29sb3I+XG4gICAgICAgIDxtYXQtY2FyZD5cbiAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPnt7J0JvcmRlciB3aWR0aCd8dHJhbnNsb2NvfX08L21hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgPG1hdC1zbGlkZXJcbiAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDk5JVwiXG4gICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRDaGFydEJvcmRlckNvbG9yKCRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiY2hhcnRCb3JkZXJXaWR0aFwiXG4gICAgICAgICAgICAgIHRpY2tJbnRlcnZhbD1cImF1dG9cIlxuICAgICAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L21hdC1zbGlkZXI+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgICA8bWF0LXRhYi1ncm91cCAoc2VsZWN0Q2hhbmdlKT1cInNldFRhYigkZXZlbnQpXCI+XG4gICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJCYWNrZ3JvdW5kXCI+XG4gICAgICAgICAgICA8bWF0LWxpc3Q+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIG5nRm9yXG4gICAgICAgICAgICAgICAgbGV0LWNvbG9yXG4gICAgICAgICAgICAgICAgW25nRm9yT2ZdPVwiKGdldENoYXJ0QmFja2dyb3VuZENvbG9yfGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgbGV0LWlkeD1cImluZGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JcIj4ge3sgY29sb3IgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJyZW1vdmVDaGFydEJhY2tncm91bmRDb2xvcihpZHgpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7J1JlbW92ZSd8dHJhbnNsb2NvfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWxpc3Q+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQm9yZGVyXCI+XG4gICAgICAgICAgICA8bWF0LWxpc3Q+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIG5nRm9yXG4gICAgICAgICAgICAgICAgbGV0LWNvbG9yXG4gICAgICAgICAgICAgICAgW25nRm9yT2ZdPVwiKGdldENoYXJ0Qm9yZGVyQ29sb3J8YXN5bmMpXCJcbiAgICAgICAgICAgICAgICBsZXQtaWR4PVwiaW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGUuYmFja2dyb3VuZF09XCJjb2xvclwiPiB7eyBjb2xvciB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInJlbW92ZUNoYXJ0Qm9yZGVyQ29sb3IoaWR4KVwiPlxuICAgICAgICAgICAgICAgICAgICByZW1vdmVcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWxpc3Q+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPVwiNVwiPlxuICAgICAgICA8YWpmLXJlcG9ydC1idWlsZGVyLWZvcm1zLWFuYWx5emVyPjwvYWpmLXJlcG9ydC1idWlsZGVyLWZvcm1zLWFuYWx5emVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICAoY2xpY2spPVwidmlzaWJpbGl0eVNlY3Rpb24gPSAhdmlzaWJpbGl0eVNlY3Rpb25cIlxuICAgICAgW25nQ2xhc3NdPVwieydhamYtc2VsZWN0ZWQnOiB2aXNpYmlsaXR5U2VjdGlvbn1cIlxuICAgID5cbiAgICAgIHt7IHdpZGdldE5hbWV8dHJhbnNsb2NvIH19XG4gICAgICA8bmctY29udGFpbmVyPnt7J1Zpc2liaWxpdHknfHRyYW5zbG9jb319PC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCJ2aXNpYmlsaXR5U2VjdGlvbiA/ICdibG9jaycgOiAnbm9uZSdcIj5cbiAgICAgIDxhamYtcmVwb3J0LWJ1aWxkZXItY29uZGl0aW9uLWVkaXRvclxuICAgICAgICBbdmlzaWJpbGl0eV09XCJjdXJyZW50V2lkZ2V0LnZpc2liaWxpdHlcIlxuICAgICAgPjwvYWpmLXJlcG9ydC1idWlsZGVyLWNvbmRpdGlvbi1lZGl0b3I+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|