ontimize-web-ngx 15.3.5 → 15.4.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/esm2020/lib/components/grid/o-grid.component.mjs +2 -1
- package/esm2020/lib/components/input/date-range/o-daterange-input.component.mjs +240 -218
- package/esm2020/lib/components/input/date-range/o-daterange-input.module.mjs +3 -5
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.component.mjs +353 -0
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.directive.mjs +381 -0
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.module.mjs +21 -0
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.component.mjs +1009 -0
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.config.mjs +2 -0
- package/esm2020/lib/components/input/index.mjs +7 -5
- package/esm2020/lib/components/list/o-list.component.mjs +2 -1
- package/esm2020/lib/components/o-service-base-component.class.mjs +24 -9
- package/esm2020/lib/components/o-service-component.class.mjs +2 -1
- package/esm2020/lib/components/table/o-table.component.mjs +5 -1
- package/esm2020/lib/config/o-modules.mjs +5 -3
- package/esm2020/lib/i18n/i18n.mjs +9 -3
- package/esm2020/lib/interfaces/form-layout-manager.interface.mjs +2 -0
- package/esm2020/lib/interfaces/index.mjs +3 -1
- package/esm2020/lib/interfaces/pagination-context.interface.mjs +2 -0
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager-base.class.mjs +1 -1
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +1 -1
- package/esm2020/lib/ontimize-web-ngx.module.mjs +7 -6
- package/esm2020/lib/services/base-service.class.mjs +12 -1
- package/esm2020/lib/services/index.mjs +2 -1
- package/esm2020/lib/services/pagination-context.service.mjs +25 -0
- package/fesm2015/ontimize-web-ngx.mjs +465 -37
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +454 -37
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/input/date-range/o-daterange-input.component.d.ts +47 -33
- package/lib/components/input/date-range/o-daterange-input.module.d.ts +4 -6
- package/lib/components/input/date-range-legacy/o-daterange-input.component.d.ts +70 -0
- package/lib/components/input/date-range-legacy/o-daterange-input.module.d.ts +11 -0
- package/lib/components/input/index.d.ts +6 -4
- package/lib/components/o-service-base-component.class.d.ts +1 -0
- package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
- package/lib/i18n/i18n.d.ts +6 -0
- package/lib/interfaces/form-layout-manager.interface.d.ts +43 -0
- package/lib/interfaces/index.d.ts +2 -0
- package/lib/interfaces/pagination-context.interface.d.ts +6 -0
- package/lib/layouts/form-layout/o-form-layout-manager-base.class.d.ts +30 -12
- package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +2 -1
- package/lib/ontimize-web-ngx.module.d.ts +5 -4
- package/lib/services/base-service.class.d.ts +6 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/services/pagination-context.service.d.ts +11 -0
- package/package.json +1 -1
- package/theme.scss +2 -2
- package/esm2020/lib/components/input/date-range/o-daterange-input.directive.mjs +0 -381
- package/esm2020/lib/components/input/date-range/o-daterange-picker.component.mjs +0 -1009
- package/esm2020/lib/components/input/date-range/o-daterange-picker.config.mjs +0 -2
- /package/lib/components/input/{date-range → date-range-legacy}/o-daterange-input.directive.d.ts +0 -0
- /package/lib/components/input/{date-range → date-range-legacy}/o-daterange-picker.component.d.ts +0 -0
- /package/lib/components/input/{date-range → date-range-legacy}/o-daterange-picker.config.d.ts +0 -0
|
@@ -1,28 +1,34 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
|
|
3
3
|
import { Component, ElementRef, forwardRef, Inject, Injector, Optional, ViewChild } from '@angular/core';
|
|
4
|
+
import { MediaObserver } from '@angular/flex-layout';
|
|
5
|
+
import { FormGroup } from '@angular/forms';
|
|
6
|
+
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
|
|
7
|
+
import { MatDateRangeInput, MatDateRangePicker } from '@angular/material/datepicker';
|
|
4
8
|
import moment from 'moment';
|
|
5
9
|
import { BooleanInputConverter } from '../../../decorators/input-converter';
|
|
6
10
|
import { MomentService } from '../../../services/moment.service';
|
|
7
|
-
import {
|
|
11
|
+
import { OntimizeMomentDateAdapter } from '../../../shared';
|
|
12
|
+
import { SQLTypes } from '../../../util/sqltypes';
|
|
8
13
|
import { Util } from '../../../util/util';
|
|
14
|
+
import { OFormValue } from '../../form/o-form-value';
|
|
9
15
|
import { OFormComponent } from '../../form/o-form.component';
|
|
10
16
|
import { DEFAULT_OUTPUTS_O_FORM_DATA_COMPONENT, OFormDataComponent } from '../../o-form-data-component.class';
|
|
11
17
|
import { OValueChangeEvent } from '../../o-value-change-event.class';
|
|
12
18
|
import { DEFAULT_INPUTS_O_DATE_INPUT } from '../date-input/o-date-input.component';
|
|
13
|
-
import {
|
|
19
|
+
import { OFormControl } from '../o-form-control.class';
|
|
14
20
|
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "@angular/
|
|
16
|
-
import * as i2 from "@angular/
|
|
17
|
-
import * as i3 from "@angular/
|
|
18
|
-
import * as i4 from "@angular/
|
|
19
|
-
import * as i5 from "
|
|
20
|
-
import * as i6 from "
|
|
21
|
-
import * as i7 from "@angular/material/
|
|
22
|
-
import * as i8 from "@angular/material/
|
|
23
|
-
import * as i9 from "@angular/material/
|
|
24
|
-
import * as i10 from "@angular/material/
|
|
25
|
-
import * as i11 from "
|
|
21
|
+
import * as i1 from "@angular/material/core";
|
|
22
|
+
import * as i2 from "@angular/cdk/layout";
|
|
23
|
+
import * as i3 from "@angular/common";
|
|
24
|
+
import * as i4 from "@angular/flex-layout/flex";
|
|
25
|
+
import * as i5 from "@angular/forms";
|
|
26
|
+
import * as i6 from "../../../directives/o-mat-error.directive";
|
|
27
|
+
import * as i7 from "@angular/material/button";
|
|
28
|
+
import * as i8 from "@angular/material/datepicker";
|
|
29
|
+
import * as i9 from "@angular/material/icon";
|
|
30
|
+
import * as i10 from "@angular/material/form-field";
|
|
31
|
+
import * as i11 from "@angular/material/tooltip";
|
|
26
32
|
import * as i12 from "../../../pipes/o-translate.pipe";
|
|
27
33
|
import * as i13 from "../../form/o-form.component";
|
|
28
34
|
export const DEFAULT_OUTPUTS_O_DATERANGE_INPUT = [
|
|
@@ -30,28 +36,41 @@ export const DEFAULT_OUTPUTS_O_DATERANGE_INPUT = [
|
|
|
30
36
|
];
|
|
31
37
|
export const DEFAULT_INPUTS_O_DATERANGE_INPUT = [
|
|
32
38
|
'separator',
|
|
33
|
-
'showWeekNumbers:show-week-numbers',
|
|
34
|
-
'showRanges:show-ranges',
|
|
35
39
|
'olocale:locale',
|
|
36
40
|
'startKey',
|
|
37
41
|
'endKey',
|
|
38
42
|
'valueType: value-type',
|
|
39
43
|
'mode',
|
|
44
|
+
'placeholderStartDay: placeholder-startday',
|
|
45
|
+
'placeholderEndDay: placeholder-endday',
|
|
40
46
|
...DEFAULT_INPUTS_O_DATE_INPUT
|
|
41
47
|
];
|
|
42
48
|
export class ODateRangeInputComponent extends OFormDataComponent {
|
|
49
|
+
get dateClass() {
|
|
50
|
+
return this._dateClass;
|
|
51
|
+
}
|
|
52
|
+
set dateClass(val) {
|
|
53
|
+
this._dateClass = val;
|
|
54
|
+
}
|
|
55
|
+
set oMinDate(value) {
|
|
56
|
+
if (value) {
|
|
57
|
+
const momentD = this.getValueAsMoment(value);
|
|
58
|
+
if (Util.isDefined(momentD)) {
|
|
59
|
+
this._oMinDate = this.convertToDate(value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
43
63
|
get oMinDate() {
|
|
44
64
|
return this._oMinDate;
|
|
45
65
|
}
|
|
46
|
-
set
|
|
47
|
-
|
|
66
|
+
set oMaxDate(value) {
|
|
67
|
+
if (value) {
|
|
68
|
+
this._oMaxDate = this.convertToDate(value);
|
|
69
|
+
}
|
|
48
70
|
}
|
|
49
71
|
get oMaxDate() {
|
|
50
72
|
return this._oMaxDate;
|
|
51
73
|
}
|
|
52
|
-
set oMaxDate(value) {
|
|
53
|
-
this._oMaxDate = moment(value, this.oformat);
|
|
54
|
-
}
|
|
55
74
|
get startKey() {
|
|
56
75
|
return this._startKey;
|
|
57
76
|
}
|
|
@@ -64,20 +83,14 @@ export class ODateRangeInputComponent extends OFormDataComponent {
|
|
|
64
83
|
set endKey(value) {
|
|
65
84
|
this._endKey = value;
|
|
66
85
|
}
|
|
67
|
-
get separator() {
|
|
68
|
-
return this._separator;
|
|
69
|
-
}
|
|
70
|
-
set separator(value) {
|
|
71
|
-
this._separator = value;
|
|
72
|
-
if (this.getFormControl() && this.getFormControl().value) {
|
|
73
|
-
this.updateElement();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
86
|
get showClearButton() {
|
|
77
|
-
return this.clearButton && !this.isReadOnly && this.enabled && this.
|
|
87
|
+
return this.clearButton && !this.isReadOnly && this.enabled && this.getValue();
|
|
88
|
+
}
|
|
89
|
+
get touchUi() {
|
|
90
|
+
return this.oTouchUi || false;
|
|
78
91
|
}
|
|
79
|
-
|
|
80
|
-
|
|
92
|
+
set touchUi(val) {
|
|
93
|
+
this.oTouchUi = val;
|
|
81
94
|
}
|
|
82
95
|
isMobileMode() {
|
|
83
96
|
return this.mode === 'mobile' || (this.mode === 'auto' && this.breakpointObserver.isMatched(Breakpoints.Handset));
|
|
@@ -85,119 +98,64 @@ export class ODateRangeInputComponent extends OFormDataComponent {
|
|
|
85
98
|
isDesktopMode() {
|
|
86
99
|
return this.mode === 'desktop' || (this.mode === 'auto' && !this.breakpointObserver.isMatched(Breakpoints.Handset));
|
|
87
100
|
}
|
|
88
|
-
constructor(form, elRef, injector, breakpointObserver) {
|
|
101
|
+
constructor(form, elRef, injector, momentDateAdapter, breakpointObserver) {
|
|
89
102
|
super(form, elRef, injector);
|
|
103
|
+
this.momentDateAdapter = momentDateAdapter;
|
|
90
104
|
this.breakpointObserver = breakpointObserver;
|
|
91
105
|
this.textInputEnabled = true;
|
|
92
|
-
this.showWeekNumbers = false;
|
|
93
106
|
this.oTouchUi = false;
|
|
94
|
-
this.showRanges = false;
|
|
95
107
|
this.mode = 'auto';
|
|
96
108
|
this._startKey = 'startDate';
|
|
97
109
|
this._endKey = 'endDate';
|
|
98
110
|
this._valueType = 'timestamp';
|
|
99
|
-
this.
|
|
111
|
+
this.separator = ' - ';
|
|
100
112
|
this.oformat = 'L';
|
|
101
|
-
this.
|
|
113
|
+
this.placeholderStartDay = 'DATERANGE.PLACEHOLDER_STARTDATE';
|
|
114
|
+
this.placeholderEndDay = 'DATERANGE.PLACEHOLDER_ENDDATE';
|
|
102
115
|
this.momentSrv = this.injector.get(MomentService);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
direction: 'ltr',
|
|
109
|
-
separator: ' - ',
|
|
110
|
-
weekLabel: this.oTranslate.get('DATERANGE.W'),
|
|
111
|
-
applyLabel: this.oTranslate.get('DATERANGE.APPLYLABEL'),
|
|
112
|
-
cancelLabel: this.oTranslate.get('CANCEL'),
|
|
113
|
-
customRangeLabel: 'Custom range',
|
|
114
|
-
daysOfWeek: moment.localeData().weekdaysMin(),
|
|
115
|
-
monthNames: moment.localeData().monthsShort(),
|
|
116
|
-
firstDay: moment.localeData().firstDayOfWeek(),
|
|
117
|
-
format: 'L'
|
|
118
|
-
};
|
|
116
|
+
this.media = this.injector.get(MediaObserver);
|
|
117
|
+
this.range = new FormGroup({
|
|
118
|
+
[this.startKey]: new OFormControl(),
|
|
119
|
+
[this.endKey]: new OFormControl()
|
|
120
|
+
});
|
|
119
121
|
}
|
|
120
122
|
ngOnInit() {
|
|
121
123
|
super.ngOnInit();
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
openPicker() {
|
|
127
|
-
this.pickerDirective.open();
|
|
128
|
-
}
|
|
129
|
-
onChangeEvent(event) {
|
|
130
|
-
let objectValue;
|
|
131
|
-
if (event instanceof Event) {
|
|
132
|
-
const value = event.target.value;
|
|
133
|
-
if (value !== '') {
|
|
134
|
-
objectValue = this.getDateRangeToString(value);
|
|
135
|
-
}
|
|
124
|
+
this.subscribeToMediaChanges();
|
|
125
|
+
if (!this.olocale) {
|
|
126
|
+
this.olocale = this.momentSrv.getLocale();
|
|
136
127
|
}
|
|
137
|
-
|
|
138
|
-
|
|
128
|
+
if (this.oformat) {
|
|
129
|
+
this.momentDateAdapter.oFormat = this.oformat;
|
|
139
130
|
}
|
|
140
|
-
this.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
131
|
+
this.momentDateAdapter.setLocale(this.olocale);
|
|
132
|
+
this.onLanguageChangeSubscription = this.translateService.onLanguageChanged.subscribe(() => {
|
|
133
|
+
this.momentDateAdapter.setLocale(this.translateService.getCurrentLang());
|
|
134
|
+
this.setValue(this.getValue());
|
|
144
135
|
});
|
|
145
136
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
onClickClearValue(e) {
|
|
151
|
-
super.onClickClearValue(e);
|
|
152
|
-
this.pickerDirective.value = undefined;
|
|
153
|
-
this.pickerDirective.datesUpdated.emit();
|
|
154
|
-
}
|
|
155
|
-
datesUpdated(range) {
|
|
156
|
-
this.pickerDirective.close();
|
|
157
|
-
this.setValue(range, {
|
|
158
|
-
changeType: OValueChangeEvent.USER_CHANGE,
|
|
159
|
-
emitEvent: false,
|
|
160
|
-
emitModelToViewChange: false
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
setData(newValue) {
|
|
164
|
-
super.setData(newValue);
|
|
165
|
-
this.pickerDirective.datesUpdated.emit(newValue);
|
|
166
|
-
this.updateElement();
|
|
167
|
-
}
|
|
168
|
-
updateElement() {
|
|
169
|
-
let chosenLabel;
|
|
170
|
-
if (Util.isDefined(this.value) && Util.isDefined(this.value.value) && !this.isObjectDataRangeNull(this.value)) {
|
|
171
|
-
if (this.value.value[this.pickerDirective.startKey] && this.value.value[this.pickerDirective.endKey]) {
|
|
172
|
-
this.value.value[this.pickerDirective.startKey] = this.ensureDateRangeValue(this.value.value[this.pickerDirective.startKey], this._valueType);
|
|
173
|
-
this.value.value[this.pickerDirective.endKey] = this.ensureDateRangeValue(this.value.value[this.pickerDirective.endKey], this._valueType);
|
|
174
|
-
chosenLabel = this.value.value[this.pickerDirective.startKey].format(this.oformat) +
|
|
175
|
-
this.separator + this.value.value[this.pickerDirective.endKey].format(this.oformat);
|
|
137
|
+
subscribeToMediaChanges() {
|
|
138
|
+
this.mediaSubscription = this.media.asObservable().subscribe((change) => {
|
|
139
|
+
if (['xs', 'sm'].indexOf(change[0].mqAlias) !== -1) {
|
|
140
|
+
this.touchUi = Util.isDefined(this.oTouchUi) ? this.oTouchUi : true;
|
|
176
141
|
}
|
|
177
|
-
|
|
178
|
-
|
|
142
|
+
if (['md', 'lg', 'xl'].indexOf(change[0].mqAlias) !== -1) {
|
|
143
|
+
this.touchUi = Util.isDefined(this.oTouchUi) ? this.oTouchUi : false;
|
|
179
144
|
}
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
chosenLabel = null;
|
|
183
|
-
this.pickerDirective.value = undefined;
|
|
184
|
-
}
|
|
185
|
-
this.pickerDirective._el.nativeElement.value = chosenLabel;
|
|
145
|
+
});
|
|
186
146
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
value[this._endKey] = moment(range[1].trim(), this.oformat);
|
|
192
|
-
return value;
|
|
147
|
+
open() {
|
|
148
|
+
if (!this.isReadOnly && this.enabled) {
|
|
149
|
+
this.picker.open();
|
|
150
|
+
}
|
|
193
151
|
}
|
|
194
152
|
resolveValidators() {
|
|
195
153
|
const validators = super.resolveValidators();
|
|
196
154
|
validators.push(this.rangeDateValidator.bind(this));
|
|
197
|
-
if (Util.isDefined(this.
|
|
155
|
+
if (Util.isDefined(this.oMinDate)) {
|
|
198
156
|
validators.push(this.minDateValidator.bind(this));
|
|
199
157
|
}
|
|
200
|
-
if (Util.isDefined(this.
|
|
158
|
+
if (Util.isDefined(this.oMaxDate)) {
|
|
201
159
|
validators.push(this.maxDateValidator.bind(this));
|
|
202
160
|
}
|
|
203
161
|
validators.push(this.parseDateValidator.bind(this));
|
|
@@ -205,149 +163,213 @@ export class ODateRangeInputComponent extends OFormDataComponent {
|
|
|
205
163
|
}
|
|
206
164
|
isObjectDataRangeNull(objectValue) {
|
|
207
165
|
return objectValue !== null && objectValue.value !== null &&
|
|
208
|
-
!Util.isDefined(objectValue.value[this.
|
|
209
|
-
!Util.isDefined(objectValue.value[this.
|
|
166
|
+
!Util.isDefined(objectValue.value[this.startKey]) &&
|
|
167
|
+
!Util.isDefined(objectValue.value[this.endKey]);
|
|
210
168
|
}
|
|
211
169
|
rangeDateValidator(control) {
|
|
212
|
-
if (
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
170
|
+
if (control.value instanceof Object && !this.isObjectDataRangeNull(control)) {
|
|
171
|
+
const endValue = this.getValueAsMoment(control.value[this._endKey]);
|
|
172
|
+
const startValue = this.getValueAsMoment(control.value[this._startKey]);
|
|
173
|
+
if (endValue.isSameOrBefore(startValue)) {
|
|
174
|
+
return {
|
|
175
|
+
dateRange: true
|
|
176
|
+
};
|
|
177
|
+
}
|
|
217
178
|
}
|
|
218
179
|
return {};
|
|
219
180
|
}
|
|
220
181
|
minDateValidator(control) {
|
|
221
|
-
const mindate = moment(this.
|
|
182
|
+
const mindate = moment(this.oMinDate);
|
|
222
183
|
if ((control.value instanceof Object)
|
|
223
|
-
&& !this.isObjectDataRangeNull(control)
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
184
|
+
&& !this.isObjectDataRangeNull(control)) {
|
|
185
|
+
const startValue = this.getValueAsMoment(control.value[this._startKey]);
|
|
186
|
+
if (startValue.isBefore(mindate)) {
|
|
187
|
+
return {
|
|
188
|
+
dateRangeMin: {
|
|
189
|
+
dateMin: mindate.format(this.oformat)
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
229
193
|
}
|
|
230
194
|
return {};
|
|
231
195
|
}
|
|
232
196
|
maxDateValidator(control) {
|
|
233
|
-
const maxdate = moment(this.
|
|
197
|
+
const maxdate = moment(this.oMaxDate);
|
|
234
198
|
if ((control.value instanceof Object)
|
|
235
|
-
&& !this.isObjectDataRangeNull(control)
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
199
|
+
&& !this.isObjectDataRangeNull(control)) {
|
|
200
|
+
const endValue = this.getValueAsMoment(control.value[this._endKey]);
|
|
201
|
+
if (endValue.isAfter(maxdate)) {
|
|
202
|
+
return {
|
|
203
|
+
dateRangeMax: {
|
|
204
|
+
dateMax: maxdate.format(this.oformat)
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
241
208
|
}
|
|
242
209
|
return {};
|
|
243
210
|
}
|
|
244
211
|
parseDateValidator(control) {
|
|
245
212
|
if ((control.value instanceof Object)
|
|
246
|
-
&& !this.isObjectDataRangeNull(control)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
213
|
+
&& !this.isObjectDataRangeNull(control)) {
|
|
214
|
+
const endValue = this.getValueAsMoment(control.value[this._endKey]);
|
|
215
|
+
const startValue = this.getValueAsMoment(control.value[this._startKey]);
|
|
216
|
+
if (!endValue.isValid() || !startValue.isValid()) {
|
|
217
|
+
return {
|
|
218
|
+
dateRangeParse: {
|
|
219
|
+
format: this.oformat + this.separator + this.oformat
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
}
|
|
254
223
|
}
|
|
255
224
|
return {};
|
|
256
225
|
}
|
|
257
|
-
|
|
226
|
+
set valueType(val) {
|
|
227
|
+
this._valueType = Util.convertToODateValueType(val);
|
|
228
|
+
}
|
|
229
|
+
get valueType() {
|
|
230
|
+
return this._valueType;
|
|
231
|
+
}
|
|
232
|
+
ngOnDestroy() {
|
|
233
|
+
super.ngOnDestroy();
|
|
234
|
+
if (this.mediaSubscription) {
|
|
235
|
+
this.mediaSubscription.unsubscribe();
|
|
236
|
+
}
|
|
237
|
+
if (this.onLanguageChangeSubscription) {
|
|
238
|
+
this.onLanguageChangeSubscription.unsubscribe();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
setFormValue(val, options, setDirty = false) {
|
|
242
|
+
let value = val;
|
|
243
|
+
if (val instanceof OFormValue) {
|
|
244
|
+
value = val.value;
|
|
245
|
+
}
|
|
246
|
+
this.range.setValue(this.ensureODateValueType(value), options);
|
|
247
|
+
super.setFormValue(value, options, setDirty);
|
|
248
|
+
}
|
|
249
|
+
ensureODateValueType(val) {
|
|
258
250
|
if (!Util.isDefined(val)) {
|
|
259
|
-
return
|
|
251
|
+
return { [this.startKey]: null, [this.endKey]: null };
|
|
260
252
|
}
|
|
261
253
|
let result = val;
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
case 'string':
|
|
265
|
-
case 'date':
|
|
266
|
-
if ((val instanceof Date) || typeof val === 'string') {
|
|
267
|
-
const dateString = moment(val).format('YYYY-MM-DDThh:mm') + 'Z';
|
|
268
|
-
const q = moment(dateString);
|
|
269
|
-
if (q.isValid()) {
|
|
270
|
-
result = q;
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
result = undefined;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
277
|
-
result = undefined;
|
|
278
|
-
}
|
|
279
|
-
break;
|
|
280
|
-
case 'timestamp':
|
|
281
|
-
if (typeof val === 'number') {
|
|
282
|
-
const dateString = moment.unix(val).format('YYYY-MM-DDThh:mm') + 'Z';
|
|
283
|
-
const t = moment(dateString);
|
|
284
|
-
if (t.isValid()) {
|
|
285
|
-
result = t;
|
|
286
|
-
}
|
|
287
|
-
else {
|
|
288
|
-
result = undefined;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
result = val;
|
|
293
|
-
}
|
|
294
|
-
break;
|
|
295
|
-
case 'iso-8601':
|
|
296
|
-
const m = moment(val);
|
|
297
|
-
if (m.isValid()) {
|
|
298
|
-
result = m;
|
|
299
|
-
}
|
|
300
|
-
else {
|
|
301
|
-
result = undefined;
|
|
302
|
-
}
|
|
303
|
-
break;
|
|
304
|
-
default:
|
|
305
|
-
break;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
254
|
+
const startVal = this.convertToDate(val[this.startKey]);
|
|
255
|
+
const endVal = this.convertToDate(val[this.endKey]);
|
|
308
256
|
if (!Util.isDefined(result)) {
|
|
309
|
-
console.warn(`ODateRangeInputComponent value (${val}) is not consistent with value-type (${valueType})`);
|
|
257
|
+
console.warn(`ODateRangeInputComponent value (${val}) is not consistent with value-type (${this.valueType})`);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
result = { [this.startKey]: startVal, [this.endKey]: endVal };
|
|
310
261
|
}
|
|
311
262
|
return result;
|
|
312
263
|
}
|
|
313
|
-
|
|
314
|
-
|
|
264
|
+
convertToDate(val) {
|
|
265
|
+
if (!Util.isDefined(val))
|
|
266
|
+
return null;
|
|
267
|
+
switch (this.valueType) {
|
|
268
|
+
case 'string':
|
|
269
|
+
return typeof val === 'string' && moment(val, this.oformat).isValid()
|
|
270
|
+
? new Date(moment(val, this.oformat).valueOf())
|
|
271
|
+
: null;
|
|
272
|
+
case 'date':
|
|
273
|
+
return val instanceof Date ? val : null;
|
|
274
|
+
case 'timestamp':
|
|
275
|
+
return typeof val === 'number' ? new Date(val) : null;
|
|
276
|
+
case 'iso-8601':
|
|
277
|
+
if (typeof val === 'string') {
|
|
278
|
+
return moment(val).isValid() ? new Date(moment(val).valueOf()) : null;
|
|
279
|
+
}
|
|
280
|
+
else if (typeof val === 'number' && this.getSQLType() === SQLTypes.TIMESTAMP) {
|
|
281
|
+
return new Date(val);
|
|
282
|
+
}
|
|
283
|
+
return null;
|
|
284
|
+
default:
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
315
287
|
}
|
|
316
|
-
|
|
317
|
-
|
|
288
|
+
onChangeEvent(event) {
|
|
289
|
+
const dateRangeValue = this.dateRangeInput.value;
|
|
290
|
+
if (dateRangeValue.start && dateRangeValue.end) {
|
|
291
|
+
let value = {
|
|
292
|
+
[this.startKey]: Util.parseByValueType(dateRangeValue.start, this.valueType, this.oformat),
|
|
293
|
+
[this.endKey]: Util.parseByValueType(dateRangeValue.end, this.valueType, this.oformat)
|
|
294
|
+
};
|
|
295
|
+
this.setValue(value, {
|
|
296
|
+
changeType: OValueChangeEvent.USER_CHANGE,
|
|
297
|
+
emitEvent: false,
|
|
298
|
+
emitModelToViewChange: false
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
onClickInput(e) {
|
|
303
|
+
if (!this.textInputEnabled) {
|
|
304
|
+
this.open();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
onClickClearValue(event) {
|
|
308
|
+
super.onClickClearValue(event);
|
|
309
|
+
this.range.setValue({ [this.startKey]: null, [this.endKey]: null });
|
|
310
|
+
this.markFormGroupTouched();
|
|
311
|
+
}
|
|
312
|
+
markFormGroupTouched() {
|
|
313
|
+
Object.keys(this.range.controls).forEach((key) => {
|
|
314
|
+
const control = this.range.get(key);
|
|
315
|
+
control?.markAsTouched();
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
getValueAsMoment(val) {
|
|
319
|
+
if (!Util.isDefined(val)) {
|
|
320
|
+
return val;
|
|
321
|
+
}
|
|
322
|
+
let result;
|
|
323
|
+
switch (true) {
|
|
324
|
+
case this.valueType === 'string' && typeof val === 'string':
|
|
325
|
+
result = moment(val, this.oformat);
|
|
326
|
+
break;
|
|
327
|
+
case this.valueType === 'date' && val instanceof Date:
|
|
328
|
+
case this.valueType === 'timestamp' && typeof val === 'number':
|
|
329
|
+
case this.valueType === 'iso-8601' && typeof val === 'string':
|
|
330
|
+
result = moment(val);
|
|
331
|
+
break;
|
|
332
|
+
case this.valueType === 'iso-8601':
|
|
333
|
+
if (typeof val !== 'string') {
|
|
334
|
+
const acceptTimestamp = typeof val === 'number' && this.getSQLType() === SQLTypes.TIMESTAMP;
|
|
335
|
+
if (acceptTimestamp) {
|
|
336
|
+
result = moment(val);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
break;
|
|
340
|
+
default:
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
return Util.isDefined(result) && result.isValid() ? result : undefined;
|
|
318
344
|
}
|
|
319
345
|
}
|
|
320
|
-
ODateRangeInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ODateRangeInputComponent, deps: [{ token: forwardRef(() => OFormComponent), optional: true }, { token: i0.ElementRef }, { token: i0.Injector }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
|
|
321
|
-
ODateRangeInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ODateRangeInputComponent, selector: "o-daterange-input", inputs: { separator: "separator",
|
|
346
|
+
ODateRangeInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ODateRangeInputComponent, deps: [{ token: forwardRef(() => OFormComponent), optional: true }, { token: i0.ElementRef }, { token: i0.Injector }, { token: i1.DateAdapter }, { token: i2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
|
|
347
|
+
ODateRangeInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ODateRangeInputComponent, selector: "o-daterange-input", inputs: { separator: "separator", olocale: ["locale", "olocale"], startKey: "startKey", endKey: "endKey", valueType: ["value-type", "valueType"], mode: "mode", placeholderStartDay: ["placeholder-startday", "placeholderStartDay"], placeholderEndDay: ["placeholder-endday", "placeholderEndDay"], oformat: ["format", "oformat"], oStartView: ["start-view", "oStartView"], oMinDate: ["min", "oMinDate"], oMaxDate: ["max", "oMaxDate"], oTouchUi: ["touch-ui", "oTouchUi"], oStartAt: ["start-at", "oStartAt"], filterDate: ["filter-date", "filterDate"], textInputEnabled: ["text-input-enabled", "textInputEnabled"], dateClass: ["date-class", "dateClass"] }, outputs: { onChange: "onChange", onValueChange: "onValueChange", onFocus: "onFocus", onBlur: "onBlur" }, providers: [
|
|
348
|
+
{ provide: DateAdapter, useClass: OntimizeMomentDateAdapter, deps: [MAT_DATE_LOCALE] }
|
|
349
|
+
], viewQueries: [{ propertyName: "picker", first: true, predicate: ["picker"], descendants: true, static: true }, { propertyName: "dateRangeInput", first: true, predicate: ["dateRangeInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\"\n [matTooltipPosition]=\"tooltipPosition\" [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\">\n\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [hideRequiredMarker]=\"hideRequiredMarker\" [class.custom-width]=\"hasCustomWidth\"\n class=\"icon-field\" fxFlexFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <mat-date-range-input #dateRangeInput [rangePicker]=\"picker\" [id]=\"getAttribute()\" [formGroup]=\"range\" [separator]=\"separator\"\n [required]=\"isRequired\" [min]=\"oMinDate\" [max]=\"oMaxDate\" (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\">\n <input #startDate matStartDate placeholder=\"{{ placeholderStartDay | oTranslate }}\" [value]=\"startDateValue\"\n [formControlName]=\"startKey\" (dateChange)=\"onChangeEvent($event)\" [readonly]=\"isReadOnly || !textInputEnabled\" (focus)=\"innerOnFocus($event)\"\n (blur)=\"innerOnBlur($event)\" [required]=\"isRequired\">\n <input #endDate matEndDate placeholder=\"{{ placeholderEndDay | oTranslate }}\" [value]=\"endDateValue\" [formControlName]=\"endKey\"\n (dateChange)=\"onChangeEvent($event)\" [readonly]=\"isReadOnly || !textInputEnabled\" (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\"\n [required]=\"isRequired\">\n </mat-date-range-input>\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\" [disabled]=\"isReadOnly || !enabled\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker [disabled]=\"isReadOnly || !enabled\" [class.read-only]=\"isReadOnly\" [touchUi]=\"touchUi\" [dateClass]=\"dateClass\"></mat-date-range-picker>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRange')\">\n {{ 'FORM_VALIDATION.DATERANGE_INVALID' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRangeParse')\">\n {{ 'FORM_VALIDATION.DATE_PARSE' | oTranslate }} : {{ getErrorValue('dateRangeParse', 'format') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRangeMin')\">\n {{ 'FORM_VALIDATION.DATERANGE_MIN' | oTranslate }} : {{ getErrorValue('dateRangeMin', 'dateMin') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRangeMax')\">\n {{ 'FORM_VALIDATION.DATERANGE_MAX' | oTranslate }} : {{ getErrorValue('dateRangeMax', 'dateMax') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.OMatErrorDirective, selector: "[oMatError]", inputs: ["oMatError"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i8.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i8.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i8.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i8.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i12.OTranslatePipe, name: "oTranslate" }] });
|
|
322
350
|
__decorate([
|
|
323
351
|
BooleanInputConverter(),
|
|
324
352
|
__metadata("design:type", Boolean)
|
|
325
353
|
], ODateRangeInputComponent.prototype, "textInputEnabled", void 0);
|
|
326
|
-
__decorate([
|
|
327
|
-
BooleanInputConverter(),
|
|
328
|
-
__metadata("design:type", Boolean)
|
|
329
|
-
], ODateRangeInputComponent.prototype, "showWeekNumbers", void 0);
|
|
330
354
|
__decorate([
|
|
331
355
|
BooleanInputConverter(),
|
|
332
356
|
__metadata("design:type", Boolean)
|
|
333
357
|
], ODateRangeInputComponent.prototype, "oTouchUi", void 0);
|
|
334
|
-
__decorate([
|
|
335
|
-
BooleanInputConverter(),
|
|
336
|
-
__metadata("design:type", Boolean)
|
|
337
|
-
], ODateRangeInputComponent.prototype, "showRanges", void 0);
|
|
338
358
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ODateRangeInputComponent, decorators: [{
|
|
339
359
|
type: Component,
|
|
340
|
-
args: [{ selector: 'o-daterange-input', outputs: DEFAULT_OUTPUTS_O_DATERANGE_INPUT, inputs: DEFAULT_INPUTS_O_DATERANGE_INPUT,
|
|
360
|
+
args: [{ selector: 'o-daterange-input', outputs: DEFAULT_OUTPUTS_O_DATERANGE_INPUT, inputs: DEFAULT_INPUTS_O_DATERANGE_INPUT, providers: [
|
|
361
|
+
{ provide: DateAdapter, useClass: OntimizeMomentDateAdapter, deps: [MAT_DATE_LOCALE] }
|
|
362
|
+
], template: "<div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\"\n [matTooltipPosition]=\"tooltipPosition\" [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\">\n\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [hideRequiredMarker]=\"hideRequiredMarker\" [class.custom-width]=\"hasCustomWidth\"\n class=\"icon-field\" fxFlexFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <mat-date-range-input #dateRangeInput [rangePicker]=\"picker\" [id]=\"getAttribute()\" [formGroup]=\"range\" [separator]=\"separator\"\n [required]=\"isRequired\" [min]=\"oMinDate\" [max]=\"oMaxDate\" (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\">\n <input #startDate matStartDate placeholder=\"{{ placeholderStartDay | oTranslate }}\" [value]=\"startDateValue\"\n [formControlName]=\"startKey\" (dateChange)=\"onChangeEvent($event)\" [readonly]=\"isReadOnly || !textInputEnabled\" (focus)=\"innerOnFocus($event)\"\n (blur)=\"innerOnBlur($event)\" [required]=\"isRequired\">\n <input #endDate matEndDate placeholder=\"{{ placeholderEndDay | oTranslate }}\" [value]=\"endDateValue\" [formControlName]=\"endKey\"\n (dateChange)=\"onChangeEvent($event)\" [readonly]=\"isReadOnly || !textInputEnabled\" (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\"\n [required]=\"isRequired\">\n </mat-date-range-input>\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\" [disabled]=\"isReadOnly || !enabled\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker [disabled]=\"isReadOnly || !enabled\" [class.read-only]=\"isReadOnly\" [touchUi]=\"touchUi\" [dateClass]=\"dateClass\"></mat-date-range-picker>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRange')\">\n {{ 'FORM_VALIDATION.DATERANGE_INVALID' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRangeParse')\">\n {{ 'FORM_VALIDATION.DATE_PARSE' | oTranslate }} : {{ getErrorValue('dateRangeParse', 'format') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRangeMin')\">\n {{ 'FORM_VALIDATION.DATERANGE_MIN' | oTranslate }} : {{ getErrorValue('dateRangeMin', 'dateMin') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('dateRangeMax')\">\n {{ 'FORM_VALIDATION.DATERANGE_MAX' | oTranslate }} : {{ getErrorValue('dateRangeMax', 'dateMax') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n</div>\n" }]
|
|
341
363
|
}], ctorParameters: function () { return [{ type: i13.OFormComponent, decorators: [{
|
|
342
364
|
type: Optional
|
|
343
365
|
}, {
|
|
344
366
|
type: Inject,
|
|
345
367
|
args: [forwardRef(() => OFormComponent)]
|
|
346
|
-
}] }, { type: i0.ElementRef }, { type: i0.Injector }, { type: i1.BreakpointObserver }]; }, propDecorators: {
|
|
368
|
+
}] }, { type: i0.ElementRef }, { type: i0.Injector }, { type: i1.DateAdapter }, { type: i2.BreakpointObserver }]; }, propDecorators: { picker: [{
|
|
347
369
|
type: ViewChild,
|
|
348
|
-
args: [
|
|
349
|
-
}],
|
|
370
|
+
args: ['picker', { static: true }]
|
|
371
|
+
}], textInputEnabled: [], oTouchUi: [], dateRangeInput: [{
|
|
350
372
|
type: ViewChild,
|
|
351
|
-
args: ['
|
|
352
|
-
}]
|
|
353
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1kYXRlcmFuZ2UtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQvZGF0ZS1yYW5nZS9vLWRhdGVyYW5nZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9pbnB1dC9kYXRlLXJhbmdlL28tZGF0ZXJhbmdlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUgsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUdwRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25GLE9BQU8sRUFB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QUU7Z0JBSTlDLFdBQVc7c0JBRGxCLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlyRCxnQkFBZ0IsTUFHaEIsZUFBZSxNQUdmLFFBQVEsTUFHUixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgTW9tZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVZhbHVlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2Zvcm0tdmFsdWUtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9EYXRlVmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvby1kYXRlLXZhbHVlLnR5cGUnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBERUZBVUxUX09VVFBVVFNfT19GT1JNX0RBVEFfQ09NUE9ORU5ULCBPRm9ybURhdGFDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vLWZvcm0tZGF0YS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT1ZhbHVlQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9vLXZhbHVlLWNoYW5nZS1ldmVudC5jbGFzcyc7XG5pbXBvcnQgeyBERUZBVUxUX0lOUFVUU19PX0RBVEVfSU5QVVQgfSBmcm9tICcuLi9kYXRlLWlucHV0L28tZGF0ZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0RhdGVyYW5nZXBpY2tlckRpcmVjdGl2ZSB9IGZyb20gJy4vby1kYXRlcmFuZ2UtaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGVyYW5nZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vby1kYXRlcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19EQVRFUkFOR0VfSU5QVVQgPSBbXG4gIC4uLkRFRkFVTFRfT1VUUFVUU19PX0ZPUk1fREFUQV9DT01QT05FTlRcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0RBVEVSQU5HRV9JTlBVVCA9IFtcbiAgJ3NlcGFyYXRvcicsXG4gICdzaG93V2Vla051bWJlcnM6c2hvdy13ZWVrLW51bWJlcnMnLFxuICAnc2hvd1JhbmdlczpzaG93LXJhbmdlcycsXG4gICdvbG9jYWxlOmxvY2FsZScsXG4gICdzdGFydEtleScsXG4gICdlbmRLZXknLFxuICAndmFsdWVUeXBlOiB2YWx1ZS10eXBlJyxcbiAgJ21vZGUnLFxuICAuLi5ERUZBVUxUX0lOUFVUU19PX0RBVEVfSU5QVVRcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZGF0ZXJhbmdlLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tZGF0ZXJhbmdlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1kYXRlcmFuZ2UtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fREFURVJBTkdFX0lOUFVULFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fREFURVJBTkdFX0lOUFVUXG59KVxuZXhwb3J0IGNsYXNzIE9EYXRlUmFuZ2VJbnB1dENvbXBvbmVudCBleHRlbmRzIE9Gb3JtRGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICBAVmlld0NoaWxkKE9EYXRlcmFuZ2VwaWNrZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHBpY2tlckRpcmVjdGl2ZTogT0RhdGVyYW5nZXBpY2tlckRpcmVjdGl2ZTtcbiAgcGlja2VyITogRGF0ZXJhbmdlcGlja2VyQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ21hdElucHV0UmVmJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBtYXRJbnB1dFJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyB0ZXh0SW5wdXRFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dXZWVrTnVtYmVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgb1RvdWNoVWk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dSYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgX29NaW5EYXRlOiBtb21lbnQuTW9tZW50O1xuXG4gIHB1YmxpYyBtb2RlOiAnbW9iaWxlJyB8ICdkZXNrdG9wJyB8ICdhdXRvJyA9ICdhdXRvJztcblxuICBnZXQgb01pbkRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29NaW5EYXRlO1xuICB9XG4gIHNldCBvTWluRGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMuX29NaW5EYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLm9mb3JtYXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vTWF4RGF0ZTogbW9tZW50Lk1vbWVudDtcbiAgZ2V0IG9NYXhEYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9vTWF4RGF0ZTtcbiAgfVxuICBzZXQgb01heERhdGUodmFsdWUpIHtcbiAgICB0aGlzLl9vTWF4RGF0ZSA9IG1vbWVudCh2YWx1ZSwgdGhpcy5vZm9ybWF0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfc3RhcnRLZXk6IHN0cmluZyA9ICdzdGFydERhdGUnO1xuICBnZXQgc3RhcnRLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0S2V5O1xuICB9XG4gIHNldCBzdGFydEtleSh2YWx1ZSkge1xuICAgIHRoaXMuX3N0YXJ0S2V5ID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2VuZEtleTogc3RyaW5nID0gJ2VuZERhdGUnO1xuICBnZXQgZW5kS2V5KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmRLZXk7XG4gIH1cbiAgc2V0IGVuZEtleSh2YWx1ZSkge1xuICAgIHRoaXMuX2VuZEtleSA9IHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF92YWx1ZVR5cGU6IE9EYXRlVmFsdWVUeXBlID0gJ3RpbWVzdGFtcCc7XG5cbiAgcHJvdGVjdGVkIF9zZXBhcmF0b3IgPSAnIC0gJztcbiAgZ2V0IHNlcGFyYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VwYXJhdG9yO1xuICB9XG5cbiAgc2V0IHNlcGFyYXRvcih2YWx1ZSkge1xuICAgIHRoaXMuX3NlcGFyYXRvciA9IHZhbHVlO1xuICAgIGlmICh0aGlzLmdldEZvcm1Db250cm9sKCkgJiYgdGhpcy5nZXRGb3JtQ29udHJvbCgpLnZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFyQnV0dG9uICYmICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5lbmFibGVkICYmIHRoaXMubWF0SW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGdldCBsb2NhbGVPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2NhbGVPcHRpb25zO1xuICB9XG5cbiAgaXNNb2JpbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdtb2JpbGUnIHx8ICh0aGlzLm1vZGUgPT09ICdhdXRvJyAmJiB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuSGFuZHNldCkpXG4gIH1cblxuICBpc0Rlc2t0b3BNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdkZXNrdG9wJyB8fCAodGhpcy5tb2RlID09PSAnYXV0bycgJiYgIXRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5IYW5kc2V0KSlcbiAgfVxuXG5cbiAgcHVibGljIG9mb3JtYXQ6IHN0cmluZyA9ICdMJztcbiAgcHJvdGVjdGVkIF9sb2NhbGVPcHRpb25zOiBhbnk7XG4gIHByb3RlY3RlZCBvbG9jYWxlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBtb21lbnRTcnY6IE1vbWVudFNlcnZpY2U7XG4gIHByaXZhdGUgb1RyYW5zbGF0ZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkge1xuICAgIHN1cGVyKGZvcm0sIGVsUmVmLCBpbmplY3Rvcik7XG4gICAgdGhpcy5vVHJhbnNsYXRlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMubW9tZW50U3J2ID0gdGhpcy5pbmplY3Rvci5nZXQoTW9tZW50U2VydmljZSk7XG4gICAgaWYgKCF0aGlzLm9sb2NhbGUpIHtcbiAgICAgIHRoaXMub2xvY2FsZSA9IHRoaXMubW9tZW50U3J2LmdldExvY2FsZSgpO1xuICAgICAgbW9tZW50LmxvY2FsZSh0aGlzLm9sb2NhbGUpO1xuICAgIH1cbiAgICB0aGlzLl9sb2NhbGVPcHRpb25zID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIHNlcGFyYXRvcjogJyAtICcsXG4gICAgICB3ZWVrTGFiZWw6IHRoaXMub1RyYW5zbGF0ZS5nZXQoJ0RBVEVSQU5HRS5XJyksXG4gICAgICBhcHBseUxhYmVsOiB0aGlzLm9UcmFuc2xhdGUuZ2V0KCdEQVRFUkFOR0UuQVBQTFlMQUJFTCcpLFxuICAgICAgY2FuY2VsTGFiZWw6IHRoaXMub1RyYW5zbGF0ZS5nZXQoJ0NBTkNFTCcpLFxuICAgICAgY3VzdG9tUmFuZ2VMYWJlbDogJ0N1c3RvbSByYW5nZScsXG4gICAgICBkYXlzT2ZXZWVrOiBtb21lbnQubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKCksXG4gICAgICBtb250aE5hbWVzOiBtb21lbnQubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KCksXG4gICAgICBmaXJzdERheTogbW9tZW50LmxvY2FsZURhdGEoKS5maXJzdERheU9mV2VlaygpLFxuICAgICAgZm9ybWF0OiAnTCdcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBpZiAodGhpcy5vZm9ybWF0KSB7XG4gICAgICB0aGlzLl9sb2NhbGVPcHRpb25zLmZvcm1hdCA9IHRoaXMub2Zvcm1hdDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlblBpY2tlcigpIHtcbiAgICB0aGlzLnBpY2tlckRpcmVjdGl2ZS5vcGVuKCk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VFdmVudChldmVudDogYW55KTogdm9pZCB7XG4gICAgbGV0IG9iamVjdFZhbHVlO1xuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICBpZiAodmFsdWUgIT09ICcnKSB7XG4gICAgICAgIG9iamVjdFZhbHVlID0gdGhpcy5nZXREYXRlUmFuZ2VUb1N0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iamVjdFZhbHVlID0gZXZlbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRWYWx1ZShvYmplY3RWYWx1ZSwge1xuICAgICAgY2hhbmdlVHlwZTogT1ZhbHVlQ2hhbmdlRXZlbnQuVVNFUl9DSEFOR0UsXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZVxuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgc2V0VmFsdWUodmFsOiBhbnksIG9wdGlvbnM6IEZvcm1WYWx1ZU9wdGlvbnMgPSB7fSwgc2V0RGlydHk6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHN1cGVyLnNldFZhbHVlKHZhbCwgb3B0aW9ucywgc2V0RGlydHkpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tDbGVhclZhbHVlKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgc3VwZXIub25DbGlja0NsZWFyVmFsdWUoZSk7XG4gICAgdGhpcy5waWNrZXJEaXJlY3RpdmUudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5waWNrZXJEaXJlY3RpdmUuZGF0ZXNVcGRhdGVkLmVtaXQoKTtcbiAgfVxuXG4gIGRhdGVzVXBkYXRlZChyYW5nZSkge1xuICAgIHRoaXMucGlja2VyRGlyZWN0aXZlLmNsb3NlKCk7XG4gICAgdGhpcy5zZXRWYWx1ZShyYW5nZSxcbiAgICAgIHtcbiAgICAgICAgY2hhbmdlVHlwZTogT1ZhbHVlQ2hhbmdlRXZlbnQuVVNFUl9DSEFOR0UsXG4gICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2VcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldERhdGEobmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnNldERhdGEobmV3VmFsdWUpO1xuICAgIHRoaXMucGlja2VyRGlyZWN0aXZlLmRhdGVzVXBkYXRlZC5lbWl0KG5ld1ZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgfVxuXG4gIHVwZGF0ZUVsZW1lbnQoKSB7XG4gICAgbGV0IGNob3NlbkxhYmVsOiBhbnk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMudmFsdWUpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMudmFsdWUudmFsdWUpICYmICF0aGlzLmlzT2JqZWN0RGF0YVJhbmdlTnVsbCh0aGlzLnZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMudmFsdWUudmFsdWVbdGhpcy5waWNrZXJEaXJlY3RpdmUuc3RhcnRLZXldICYmIHRoaXMudmFsdWUudmFsdWVbdGhpcy5waWNrZXJEaXJlY3RpdmUuZW5kS2V5XSkge1xuICAgICAgICB0aGlzLnZhbHVlLnZhbHVlW3RoaXMucGlja2VyRGlyZWN0aXZlLnN0YXJ0S2V5XSA9IHRoaXMuZW5zdXJlRGF0ZVJhbmdlVmFsdWUodGhpcy52YWx1ZS52YWx1ZVt0aGlzLnBpY2tlckRpcmVjdGl2ZS5zdGFydEtleV0sIHRoaXMuX3ZhbHVlVHlwZSk7XG4gICAgICAgIHRoaXMudmFsdWUudmFsdWVbdGhpcy5waWNrZXJEaXJlY3RpdmUuZW5kS2V5XSA9IHRoaXMuZW5zdXJlRGF0ZVJhbmdlVmFsdWUodGhpcy52YWx1ZS52YWx1ZVt0aGlzLnBpY2tlckRpcmVjdGl2ZS5lbmRLZXldLCB0aGlzLl92YWx1ZVR5cGUpO1xuICAgICAgICBjaG9zZW5MYWJlbCA9IHRoaXMudmFsdWUudmFsdWVbdGhpcy5waWNrZXJEaXJlY3RpdmUuc3RhcnRLZXldLmZvcm1hdCh0aGlzLm9mb3JtYXQpICtcbiAgICAgICAgICB0aGlzLnNlcGFyYXRvciArIHRoaXMudmFsdWUudmFsdWVbdGhpcy5waWNrZXJEaXJlY3RpdmUuZW5kS2V5XS5mb3JtYXQodGhpcy5vZm9ybWF0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNob3NlbkxhYmVsID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hvc2VuTGFiZWwgPSBudWxsO1xuICAgICAgdGhpcy5waWNrZXJEaXJlY3RpdmUudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMucGlja2VyRGlyZWN0aXZlLl9lbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gY2hvc2VuTGFiZWw7XG4gIH1cblxuXG4gIGdldERhdGVSYW5nZVRvU3RyaW5nKHZhbHVlVG9TdHJpbmc6IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0ge307XG4gICAgY29uc3QgcmFuZ2UgPSB2YWx1ZVRvU3RyaW5nLnNwbGl0KHRoaXMuc2VwYXJhdG9yKTtcbiAgICB2YWx1ZVt0aGlzLl9zdGFydEtleV0gPSBtb21lbnQocmFuZ2VbMF0udHJpbSgpLCB0aGlzLm9mb3JtYXQpO1xuICAgIHZhbHVlW3RoaXMuX2VuZEtleV0gPSBtb21lbnQocmFuZ2VbMV0udHJpbSgpLCB0aGlzLm9mb3JtYXQpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgcmVzb2x2ZVZhbGlkYXRvcnMoKTogVmFsaWRhdG9yRm5bXSB7XG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IHN1cGVyLnJlc29sdmVWYWxpZGF0b3JzKCk7XG5cbiAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5yYW5nZURhdGVWYWxpZGF0b3IuYmluZCh0aGlzKSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuX29NaW5EYXRlKSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMubWluRGF0ZVZhbGlkYXRvci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuX29NYXhEYXRlKSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMubWF4RGF0ZVZhbGlkYXRvci5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5wYXJzZURhdGVWYWxpZGF0b3IuYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH1cblxuICBpc09iamVjdERhdGFSYW5nZU51bGwob2JqZWN0VmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb2JqZWN0VmFsdWUgIT09IG51bGwgJiYgb2JqZWN0VmFsdWUudmFsdWUgIT09IG51bGwgJiZcbiAgICAgICFVdGlsLmlzRGVmaW5lZChvYmplY3RWYWx1ZS52YWx1ZVt0aGlzLnBpY2tlckRpcmVjdGl2ZS5zdGFydEtleV0pICYmXG4gICAgICAhVXRpbC5pc0RlZmluZWQob2JqZWN0VmFsdWUudmFsdWVbdGhpcy5waWNrZXJEaXJlY3RpdmUuZW5kS2V5XSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCByYW5nZURhdGVWYWxpZGF0b3IoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG5cbiAgICBpZiAoKGNvbnRyb2wudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAmJiAhdGhpcy5pc09iamVjdERhdGFSYW5nZU51bGwoY29udHJvbCkgJiYgY29udHJvbC52YWx1ZVt0aGlzLl9lbmRLZXldLmlzU2FtZU9yQmVmb3JlKGNvbnRyb2wudmFsdWVbdGhpcy5fc3RhcnRLZXldKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZVJhbmdlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcm90ZWN0ZWQgbWluRGF0ZVZhbGlkYXRvcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBjb25zdCBtaW5kYXRlID0gbW9tZW50KHRoaXMuX29NaW5EYXRlKTtcbiAgICBpZiAoKGNvbnRyb2wudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAmJiAhdGhpcy5pc09iamVjdERhdGFSYW5nZU51bGwoY29udHJvbCkgJiYgY29udHJvbC52YWx1ZVt0aGlzLl9zdGFydEtleV0uaXNCZWZvcmUobWluZGF0ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGVSYW5nZU1pbjoge1xuICAgICAgICAgIGRhdGVNaW46IG1pbmRhdGUuZm9ybWF0KHRoaXMub2Zvcm1hdClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heERhdGVWYWxpZGF0b3IoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgY29uc3QgbWF4ZGF0ZSA9IG1vbWVudCh0aGlzLl9vTWF4RGF0ZSk7XG4gICAgaWYgKChjb250cm9sLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgJiYgIXRoaXMuaXNPYmplY3REYXRhUmFuZ2VOdWxsKGNvbnRyb2wpICYmIGNvbnRyb2wudmFsdWVbdGhpcy5fZW5kS2V5XS5pc0FmdGVyKG1heGRhdGUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlUmFuZ2VNYXg6IHtcbiAgICAgICAgICBkYXRlTWF4OiBtYXhkYXRlLmZvcm1hdCh0aGlzLm9mb3JtYXQpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuICBwcm90ZWN0ZWQgcGFyc2VEYXRlVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmICgoY29udHJvbC52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICYmICF0aGlzLmlzT2JqZWN0RGF0YVJhbmdlTnVsbChjb250cm9sKVxuICAgICAgJiYgKChjb250cm9sLnZhbHVlW3RoaXMuX3N0YXJ0S2V5XSAmJiAhY29udHJvbC52YWx1ZVt0aGlzLl9zdGFydEtleV0uaXNWYWxpZCgpKVxuICAgICAgICB8fCAoY29udHJvbC52YWx1ZVt0aGlzLl9lbmRLZXldICYmICFjb250cm9sLnZhbHVlW3RoaXMuX2VuZEtleV0uaXNWYWxpZCgpKSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGVSYW5nZVBhcnNlOiB7XG4gICAgICAgICAgZm9ybWF0OiB0aGlzLm9mb3JtYXQgKyB0aGlzLl9sb2NhbGVPcHRpb25zLnNlcGFyYXRvciArIHRoaXMub2Zvcm1hdFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBlbnN1cmVEYXRlUmFuZ2VWYWx1ZSh2YWw6IGFueSwgdmFsdWVUeXBlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSB2YWw7XG4gICAgaWYgKCFtb21lbnQuaXNNb21lbnQodmFsKSkge1xuICAgICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgaWYgKCh2YWwgaW5zdGFuY2VvZiBEYXRlKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IG1vbWVudCh2YWwpLmZvcm1hdCgnWVlZWS1NTS1ERFRoaDptbScpICsgJ1onO1xuICAgICAgICAgICAgY29uc3QgcSA9IG1vbWVudChkYXRlU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChxLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0aW1lc3RhbXAnOlxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IG1vbWVudC51bml4KHZhbCkuZm9ybWF0KCdZWVlZLU1NLUREVGhoOm1tJykgKyAnWic7XG4gICAgICAgICAgICBjb25zdCB0ID0gbW9tZW50KGRhdGVTdHJpbmcpO1xuICAgICAgICAgICAgaWYgKHQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2lzby04NjAxJzpcbiAgICAgICAgICBjb25zdCBtID0gbW9tZW50KHZhbCk7XG4gICAgICAgICAgaWYgKG0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHJlc3VsdCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgT0RhdGVSYW5nZUlucHV0Q29tcG9uZW50IHZhbHVlICgke3ZhbH0pIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdmFsdWUtdHlwZSAoJHt2YWx1ZVR5cGV9KWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0IHZhbHVlVHlwZSh2YWw6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlVHlwZSA9IFV0aWwuY29udmVydFRvT0RhdGVWYWx1ZVR5cGUodmFsKTtcbiAgfVxuXG4gIGdldCB2YWx1ZVR5cGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVUeXBlO1xuICB9XG5cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cCgpXCIgW21hdFRvb2x0aXBdPVwidG9vbHRpcFwiIFttYXRUb29sdGlwQ2xhc3NdPVwidG9vbHRpcENsYXNzXCJcbiAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIiBbbWF0VG9vbHRpcFNob3dEZWxheV09XCJ0b29sdGlwU2hvd0RlbGF5XCIgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwidG9vbHRpcEhpZGVEZWxheVwiPlxuXG4gIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCIgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiaGlkZVJlcXVpcmVkTWFya2VyXCIgW2NsYXNzLmN1c3RvbS13aWR0aF09XCJoYXNDdXN0b21XaWR0aFwiXG4gICAgY2xhc3M9XCJpY29uLWZpZWxkXCIgZnhGbGV4RmlsbCBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFZpc2libGVcIj57eyBvbGFiZWwgfCBvVHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0ICNtYXRJbnB1dFJlZiBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIG8tZGF0ZXJhbmdlLWlucHV0IFtpZF09XCJnZXRBdHRyaWJ1dGUoKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZ2V0QXR0cmlidXRlKClcIiBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIiBbcmVhZG9ubHldPVwiaXNSZWFkT25seSB8fCAhdGV4dElucHV0RW5hYmxlZFwiIHNob3dEcm9wZG93bnM9XCJ0cnVlXCIgc2hvd0NhbmNlbD1cInRydWVcIiBbc2hvd1Jhbmdlc109XCJzaG93UmFuZ2VzXCJcbiAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZXNVcGRhdGVkKCRldmVudClcIiBbb1RvdWNoVWldPVwib1RvdWNoVWlcIiBbbWluRGF0ZV09XCJvTWluRGF0ZVwiIFttYXhEYXRlXT1cIm9NYXhEYXRlXCIgKGZvY3VzKT1cImlubmVyT25Gb2N1cygkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cImlubmVyT25CbHVyKCRldmVudClcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoJGV2ZW50KVwiIFtsb2NhbGVdPVwibG9jYWxlT3B0aW9uc1wiIFtzZXBhcmF0b3JdPVwic2VwYXJhdG9yXCIgW3N0YXJ0S2V5XT1cInN0YXJ0S2V5XCJcbiAgICAgIFtlbmRLZXldPVwiZW5kS2V5XCIgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIiBbc2luZ2xlRGF0ZVBpY2tlcl09XCJpc01vYmlsZU1vZGUoKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5QaWNrZXIoKVwiIFtkaXNhYmxlZF09XCJpc1JlYWRPbmx5IHx8ICFlbmFibGVkXCI+XG4gICAgICA8bWF0LWljb24+dG9kYXk8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b25cIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkNsaWNrQ2xlYXJWYWx1ZSgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImlzUmVhZE9ubHkgfHwgIWVuYWJsZWRcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cImhhc0Vycm9yKCdkYXRlUmFuZ2UnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5EQVRFUkFOR0VfSU5WQUxJRCcgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ2RhdGVSYW5nZVBhcnNlJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uREFURV9QQVJTRScgfCBvVHJhbnNsYXRlIH19IDoge3sgZ2V0RXJyb3JWYWx1ZSgnZGF0ZVJhbmdlUGFyc2UnLCAnZm9ybWF0JykgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcignZGF0ZVJhbmdlTWluJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uREFURVJBTkdFX01JTicgfCBvVHJhbnNsYXRlIH19IDoge3sgZ2V0RXJyb3JWYWx1ZSgnZGF0ZVJhbmdlTWluJywgJ2RhdGVNaW4nKSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cImhhc0Vycm9yKCdkYXRlUmFuZ2VNYXgnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5EQVRFUkFOR0VfTUFYJyB8IG9UcmFuc2xhdGUgfX0gOiB7eyBnZXRFcnJvclZhbHVlKCdkYXRlUmFuZ2VNYXgnLCAnZGF0ZU1heCcpIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgb0Vycm9yIG9mIGdldEFjdGl2ZU9FcnJvcnMoKVwiPlxuICAgICAge3sgb0Vycm9yLnRleHQgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
|
|
373
|
+
args: ['dateRangeInput']
|
|
374
|
+
}] } });
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1kYXRlcmFuZ2UtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQvZGF0ZS1yYW5nZS9vLWRhdGVyYW5nZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9pbnB1dC9kYXRlLXJhbmdlL28tZGF0ZXJhbmdlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQXFELE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQXNDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekgsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRzVCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQs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QWUsRUFBRTt3QkFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtxQkFDckI7aUJBQ0Y7Z0JBQ0QsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ3hFLENBQUM7O3NIQXZYVSx3QkFBd0Isa0JBd0diLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7MEdBeEczQyx3QkFBd0IsOHhCQUp4QjtRQUNULEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUU7S0FDdkYsb1FDL0NILDA5RkEwQ0E7QURZRTtJQUFDLHFCQUFxQixFQUFFOztrRUFDZ0I7QUFFeEM7SUFBQyxxQkFBcUIsRUFBRTs7MERBQ1M7NEZBVHRCLHdCQUF3QjtrQkFUcEMsU0FBUzsrQkFDRSxtQkFBbUIsV0FFcEIsaUNBQWlDLFVBQ2xDLGdDQUFnQyxhQUM3Qjt3QkFDVCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFO3FCQUN2Rjs7MEJBMEdFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQzt1SkFyR3RELE1BQU07c0JBREwsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk5QixnQkFBZ0IsTUFHaEIsUUFBUSxNQUdmLGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZWRpYUNoYW5nZSwgTWVkaWFPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcbmltcG9ydCB7IEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBNQVRfREFURV9MT0NBTEUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IERhdGVSYW5nZSwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQsIE1hdERhdGVSYW5nZUlucHV0LCBNYXREYXRlUmFuZ2VQaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBNb21lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgT250aW1pemVNb21lbnREYXRlQWRhcHRlciB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBGb3JtVmFsdWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZm9ybS12YWx1ZS1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT0RhdGVWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9vLWRhdGUtdmFsdWUudHlwZSc7XG5pbXBvcnQgeyBTUUxUeXBlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvc3FsdHlwZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybVZhbHVlIH0gZnJvbSAnLi4vLi4vZm9ybS9vLWZvcm0tdmFsdWUnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgREVGQVVMVF9PVVRQVVRTX09fRk9STV9EQVRBX0NPTVBPTkVOVCwgT0Zvcm1EYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9WYWx1ZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vby12YWx1ZS1jaGFuZ2UtZXZlbnQuY2xhc3MnO1xuaW1wb3J0IHsgREVGQVVMVF9JTlBVVFNfT19EQVRFX0lOUFVUIH0gZnJvbSAnLi4vZGF0ZS1pbnB1dC9vLWRhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtQ29udHJvbCB9IGZyb20gJy4uL28tZm9ybS1jb250cm9sLmNsYXNzJztcbmltcG9ydCB7IERhdGVDdXN0b21DbGFzc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZGF0ZS1jdXN0b20tY2xhc3MudHlwZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19EQVRFUkFOR0VfSU5QVVQgPSBbXG4gIC4uLkRFRkFVTFRfT1VUUFVUU19PX0ZPUk1fREFUQV9DT01QT05FTlRcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0RBVEVSQU5HRV9JTlBVVCA9IFtcbiAgJ3NlcGFyYXRvcicsXG4gICdvbG9jYWxlOmxvY2FsZScsXG4gICdzdGFydEtleScsXG4gICdlbmRLZXknLFxuICAndmFsdWVUeXBlOiB2YWx1ZS10eXBlJyxcbiAgJ21vZGUnLFxuICAncGxhY2Vob2xkZXJTdGFydERheTogcGxhY2Vob2xkZXItc3RhcnRkYXknLFxuICAncGxhY2Vob2xkZXJFbmREYXk6IHBsYWNlaG9sZGVyLWVuZGRheScsXG4gIC4uLkRFRkFVTFRfSU5QVVRTX09fREFURV9JTlBVVFxuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1kYXRlcmFuZ2UtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vby1kYXRlcmFuZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19EQVRFUkFOR0VfSU5QVVQsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19EQVRFUkFOR0VfSU5QVVQsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBPbnRpbWl6ZU1vbWVudERhdGVBZGFwdGVyLCBkZXBzOiBbTUFUX0RBVEVfTE9DQUxFXSB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT0RhdGVSYW5nZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgT0Zvcm1EYXRhQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHBpY2tlciE6IE1hdERhdGVSYW5nZVBpY2tlcjxEYXRlPjtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHRleHRJbnB1dEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgb1RvdWNoVWk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdkYXRlUmFuZ2VJbnB1dCcpXG4gIGRhdGVSYW5nZUlucHV0OiBNYXREYXRlUmFuZ2VJbnB1dDxEYXRlPjtcblxuICBwdWJsaWMgbW9kZTogJ21vYmlsZScgfCAnZGVza3RvcCcgfCAnYXV0bycgPSAnYXV0byc7XG5cbiAgc3RhcnREYXRlVmFsdWU6IERhdGU7XG4gIGVuZERhdGVWYWx1ZTogRGF0ZTtcblxuICByYW5nZTogRm9ybUdyb3VwPHsgW3g6IHN0cmluZ106IE9Gb3JtQ29udHJvbDsgfT5cblxuICBwcm90ZWN0ZWQgX2RhdGVDbGFzczogRGF0ZUN1c3RvbUNsYXNzRnVuY3Rpb25cbiAgZ2V0IGRhdGVDbGFzcygpOiBEYXRlQ3VzdG9tQ2xhc3NGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVDbGFzcztcbiAgfVxuXG4gIHNldCBkYXRlQ2xhc3ModmFsOiBEYXRlQ3VzdG9tQ2xhc3NGdW5jdGlvbikge1xuICAgIHRoaXMuX2RhdGVDbGFzcyA9IHZhbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfb01pbkRhdGU6IERhdGU7XG4gIHNldCBvTWluRGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBtb21lbnREID0gdGhpcy5nZXRWYWx1ZUFzTW9tZW50KHZhbHVlKVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG1vbWVudEQpKSB7XG4gICAgICAgIHRoaXMuX29NaW5EYXRlID0gdGhpcy5jb252ZXJ0VG9EYXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IG9NaW5EYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9vTWluRGF0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfb01heERhdGU6IERhdGU7XG4gIHNldCBvTWF4RGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9vTWF4RGF0ZSA9IHRoaXMuY29udmVydFRvRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldCBvTWF4RGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fb01heERhdGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3N0YXJ0S2V5OiBzdHJpbmcgPSAnc3RhcnREYXRlJztcbiAgZ2V0IHN0YXJ0S2V5KCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydEtleTtcbiAgfVxuICBzZXQgc3RhcnRLZXkodmFsdWUpIHtcbiAgICB0aGlzLl9zdGFydEtleSA9IHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9lbmRLZXk6IHN0cmluZyA9ICdlbmREYXRlJztcbiAgZ2V0IGVuZEtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kS2V5O1xuICB9XG4gIHNldCBlbmRLZXkodmFsdWUpIHtcbiAgICB0aGlzLl9lbmRLZXkgPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfdmFsdWVUeXBlOiBPRGF0ZVZhbHVlVHlwZSA9ICd0aW1lc3RhbXAnO1xuXG4gIHB1YmxpYyBzZXBhcmF0b3IgPSAnIC0gJztcblxuICBnZXQgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFyQnV0dG9uICYmICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5lbmFibGVkICYmIHRoaXMuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCB0b3VjaFVpKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9Ub3VjaFVpIHx8IGZhbHNlO1xuICB9XG5cbiAgc2V0IHRvdWNoVWkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5vVG91Y2hVaSA9IHZhbDtcbiAgfVxuXG4gIGlzTW9iaWxlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnbW9iaWxlJyB8fCAodGhpcy5tb2RlID09PSAnYXV0bycgJiYgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLkhhbmRzZXQpKVxuICB9XG5cbiAgaXNEZXNrdG9wTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZGVza3RvcCcgfHwgKHRoaXMubW9kZSA9PT0gJ2F1dG8nICYmICF0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuSGFuZHNldCkpXG4gIH1cblxuICBwdWJsaWMgb2Zvcm1hdDogc3RyaW5nID0gJ0wnO1xuXG4gIHByb3RlY3RlZCBvbG9jYWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgbW9tZW50U3J2OiBNb21lbnRTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbWVkaWE6IE1lZGlhT2JzZXJ2ZXI7XG4gIHByb3RlY3RlZCBtZWRpYVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb25MYW5ndWFnZUNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBwbGFjZWhvbGRlclN0YXJ0RGF5ID0gJ0RBVEVSQU5HRS5QTEFDRUhPTERFUl9TVEFSVERBVEUnO1xuICBwdWJsaWMgcGxhY2Vob2xkZXJFbmREYXkgPSAnREFURVJBTkdFLlBMQUNFSE9MREVSX0VORERBVEUnO1xuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIG1vbWVudERhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxPbnRpbWl6ZU1vbWVudERhdGVBZGFwdGVyPixcbiAgICBwcm90ZWN0ZWQgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXJcbiAgKSB7XG4gICAgc3VwZXIoZm9ybSwgZWxSZWYsIGluamVjdG9yKTtcbiAgICB0aGlzLm1vbWVudFNydiA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1vbWVudFNlcnZpY2UpO1xuICAgIHRoaXMubWVkaWEgPSB0aGlzLmluamVjdG9yLmdldChNZWRpYU9ic2VydmVyKTtcbiAgICB0aGlzLnJhbmdlID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBbdGhpcy5zdGFydEtleV06IG5ldyBPRm9ybUNvbnRyb2woKSxcbiAgICAgIFt0aGlzLmVuZEtleV06IG5ldyBPRm9ybUNvbnRyb2woKVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvTWVkaWFDaGFuZ2VzKCk7XG4gICAgaWYgKCF0aGlzLm9sb2NhbGUpIHtcbiAgICAgIHRoaXMub2xvY2FsZSA9IHRoaXMubW9tZW50U3J2LmdldExvY2FsZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9mb3JtYXQpIHtcbiAgICAgICh0aGlzLm1vbWVudERhdGVBZGFwdGVyIGFzIGFueSkub0Zvcm1hdCA9IHRoaXMub2Zvcm1hdDtcbiAgICB9XG5cbiAgICB0aGlzLm1vbWVudERhdGVBZGFwdGVyLnNldExvY2FsZSh0aGlzLm9sb2NhbGUpO1xuICAgIHRoaXMub25MYW5ndWFnZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5vbkxhbmd1YWdlQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5tb21lbnREYXRlQWRhcHRlci5zZXRMb2NhbGUodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEN1cnJlbnRMYW5nKCkpO1xuICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmdldFZhbHVlKCkpO1xuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9NZWRpYUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5tZWRpYVN1YnNjcmlwdGlvbiA9IHRoaXMubWVkaWEuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChjaGFuZ2U6IE1lZGlhQ2hhbmdlW10pID0+IHtcbiAgICAgIGlmIChbJ3hzJywgJ3NtJ10uaW5kZXhPZihjaGFuZ2VbMF0ubXFBbGlhcykgIT09IC0xKSB7XG4gICAgICAgIHRoaXMudG91Y2hVaSA9IFV0aWwuaXNEZWZpbmVkKHRoaXMub1RvdWNoVWkpID8gdGhpcy5vVG91Y2hVaSA6IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoWydtZCcsICdsZycsICd4bCddLmluZGV4T2YoY2hhbmdlWzBdLm1xQWxpYXMpICE9PSAtMSkge1xuICAgICAgICB0aGlzLnRvdWNoVWkgPSBVdGlsLmlzRGVmaW5lZCh0aGlzLm9Ub3VjaFVpKSA/IHRoaXMub1RvdWNoVWkgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5waWNrZXIub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBzdXBlci5yZXNvbHZlVmFsaWRhdG9ycygpO1xuXG4gICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMucmFuZ2VEYXRlVmFsaWRhdG9yLmJpbmQodGhpcykpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9NaW5EYXRlKSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMubWluRGF0ZVZhbGlkYXRvci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub01heERhdGUpKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5tYXhEYXRlVmFsaWRhdG9yLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLnBhcnNlRGF0ZVZhbGlkYXRvci5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxuXG4gIGlzT2JqZWN0RGF0YVJhbmdlTnVsbChvYmplY3RWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvYmplY3RWYWx1ZSAhPT0gbnVsbCAmJiBvYmplY3RWYWx1ZS52YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIVV0aWwuaXNEZWZpbmVkKG9iamVjdFZhbHVlLnZhbHVlW3RoaXMuc3RhcnRLZXldKSAmJlxuICAgICAgIVV0aWwuaXNEZWZpbmVkKG9iamVjdFZhbHVlLnZhbHVlW3RoaXMuZW5kS2V5XSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCByYW5nZURhdGVWYWxpZGF0b3IoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG5cbiAgICBpZiAoY29udHJvbC52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhdGhpcy5pc09iamVjdERhdGFSYW5nZU51bGwoY29udHJvbCkpIHtcbiAgICAgIGNvbnN0IGVuZFZhbHVlID0gdGhpcy5nZXRWYWx1ZUFzTW9tZW50KGNvbnRyb2wudmFsdWVbdGhpcy5fZW5kS2V5XSk7XG4gICAgICBjb25zdCBzdGFydFZhbHVlID0gdGhpcy5nZXRWYWx1ZUFzTW9tZW50KGNvbnRyb2wudmFsdWVbdGhpcy5fc3RhcnRLZXldKTtcbiAgICAgIGlmIChlbmRWYWx1ZS5pc1NhbWVPckJlZm9yZShzdGFydFZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGVSYW5nZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcm90ZWN0ZWQgbWluRGF0ZVZhbGlkYXRvcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBjb25zdCBtaW5kYXRlID0gbW9tZW50KHRoaXMub01pbkRhdGUpO1xuICAgIGlmICgoY29udHJvbC52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICYmICF0aGlzLmlzT2JqZWN0RGF0YVJhbmdlTnVsbChjb250cm9sKSkge1xuICAgICAgY29uc3Qgc3RhcnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBc01vbWVudChjb250cm9sLnZhbHVlW3RoaXMuX3N0YXJ0S2V5XSk7XG4gICAgICBpZiAoc3RhcnRWYWx1ZS5pc0JlZm9yZShtaW5kYXRlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGVSYW5nZU1pbjoge1xuICAgICAgICAgICAgZGF0ZU1pbjogbWluZGF0ZS5mb3JtYXQodGhpcy5vZm9ybWF0KVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heERhdGVWYWxpZGF0b3IoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgY29uc3QgbWF4ZGF0ZSA9IG1vbWVudCh0aGlzLm9NYXhEYXRlKTtcbiAgICBpZiAoKGNvbnRyb2wudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAmJiAhdGhpcy5pc09iamVjdERhdGFSYW5nZU51bGwoY29udHJvbCkpIHtcbiAgICAgIGNvbnN0IGVuZFZhbHVlID0gdGhpcy5nZXRWYWx1ZUFzTW9tZW50KGNvbnRyb2wudmFsdWVbdGhpcy5fZW5kS2V5XSk7XG4gICAgICBpZiAoZW5kVmFsdWUuaXNBZnRlcihtYXhkYXRlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGVSYW5nZU1heDoge1xuICAgICAgICAgICAgZGF0ZU1heDogbWF4ZGF0ZS5mb3JtYXQodGhpcy5vZm9ybWF0KVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlRGF0ZVZhbGlkYXRvcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBpZiAoKGNvbnRyb2wudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICAmJiAhdGhpcy5pc09iamVjdERhdGFSYW5nZU51bGwoY29udHJvbCkpIHtcbiAgICAgIGNvbnN0IGVuZFZhbHVlID0gdGhpcy5nZXRWYWx1ZUFzTW9tZW50KGNvbnRyb2wudmFsdWVbdGhpcy5fZW5kS2V5XSk7XG4gICAgICBjb25zdCBzdGFydFZhbHVlID0gdGhpcy5nZXRWYWx1ZUFzTW9tZW50KGNvbnRyb2wudmFsdWVbdGhpcy5fc3RhcnRLZXldKTtcbiAgICAgIGlmICghZW5kVmFsdWUuaXNWYWxpZCgpIHx8ICFzdGFydFZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGVSYW5nZVBhcnNlOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMub2Zvcm1hdCArIHRoaXMuc2VwYXJhdG9yICsgdGhpcy5vZm9ybWF0XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBzZXQgdmFsdWVUeXBlKHZhbDogYW55KSB7XG4gICAgdGhpcy5fdmFsdWVUeXBlID0gVXRpbC5jb252ZXJ0VG9PRGF0ZVZhbHVlVHlwZSh2YWwpO1xuICB9XG5cbiAgZ2V0IHZhbHVlVHlwZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZVR5cGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5tZWRpYVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5tZWRpYVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbkxhbmd1YWdlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9uTGFuZ3VhZ2VDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlKHZhbDogYW55LCBvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucywgc2V0RGlydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCB2YWx1ZSA9IHZhbDtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgT0Zvcm1WYWx1ZSkge1xuICAgICAgdmFsdWUgPSB2YWwudmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5yYW5nZS5zZXRWYWx1ZSh0aGlzLmVuc3VyZU9EYXRlVmFsdWVUeXBlKHZhbHVlKSwgb3B0aW9ucyk7XG4gICAgc3VwZXIuc2V0Rm9ybVZhbHVlKHZhbHVlLCBvcHRpb25zLCBzZXREaXJ0eSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBlbnN1cmVPRGF0ZVZhbHVlVHlwZSh2YWw6IGFueSkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodmFsKSkge1xuICAgICAgcmV0dXJuIHsgW3RoaXMuc3RhcnRLZXldOiBudWxsLCBbdGhpcy5lbmRLZXldOiBudWxsIH07XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHZhbDtcbiAgICBjb25zdCBzdGFydFZhbCA9IHRoaXMuY29udmVydFRvRGF0ZSh2YWxbdGhpcy5zdGFydEtleV0pO1xuICAgIGNvbnN0IGVuZFZhbCA9IHRoaXMuY29udmVydFRvRGF0ZSh2YWxbdGhpcy5lbmRLZXldKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQocmVzdWx0KSkge1xuICAgICAgY29uc29sZS53YXJuKGBPRGF0ZVJhbmdlSW5wdXRDb21wb25lbnQgdmFsdWUgKCR7dmFsfSkgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB2YWx1ZS10eXBlICgke3RoaXMudmFsdWVUeXBlfSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0geyBbdGhpcy5zdGFydEtleV06IHN0YXJ0VmFsLCBbdGhpcy5lbmRLZXldOiBlbmRWYWwgfTtcblxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnZlcnRUb0RhdGUodmFsOiBhbnkpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh2YWwpKSByZXR1cm4gbnVsbDtcblxuICAgIHN3aXRjaCAodGhpcy52YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiBtb21lbnQodmFsLCB0aGlzLm9mb3JtYXQpLmlzVmFsaWQoKVxuICAgICAgICAgID8gbmV3IERhdGUobW9tZW50KHZhbCwgdGhpcy5vZm9ybWF0KS52YWx1ZU9mKCkpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIERhdGUgPyB2YWwgOiBudWxsO1xuXG4gICAgICBjYXNlICd0aW1lc3RhbXAnOlxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgPyBuZXcgRGF0ZSh2YWwpIDogbnVsbDtcblxuICAgICAgY2FzZSAnaXNvLTg2MDEnOlxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gbW9tZW50KHZhbCkuaXNWYWxpZCgpID8gbmV3IERhdGUobW9tZW50KHZhbCkudmFsdWVPZigpKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgdGhpcy5nZXRTUUxUeXBlKCkgPT09IFNRTFR5cGVzLlRJTUVTVEFNUCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VFdmVudChldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4pOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlUmFuZ2VWYWx1ZTogRGF0ZVJhbmdlPERhdGU+ID0gdGhpcy5kYXRlUmFuZ2VJbnB1dC52YWx1ZTtcblxuICAgIGlmIChkYXRlUmFuZ2VWYWx1ZS5zdGFydCAmJiBkYXRlUmFuZ2VWYWx1ZS5lbmQpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHtcbiAgICAgICAgW3RoaXMuc3RhcnRLZXldOiBVdGlsLnBhcnNlQnlWYWx1ZVR5cGUoZGF0ZVJhbmdlVmFsdWUuc3RhcnQsIHRoaXMudmFsdWVUeXBlLCB0aGlzLm9mb3JtYXQpLFxuICAgICAgICBbdGhpcy5lbmRLZXldOiBVdGlsLnBhcnNlQnlWYWx1ZVR5cGUoZGF0ZVJhbmdlVmFsdWUuZW5kLCB0aGlzLnZhbHVlVHlwZSwgdGhpcy5vZm9ybWF0KVxuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUsIHtcbiAgICAgICAgY2hhbmdlVHlwZTogT1ZhbHVlQ2hhbmdlRXZlbnQuVVNFUl9DSEFOR0UsXG4gICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tJbnB1dChlOiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50ZXh0SW5wdXRFbmFibGVkKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DbGlja0NsZWFyVmFsdWUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgc3VwZXIub25DbGlja0NsZWFyVmFsdWUoZXZlbnQpO1xuICAgIHRoaXMucmFuZ2Uuc2V0VmFsdWUoeyBbdGhpcy5zdGFydEtleV06IG51bGwsIFt0aGlzLmVuZEtleV06IG51bGwgfSk7XG4gICAgdGhpcy5tYXJrRm9ybUdyb3VwVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JtR3JvdXBUb3VjaGVkKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMucmFuZ2UuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMucmFuZ2UuZ2V0KGtleSk7XG4gICAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQXNNb21lbnQodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgbGV0IHJlc3VsdDtcbiAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgdGhpcy52YWx1ZVR5cGUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnOlxuICAgICAgICByZXN1bHQgPSBtb21lbnQodmFsLCB0aGlzLm9mb3JtYXQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy52YWx1ZVR5cGUgPT09ICdkYXRlJyAmJiB2YWwgaW5zdGFuY2VvZiBEYXRlOlxuICAgICAgY2FzZSB0aGlzLnZhbHVlVHlwZSA9PT0gJ3RpbWVzdGFtcCcgJiYgdHlwZW9mIHZhbCA9PT0gJ251bWJlcic6XG4gICAgICBjYXNlIHRoaXMudmFsdWVUeXBlID09PSAnaXNvLTg2MDEnICYmIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnOlxuICAgICAgICByZXN1bHQgPSBtb21lbnQodmFsKVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy52YWx1ZVR5cGUgPT09ICdpc28tODYwMSc6XG4gICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IGFjY2VwdFRpbWVzdGFtcCA9IHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHRoaXMuZ2V0U1FMVHlwZSgpID09PSBTUUxUeXBlcy5USU1FU1RBTVA7XG4gICAgICAgICAgaWYgKGFjY2VwdFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbW9tZW50KHZhbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHJlc3VsdCkgJiYgcmVzdWx0LmlzVmFsaWQoKSA/IHJlc3VsdCA6IHVuZGVmaW5lZFxuICB9XG5cblxuXG59XG4iLCI8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoKVwiIFttYXRUb29sdGlwXT1cInRvb2x0aXBcIiBbbWF0VG9vbHRpcENsYXNzXT1cInRvb2x0aXBDbGFzc1wiXG4gIFttYXRUb29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCIgW21hdFRvb2x0aXBTaG93RGVsYXldPVwidG9vbHRpcFNob3dEZWxheVwiIFttYXRUb29sdGlwSGlkZURlbGF5XT1cInRvb2x0aXBIaWRlRGVsYXlcIj5cblxuICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImhpZGVSZXF1aXJlZE1hcmtlclwiIFtjbGFzcy5jdXN0b20td2lkdGhdPVwiaGFzQ3VzdG9tV2lkdGhcIlxuICAgIGNsYXNzPVwiaWNvbi1maWVsZFwiIGZ4RmxleEZpbGwgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIj5cbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxWaXNpYmxlXCI+e3sgb2xhYmVsIHwgb1RyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCAjZGF0ZVJhbmdlSW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlclwiIFtpZF09XCJnZXRBdHRyaWJ1dGUoKVwiIFtmb3JtR3JvdXBdPVwicmFuZ2VcIiBbc2VwYXJhdG9yXT1cInNlcGFyYXRvclwiXG4gICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiIFttaW5dPVwib01pbkRhdGVcIiBbbWF4XT1cIm9NYXhEYXRlXCIgKGZvY3VzKT1cImlubmVyT25Gb2N1cygkZXZlbnQpXCIgKGJsdXIpPVwiaW5uZXJPbkJsdXIoJGV2ZW50KVwiPlxuICAgICAgPGlucHV0ICNzdGFydERhdGUgbWF0U3RhcnREYXRlIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXJTdGFydERheSB8IG9UcmFuc2xhdGUgfX1cIiBbdmFsdWVdPVwic3RhcnREYXRlVmFsdWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInN0YXJ0S2V5XCIgKGRhdGVDaGFuZ2UpPVwib25DaGFuZ2VFdmVudCgkZXZlbnQpXCIgW3JlYWRvbmx5XT1cImlzUmVhZE9ubHkgfHwgIXRleHRJbnB1dEVuYWJsZWRcIiAoZm9jdXMpPVwiaW5uZXJPbkZvY3VzKCRldmVudClcIlxuICAgICAgICAoYmx1cik9XCJpbm5lck9uQmx1cigkZXZlbnQpXCIgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIj5cbiAgICAgIDxpbnB1dCAjZW5kRGF0ZSBtYXRFbmREYXRlIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXJFbmREYXkgfCBvVHJhbnNsYXRlIH19XCIgW3ZhbHVlXT1cImVuZERhdGVWYWx1ZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZW5kS2V5XCJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25DaGFuZ2VFdmVudCgkZXZlbnQpXCIgW3JlYWRvbmx5XT1cImlzUmVhZE9ubHkgfHwgIXRleHRJbnB1dEVuYWJsZWRcIiAoZm9jdXMpPVwiaW5uZXJPbkZvY3VzKCRldmVudClcIiAoYmx1cik9XCJpbm5lck9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIj5cbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b25cIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkNsaWNrQ2xlYXJWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXJcIiBbZGlzYWJsZWRdPVwiaXNSZWFkT25seSB8fCAhZW5hYmxlZFwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlciBbZGlzYWJsZWRdPVwiaXNSZWFkT25seSB8fCAhZW5hYmxlZFwiIFtjbGFzcy5yZWFkLW9ubHldPVwiaXNSZWFkT25seVwiIFt0b3VjaFVpXT1cInRvdWNoVWlcIiBbZGF0ZUNsYXNzXT1cImRhdGVDbGFzc1wiPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuXG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cImhhc0Vycm9yKCdkYXRlUmFuZ2UnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5EQVRFUkFOR0VfSU5WQUxJRCcgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ2RhdGVSYW5nZVBhcnNlJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uREFURV9QQVJTRScgfCBvVHJhbnNsYXRlIH19IDoge3sgZ2V0RXJyb3JWYWx1ZSgnZGF0ZVJhbmdlUGFyc2UnLCAnZm9ybWF0JykgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcignZGF0ZVJhbmdlTWluJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uREFURVJBTkdFX01JTicgfCBvVHJhbnNsYXRlIH19IDoge3sgZ2V0RXJyb3JWYWx1ZSgnZGF0ZVJhbmdlTWluJywgJ2RhdGVNaW4nKSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cImhhc0Vycm9yKCdkYXRlUmFuZ2VNYXgnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5EQVRFUkFOR0VfTUFYJyB8IG9UcmFuc2xhdGUgfX0gOiB7eyBnZXRFcnJvclZhbHVlKCdkYXRlUmFuZ2VNYXgnLCAnZGF0ZU1heCcpIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgb0Vycm9yIG9mIGdldEFjdGl2ZU9FcnJvcnMoKVwiPlxuICAgICAge3sgb0Vycm9yLnRleHQgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==
|