@po-ui/ng-components 14.4.0 → 14.5.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/po-button-group/po-button-group-base.component.mjs +2 -2
- package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +6 -6
- package/esm2020/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +5 -5
- package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +7 -3
- package/esm2020/lib/components/po-field/po-decimal/po-decimal.component.mjs +5 -5
- package/esm2020/lib/components/po-field/po-email/po-email.component.mjs +9 -7
- package/esm2020/lib/components/po-field/po-input/po-input.component.mjs +9 -7
- package/esm2020/lib/components/po-field/po-login/po-login.component.mjs +12 -11
- package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.mjs +3 -3
- package/esm2020/lib/components/po-field/po-lookup/po-lookup.component.mjs +6 -5
- package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +31 -20
- package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.mjs +19 -13
- package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.mjs +1 -1
- package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-filter.service.mjs +2 -2
- package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.mjs +7 -4
- package/esm2020/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +24 -17
- package/esm2020/lib/components/po-field/po-number/po-number.component.mjs +5 -5
- package/esm2020/lib/components/po-field/po-password/po-password.component.mjs +14 -13
- package/esm2020/lib/components/po-field/po-radio/po-radio-size.enum.mjs +10 -3
- package/esm2020/lib/components/po-field/po-radio/po-radio.component.mjs +98 -34
- package/esm2020/lib/components/po-field/po-radio-group/po-radio-group-base.component.mjs +16 -2
- package/esm2020/lib/components/po-field/po-radio-group/po-radio-group.component.mjs +18 -25
- package/esm2020/lib/components/po-field/po-select/po-select.component.mjs +38 -250
- package/esm2020/lib/components/po-field/po-textarea/po-textarea-base.component.mjs +11 -1
- package/esm2020/lib/components/po-field/po-textarea/po-textarea.component.mjs +6 -7
- package/esm2020/lib/components/po-field/po-url/po-url.component.mjs +9 -7
- package/esm2020/lib/components/po-page/po-page-list/po-page-list.component.mjs +3 -3
- package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +26 -73
- package/esm2020/lib/components/po-table/po-table-detail/po-table-detail.component.mjs +27 -8
- package/esm2020/lib/components/po-table/po-table-list-manager/po-table-list-manager.component.mjs +111 -0
- package/esm2020/lib/components/po-table/po-table.module.mjs +4 -1
- package/esm2020/lib/components/po-tag/po-tag-base.component.mjs +11 -3
- package/esm2020/lib/components/po-tag/po-tag.component.mjs +16 -9
- package/esm2020/lib/components/po-tree-view/po-tree-view-base.component.mjs +6 -4
- package/fesm2015/po-ui-ng-components.mjs +889 -984
- package/fesm2015/po-ui-ng-components.mjs.map +1 -1
- package/fesm2020/po-ui-ng-components.mjs +871 -962
- package/fesm2020/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-button-group/po-button-group-base.component.d.ts +1 -1
- package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +26 -15
- package/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.d.ts +5 -3
- package/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.d.ts +2 -2
- package/lib/components/po-field/po-multiselect/po-multiselect-filter.service.d.ts +2 -2
- package/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.d.ts +2 -1
- package/lib/components/po-field/po-multiselect/po-multiselect.component.d.ts +7 -1
- package/lib/components/po-field/po-radio/po-radio-size.enum.d.ts +9 -2
- package/lib/components/po-field/po-radio/po-radio.component.d.ts +27 -10
- package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +21 -1
- package/lib/components/po-field/po-select/po-select.component.d.ts +1 -32
- package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +10 -0
- package/lib/components/po-modal/po-modal.component.d.ts +1 -1
- package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +4 -12
- package/lib/components/po-table/po-table-detail/po-table-detail.component.d.ts +1 -0
- package/lib/components/po-table/po-table-list-manager/po-table-list-manager.component.d.ts +35 -0
- package/lib/components/po-table/po-table.module.d.ts +25 -24
- package/lib/components/po-tag/po-tag-base.component.d.ts +8 -2
- package/package.json +4 -4
- package/po-ui-ng-components-14.5.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/esm2020/lib/components/po-field/po-radio/po-radio-base.component.mjs +0 -104
- package/lib/components/po-field/po-radio/po-radio-base.component.d.ts +0 -58
- package/po-ui-ng-components-14.4.0.tgz +0 -0
|
@@ -1,79 +1,37 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef,
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
3
3
|
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import {
|
|
5
|
-
import { PoKeyCodeEnum } from './../../../enums/po-key-code.enum';
|
|
6
|
-
import { PoControlPositionService } from './../../../services/po-control-position/po-control-position.service';
|
|
4
|
+
import { removeDuplicatedOptions, removeDuplicatedOptionsWithFieldValue, removeUndefinedAndNullOptions, removeUndefinedAndNullOptionsWithFieldValue, validValue } from '../../../utils/util';
|
|
7
5
|
import { InputBoolean } from '../../../decorators';
|
|
8
6
|
import { PoFieldValidateModel } from '../po-field-validate.model';
|
|
9
7
|
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "
|
|
11
|
-
import * as i2 from "@angular/
|
|
12
|
-
import * as i3 from "
|
|
13
|
-
import * as i4 from "../po-field-container/po-field-container
|
|
14
|
-
|
|
15
|
-
const _c0 = ["contentList"];
|
|
16
|
-
const _c1 = ["icon"];
|
|
17
|
-
const _c2 = ["select"];
|
|
18
|
-
const _c3 = ["selectButton"];
|
|
19
|
-
function PoSelectComponent_option_3_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
-
i0.ɵɵelement(0, "option", 14);
|
|
21
|
-
} }
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
import * as i2 from "@angular/forms";
|
|
10
|
+
import * as i3 from "../po-field-container/po-field-container-bottom/po-field-container-bottom.component";
|
|
11
|
+
import * as i4 from "../po-field-container/po-field-container.component";
|
|
12
|
+
const _c0 = ["select"];
|
|
22
13
|
function PoSelectComponent_option_4_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
-
|
|
24
|
-
i0.ɵɵelementStart(0, "option", 15);
|
|
25
|
-
i0.ɵɵlistener("click", function PoSelectComponent_option_4_Template_option_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r9); const option_r7 = restoredCtx.$implicit; const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.onOptionClick(option_r7)); });
|
|
14
|
+
i0.ɵɵelementStart(0, "option", 6);
|
|
26
15
|
i0.ɵɵtext(1);
|
|
27
16
|
i0.ɵɵelementEnd();
|
|
28
17
|
} if (rf & 2) {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
i0.ɵɵproperty("disabled",
|
|
18
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
19
|
+
let tmp_3_0;
|
|
20
|
+
i0.ɵɵproperty("disabled", !!ctx_r1.placeholder)("hidden", !ctx_r1.selectedValue && !ctx_r1.placeholder)("selected", !ctx_r1.selectedValue)("value", (tmp_3_0 = ctx_r1.placeholder) !== null && tmp_3_0 !== undefined ? tmp_3_0 : "");
|
|
32
21
|
i0.ɵɵadvance(1);
|
|
33
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
22
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.placeholder, " ");
|
|
34
23
|
} }
|
|
35
|
-
function
|
|
36
|
-
i0.ɵɵ
|
|
37
|
-
} }
|
|
38
|
-
function PoSelectComponent_li_15_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
39
|
-
i0.ɵɵelementStart(0, "span");
|
|
24
|
+
function PoSelectComponent_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelementStart(0, "option", 7);
|
|
40
26
|
i0.ɵɵtext(1);
|
|
41
27
|
i0.ɵɵelementEnd();
|
|
42
28
|
} if (rf & 2) {
|
|
43
|
-
const
|
|
44
|
-
const
|
|
29
|
+
const option_r3 = ctx.$implicit;
|
|
30
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
31
|
+
i0.ɵɵproperty("disabled", ctx_r2.readonly)("value", option_r3 == null ? null : option_r3[ctx_r2.fieldValue]);
|
|
45
32
|
i0.ɵɵadvance(1);
|
|
46
|
-
i0.ɵɵ
|
|
33
|
+
i0.ɵɵtextInterpolate1(" ", option_r3 == null ? null : option_r3[ctx_r2.fieldLabel], " ");
|
|
47
34
|
} }
|
|
48
|
-
function PoSelectComponent_li_15_ng_template_5_Template(rf, ctx) { }
|
|
49
|
-
const _c4 = function (a0) { return { $implicit: a0 }; };
|
|
50
|
-
function PoSelectComponent_li_15_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
-
const _r18 = i0.ɵɵgetCurrentView();
|
|
52
|
-
i0.ɵɵelementStart(0, "li", 16);
|
|
53
|
-
i0.ɵɵlistener("click", function PoSelectComponent_li_15_Template_li_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r18); const option_r10 = restoredCtx.$implicit; const ctx_r17 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r17.onOptionClick(option_r10)); });
|
|
54
|
-
i0.ɵɵelementStart(1, "div", 17);
|
|
55
|
-
i0.ɵɵtemplate(2, PoSelectComponent_li_15_ng_container_2_Template, 1, 0, "ng-container", 18);
|
|
56
|
-
i0.ɵɵtemplate(3, PoSelectComponent_li_15_ng_template_3_Template, 2, 1, "ng-template", null, 19, i0.ɵɵtemplateRefExtractor);
|
|
57
|
-
i0.ɵɵtemplate(5, PoSelectComponent_li_15_ng_template_5_Template, 0, 0, "ng-template", 20, 21, i0.ɵɵtemplateRefExtractor);
|
|
58
|
-
i0.ɵɵelementEnd()();
|
|
59
|
-
} if (rf & 2) {
|
|
60
|
-
const option_r10 = ctx.$implicit;
|
|
61
|
-
const _r12 = i0.ɵɵreference(4);
|
|
62
|
-
const _r14 = i0.ɵɵreference(6);
|
|
63
|
-
const ctx_r6 = i0.ɵɵnextContext();
|
|
64
|
-
i0.ɵɵclassProp("po-select-item-selected", ctx_r6.selectedValue === (option_r10 == null ? null : option_r10[ctx_r6.fieldLabel]));
|
|
65
|
-
i0.ɵɵproperty("value", option_r10 == null ? null : option_r10[ctx_r6.fieldValue]);
|
|
66
|
-
i0.ɵɵadvance(2);
|
|
67
|
-
i0.ɵɵproperty("ngIf", ctx_r6.selectOptionTemplate)("ngIfThen", _r14)("ngIfElse", _r12);
|
|
68
|
-
i0.ɵɵadvance(3);
|
|
69
|
-
i0.ɵɵproperty("ngTemplateOutlet", ctx_r6.selectOptionTemplate == null ? null : ctx_r6.selectOptionTemplate.templateRef)("ngTemplateOutletContext", i0.ɵɵpureFunction1(8, _c4, option_r10));
|
|
70
|
-
} }
|
|
71
|
-
const _c5 = function (a0, a1) { return { "po-select-mobile": a0, "po-invisible": a1 }; };
|
|
72
|
-
const _c6 = function (a0, a1) { return { "po-select-button-disabled": a0, "po-select-button-readonly": a1 }; };
|
|
73
|
-
const _c7 = function (a0, a1) { return { "po-field-icon-disabled": a0, "po-field-icon-readonly": a1 }; };
|
|
74
|
-
const _c8 = function (a0) { return { "po-invisible": a0 }; };
|
|
75
|
-
const poSelectContentOffset = 8;
|
|
76
|
-
const poSelectContentPositionDefault = 'bottom';
|
|
77
35
|
const PO_SELECT_FIELD_LABEL_DEFAULT = 'label';
|
|
78
36
|
const PO_SELECT_FIELD_VALUE_DEFAULT = 'value';
|
|
79
37
|
/**
|
|
@@ -120,12 +78,10 @@ const PO_SELECT_FIELD_VALUE_DEFAULT = 'value';
|
|
|
120
78
|
*/
|
|
121
79
|
export class PoSelectComponent extends PoFieldValidateModel {
|
|
122
80
|
/* istanbul ignore next */
|
|
123
|
-
constructor(
|
|
81
|
+
constructor(changeDetector, differs, renderer) {
|
|
124
82
|
super();
|
|
125
|
-
this.element = element;
|
|
126
83
|
this.changeDetector = changeDetector;
|
|
127
84
|
this.renderer = renderer;
|
|
128
|
-
this.controlPosition = controlPosition;
|
|
129
85
|
/**
|
|
130
86
|
* @optional
|
|
131
87
|
*
|
|
@@ -151,14 +107,8 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
151
107
|
* @default `false`
|
|
152
108
|
*/
|
|
153
109
|
this.readonly = false;
|
|
154
|
-
this.isMobile = isMobile();
|
|
155
|
-
this.open = false;
|
|
156
|
-
this.selectIcon = 'po-icon-arrow-down';
|
|
157
110
|
this._fieldLabel = PO_SELECT_FIELD_LABEL_DEFAULT;
|
|
158
111
|
this._fieldValue = PO_SELECT_FIELD_VALUE_DEFAULT;
|
|
159
|
-
this.onScroll = () => {
|
|
160
|
-
this.controlPosition.adjustPosition(poSelectContentPositionDefault);
|
|
161
|
-
};
|
|
162
112
|
this.differ = differs.find([]).create(null);
|
|
163
113
|
}
|
|
164
114
|
/**
|
|
@@ -227,41 +177,10 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
227
177
|
get fieldValue() {
|
|
228
178
|
return this._fieldValue;
|
|
229
179
|
}
|
|
230
|
-
get isInvisibleSelectNative() {
|
|
231
|
-
return this.readonly && this.isMobile;
|
|
232
|
-
}
|
|
233
|
-
onKeydown($event) {
|
|
234
|
-
const charCode = $event.which || $event.keyCode;
|
|
235
|
-
// Tratamentos para quando o readonly for ativado.
|
|
236
|
-
if (this.readonly) {
|
|
237
|
-
// deve matar o evento do teclado devido a alterar o valor do model mesmo com os options fechados
|
|
238
|
-
if (charCode !== PoKeyCodeEnum.tab) {
|
|
239
|
-
this.disableDefaultEventAndToggleButton();
|
|
240
|
-
$event.preventDefault();
|
|
241
|
-
}
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
// Seleciona os itens com as teclas "up" e "down"
|
|
245
|
-
if ((!this.open || $event.altKey) && (charCode === PoKeyCodeEnum.arrowDown || charCode === PoKeyCodeEnum.arrowUp)) {
|
|
246
|
-
this.disableDefaultEventAndToggleButton();
|
|
247
|
-
}
|
|
248
|
-
// Abre o po-select com as teclas "enter" e "espaço"
|
|
249
|
-
if (charCode === PoKeyCodeEnum.enter || charCode === PoKeyCodeEnum.space) {
|
|
250
|
-
this.disableDefaultEventAndToggleButton();
|
|
251
|
-
}
|
|
252
|
-
// Fecha o po-select com a tecla "tab"
|
|
253
|
-
if (this.open && charCode === PoKeyCodeEnum.tab) {
|
|
254
|
-
$event.preventDefault();
|
|
255
|
-
this.toggleButton();
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
180
|
ngDoCheck() {
|
|
259
181
|
const change = this.differ.diff(this.options);
|
|
260
182
|
if (change) {
|
|
261
|
-
|
|
262
|
-
removeUndefinedAndNullOptions(this.options);
|
|
263
|
-
removeDuplicatedOptionsWithFieldValue(this.options, this.fieldValue);
|
|
264
|
-
removeUndefinedAndNullOptionsWithFieldValue(this.options, this.fieldValue);
|
|
183
|
+
this.validateOptions(this.options);
|
|
265
184
|
}
|
|
266
185
|
}
|
|
267
186
|
/**
|
|
@@ -286,28 +205,15 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
286
205
|
this.selectElement.nativeElement.focus();
|
|
287
206
|
}
|
|
288
207
|
}
|
|
289
|
-
hideDropDown() {
|
|
290
|
-
this.selectIcon = 'po-icon-arrow-down';
|
|
291
|
-
this.selector('.po-select-container').classList.remove('po-select-show');
|
|
292
|
-
this.open = false;
|
|
293
|
-
this.changeDetector.markForCheck();
|
|
294
|
-
this.selectElement.nativeElement.focus();
|
|
295
|
-
this.removeListeners();
|
|
296
|
-
}
|
|
297
208
|
onBlur() {
|
|
298
209
|
this.onModelTouched?.();
|
|
299
210
|
}
|
|
300
|
-
onOptionClick(option) {
|
|
301
|
-
this.updateValues(option);
|
|
302
|
-
this.toggleButton();
|
|
303
|
-
}
|
|
304
211
|
// Altera o valor ao selecionar um item.
|
|
305
212
|
onSelectChange(value) {
|
|
306
213
|
if (value && this.options && this.options.length) {
|
|
307
214
|
const optionFound = this.findOptionValue(value);
|
|
308
215
|
if (optionFound) {
|
|
309
216
|
this.updateValues(optionFound);
|
|
310
|
-
this.setScrollPosition(optionFound.value);
|
|
311
217
|
}
|
|
312
218
|
}
|
|
313
219
|
}
|
|
@@ -316,16 +222,6 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
316
222
|
this.onSelectChange(this.modelValue);
|
|
317
223
|
}
|
|
318
224
|
}
|
|
319
|
-
scrollValue(index, clientHeight) {
|
|
320
|
-
const heightScrollValue = index * this.getSelectItemHeight();
|
|
321
|
-
return (this.scrollPosition = heightScrollValue > clientHeight ? heightScrollValue : 0);
|
|
322
|
-
}
|
|
323
|
-
selector(query) {
|
|
324
|
-
return this.element.nativeElement.querySelector(query);
|
|
325
|
-
}
|
|
326
|
-
toggleButton() {
|
|
327
|
-
this.open ? this.hideDropDown() : this.showDropdown();
|
|
328
|
-
}
|
|
329
225
|
// Atualiza valores
|
|
330
226
|
updateValues(option) {
|
|
331
227
|
if (this.selectedValue !== option[this.fieldValue]) {
|
|
@@ -336,13 +232,6 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
336
232
|
this.emitChange(option[this.fieldValue]);
|
|
337
233
|
}
|
|
338
234
|
}
|
|
339
|
-
// Esconde Content do Select quando for clicado fora
|
|
340
|
-
wasClickedOnToggle(event) {
|
|
341
|
-
if (!this.selectButtonElement.nativeElement.contains(event.target) &&
|
|
342
|
-
!this.iconElement.nativeElement.contains(event.target)) {
|
|
343
|
-
this.hideDropDown();
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
235
|
// Recebe as alterações do model
|
|
347
236
|
onWriteValue(value) {
|
|
348
237
|
const optionFound = this.findOptionValue(value);
|
|
@@ -350,7 +239,6 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
350
239
|
this.selectElement.nativeElement.value = optionFound.value;
|
|
351
240
|
this.selectedValue = optionFound[this.fieldValue];
|
|
352
241
|
this.displayValue = optionFound[this.fieldLabel];
|
|
353
|
-
this.setScrollPosition(optionFound[this.fieldValue]);
|
|
354
242
|
}
|
|
355
243
|
else if (validValue(this.selectedValue)) {
|
|
356
244
|
this.selectElement.nativeElement.value = undefined;
|
|
@@ -373,66 +261,9 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
373
261
|
}
|
|
374
262
|
return value === inputValue;
|
|
375
263
|
}
|
|
376
|
-
// Método necessário para bloquear o evento default do select nativo.
|
|
377
|
-
// Ao utilizar event.preventDefault(), nos navegadores Firefox e IE o mesmo não cancela o evento.
|
|
378
|
-
disableDefaultEventAndToggleButton() {
|
|
379
|
-
this.selectElement.nativeElement.style.display = 'none';
|
|
380
|
-
setTimeout(() => {
|
|
381
|
-
this.selectElement.nativeElement.style.display = 'block';
|
|
382
|
-
this.toggleButton();
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
264
|
findOptionValue(value) {
|
|
386
265
|
return this.options.find(option => this.isEqual(option.value, value));
|
|
387
266
|
}
|
|
388
|
-
getSelectItemHeight() {
|
|
389
|
-
const selectItem = this.selector('div.po-select-item');
|
|
390
|
-
return selectItem && selectItem.clientHeight;
|
|
391
|
-
}
|
|
392
|
-
initializeListeners() {
|
|
393
|
-
this.clickoutListener = this.renderer.listen('document', 'click', (event) => {
|
|
394
|
-
this.wasClickedOnToggle(event);
|
|
395
|
-
});
|
|
396
|
-
this.eventResizeListener = this.renderer.listen('window', 'resize', () => {
|
|
397
|
-
this.hideDropDown();
|
|
398
|
-
});
|
|
399
|
-
window.addEventListener('scroll', this.onScroll, true);
|
|
400
|
-
}
|
|
401
|
-
removeListeners() {
|
|
402
|
-
if (this.clickoutListener) {
|
|
403
|
-
this.clickoutListener();
|
|
404
|
-
}
|
|
405
|
-
this.eventResizeListener();
|
|
406
|
-
window.removeEventListener('scroll', this.onScroll, true);
|
|
407
|
-
}
|
|
408
|
-
setPositionDropdown() {
|
|
409
|
-
this.controlPosition.setElements(this.contentList.nativeElement, poSelectContentOffset, this.selectButtonElement, ['top', 'bottom'], true);
|
|
410
|
-
this.controlPosition.adjustPosition(poSelectContentPositionDefault);
|
|
411
|
-
}
|
|
412
|
-
setScrollPosition(value) {
|
|
413
|
-
const ulDropdpwn = this.element.nativeElement.querySelector('ul.po-select-content');
|
|
414
|
-
if (value && this.options && this.options.length) {
|
|
415
|
-
const optionFound = this.findOptionValue(value);
|
|
416
|
-
if (optionFound) {
|
|
417
|
-
const index = this.options.indexOf(optionFound);
|
|
418
|
-
ulDropdpwn.scrollTop = this.scrollValue(index, ulDropdpwn.clientHeight);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
showDropdown() {
|
|
423
|
-
if (!this.readonly) {
|
|
424
|
-
this.selectElement.nativeElement.focus();
|
|
425
|
-
this.selectIcon = 'po-icon-arrow-up';
|
|
426
|
-
this.selector('.po-select-container').classList.add('po-select-show');
|
|
427
|
-
this.open = true;
|
|
428
|
-
this.changeDetector.markForCheck();
|
|
429
|
-
this.setPositionDropdown();
|
|
430
|
-
this.initializeListeners();
|
|
431
|
-
if (this.options && this.options.length) {
|
|
432
|
-
this.setScrollPosition(this.selectedValue);
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
267
|
validateOptions(options) {
|
|
437
268
|
removeDuplicatedOptions(options);
|
|
438
269
|
removeUndefinedAndNullOptions(options);
|
|
@@ -440,20 +271,12 @@ export class PoSelectComponent extends PoFieldValidateModel {
|
|
|
440
271
|
removeUndefinedAndNullOptionsWithFieldValue(options, this.fieldValue);
|
|
441
272
|
}
|
|
442
273
|
}
|
|
443
|
-
PoSelectComponent.ɵfac = function PoSelectComponent_Factory(t) { return new (t || PoSelectComponent)(i0.ɵɵdirectiveInject(i0.
|
|
274
|
+
PoSelectComponent.ɵfac = function PoSelectComponent_Factory(t) { return new (t || PoSelectComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.Renderer2)); };
|
|
444
275
|
PoSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSelectComponent, selectors: [["po-select"]], viewQuery: function PoSelectComponent_Query(rf, ctx) { if (rf & 1) {
|
|
445
276
|
i0.ɵɵviewQuery(_c0, 7, ElementRef);
|
|
446
|
-
i0.ɵɵviewQuery(_c1, 7, ElementRef);
|
|
447
|
-
i0.ɵɵviewQuery(_c2, 7, ElementRef);
|
|
448
|
-
i0.ɵɵviewQuery(_c3, 7, ElementRef);
|
|
449
277
|
} if (rf & 2) {
|
|
450
278
|
let _t;
|
|
451
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentList = _t.first);
|
|
452
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconElement = _t.first);
|
|
453
279
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.selectElement = _t.first);
|
|
454
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.selectButtonElement = _t.first);
|
|
455
|
-
} }, hostBindings: function PoSelectComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
456
|
-
i0.ɵɵlistener("keydown", function PoSelectComponent_keydown_HostBindingHandler($event) { return ctx.onKeydown($event); });
|
|
457
280
|
} }, inputs: { readonly: ["p-readonly", "readonly"], placeholder: ["p-placeholder", "placeholder"], options: ["p-options", "options"], fieldLabel: ["p-field-label", "fieldLabel"], fieldValue: ["p-field-value", "fieldValue"] }, outputs: { ngModelChange: "ngModelChange" }, features: [i0.ɵɵProvidersFeature([
|
|
458
281
|
{
|
|
459
282
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -464,48 +287,26 @@ PoSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoSelectC
|
|
|
464
287
|
provide: NG_VALIDATORS,
|
|
465
288
|
useExisting: forwardRef(() => PoSelectComponent),
|
|
466
289
|
multi: true
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
i0.ɵɵ
|
|
471
|
-
i0.ɵɵ
|
|
472
|
-
i0.ɵɵtemplate(
|
|
473
|
-
i0.ɵɵtemplate(4, PoSelectComponent_option_4_Template, 2, 3, "option", 4);
|
|
474
|
-
i0.ɵɵelementEnd();
|
|
475
|
-
i0.ɵɵelementStart(5, "div", 5)(6, "div", 6, 7);
|
|
476
|
-
i0.ɵɵlistener("click", function PoSelectComponent_Template_div_click_6_listener() { return ctx.toggleButton(); });
|
|
477
|
-
i0.ɵɵelementStart(8, "span");
|
|
478
|
-
i0.ɵɵtext(9);
|
|
479
|
-
i0.ɵɵelementEnd();
|
|
480
|
-
i0.ɵɵelementStart(10, "div", 8);
|
|
481
|
-
i0.ɵɵelement(11, "span", 9, 10);
|
|
482
|
-
i0.ɵɵelementEnd()();
|
|
483
|
-
i0.ɵɵelementStart(13, "ul", 11, 12);
|
|
484
|
-
i0.ɵɵtemplate(15, PoSelectComponent_li_15_Template, 7, 10, "li", 13);
|
|
290
|
+
}
|
|
291
|
+
]), i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 11, consts: [[3, "p-label", "p-help", "p-optional"], [1, "po-field-container-content"], [1, "po-select", 3, "disabled", "required", "blur", "change"], ["select", ""], [3, "disabled", "hidden", "selected", "value", 4, "ngIf"], [3, "disabled", "value", 4, "ngFor", "ngForOf"], [3, "disabled", "hidden", "selected", "value"], [3, "disabled", "value"]], template: function PoSelectComponent_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
i0.ɵɵelementStart(0, "po-field-container", 0)(1, "div", 1)(2, "select", 2, 3);
|
|
293
|
+
i0.ɵɵlistener("blur", function PoSelectComponent_Template_select_blur_2_listener() { return ctx.onBlur(); })("change", function PoSelectComponent_Template_select_change_2_listener($event) { return ctx.onSelectChange($event.target.value); });
|
|
294
|
+
i0.ɵɵtemplate(4, PoSelectComponent_option_4_Template, 2, 5, "option", 4);
|
|
295
|
+
i0.ɵɵtemplate(5, PoSelectComponent_option_5_Template, 2, 3, "option", 5);
|
|
485
296
|
i0.ɵɵelementEnd()();
|
|
486
|
-
i0.ɵɵelement(
|
|
297
|
+
i0.ɵɵelement(6, "po-field-container-bottom");
|
|
487
298
|
i0.ɵɵelementEnd();
|
|
488
299
|
} if (rf & 2) {
|
|
489
300
|
i0.ɵɵproperty("p-label", ctx.label)("p-help", ctx.help)("p-optional", !ctx.required && ctx.optional);
|
|
490
|
-
i0.ɵɵadvance(1);
|
|
491
|
-
i0.ɵɵproperty("disabled", ctx.disabled)("ngClass", i0.ɵɵpureFunction2(17, _c5, ctx.isMobile, ctx.isInvisibleSelectNative))("required", ctx.required);
|
|
492
|
-
i0.ɵɵattribute("name", ctx.name);
|
|
493
|
-
i0.ɵɵadvance(2);
|
|
494
|
-
i0.ɵɵproperty("ngIf", ctx.isMobile);
|
|
495
|
-
i0.ɵɵadvance(1);
|
|
496
|
-
i0.ɵɵproperty("ngForOf", ctx.options);
|
|
497
|
-
i0.ɵɵadvance(2);
|
|
498
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(20, _c6, ctx.disabled, ctx.readonly));
|
|
499
|
-
i0.ɵɵadvance(3);
|
|
500
|
-
i0.ɵɵtextInterpolate(ctx.displayValue || ctx.placeholder);
|
|
501
301
|
i0.ɵɵadvance(2);
|
|
502
|
-
i0.ɵɵ
|
|
503
|
-
i0.ɵɵproperty("
|
|
504
|
-
i0.ɵɵ
|
|
505
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(26, _c8, ctx.isMobile));
|
|
302
|
+
i0.ɵɵclassProp("po-select-placeholder", !ctx.selectedValue && !!ctx.placeholder);
|
|
303
|
+
i0.ɵɵproperty("disabled", ctx.disabled)("required", ctx.required);
|
|
304
|
+
i0.ɵɵattribute("aria-label", ctx.label)("name", ctx.name);
|
|
506
305
|
i0.ɵɵadvance(2);
|
|
306
|
+
i0.ɵɵproperty("ngIf", !ctx.selectedValue || !!ctx.placeholder);
|
|
307
|
+
i0.ɵɵadvance(1);
|
|
507
308
|
i0.ɵɵproperty("ngForOf", ctx.options);
|
|
508
|
-
} }, dependencies: [
|
|
309
|
+
} }, dependencies: [i1.NgForOf, i1.NgIf, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.PoFieldContainerBottomComponent, i4.PoFieldContainerComponent], encapsulation: 2, changeDetection: 0 });
|
|
509
310
|
__decorate([
|
|
510
311
|
InputBoolean()
|
|
511
312
|
], PoSelectComponent.prototype, "readonly", void 0);
|
|
@@ -521,21 +322,11 @@ __decorate([
|
|
|
521
322
|
provide: NG_VALIDATORS,
|
|
522
323
|
useExisting: forwardRef(() => PoSelectComponent),
|
|
523
324
|
multi: true
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
}], function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i0.Renderer2 }, { type: i1.PoControlPositionService }]; }, { contentList: [{
|
|
528
|
-
type: ViewChild,
|
|
529
|
-
args: ['contentList', { read: ElementRef, static: true }]
|
|
530
|
-
}], iconElement: [{
|
|
531
|
-
type: ViewChild,
|
|
532
|
-
args: ['icon', { read: ElementRef, static: true }]
|
|
533
|
-
}], selectElement: [{
|
|
325
|
+
}
|
|
326
|
+
], template: "<po-field-container [p-label]=\"label\" [p-help]=\"help\" [p-optional]=\"!required && optional\">\n <div class=\"po-field-container-content\">\n <select\n #select\n class=\"po-select\"\n [attr.aria-label]=\"label\"\n [attr.name]=\"name\"\n [class.po-select-placeholder]=\"!selectedValue && !!placeholder\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (blur)=\"onBlur()\"\n (change)=\"onSelectChange($event.target.value)\"\n >\n <option\n *ngIf=\"!selectedValue || !!placeholder\"\n [disabled]=\"!!placeholder\"\n [hidden]=\"!selectedValue && !placeholder\"\n [selected]=\"!selectedValue\"\n [value]=\"placeholder ?? ''\"\n >\n {{ placeholder }}\n </option>\n <option *ngFor=\"let option of options\" [disabled]=\"readonly\" [value]=\"option?.[this.fieldValue]\">\n {{ option?.[this.fieldLabel] }}\n </option>\n </select>\n </div>\n\n <po-field-container-bottom></po-field-container-bottom>\n</po-field-container>\n" }]
|
|
327
|
+
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i0.Renderer2 }]; }, { selectElement: [{
|
|
534
328
|
type: ViewChild,
|
|
535
329
|
args: ['select', { read: ElementRef, static: true }]
|
|
536
|
-
}], selectButtonElement: [{
|
|
537
|
-
type: ViewChild,
|
|
538
|
-
args: ['selectButton', { read: ElementRef, static: true }]
|
|
539
330
|
}], ngModelChange: [{
|
|
540
331
|
type: Output,
|
|
541
332
|
args: ['ngModelChange']
|
|
@@ -554,8 +345,5 @@ __decorate([
|
|
|
554
345
|
}], fieldValue: [{
|
|
555
346
|
type: Input,
|
|
556
347
|
args: ['p-field-value']
|
|
557
|
-
}], onKeydown: [{
|
|
558
|
-
type: HostListener,
|
|
559
|
-
args: ['keydown', ['$event']]
|
|
560
348
|
}] }); })();
|
|
561
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixxQ0FBcUMsRUFDckMsNkJBQTZCLEVBQzdCLDJDQUEyQyxFQUMzQyxVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFFL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7SUNsQjlELDZCQUEyRDs7OztJQUMzRCxrQ0FLQztJQURDLDhOQUFTLGVBQUEsK0JBQXFCLENBQUEsSUFBQztJQUUvQixZQUNGO0lBQUEsaUJBQVM7Ozs7SUFMUCwwQ0FBcUIsa0VBQUE7SUFJckIsZUFDRjtJQURFLHdGQUNGOzs7SUE2Qk0sd0JB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QVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgaXNNb2JpbGUsXG4gIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zLFxuICByZW1vdmVEdXBsaWNhdGVkT3B0aW9uc1dpdGhGaWVsZFZhbHVlLFxuICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9ucyxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZSxcbiAgdmFsaWRWYWx1ZVxufSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvS2V5Q29kZUVudW0gfSBmcm9tICcuLy4uLy4uLy4uL2VudW1zL3BvLWtleS1jb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgUG9GaWVsZFZhbGlkYXRlTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC12YWxpZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBQb1NlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tc2VsZWN0LW9wdGlvbi5pbnRlcmZhY2UnO1xuXG5jb25zdCBwb1NlbGVjdENvbnRlbnRPZmZzZXQgPSA4O1xuY29uc3QgcG9TZWxlY3RDb250ZW50UG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbSc7XG5jb25zdCBQT19TRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVCA9ICdsYWJlbCc7XG5jb25zdCBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVCA9ICd2YWx1ZSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRmllbGRWYWxpZGF0ZU1vZGVsXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWJhc2ljXCIgdGl0bGU9XCJQTyBTZWxlY3QgQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtYmFzaWMvc2FtcGxlLXBvLXNlbGVjdC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWJhc2ljL3NhbXBsZS1wby1zZWxlY3QtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWxhYnNcIiB0aXRsZT1cIlBPIFNlbGVjdCBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWxhYnMvc2FtcGxlLXBvLXNlbGVjdC1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtbGFicy9zYW1wbGUtcG8tc2VsZWN0LWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvblwiIHRpdGxlPVwiUE8gU2VsZWN0IC0gQ3VzdG9tZXIgcmVnaXN0cmF0aW9uXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9J3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5lMmUtc3BlYy50cyc+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT0nc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50LnBvLnRzJz4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zZWxlY3QtY29tcGFuaWVzXCIgdGl0bGU9XCJQTyBTZWxlY3QgQ29tcGFuaWVzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBwby1zZWxlY3QgZXhpYmUgdW1hIGxpc3RhIGRlIHZhbG9yZXMgZSBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIHNlbGVjaW9uZSB1bSBkZXNzZXMgdmFsb3Jlcy5cbiAqIE9zIHZhbG9yZXMgbGlzdGFkb3MgcG9kZW0gc2VyIGZpeG9zIG91IGRpbsOibWljb3MgZGUgYWNvcmRvIGNvbSBhIG5lY2Vzc2lkYWRlIGRvIGRlc2Vudm9sdmVkb3IsIGRhbmRvIG1haXMgZmxleGliaWxpZGFkZSBhbyBjb21wb25lbnRlLlxuICogTyBwby1zZWxlY3QgbsOjbyBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGluZm9ybWUgdW0gdmFsb3IgZGlmZXJlbnRlIGRvcyB2YWxvcmVzIGxpc3RhZG9zLCBpc3NvIGdhcmFudGUgYSBjb25zaXN0w6puY2lhIGRhIGluZm9ybWHDp8Ojby5cbiAqIE8gcG8tc2VsZWN0IG7Do28gcGVybWl0ZSBxdWUgc2VqYW0gcGFzc2Fkb3MgdmFsb3JlcyBkdXBsaWNhZG9zLCB1bmRlZmluZWQgZSBudWxsIHBhcmEgYXMgb3DDp8O1ZXMsIGV4Y2x1aW5kby1vcyBkYSBsaXN0YS5cbiAqXG4gKiA+IEFvIHBhc3NhciB1bSB2YWxvciBwYXJhIG8gX21vZGVsXyBxdWUgbsOjbyBlc3TDoSBuYSBsaXN0YSBkZSBvcMOnw7VlcywgbyBtZXNtbyBzZXLDoSBkZWZpbmlkbyBjb21vIGB1bmRlZmluZWRgLlxuICpcbiAqIFRhbWLDqW0gZXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSB1dGlsaXphciB1bSBfdGVtcGxhdGVfIHBhcmEgYSBleGliacOnw6NvIGRvcyBpdGVucyBkYSBsaXN0YSxcbiAqIHZlamEgbWFpcyBlbSAqKltwLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlKSoqLlxuICpcbiAqID4gT2JzOiBvIHRlbXBsYXRlICoqW3Atc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZSkqKiBzZXLDoSBkZXByZWNpYWRvIG5hIHZlcnPDo28gMTQueC54LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9TZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb1NlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUG9TZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBQb0ZpZWxkVmFsaWRhdGVNb2RlbDxhbnk+IGltcGxlbWVudHMgRG9DaGVjayB7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRMaXN0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgY29udGVudExpc3Q6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ljb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uRWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0QnV0dG9uRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGdW7Dp8OjbyBwYXJhIGF0dWFsaXphciBvIG5nTW9kZWwgZG8gY29tcG9uZW50ZSwgbmVjZXNzw6FyaW8gcXVhbmRvIG7Do28gZm9yIHV0aWxpemFkbyBkZW50cm8gZGEgdGFnIGZvcm0uXG4gICAqXG4gICAqIE5hIHZlcnPDo28gMTIuMi4wIGRvIEFuZ3VsYXIgYSB2ZXJpZmljYcOnw6NvIGBzdHJpY3RUZW1wbGF0ZXNgIHZlbSB0cnVlIGNvbW8gZGVmYXVsdC4gUG9ydGFudG8sIHBhcmEgdXRpbGl6YXJcbiAgICogdHdvLXdheSBiaW5kaW5nIG5vIGNvbXBvbmVudGUgZGV2ZSBzZSB1dGlsaXphciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1zZWxlY3QgLi4uIFtuZ01vZGVsXT1cInNlbGVjdE1vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0TW9kZWwgPSAkZXZlbnRcIj4gPC9wby1zZWxlY3Q+XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgnbmdNb2RlbENoYW5nZScpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIHNvbWVudGUgcGFyYSBsZWl0dXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBASW5wdXRCb29sZWFuKCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTWVuc2FnZW0gcXVlIGFwYXJlY2Vyw6EgZW5xdWFudG8gbmVuaHVtYSBvcMOnw6NvIGVzdGl2ZXIgc2VsZWNpb25hZGEuICovXG4gIEBJbnB1dCgncC1wbGFjZWhvbGRlcicpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIGRpc3BsYXlWYWx1ZTtcbiAgaXNNb2JpbGU6IGFueSA9IGlzTW9iaWxlKCk7XG4gIG1vZGVsVmFsdWU6IGFueTtcbiAgb25Nb2RlbENoYW5nZTogYW55O1xuICBvcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkVmFsdWU6IGFueTtcbiAgc2VsZWN0T3B0aW9uVGVtcGxhdGU6IGFueTtcbiAgc2VsZWN0SWNvbjogc3RyaW5nID0gJ3BvLWljb24tYXJyb3ctZG93bic7XG4gIHNjcm9sbFBvc2l0aW9uOiBudW1iZXI7XG5cbiAgZXZlbnRMaXN0ZW5lckZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuICBldmVudFJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIG9uTW9kZWxUb3VjaGVkOiBhbnk7XG4gIHByb3RlY3RlZCBjbGlja291dExpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGRpZmZlcjogYW55O1xuICBwcml2YXRlIF9maWVsZExhYmVsPzogc3RyaW5nID0gUE9fU0VMRUNUX0ZJRUxEX0xBQkVMX0RFRkFVTFQ7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVDtcbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8UG9TZWxlY3RPcHRpb24+IHwgQXJyYXk8YW55PjtcblxuICAvKipcbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgZGV2ZSBzZXIgZGVmaW5pZG8gdW1hIGNvbGXDp8OjbyBkZSBvYmpldG9zIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9TZWxlY3RPcHRpb25gLlxuICAgKlxuICAgKiBDYXNvIGVzdGEgbGlzdGEgZXN0aXZlciB2YXppYSwgbyBtb2RlbCBzZXLDoSBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogPiBFc3NhIHByb3ByaWVkYWRlIMOpIGltdXTDoXZlbCwgb3Ugc2VqYSwgc2VtcHJlIHF1ZSBxdWlzZXIgYXR1YWxpemFyIGEgbGlzdGEgZGUgb3DDp8O1ZXMgZGlzcG9uw612ZWlzXG4gICAqIGF0dWFsaXplIGEgcmVmZXLDqm5jaWEgZG8gb2JqZXRvOlxuICAgKlxuICAgKiBgYGBcbiAgICogLy8gYXR1YWxpemEgYSByZWZlcsOqbmNpYSBkbyBvYmpldG8gZ2FyYW50aW5kbyBhIGF0dWFsaXphw6fDo28gZG8gdGVtcGxhdGVcbiAgICogdGhpcy5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9ucywgeyB2YWx1ZTogJ3gnLCBsYWJlbDogJ05vdmEgb3DDp8OjbycgfV07XG4gICAqXG4gICAqIC8vIGV2aXRlLCBwb2lzIG7Do28gYXR1YWxpemEgYSByZWZlcsOqbmNpYSBkbyBvYmpldG8gcG9kZW5kbyBnZXJhciBhdHJhc29zIG5hIGF0dWFsaXphw6fDo28gZG8gdGVtcGxhdGVcbiAgICogdGhpcy5vcHRpb25zLnB1c2goeyB2YWx1ZTogJ3gnLCBsYWJlbDogJ05vdmEgb3DDp8OjbycgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbnMnKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZmllbGRMYWJlbCAmJiB0aGlzLmZpZWxkVmFsdWUpIHtcbiAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9IG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdO1xuICAgICAgICBvcHRpb24udmFsdWUgPSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKFsuLi5vcHRpb25zXSk7XG4gICAgdGhpcy5vblVwZGF0ZU9wdGlvbnMoKTtcbiAgICB0aGlzLl9vcHRpb25zID0gWy4uLm9wdGlvbnNdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGxhYmVsYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWxhYmVsJykgc2V0IGZpZWxkTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpZWxkTGFiZWwgPSB2YWx1ZSB8fCBQT19TRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVDtcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zXTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyBvIG5vbWUgZGEgcHJvcHJpZWRhZGUgZG8gb2JqZXRvIHF1ZSBzZXLDoSB1dGlsaXphZG8gcGFyYSBhIGNvbnZlcnPDo28gZG9zIGl0ZW5zIGFwcmVzZW50YWRvcyBuYSBsaXN0YSBkbyBjb21wb25lbnRlXG4gICAqIChgcC1vcHRpb25zYCksIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgcmVzcG9uc8OhdmVsIHBlbG8gdmFsb3IgZGUgY2FkYSBpdGVtIGRhIGxpc3RhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlIHx8IFBPX1NFTEVDVF9GSUVMRF9WQUxVRV9ERUZBVUxUO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGdldCBpc0ludmlzaWJsZVNlbGVjdE5hdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSAmJiB0aGlzLmlzTW9iaWxlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bigkZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9ICRldmVudC53aGljaCB8fCAkZXZlbnQua2V5Q29kZTtcblxuICAgIC8vIFRyYXRhbWVudG9zIHBhcmEgcXVhbmRvIG8gcmVhZG9ubHkgZm9yIGF0aXZhZG8uXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIC8vIGRldmUgbWF0YXIgbyBldmVudG8gZG8gdGVjbGFkbyBkZXZpZG8gYSBhbHRlcmFyIG8gdmFsb3IgZG8gbW9kZWwgbWVzbW8gY29tIG9zIG9wdGlvbnMgZmVjaGFkb3NcbiAgICAgIGlmIChjaGFyQ29kZSAhPT0gUG9LZXlDb2RlRW51bS50YWIpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlbGVjaW9uYSBvcyBpdGVucyBjb20gYXMgdGVjbGFzIFwidXBcIiBlIFwiZG93blwiXG4gICAgaWYgKCghdGhpcy5vcGVuIHx8ICRldmVudC5hbHRLZXkpICYmIChjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5hcnJvd0Rvd24gfHwgY2hhckNvZGUgPT09IFBvS2V5Q29kZUVudW0uYXJyb3dVcCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZURlZmF1bHRFdmVudEFuZFRvZ2dsZUJ1dHRvbigpO1xuICAgIH1cblxuICAgIC8vIEFicmUgbyBwby1zZWxlY3QgY29tIGFzIHRlY2xhcyBcImVudGVyXCIgZSBcImVzcGHDp29cIlxuICAgIGlmIChjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5lbnRlciB8fCBjaGFyQ29kZSA9PT0gUG9LZXlDb2RlRW51bS5zcGFjZSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuXG4gICAgLy8gRmVjaGEgbyBwby1zZWxlY3QgY29tIGEgdGVjbGEgXCJ0YWJcIlxuICAgIGlmICh0aGlzLm9wZW4gJiYgY2hhckNvZGUgPT09IFBvS2V5Q29kZUVudW0udGFiKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlQnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5vcHRpb25zKTtcbiAgICBpZiAoY2hhbmdlKSB7XG4gICAgICByZW1vdmVEdXBsaWNhdGVkT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUodGhpcy5vcHRpb25zLCB0aGlzLmZpZWxkVmFsdWUpO1xuICAgICAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnNXaXRoRmllbGRWYWx1ZSh0aGlzLm9wdGlvbnMsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9TZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHNlbGVjdDogUG9TZWxlY3RDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzU2VsZWN0KCkge1xuICAgKiAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZURyb3BEb3duKCkge1xuICAgIHRoaXMuc2VsZWN0SWNvbiA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICAgIHRoaXMuc2VsZWN0b3IoJy5wby1zZWxlY3QtY29udGFpbmVyJykuY2xhc3NMaXN0LnJlbW92ZSgncG8tc2VsZWN0LXNob3cnKTtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZD8uKCk7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uKTtcbiAgICB0aGlzLnRvZ2dsZUJ1dHRvbigpO1xuICB9XG5cbiAgLy8gQWx0ZXJhIG8gdmFsb3IgYW8gc2VsZWNpb25hciB1bSBpdGVtLlxuICBvblNlbGVjdENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb25Gb3VuZDogYW55ID0gdGhpcy5maW5kT3B0aW9uVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uRm91bmQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uRm91bmQpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG9wdGlvbkZvdW5kLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblVwZGF0ZU9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5vblNlbGVjdENoYW5nZSh0aGlzLm1vZGVsVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFZhbHVlKGluZGV4LCBjbGllbnRIZWlnaHQpIHtcbiAgICBjb25zdCBoZWlnaHRTY3JvbGxWYWx1ZTogbnVtYmVyID0gaW5kZXggKiB0aGlzLmdldFNlbGVjdEl0ZW1IZWlnaHQoKTtcblxuICAgIHJldHVybiAodGhpcy5zY3JvbGxQb3NpdGlvbiA9IGhlaWdodFNjcm9sbFZhbHVlID4gY2xpZW50SGVpZ2h0ID8gaGVpZ2h0U2Nyb2xsVmFsdWUgOiAwKTtcbiAgfVxuXG4gIHNlbGVjdG9yKHF1ZXJ5OiBzdHJpbmcpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihxdWVyeSk7XG4gIH1cblxuICB0b2dnbGVCdXR0b24oKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuID8gdGhpcy5oaWRlRHJvcERvd24oKSA6IHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICAvLyBBdHVhbGl6YSB2YWxvcmVzXG4gIHVwZGF0ZVZhbHVlcyhvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgIT09IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXTtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRMYWJlbF07XG4gICAgICB0aGlzLmVtaXRDaGFuZ2Uob3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVzY29uZGUgQ29udGVudCBkbyBTZWxlY3QgcXVhbmRvIGZvciBjbGljYWRvIGZvcmFcbiAgd2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2VsZWN0QnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5oaWRlRHJvcERvd24oKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNlYmUgYXMgYWx0ZXJhw6fDtWVzIGRvIG1vZGVsXG4gIG9uV3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uRm91bmQ6IGFueSA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvcHRpb25Gb3VuZC52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRMYWJlbF07XG4gICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG9wdGlvbkZvdW5kW3RoaXMuZmllbGRWYWx1ZV0pO1xuICAgIH0gZWxzZSBpZiAodmFsaWRWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZXh0cmFWYWxpZGF0aW9uKGM6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsKHZhbHVlOiBhbnksIGlucHV0VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgodmFsdWUgfHwgdmFsdWUgPT09IDApICYmIGlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpID09PSBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCAmJiBpbnB1dFZhbHVlICE9PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7IC8vIFRyYW5zZm9ybWFuZG8gZW0gc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID09PSBpbnB1dFZhbHVlO1xuICB9XG5cbiAgLy8gTcOpdG9kbyBuZWNlc3PDoXJpbyBwYXJhIGJsb3F1ZWFyIG8gZXZlbnRvIGRlZmF1bHQgZG8gc2VsZWN0IG5hdGl2by5cbiAgLy8gQW8gdXRpbGl6YXIgZXZlbnQucHJldmVudERlZmF1bHQoKSwgbm9zIG5hdmVnYWRvcmVzIEZpcmVmb3ggZSBJRSBvIG1lc21vIG7Do28gY2FuY2VsYSBvIGV2ZW50by5cbiAgcHJpdmF0ZSBkaXNhYmxlRGVmYXVsdEV2ZW50QW5kVG9nZ2xlQnV0dG9uKCkge1xuICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgdGhpcy50b2dnbGVCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE9wdGlvblZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdEl0ZW1IZWlnaHQoKSB7XG4gICAgY29uc3Qgc2VsZWN0SXRlbSA9IHRoaXMuc2VsZWN0b3IoJ2Rpdi5wby1zZWxlY3QtaXRlbScpO1xuXG4gICAgcmV0dXJuIHNlbGVjdEl0ZW0gJiYgc2VsZWN0SXRlbS5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jbGlja291dExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndhc0NsaWNrZWRPblRvZ2dsZShldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbkRyb3Bkb3duKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5jb250ZW50TGlzdC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9TZWxlY3RDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5zZWxlY3RCdXR0b25FbGVtZW50LFxuICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvU2VsZWN0Q29udGVudFBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIHNldFNjcm9sbFBvc2l0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCB1bERyb3BkcHduID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwucG8tc2VsZWN0LWNvbnRlbnQnKTtcblxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uRm91bmQ6IGFueSA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbkZvdW5kKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2Yob3B0aW9uRm91bmQpO1xuICAgICAgICB1bERyb3BkcHduLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVmFsdWUoaW5kZXgsIHVsRHJvcGRwd24uY2xpZW50SGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dEcm9wZG93bigpIHtcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNlbGVjdEljb24gPSAncG8taWNvbi1hcnJvdy11cCc7XG4gICAgICB0aGlzLnNlbGVjdG9yKCcucG8tc2VsZWN0LWNvbnRhaW5lcicpLmNsYXNzTGlzdC5hZGQoJ3BvLXNlbGVjdC1zaG93Jyk7XG4gICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuc2V0UG9zaXRpb25Ecm9wZG93bigpO1xuICAgICAgdGhpcy5pbml0aWFsaXplTGlzdGVuZXJzKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wdGlvbnMob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUob3B0aW9ucywgdGhpcy5maWVsZFZhbHVlKTtcbiAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9uc1dpdGhGaWVsZFZhbHVlKG9wdGlvbnMsIHRoaXMuZmllbGRWYWx1ZSk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIiBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIj5cbiAgPHNlbGVjdFxuICAgICNzZWxlY3RcbiAgICBjbGFzcz1cInBvLXNlbGVjdFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3BvLXNlbGVjdC1tb2JpbGUnOiBpc01vYmlsZSwgJ3BvLWludmlzaWJsZSc6IGlzSW52aXNpYmxlU2VsZWN0TmF0aXZlIH1cIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIlxuICA+XG4gICAgPG9wdGlvbiAqbmdJZj1cImlzTW9iaWxlXCIgZGlzYWJsZWQgaGlkZGVuIHNlbGVjdGVkPjwvb3B0aW9uPlxuICAgIDxvcHRpb25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgW3ZhbHVlXT1cIm9wdGlvbj8uW3RoaXMuZmllbGRWYWx1ZV1cIlxuICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgPlxuICAgICAge3sgb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXSB9fVxuICAgIDwvb3B0aW9uPlxuICA8L3NlbGVjdD5cblxuICA8ZGl2IGNsYXNzPVwicG8tc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXZcbiAgICAgICNzZWxlY3RCdXR0b25cbiAgICAgIGNsYXNzPVwicG8tc2VsZWN0LWJ1dHRvblwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdwby1zZWxlY3QtYnV0dG9uLWRpc2FibGVkJzogZGlzYWJsZWQsICdwby1zZWxlY3QtYnV0dG9uLXJlYWRvbmx5JzogcmVhZG9ubHkgfVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQnV0dG9uKClcIlxuICAgID5cbiAgICAgIDxzcGFuPnt7IGRpc3BsYXlWYWx1ZSB8fCBwbGFjZWhvbGRlciB9fTwvc3Bhbj5cblxuICAgICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgI2ljb25cbiAgICAgICAgICBjbGFzcz1cInBvLWljb24ge3sgc2VsZWN0SWNvbiB9fSBwby1maWVsZC1pY29uXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwby1maWVsZC1pY29uLWRpc2FibGVkJzogZGlzYWJsZWQsICdwby1maWVsZC1pY29uLXJlYWRvbmx5JzogcmVhZG9ubHkgfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDx1bCAjY29udGVudExpc3QgY2xhc3M9XCJwby1zZWxlY3QtY29udGVudFwiIFtuZ0NsYXNzXT1cInsgJ3BvLWludmlzaWJsZSc6IGlzTW9iaWxlIH1cIj5cbiAgICAgIDxsaVxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICBbY2xhc3MucG8tc2VsZWN0LWl0ZW0tc2VsZWN0ZWRdPVwic2VsZWN0ZWRWYWx1ZSA9PT0gb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXVwiXG4gICAgICAgIFt2YWx1ZV09XCJvcHRpb24/Llt0aGlzLmZpZWxkVmFsdWVdXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1zZWxlY3QtaXRlbVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RPcHRpb25UZW1wbGF0ZTsgdGhlbiBvcHRpb25UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0T3B0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE9wdGlvblRlbXBsYXRlPlxuICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uPy5bdGhpcy5maWVsZExhYmVsXSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAjb3B0aW9uVGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdE9wdGlvblRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbiB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuIl19
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1zZWxlY3QvcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5GLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUNBQXFDLEVBQ3JDLDZCQUE2QixFQUM3QiwyQ0FBMkMsRUFDM0MsVUFBVSxFQUNYLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7OztJQ1o1RCxpQ0FNQztJQUNDLFlBQ0Y7SUFBQSxpQkFBUzs7OztJQU5QLCtDQUEwQix3REFBQSxtQ0FBQSwwRkFBQTtJQUsxQixlQUNGO0lBREUsbURBQ0Y7OztJQUNBLGlDQUFpRztJQUMvRixZQUNGO0lBQUEsaUJBQVM7Ozs7SUFGOEIsMENBQXFCLGtFQUFBO0lBQzFELGVBQ0Y7SUFERSx3RkFDRjs7QURJTixNQUFNLDZCQUE2QixHQUFHLE9BQU8sQ0FBQztBQUM5QyxNQUFNLDZCQUE2QixHQUFHLE9BQU8sQ0FBQztBQUU5Qzs7Ozs7Ozs7Ozs7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QkQsbUNBQWlCLG9CQUFBLDZDQUFBO1FBTy9CLGVBQStEO1FBQS9ELGdGQUErRDtRQUMvRCx1Q0FBcUIsMEJBQUE7UUFIckIsdUNBQXlCLGtCQUFBO1FBU3RCLGVBQXFDO1FBQXJDLDhEQUFxQztRQVFiLGVBQVU7UUFBVixxQ0FBVTs7QURnR0o7SUFBZixZQUFZLEVBQUU7bURBQTJCO3VGQTVCcEQsaUJBQWlCO2NBakI3QixTQUFTOzJCQUNFLFdBQVcsbUJBRUosdUJBQXVCLENBQUMsTUFBTSxhQUNwQztvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzt3QkFDaEQsS0FBSyxFQUFFLElBQUk7cUJBQ1o7b0JBQ0Q7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDO3dCQUNoRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjswSEFHd0QsYUFBYTtrQkFBckUsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFnQjlCLGFBQWE7a0JBQXJDLE1BQU07bUJBQUMsZUFBZTtZQVdjLFFBQVE7a0JBQTVDLEtBQUs7bUJBQUMsWUFBWTtZQUdLLFdBQVc7a0JBQWxDLEtBQUs7bUJBQUMsZUFBZTtZQTRCRSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUEwQlUsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBb0JNLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICByZW1vdmVEdXBsaWNhdGVkT3B0aW9ucyxcbiAgcmVtb3ZlRHVwbGljYXRlZE9wdGlvbnNXaXRoRmllbGRWYWx1ZSxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbE9wdGlvbnMsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zV2l0aEZpZWxkVmFsdWUsXG4gIHZhbGlkVmFsdWVcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgUG9GaWVsZFZhbGlkYXRlTW9kZWwgfSBmcm9tICcuLi9wby1maWVsZC12YWxpZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBQb1NlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tc2VsZWN0LW9wdGlvbi5pbnRlcmZhY2UnO1xuXG5jb25zdCBQT19TRUxFQ1RfRklFTERfTEFCRUxfREVGQVVMVCA9ICdsYWJlbCc7XG5jb25zdCBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVCA9ICd2YWx1ZSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRmllbGRWYWxpZGF0ZU1vZGVsXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWJhc2ljXCIgdGl0bGU9XCJQTyBTZWxlY3QgQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtYmFzaWMvc2FtcGxlLXBvLXNlbGVjdC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWJhc2ljL3NhbXBsZS1wby1zZWxlY3QtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWxhYnNcIiB0aXRsZT1cIlBPIFNlbGVjdCBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWxhYnMvc2FtcGxlLXBvLXNlbGVjdC1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1zZWxlY3QtbGFicy9zYW1wbGUtcG8tc2VsZWN0LWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvblwiIHRpdGxlPVwiUE8gU2VsZWN0IC0gQ3VzdG9tZXIgcmVnaXN0cmF0aW9uXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zYW1wbGUtcG8tc2VsZWN0LWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9J3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uL3NhbXBsZS1wby1zZWxlY3QtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5lMmUtc3BlYy50cyc+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT0nc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24vc2FtcGxlLXBvLXNlbGVjdC1jdXN0b21lci1yZWdpc3RyYXRpb24uY29tcG9uZW50LnBvLnRzJz4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1zZWxlY3QtY29tcGFuaWVzXCIgdGl0bGU9XCJQTyBTZWxlY3QgQ29tcGFuaWVzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy9zYW1wbGUtcG8tc2VsZWN0LWNvbXBhbmllcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBwby1zZWxlY3QgZXhpYmUgdW1hIGxpc3RhIGRlIHZhbG9yZXMgZSBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIHNlbGVjaW9uZSB1bSBkZXNzZXMgdmFsb3Jlcy5cbiAqIE9zIHZhbG9yZXMgbGlzdGFkb3MgcG9kZW0gc2VyIGZpeG9zIG91IGRpbsOibWljb3MgZGUgYWNvcmRvIGNvbSBhIG5lY2Vzc2lkYWRlIGRvIGRlc2Vudm9sdmVkb3IsIGRhbmRvIG1haXMgZmxleGliaWxpZGFkZSBhbyBjb21wb25lbnRlLlxuICogTyBwby1zZWxlY3QgbsOjbyBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGluZm9ybWUgdW0gdmFsb3IgZGlmZXJlbnRlIGRvcyB2YWxvcmVzIGxpc3RhZG9zLCBpc3NvIGdhcmFudGUgYSBjb25zaXN0w6puY2lhIGRhIGluZm9ybWHDp8Ojby5cbiAqIE8gcG8tc2VsZWN0IG7Do28gcGVybWl0ZSBxdWUgc2VqYW0gcGFzc2Fkb3MgdmFsb3JlcyBkdXBsaWNhZG9zLCB1bmRlZmluZWQgZSBudWxsIHBhcmEgYXMgb3DDp8O1ZXMsIGV4Y2x1aW5kby1vcyBkYSBsaXN0YS5cbiAqXG4gKiA+IEFvIHBhc3NhciB1bSB2YWxvciBwYXJhIG8gX21vZGVsXyBxdWUgbsOjbyBlc3TDoSBuYSBsaXN0YSBkZSBvcMOnw7VlcywgbyBtZXNtbyBzZXLDoSBkZWZpbmlkbyBjb21vIGB1bmRlZmluZWRgLlxuICpcbiAqIFRhbWLDqW0gZXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSB1dGlsaXphciB1bSBfdGVtcGxhdGVfIHBhcmEgYSBleGliacOnw6NvIGRvcyBpdGVucyBkYSBsaXN0YSxcbiAqIHZlamEgbWFpcyBlbSAqKltwLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlKSoqLlxuICpcbiAqID4gT2JzOiBvIHRlbXBsYXRlICoqW3Atc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZV0oL2RvY3VtZW50YXRpb24vcG8tc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZSkqKiBzZXLDoSBkZXByZWNpYWRvIG5hIHZlcnPDo28gMTQueC54LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9TZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb1NlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb1NlbGVjdENvbXBvbmVudCBleHRlbmRzIFBvRmllbGRWYWxpZGF0ZU1vZGVsPGFueT4gaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGdW7Dp8OjbyBwYXJhIGF0dWFsaXphciBvIG5nTW9kZWwgZG8gY29tcG9uZW50ZSwgbmVjZXNzw6FyaW8gcXVhbmRvIG7Do28gZm9yIHV0aWxpemFkbyBkZW50cm8gZGEgdGFnIGZvcm0uXG4gICAqXG4gICAqIE5hIHZlcnPDo28gMTIuMi4wIGRvIEFuZ3VsYXIgYSB2ZXJpZmljYcOnw6NvIGBzdHJpY3RUZW1wbGF0ZXNgIHZlbSB0cnVlIGNvbW8gZGVmYXVsdC4gUG9ydGFudG8sIHBhcmEgdXRpbGl6YXJcbiAgICogdHdvLXdheSBiaW5kaW5nIG5vIGNvbXBvbmVudGUgZGV2ZSBzZSB1dGlsaXphciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1zZWxlY3QgLi4uIFtuZ01vZGVsXT1cInNlbGVjdE1vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0TW9kZWwgPSAkZXZlbnRcIj4gPC9wby1zZWxlY3Q+XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgnbmdNb2RlbENoYW5nZScpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIHNvbWVudGUgcGFyYSBsZWl0dXJhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVhZG9ubHknKSBASW5wdXRCb29sZWFuKCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTWVuc2FnZW0gcXVlIGFwYXJlY2Vyw6EgZW5xdWFudG8gbmVuaHVtYSBvcMOnw6NvIGVzdGl2ZXIgc2VsZWNpb25hZGEuICovXG4gIEBJbnB1dCgncC1wbGFjZWhvbGRlcicpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIGRpc3BsYXlWYWx1ZTtcbiAgbW9kZWxWYWx1ZTogYW55O1xuICBzZWxlY3RlZFZhbHVlOiBhbnk7XG4gIG9uTW9kZWxUb3VjaGVkOiBhbnk7XG5cbiAgcHJpdmF0ZSBkaWZmZXI6IGFueTtcbiAgcHJpdmF0ZSBfZmllbGRMYWJlbD86IHN0cmluZyA9IFBPX1NFTEVDVF9GSUVMRF9MQUJFTF9ERUZBVUxUO1xuICBwcml2YXRlIF9maWVsZFZhbHVlPzogc3RyaW5nID0gUE9fU0VMRUNUX0ZJRUxEX1ZBTFVFX0RFRkFVTFQ7XG4gIHByaXZhdGUgX29wdGlvbnM6IEFycmF5PFBvU2VsZWN0T3B0aW9uPiB8IEFycmF5PGFueT47XG5cbiAgLyoqXG4gICAqIE5lc3RhIHByb3ByaWVkYWRlIGRldmUgc2VyIGRlZmluaWRvIHVtYSBjb2xlw6fDo28gZGUgb2JqZXRvcyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgYFBvU2VsZWN0T3B0aW9uYC5cbiAgICpcbiAgICogQ2FzbyBlc3RhIGxpc3RhIGVzdGl2ZXIgdmF6aWEsIG8gbW9kZWwgc2Vyw6EgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqID4gRXNzYSBwcm9wcmllZGFkZSDDqSBpbXV0w6F2ZWwsIG91IHNlamEsIHNlbXByZSBxdWUgcXVpc2VyIGF0dWFsaXphciBhIGxpc3RhIGRlIG9ww6fDtWVzIGRpc3BvbsOtdmVpc1xuICAgKiBhdHVhbGl6ZSBhIHJlZmVyw6puY2lhIGRvIG9iamV0bzpcbiAgICpcbiAgICogYGBgXG4gICAqIC8vIGF0dWFsaXphIGEgcmVmZXLDqm5jaWEgZG8gb2JqZXRvIGdhcmFudGluZG8gYSBhdHVhbGl6YcOnw6NvIGRvIHRlbXBsYXRlXG4gICAqIHRoaXMub3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnMsIHsgdmFsdWU6ICd4JywgbGFiZWw6ICdOb3ZhIG9ww6fDo28nIH1dO1xuICAgKlxuICAgKiAvLyBldml0ZSwgcG9pcyBuw6NvIGF0dWFsaXphIGEgcmVmZXLDqm5jaWEgZG8gb2JqZXRvIHBvZGVuZG8gZ2VyYXIgYXRyYXNvcyBuYSBhdHVhbGl6YcOnw6NvIGRvIHRlbXBsYXRlXG4gICAqIHRoaXMub3B0aW9ucy5wdXNoKHsgdmFsdWU6ICd4JywgbGFiZWw6ICdOb3ZhIG9ww6fDo28nIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1vcHRpb25zJykgc2V0IG9wdGlvbnMob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIGlmICh0aGlzLmZpZWxkTGFiZWwgJiYgdGhpcy5maWVsZFZhbHVlKSB7XG4gICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBvcHRpb24ubGFiZWwgPSBvcHRpb25bdGhpcy5maWVsZExhYmVsXTtcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlT3B0aW9ucyhbLi4ub3B0aW9uc10pO1xuICAgIHRoaXMub25VcGRhdGVPcHRpb25zKCk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRvIG8gbm9tZSBkYSBwcm9wcmllZGFkZSBkbyBvYmpldG8gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIGEgY29udmVyc8OjbyBkb3MgaXRlbnMgYXByZXNlbnRhZG9zIG5hIGxpc3RhIGRvIGNvbXBvbmVudGVcbiAgICogKGBwLW9wdGlvbnNgKSwgZXN0YSBwcm9wcmllZGFkZSBzZXLDoSByZXNwb25zw6F2ZWwgcGVsbyB0ZXh0byBkZSBhcHJlc2VudGHDp8OjbyBkZSBjYWRhIGl0ZW0gZGEgbGlzdGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBsYWJlbGBcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1sYWJlbCcpIHNldCBmaWVsZExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWVsZExhYmVsID0gdmFsdWUgfHwgUE9fU0VMRUNUX0ZJRUxEX0xBQkVMX0RFRkFVTFQ7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpZWxkTGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkTGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHZhbG9yIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHZhbHVlYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLXZhbHVlJykgc2V0IGZpZWxkVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpZWxkVmFsdWUgPSB2YWx1ZSB8fCBQT19TRUxFQ1RfRklFTERfVkFMVUVfREVGQVVMVDtcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zXTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRWYWx1ZTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLCBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5vcHRpb25zKTtcblxuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9TZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHNlbGVjdDogUG9TZWxlY3RDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzU2VsZWN0KCkge1xuICAgKiAgIHRoaXMuc2VsZWN0LmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQ/LigpO1xuICB9XG5cbiAgLy8gQWx0ZXJhIG8gdmFsb3IgYW8gc2VsZWNpb25hciB1bSBpdGVtLlxuICBvblNlbGVjdENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb25Gb3VuZDogYW55ID0gdGhpcy5maW5kT3B0aW9uVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uRm91bmQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZXMob3B0aW9uRm91bmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uVXBkYXRlT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlKHRoaXMubW9kZWxWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXR1YWxpemEgdmFsb3Jlc1xuICB1cGRhdGVWYWx1ZXMob3B0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICE9PSBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLnNlbGVjdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdO1xuICAgICAgdGhpcy51cGRhdGVNb2RlbChvcHRpb25bdGhpcy5maWVsZFZhbHVlXSk7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG9wdGlvblt0aGlzLmZpZWxkTGFiZWxdO1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNlYmUgYXMgYWx0ZXJhw6fDtWVzIGRvIG1vZGVsXG4gIG9uV3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uRm91bmQ6IGFueSA9IHRoaXMuZmluZE9wdGlvblZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChvcHRpb25Gb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvcHRpb25Gb3VuZC52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG9wdGlvbkZvdW5kW3RoaXMuZmllbGRMYWJlbF07XG4gICAgfSBlbHNlIGlmICh2YWxpZFZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy51cGRhdGVNb2RlbCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBleHRyYVZhbGlkYXRpb24oYzogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGlzRXF1YWwodmFsdWU6IGFueSwgaW5wdXRWYWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkgJiYgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgPT09IGlucHV0VmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoKHZhbHVlID09PSBudWxsICYmIGlucHV0VmFsdWUgIT09IG51bGwpIHx8ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHZhbHVlID0gYCR7dmFsdWV9YDsgLy8gVHJhbnNmb3JtYW5kbyBlbSBzdHJpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUgPT09IGlucHV0VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGZpbmRPcHRpb25WYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB0aGlzLmlzRXF1YWwob3B0aW9uLnZhbHVlLCB2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wdGlvbnMob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxPcHRpb25zKG9wdGlvbnMpO1xuICAgIHJlbW92ZUR1cGxpY2F0ZWRPcHRpb25zV2l0aEZpZWxkVmFsdWUob3B0aW9ucywgdGhpcy5maWVsZFZhbHVlKTtcbiAgICByZW1vdmVVbmRlZmluZWRBbmROdWxsT3B0aW9uc1dpdGhGaWVsZFZhbHVlKG9wdGlvbnMsIHRoaXMuZmllbGRWYWx1ZSk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXIgW3AtbGFiZWxdPVwibGFiZWxcIiBbcC1oZWxwXT1cImhlbHBcIiBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIj5cbiAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50XCI+XG4gICAgPHNlbGVjdFxuICAgICAgI3NlbGVjdFxuICAgICAgY2xhc3M9XCJwby1zZWxlY3RcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgW2NsYXNzLnBvLXNlbGVjdC1wbGFjZWhvbGRlcl09XCIhc2VsZWN0ZWRWYWx1ZSAmJiAhIXBsYWNlaG9sZGVyXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgPlxuICAgICAgPG9wdGlvblxuICAgICAgICAqbmdJZj1cIiFzZWxlY3RlZFZhbHVlIHx8ICEhcGxhY2Vob2xkZXJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiISFwbGFjZWhvbGRlclwiXG4gICAgICAgIFtoaWRkZW5dPVwiIXNlbGVjdGVkVmFsdWUgJiYgIXBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cIiFzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgW3ZhbHVlXT1cInBsYWNlaG9sZGVyID8/ICcnXCJcbiAgICAgID5cbiAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgIDwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIiBbdmFsdWVdPVwib3B0aW9uPy5bdGhpcy5maWVsZFZhbHVlXVwiPlxuICAgICAgICB7eyBvcHRpb24/Llt0aGlzLmZpZWxkTGFiZWxdIH19XG4gICAgICA8L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+PC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG4iXX0=
|