@esfaenza/parameters 13.3.1 → 14.2.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/es_parameters.component.loc.mjs +4 -4
- package/esm2020/lib/es_parameters.component.mjs +65 -33
- package/esm2020/lib/es_parameters.module.mjs +10 -12
- package/fesm2015/esfaenza-parameters.mjs +76 -46
- package/fesm2015/esfaenza-parameters.mjs.map +1 -1
- package/fesm2020/esfaenza-parameters.mjs +76 -46
- package/fesm2020/esfaenza-parameters.mjs.map +1 -1
- package/{esfaenza-parameters.d.ts → index.d.ts} +0 -0
- package/lib/es_parameters.component.d.ts +7 -3
- package/package.json +4 -4
|
@@ -15,12 +15,12 @@ export class EsParametersLoc extends LocalizationService {
|
|
|
15
15
|
super(LOC_LOCALE);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
EsParametersLoc.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
19
|
-
EsParametersLoc.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
18
|
+
EsParametersLoc.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersLoc, deps: [{ token: PAR_LOCALE }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
+
EsParametersLoc.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersLoc });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersLoc, decorators: [{
|
|
21
21
|
type: Injectable
|
|
22
22
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
23
23
|
type: Inject,
|
|
24
24
|
args: [PAR_LOCALE]
|
|
25
25
|
}] }]; } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQubG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFyYW1ldGVycy9zcmMvbGliL2VzX3BhcmFtZXRlcnMuY29tcG9uZW50LmxvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV0Qzs7R0FFRztBQUVILE1BQU0sT0FBTyxlQUFnQixTQUFRLG1CQUFtQjtJQUVwRDs7OztPQUlHO0lBQ0gsWUFBZ0MsVUFBa0I7UUFDOUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7OzZHQVRRLGVBQWUsa0JBT0osVUFBVTtpSEFQckIsZUFBZTs0RkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFRTSxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IFBBUl9MT0NBTEUgfSBmcm9tICcuL3Rva2Vucyc7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGRpIGxvY2FsaXp6YXppb25lIHBlciBpbCBjb21wb25lbnRlICoqRXNQYXJhbWV0ZXJzQ29tcG9uZW50KipcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVzUGFyYW1ldGVyc0xvYyBleHRlbmRzIExvY2FsaXphdGlvblNlcnZpY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KFBBUl9MT0NBTEUpIExPQ19MT0NBTEU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKExPQ19MT0NBTEUpO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -9,9 +9,9 @@ import { of } from "rxjs";
|
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "@esfaenza/extensions";
|
|
11
11
|
import * as i2 from "@esfaenza/localizations";
|
|
12
|
-
import * as i3 from "@
|
|
13
|
-
import * as i4 from "@angular/
|
|
14
|
-
import * as i5 from "@
|
|
12
|
+
import * as i3 from "@angular/common";
|
|
13
|
+
import * as i4 from "@angular/forms";
|
|
14
|
+
import * as i5 from "@esfaenza/forms-and-validations";
|
|
15
15
|
/** Componente che permette di graficare una lista di **GenericParameter** come Input in base al loro tipo specifico */
|
|
16
16
|
export class EsParametersComponent {
|
|
17
17
|
/**
|
|
@@ -47,6 +47,8 @@ export class EsParametersComponent {
|
|
|
47
47
|
this.Readonly = false;
|
|
48
48
|
/** Form che utilizza il componente. Fondamentale collegarlo se si vogliono le validazioni sul submit */
|
|
49
49
|
this.Form = null;
|
|
50
|
+
/** Quando utilizza un sottocomponente autocomplete abilita o disabilita il reset dell'input per ogni selezione */
|
|
51
|
+
this.AutocompleteHideChoicesOnSelection = false;
|
|
50
52
|
}
|
|
51
53
|
/** Permette di settare in una volta solo gli input **LabelColWidth** e **InputColWidth**, basta scriverlo con la sintassi "X Y" */
|
|
52
54
|
set LabelInputRatio(input) {
|
|
@@ -128,7 +130,16 @@ export class EsParametersComponent {
|
|
|
128
130
|
changed() {
|
|
129
131
|
if (!this.Parameters)
|
|
130
132
|
return;
|
|
131
|
-
|
|
133
|
+
// Se ci sono delle modifiche ai binding potrebbero essere cambiati i required. Ricreo tutti i componenti e ri-idrato la cache dei parametri
|
|
134
|
+
var changes = this.reviewParametersBindings();
|
|
135
|
+
if (changes.length > 0) {
|
|
136
|
+
changes.forEach(ch => {
|
|
137
|
+
let index = this.Parameters.findIndex(t => t.id == ch);
|
|
138
|
+
this.Parameters[index] = JSON.parse(JSON.stringify(this.Parameters[index]));
|
|
139
|
+
this.ParametersCache[ch] = this.Parameters[index];
|
|
140
|
+
this.cdr.markForCheck();
|
|
141
|
+
});
|
|
142
|
+
}
|
|
132
143
|
var thyCleanShaltNotBlankMe = JSON.parse(JSON.stringify(this.Parameters));
|
|
133
144
|
this.propagateChange(thyCleanShaltNotBlankMe);
|
|
134
145
|
}
|
|
@@ -143,15 +154,27 @@ export class EsParametersComponent {
|
|
|
143
154
|
}
|
|
144
155
|
/**
|
|
145
156
|
* Rivede i bindings dei parametri in base a loro eventuali espressioni di controllo
|
|
157
|
+
*
|
|
158
|
+
* @returns {string[]} lista con gli id dei parametri che sono stati modificati
|
|
146
159
|
*/
|
|
147
160
|
reviewParametersBindings() {
|
|
161
|
+
let changes = [];
|
|
148
162
|
for (let i = 0; i < this.Parameters.length; i++) {
|
|
149
163
|
var p = this.Parameters[i];
|
|
150
|
-
if (p.requiredexp)
|
|
164
|
+
if (p.requiredexp) {
|
|
165
|
+
let prevReq = p.required;
|
|
151
166
|
p.required = this.evaluate(p.requiredexp);
|
|
152
|
-
|
|
167
|
+
if (prevReq != p.required)
|
|
168
|
+
changes.push(p.id);
|
|
169
|
+
}
|
|
170
|
+
if (p.visibleexp) {
|
|
171
|
+
let prevVisi = p.visible;
|
|
153
172
|
p.visible = this.evaluate(p.visibleexp);
|
|
173
|
+
if (prevVisi != p.visible)
|
|
174
|
+
changes.push(p.id);
|
|
175
|
+
}
|
|
154
176
|
}
|
|
177
|
+
return changes;
|
|
155
178
|
}
|
|
156
179
|
/**
|
|
157
180
|
* Valuta un'espressione in base ai parametri presenti nel modello attuale
|
|
@@ -186,31 +209,38 @@ export class EsParametersComponent {
|
|
|
186
209
|
*/
|
|
187
210
|
checkValue(key, operator, value) {
|
|
188
211
|
var rPar = this.ParametersCache[key];
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
212
|
+
try {
|
|
213
|
+
switch (rPar.type) {
|
|
214
|
+
case "string":
|
|
215
|
+
case "enum":
|
|
216
|
+
return eval(`"${this.defaultIfnullOrUndefined(rPar.value, ``)}" ${operator} "${this.defaultIfnullOrUndefined(value, ``)}"`);
|
|
217
|
+
case "boolean":
|
|
218
|
+
return eval(`${this.defaultIfnullOrUndefined(rPar.value, ``).toString()} ${operator} ${this.defaultIfnullOrUndefined(value, ``)}`);
|
|
219
|
+
case "number":
|
|
220
|
+
return eval(`${this.defaultIfnullOrUndefined(rPar.value, '""', true).replace(',', '.')} ${operator} ${this.defaultIfnullOrUndefined(value, '""', true).replace(',', '.')}`);
|
|
221
|
+
case "date":
|
|
222
|
+
let parDateConv = `this.dates.getDateConvertion("${rPar.value}")`;
|
|
223
|
+
let valDateConv = `this.dates.getDateConvertion("${value}")`;
|
|
224
|
+
switch (operator) {
|
|
225
|
+
case "==": return eval(`${parDateConv} == ${valDateConv} || (${parDateConv} != null && ${parDateConv}.isSame(${valDateConv}))`);
|
|
226
|
+
case "!=": return eval(`${parDateConv} != ${valDateConv} && ${parDateConv} != null && !${parDateConv}.isSame(${valDateConv})`);
|
|
227
|
+
case ">": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isAfter(${valDateConv})`);
|
|
228
|
+
case "<": return eval(`${parDateConv} != null && ${valDateConv} != null && ${parDateConv}.isBefore(${valDateConv})`);
|
|
229
|
+
case ">=": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isAfter(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);
|
|
230
|
+
case "<=": return eval(`${parDateConv} != null && ${valDateConv} != null && (${parDateConv}.isBefore(${valDateConv}) || ${parDateConv}?.isSame(${valDateConv}))`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
console.error(error);
|
|
236
|
+
console.warn("Errori nella valutazione dell'espressione. Fallback a false");
|
|
237
|
+
return false;
|
|
208
238
|
}
|
|
209
239
|
throw `@esfaenza/parameters: Tipo parametro ${key} non riconosciuto: ${rPar.type}`;
|
|
210
240
|
}
|
|
211
241
|
/** @ignore */
|
|
212
|
-
defaultIfnullOrUndefined(item, dflt) {
|
|
213
|
-
if (item == null || item == undefined || item.toString() == 'null')
|
|
242
|
+
defaultIfnullOrUndefined(item, dflt, emptyStringIsNull = false) {
|
|
243
|
+
if (item == null || item == undefined || item.toString() == 'null' || (emptyStringIsNull && item.toString() == ""))
|
|
214
244
|
return dflt;
|
|
215
245
|
return item;
|
|
216
246
|
}
|
|
@@ -224,8 +254,8 @@ export class EsParametersComponent {
|
|
|
224
254
|
return this.AutoCompleteDataRetrieve(parameter, search, byid);
|
|
225
255
|
}
|
|
226
256
|
}
|
|
227
|
-
EsParametersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
228
|
-
EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
257
|
+
EsParametersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersComponent, deps: [{ token: i1.UtilityService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i1.DateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
258
|
+
EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: EsParametersComponent, selector: "es-parameters", inputs: { LastParameterNoMargin: "LastParameterNoMargin", LabelColWidth: "LabelColWidth", InputColWidth: "InputColWidth", submitted: "submitted", EmptyMessage: "EmptyMessage", Removal: "Removal", Readonly: "Readonly", Form: "Form", AutocompleteHideChoicesOnSelection: "AutocompleteHideChoicesOnSelection", AutoCompleteDataRetrieve: "AutoCompleteDataRetrieve", LabelInputRatio: "LabelInputRatio" }, providers: [
|
|
229
259
|
{ provide: LocalizationService, useClass: EsParametersLoc },
|
|
230
260
|
{
|
|
231
261
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -237,8 +267,8 @@ EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
237
267
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
238
268
|
multi: true
|
|
239
269
|
}
|
|
240
|
-
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [Multi]=\"true\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>",
|
|
241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
270
|
+
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>", 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.FormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "component", type: i5.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { kind: "component", type: i5.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i5.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol"] }, { kind: "component", type: i5.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues", "UseCommaSeparatedList"] }, { kind: "component", type: i5.FormAutocompleteComponent, selector: "form-autocomplete", inputs: ["SelectLabel", "SearchFunction", "MinChars", "HideChoicesOnSelection", "RequiredPlaceholder", "CaseSensitive", "Multi", "MultiElementsThreshold"] }, { kind: "pipe", type: i2.LocalizePipe, name: "localize" }] });
|
|
271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersComponent, decorators: [{
|
|
242
272
|
type: Component,
|
|
243
273
|
args: [{ selector: "es-parameters", providers: [
|
|
244
274
|
{ provide: LocalizationService, useClass: EsParametersLoc },
|
|
@@ -252,7 +282,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
252
282
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
253
283
|
multi: true
|
|
254
284
|
}
|
|
255
|
-
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [Multi]=\"true\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>" }]
|
|
285
|
+
], template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Parameters && Parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of Parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\" [hidden]=\"!par.visible\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"></span> {{par.description}}{{par.required ? '*' : ''}}:</label>\r\n\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [Form]=\"Form\" [FormLayout]=\"false\" [UseCommaSeparatedList]=\"true\" [SelectLabel]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [Placeholder]=\"('Select' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"par{{i}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n</div>" }]
|
|
256
286
|
}], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.DateService }]; }, propDecorators: { LastParameterNoMargin: [{
|
|
257
287
|
type: Input
|
|
258
288
|
}], LabelColWidth: [{
|
|
@@ -269,9 +299,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
269
299
|
type: Input
|
|
270
300
|
}], Form: [{
|
|
271
301
|
type: Input
|
|
302
|
+
}], AutocompleteHideChoicesOnSelection: [{
|
|
303
|
+
type: Input
|
|
272
304
|
}], AutoCompleteDataRetrieve: [{
|
|
273
305
|
type: Input
|
|
274
306
|
}], LabelInputRatio: [{
|
|
275
307
|
type: Input
|
|
276
308
|
}] } });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFxQyxTQUFTLEVBQVUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkksT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNOUQsZUFBZTtBQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBRXRDLHVIQUF1SDtBQWlCdkgsTUFBTSxPQUFPLHFCQUFxQjtJQWlEOUI7Ozs7T0FJRztJQUNILFlBQW9CLE9BQXVCLEVBQVMsRUFBdUIsRUFBUyxHQUFzQixFQUFVLEdBQWEsRUFBUyxLQUFrQjtRQUF4SSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFTLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQTlDNUo7Ozs7V0FJRztRQUNILG9CQUFlLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsQyxvRUFBb0U7UUFDM0QsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRWhELDRCQUE0QjtRQUNu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aEMsS0FBSztnQkFHTyxlQUFlO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCwgTmdGb3JtLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5cclxuLy8gQ2xhc3NpXHJcbmltcG9ydCB7IEdlbmVyaWNQYXJhbWV0ZXIgfSBmcm9tICcuL21vZGVscy9HZW5lcmljUGFyYW1ldGVyJztcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBFc1BhcmFtZXRlcnNMb2MgfSBmcm9tIFwiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5sb2NcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLyoqIENvbXBvbmVudGUgY2hlIHBlcm1ldHRlIGRpIGdyYWZpY2FyZSB1bmEgbGlzdGEgZGkgKipHZW5lcmljUGFyYW1ldGVyKiogY29tZSBJbnB1dCBpbiBiYXNlIGFsIGxvcm8gdGlwbyBzcGVjaWZpY28gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJlcy1wYXJhbWV0ZXJzXCIsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBFc1BhcmFtZXRlcnNMb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFc1BhcmFtZXRlcnNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFc1BhcmFtZXRlcnNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1dLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEVzUGFyYW1ldGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xyXG5cclxuICAgIC8qKiBNb2RlbGxvIGRlbCBjb21wb25lbnRlIHN1IGN1aSB2ZW5nb25vIGVmZmV0dHVhdGUgbGUgZ3JhZmljYXppb25pICovXHJcbiAgICBwdWJsaWMgUGFyYW1ldGVyczogR2VuZXJpY1BhcmFtZXRlcltdO1xyXG5cclxuICAgIC8qKiBDYWNoZSBwZXIgZmFyZSBsb29rdXAgcmFwaWRpIGluIGZhc2UgZGkgdmFsdXRhemlvbmUgZXNwcmVzc2lvbmkgZGkgdmlzaWJpbGl0w6AgZSBvYmJsaWdhdG9yaWV0w6AgKi9cclxuICAgIHByaXZhdGUgUGFyYW1ldGVyc0NhY2hlOiB7W2lkOiBzdHJpbmddOiBHZW5lcmljUGFyYW1ldGVyfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXIgXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGwndWx0aW1vIHBhcmFtZXRybyBub24gZGV2ZSBhdmVyZSBtYXJnaW5lIGluIGZvbmRvICovXHJcbiAgICBASW5wdXQoKSBMYXN0UGFyYW1ldGVyTm9NYXJnaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGxhIGxhYmVsICovXHJcbiAgICBASW5wdXQoKSBMYWJlbENvbFdpZHRoOiBudW1iZXIgPSA0O1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgSW5wdXRDb2xXaWR0aDogbnVtYmVyID0gODtcclxuXHJcbiAgICAvKiogSW5wdXQgYSBjdWkgY29sbGVnYXJlIGxhIHZhcmlhYmlsZSAqKnN1Ym1pdHRlZCoqIGRlbCBmb3JtIGFsbCdpbnRlcm5vIGRlbCBxdWFsZSB2aWVuZSB1dGlsaXp6YXRvIHF1ZXN0byBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogVmFsb3JlIGRhIG1vc3RyYXJlIHF1YWxvcmEgbm9uIGZvc3Nlcm8gYW5jb3JhIHJpY2V2dXRpIGkgKipQYXJhbWV0ZXJzKiogZGEgbW9zdHJhcmUgKi9cclxuICAgIEBJbnB1dCgpIEVtcHR5TWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgcmltdW92ZXJlIGkgcGFyYW1ldHJpIGRhbGxhIGxpc3RhIGNsaWNjYW5kbyBzdWxsYSBYIGRhdmFudGkgYWxsYSBMYWJlbCAqL1xyXG4gICAgQElucHV0KCkgUmVtb3ZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaSBjb21wb25lbnRpIGRpIElucHV0IGdlbmVyYXRpIHNvbm8gUmVhZG9ubHkgbyBubyAqL1xyXG4gICAgQElucHV0KCkgUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogRm9ybSBjaGUgdXRpbGl6emEgaWwgY29tcG9uZW50ZS4gRm9uZGFtZW50YWxlIGNvbGxlZ2FybG8gc2Ugc2kgdm9nbGlvbm8gbGUgdmFsaWRhemlvbmkgc3VsIHN1Ym1pdCAqL1xyXG4gICAgQElucHV0KCkgRm9ybSA6IE5nRm9ybSA9IG51bGw7XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRhIHV0aWxpenphcmUgcGVyIHRpcmFyZSBmdW9yaSBpIGRhdGkgZGkgdW4gYXV0b2NvbXBsZXRlICovXHJcbiAgICBASW5wdXQoKSBBdXRvQ29tcGxldGVEYXRhUmV0cmlldmU6IChwYXJhbWV0ZXI6IEdlbmVyaWNQYXJhbWV0ZXIsIHNlYXJjaDogc3RyaW5nLCBieWlkOiBib29sZWFuKSA9PiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10+XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNldHRhcmUgaW4gdW5hIHZvbHRhIHNvbG8gZ2xpIGlucHV0ICoqTGFiZWxDb2xXaWR0aCoqIGUgKipJbnB1dENvbFdpZHRoKiosIGJhc3RhIHNjcml2ZXJsbyBjb24gbGEgc2ludGFzc2kgXCJYIFlcIiAqL1xyXG4gICAgQElucHV0KCkgc2V0IExhYmVsSW5wdXRSYXRpbyhpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvID0gaW5wdXQuc3BsaXQoL1xccy8pO1xyXG4gICAgICAgIHRoaXMuTGFiZWxDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzBdKTtcclxuICAgICAgICB0aGlzLklucHV0Q29sV2lkdGggPSBwYXJzZUludChyYXRpb1sxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSwgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgaW5qOiBJbmplY3RvciwgcHVibGljIGRhdGVzOiBEYXRlU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzID0gb2JqO1xyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlID0ge307XHJcbiAgICAgICAgaWYgKCF0aGlzLlBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlW3QuaWRdID0gdDtcclxuXHJcbiAgICAgICAgICAgIGlmKCF0LnR5cGVjb2RlICYmICF0LnR5cGUpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gbsOpIHVuIHR5cGUgbsOpIHVuIHR5cGVjb2RlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZWNvZGUgJiYgIXQudHlwZSlcclxuICAgICAgICAgICAgICAgIHQudHlwZSA9IHRoaXMudXRpRXh0cy5nZXRKc1R5cGVGcm9tVHlwZUNvZGUodC50eXBlY29kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlY29kZSAmJiB0LnR5cGUgIT0gdGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlJpbGV2YXRlIGluY29uc2lzdGVuemUgZnJhIGlsIHRpcG8gXCIgKyB0LnR5cGUgKyBcIiBlIGlsIHRpcG8gXCIgKyB0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gXCJib29sZWFuXCIpXHJcbiAgICAgICAgICAgICAgICB0LnZhbHVlID0gKDxzdHJpbmc+dC52YWx1ZS50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LmVudW10eXBlIHx8IHQuZGljdHR5cGUpXHJcbiAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZW51bSc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBhbnkge1xyXG4gICAgICAgIC8vIFNlIGxhIHZhbGlkYXppb25lIMOoIHJpY2hpYW1hdGEgZGEgdW4gY29tcG9uZW50ZSBub24gbWUgc3Rlc3NvIHZ1b2wgZGlyZSBjaGUgaSBjb21wb25lbnRpIGRpIHZhbGlkYXppb25lIGludGVybmkgc3Rhbm5vIHJpY2hpYW1hbmRvXHJcbiAgICAgICAgLy8gcXVlc3RvIHZhbGlkYXRvciwgbWEgZGFsIGxvcm8gcHVudG8gZGkgdmlzdGEgbm9uIHNlIG5lIGRldm9ubyBwcmVvY2N1cGFyZSBxdWluZGkgZmFjY2lvIGZpbnRhIG5vbiBjaSBzaWFubyBlcnJvcmkuXHJcbiAgICAgICAgLy8gU2UgaW52ZWNlIHZlbmdvIHJpY2hpYW1hdG8gZGlyZXR0YW1lbnRlIHNpZ25pZmljYSBjaGUgw6ggaWwgZm9ybSBpbiBjdWkgdml2ZSBlcy1wYXJhbWV0ZXJzIGUgbMOsIGRldm8gZWZmZXR0dWFyZSBsYSB2YWxpZGF6aW9uZVxyXG4gICAgICAgIGxldCBjb250cm9sID0gdGhpcy5pbmouZ2V0KE5nQ29udHJvbCwgbnVsbCk/LmNvbnRyb2w7XHJcbiAgICAgICAgaWYgKGMgIT0gY29udHJvbClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuUGFyYW1ldGVycyAmJiB0aGlzLlBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCF0LnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5TnVtYmVyID0gdC50eXBlID09ICdudW1iZXInICYmICh0LnZhbHVlID09IG51bGwgfHwgdC52YWx1ZSA9PSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5Tm9uTnVtYmVyID0gdC50eXBlICE9ICdudW1iZXInICYmICF0LnZhbHVlXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHQucmVxdWlyZWQgJiYgKGVtcHR5TnVtYmVyIHx8IGVtcHR5Tm9uTnVtYmVyKSlcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodC52YWx1ZSAmJiB0LnR5cGUgPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBuZXcgUmVnRXhwKHQucGF0dGVybiB8fCAvXlsrLV0/WzAtOV0qWyxdP1swLTldKyQvKS50ZXN0KHQudmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0LnZhbHVlICYmIHQucGF0dGVybilcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IG5ldyBSZWdFeHAodC5wYXR0ZXJuKS50ZXN0KHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWxpZClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgXCJlcy1wYXJhbWV0ZXJzXCI6IHZhbGlkIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm4pOiB2b2lkIHsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhclxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbik6IHZvaWQgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIG1vZGVsbG8gaW4gdXNjaXRhIGUgcHJvcGFnYXJsbyBzdWwgYmluZGluZyBuZ01vZGVsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5QYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICAgICAgdmFyIHRoeUNsZWFuU2hhbHROb3RCbGFua01lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLlBhcmFtZXRlcnMpKTtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aHlDbGVhblNoYWx0Tm90QmxhbmtNZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaW11b3ZlIGlsIHBhcmFtZXRybyBzZWxlemlvbmF0byBlIHByb3BhZ2EgaWwgbW9kZWxsb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0dlbmVyaWNQYXJhbWV0ZXJ9IHBhciBQYXJhbWV0cm8gZGEgcmltdW92ZXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZW1vdmVQYXJhbWV0ZXIocGFyOiBHZW5lcmljUGFyYW1ldGVyKSB7XHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLnNwbGljZSh0aGlzLlBhcmFtZXRlcnMuaW5kZXhPZihwYXIpLCAxKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpdmVkZSBpIGJpbmRpbmdzIGRlaSBwYXJhbWV0cmkgaW4gYmFzZSBhIGxvcm8gZXZlbnR1YWxpIGVzcHJlc3Npb25pIGRpIGNvbnRyb2xsb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJldmlld1BhcmFtZXRlcnNCaW5kaW5ncygpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuUGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcCA9IHRoaXMuUGFyYW1ldGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwLnJlcXVpcmVkZXhwKVxyXG4gICAgICAgICAgICAgICAgcC5yZXF1aXJlZCA9IHRoaXMuZXZhbHVhdGUocC5yZXF1aXJlZGV4cCk7XHJcbiAgICAgICAgICAgIGlmIChwLnZpc2libGVleHApXHJcbiAgICAgICAgICAgICAgICBwLnZpc2libGUgPSB0aGlzLmV2YWx1YXRlKHAudmlzaWJsZWV4cCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHVuJ2VzcHJlc3Npb25lIGluIGJhc2UgYWkgcGFyYW1ldHJpIHByZXNlbnRpIG5lbCBtb2RlbGxvIGF0dHVhbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV4cHIgRXNwcmVzc2lvbmUgZGEgdmFsdXRhcmUgc2NyaXR0YSBuZWwgZm9ybWF0byAocmlwZXRpYmlsZSkgXCJJRCAoPT18IT18PHw+fD49fDw9KSAoYHZhbG9yZWAgfCBudWxsIHwgdHJ1ZSB8IGZhbHNlIHwgWFhYLFhYWClcIiBzZXBhcmF0byBldmVudHVhbG1lbnRlIGRhICYmIGVkIHx8XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zICoqdHJ1ZSoqIHNlIGxhIGNvbmRpemlvbmUgw6ggdmVyaWZpY2F0YSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZShleHByOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVnZXggPSAvXFxzPyhbYS16QS1aMC05Xy1dKylcXHM/KCE9fD09fDx8Pnw8PXw+PSlcXHM/KGBbXmBdK2B8YGB8bnVsbHxbMC05LF0rfHRydWV8ZmFsc2UpL2dtO1xyXG5cclxuICAgICAgICB2YXIgbWF0Y2hlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB2YXIgZmluYWxFeHByID0gZXhwcjtcclxuICAgICAgICB3aGlsZSAobWF0Y2hlcyA9IHJlZ2V4LmV4ZWMoZXhwcikpIHtcclxuICAgICAgICAgICAgdmFyIGZ1bGxNYXRjaCA9IG1hdGNoZXNbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgaWQgPSBtYXRjaGVzWzFdLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIG9wZXJhdGlvbiA9IG1hdGNoZXNbMl0udHJpbSgpO1xyXG4gICAgICAgICAgICBsZXQgYlZhbHVlID0gbWF0Y2hlc1szXS50cmltKCkudHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBtYXRjaGVzWzNdLnRyaW0oKS50cmltKCkucmVwbGFjZSgnYCcsICcnKS5yZXBsYWNlKCdgJywgJycpO1xyXG5cclxuICAgICAgICAgICAgZmluYWxFeHByID0gZmluYWxFeHByLnJlcGxhY2UoZnVsbE1hdGNoLCBgdGhpcy5jaGVja1ZhbHVlKCcke2lkfScsICcke29wZXJhdGlvbn0nLCAke2JWYWx1ZSA9PSAnbnVsbCcgPyAnbnVsbCcgOiBgJyR7dmFsdWV9J2B9KWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV2YWwoZmluYWxFeHByKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RpdHVpc2NlIGwnb3BlcmF6aW9uZSBkaSBjb21wYXJhemlvbmUgZnJhIHVuIHNpbmdvbG8gdmFsb3JlIGRpIHVuIHBhcmFtZXRybyBlIHVuIHN1byB2YWxvcmUgZGkgY29uZnJvbnRvIGluIGJhc2UgYWQgdW4gb3BlcmF0b3JlXHJcbiAgICAgKiBSaWNoaWFtYXRhIGRhIEVWQUxcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGVsIHBhcmFtZXRybyBkaSBjdWkgdmVyaWZpY2FyZSBpbCB2YWxvcmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciBPcGVyYXRvcmUgY29uIGN1aSB2ZXJpZmljYXJlIGlsIHZhbG9yZTogPT0sICE9LCA+LCA8LCA+PSwgPD1cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWxvcmUgZGkgY29uZnJvbnRvIGRhIHV0aWxpenphcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tWYWx1ZShrZXk6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByUGFyID0gdGhpcy5QYXJhbWV0ZXJzQ2FjaGVba2V5XTtcclxuICAgICAgICBzd2l0Y2ggKHJQYXIudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgXCIke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHJQYXIudmFsdWUsIGBgKX1cIiAke29wZXJhdG9yfSBcIiR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsIGBgKX1cImApO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYCR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQoclBhci52YWx1ZSwgYGApLnRvU3RyaW5nKCl9ICR7b3BlcmF0b3J9ICR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsIGBgKX1gKTtcclxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYCR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQoclBhci52YWx1ZSwgYGApLnJlcGxhY2UoJywnLCAnLicpfSAke29wZXJhdG9yfSAke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHZhbHVlLCBgYCkucmVwbGFjZSgnLCcsICcuJyl9YCk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyRGF0ZUNvbnYgPSBgdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbihcIiR7clBhci52YWx1ZX1cIilgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbERhdGVDb252ID0gYHRoaXMuZGF0ZXMuZ2V0RGF0ZUNvbnZlcnRpb24oXCIke3ZhbHVlfVwiKWA7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPT1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ID09ICR7dmFsRGF0ZUNvbnZ9IHx8ICgke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIiE9XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSAke3ZhbERhdGVDb252fSAmJiAke3BhckRhdGVDb252fSAhPSBudWxsICYmICEke3BhckRhdGVDb252fS5pc1NhbWUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj5cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAke3BhckRhdGVDb252fS5pc0FmdGVyKCR7dmFsRGF0ZUNvbnZ9KWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNCZWZvcmUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj49XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgKCR7cGFyRGF0ZUNvbnZ9LmlzQWZ0ZXIoJHt2YWxEYXRlQ29udn0pIHx8ICR7cGFyRGF0ZUNvbnZ9Py5pc1NhbWUoJHt2YWxEYXRlQ29udn0pKWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICgke3BhckRhdGVDb252fS5pc0JlZm9yZSgke3ZhbERhdGVDb252fSkgfHwgJHtwYXJEYXRlQ29udn0/LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IGBAZXNmYWVuemEvcGFyYW1ldGVyczogVGlwbyBwYXJhbWV0cm8gJHtrZXl9IG5vbiByaWNvbm9zY2l1dG86ICR7clBhci50eXBlfWA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkPFQ+KGl0ZW06IFQsIGRmbHQ6IFQpOiBUIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsIHx8IGl0ZW0gPT0gdW5kZWZpbmVkIHx8IGl0ZW0udG9TdHJpbmcoKSA9PSAnbnVsbCcpXHJcbiAgICAgICAgICAgIHJldHVybiBkZmx0O1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgZ2V0U291cmNlKHBhcmFtZXRlcjogR2VuZXJpY1BhcmFtZXRlciwgc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10+IHtcclxuICAgICAgICBpZiAoIXRoaXMuQXV0b0NvbXBsZXRlRGF0YVJldHJpZXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJAZm9ybXMtYW5kLXZhbGlkYXRpb25zOiBmdW56aW9uZSBkaSBkYXRhcmV0cmlldmUgbm9uIGltcG9zdGF0YSBwZXIgdW4gcGFyYW1ldHJvIGF1dG9jb21wbGV0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkF1dG9Db21wbGV0ZURhdGFSZXRyaWV2ZShwYXJhbWV0ZXIsIHNlYXJjaCwgYnlpZCk7XHJcbiAgICB9XHJcbn0iLCI8ZGl2ICpuZ0lmPVwiKCFQYXJhbWV0ZXJzIHx8IFBhcmFtZXRlcnMubGVuZ3RoID09IDApICYmIEVtcHR5TWVzc2FnZVwiPlxyXG4gICAgPGVtPnt7RW1wdHlNZXNzYWdlfX08L2VtPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJQYXJhbWV0ZXJzICYmIFBhcmFtZXRlcnMubGVuZ3RoID4gMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHBhciBvZiBQYXJhbWV0ZXJzOyBsZXQgaT0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDtcIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0UGFyYW1ldGVyTm9NYXJnaW4gJiYgbGFzdFwiIFtoaWRkZW5dPVwiIXBhci52aXNpYmxlXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7TGFiZWxDb2xXaWR0aH19IG0tdC01XCI+PHNwYW4gKm5nSWY9XCJSZW1vdmFsXCIgY2xhc3M9XCJmYSBmYS1yZW1vdmUgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwicmVtb3ZlUGFyYW1ldGVyKHBhcilcIj48L3NwYW4+Jm5ic3A7e3twYXIuZGVzY3JpcHRpb259fXt7cGFyLnJlcXVpcmVkID8gJyonIDogJyd9fTo8L2xhYmVsPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgPGZvcm0tZGF0ZSBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWRhdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIHN0cmluZ2EtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnc3RyaW5nJ1wiPlxyXG4gICAgICAgICAgICA8Zm9ybS1pbnB1dCBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBudW1lcm8tLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICA8Zm9ybS1pbnB1dCBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3IgcGF0dGVybj1cInt7cGFyLnBhdHRlcm4gfHwgJ15bKy1dP1swLTldKlssXT9bMC05XSskJ319XCI+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBib29sZWFuLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fSBtLXQtNVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWNoZWNrYm94IFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInBhcnt7aX19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1jaGVja2JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2UgZW51bSBzaW5nbGUgc2VsZWN0LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmICFwYXIubXVsdGllbnVtICYmICFwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLXNlbGVjdCBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3IgW1NvdXJjZV09XCJwYXIuZW51bXZhbHVlc1wiPjwvZm9ybS1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIGVudW0gbXVsdGkgc2VsZWN0LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmIHBhci5tdWx0aWVudW0gJiYgIXBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgPGZvcm0tbXVsdGlzZWxlY3QgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1VzZUNvbW1hU2VwYXJhdGVkTGlzdF09XCJ0cnVlXCIgW1NlbGVjdExhYmVsXT1cIignU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLidcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTb3VyY2VdPVwicGFyLmVudW12YWx1ZXNcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1tdWx0aXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2UgZW51bSBhdXRvY29tcGxldGUtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgIXBhci5tdWx0aWVudW0gJiYgcGFyLnNvdXJjZWFwaVwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1hdXRvY29tcGxldGUgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1BsYWNlaG9sZGVyXT1cIignU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLidcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTZWFyY2hGdW5jdGlvbl09XCJnZXRTb3VyY2UuYmluZCh0aGlzLCBwYXIpXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBlbnVtIG11bHRpc2VsZWN0IGF1dG9jb21wbGV0ZS0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmIHBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgPGZvcm0tYXV0b2NvbXBsZXRlIFtGb3JtXT1cIkZvcm1cIiBbTXVsdGldPVwidHJ1ZVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1BsYWNlaG9sZGVyXT1cIignU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLidcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTZWFyY2hGdW5jdGlvbl09XCJnZXRTb3VyY2UuYmluZCh0aGlzLCBwYXIpXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUE0QyxTQUFTLEVBQVUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUksT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNOUQsZUFBZTtBQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBRXRDLHVIQUF1SDtBQWlCdkgsTUFBTSxPQUFPLHFCQUFxQjtJQW9EOUI7Ozs7T0FJRztJQUNILFlBQW9CLE9BQXVCLEVBQVMsRUFBdUIsRUFBUyxHQUFzQixFQUFVLEdBQWEsRUFBUyxLQUFrQjtRQUF4SSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFTLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQWpENUo7Ozs7V0FJRztRQUNILG9CQUFlLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsQyxvRUFBb0U7UUFDM0QsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRWhELDRCQUE0QjtRQUNu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ZDtxQkFBQzt3TkFtQkcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLGtDQUFrQztzQkFBMUMsS0FBSztnQkFHRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBR08sZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFVudHlwZWRGb3JtQ29udHJvbCwgTmdDb250cm9sLCBOZ0Zvcm0sIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBDbGFzc2lcclxuaW1wb3J0IHsgR2VuZXJpY1BhcmFtZXRlciB9IGZyb20gJy4vbW9kZWxzL0dlbmVyaWNQYXJhbWV0ZXInO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEVzUGFyYW1ldGVyc0xvYyB9IGZyb20gXCIuL2VzX3BhcmFtZXRlcnMuY29tcG9uZW50LmxvY1wiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBjaGUgcGVybWV0dGUgZGkgZ3JhZmljYXJlIHVuYSBsaXN0YSBkaSAqKkdlbmVyaWNQYXJhbWV0ZXIqKiBjb21lIElucHV0IGluIGJhc2UgYWwgbG9ybyB0aXBvIHNwZWNpZmljbyAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImVzLXBhcmFtZXRlcnNcIixcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEVzUGFyYW1ldGVyc0xvYyB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVzUGFyYW1ldGVyc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVzUGFyYW1ldGVyc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2VzX3BhcmFtZXRlcnMuY29tcG9uZW50Lmh0bWxcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNQYXJhbWV0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gZGVsIGNvbXBvbmVudGUgc3UgY3VpIHZlbmdvbm8gZWZmZXR0dWF0ZSBsZSBncmFmaWNhemlvbmkgKi9cclxuICAgIHB1YmxpYyBQYXJhbWV0ZXJzOiBHZW5lcmljUGFyYW1ldGVyW107XHJcblxyXG4gICAgLyoqIENhY2hlIHBlciBmYXJlIGxvb2t1cCByYXBpZGkgaW4gZmFzZSBkaSB2YWx1dGF6aW9uZSBlc3ByZXNzaW9uaSBkaSB2aXNpYmlsaXTDoCBlIG9iYmxpZ2F0b3JpZXTDoCAqL1xyXG4gICAgcHJpdmF0ZSBQYXJhbWV0ZXJzQ2FjaGU6IHtbaWQ6IHN0cmluZ106IEdlbmVyaWNQYXJhbWV0ZXJ9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhciBcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgbCd1bHRpbW8gcGFyYW1ldHJvIG5vbiBkZXZlIGF2ZXJlIG1hcmdpbmUgaW4gZm9uZG8gKi9cclxuICAgIEBJbnB1dCgpIExhc3RQYXJhbWV0ZXJOb01hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbGEgbGFiZWwgKi9cclxuICAgIEBJbnB1dCgpIExhYmVsQ29sV2lkdGg6IG51bWJlciA9IDQ7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsJ2lucHV0ICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKiBJbnB1dCBhIGN1aSBjb2xsZWdhcmUgbGEgdmFyaWFiaWxlICoqc3VibWl0dGVkKiogZGVsIGZvcm0gYWxsJ2ludGVybm8gZGVsIHF1YWxlIHZpZW5lIHV0aWxpenphdG8gcXVlc3RvIGNvbXBvbmVudGUgKi9cclxuICAgIEBJbnB1dCgpIHN1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGEgbW9zdHJhcmUgcXVhbG9yYSBub24gZm9zc2VybyBhbmNvcmEgcmljZXZ1dGkgaSAqKlBhcmFtZXRlcnMqKiBkYSBtb3N0cmFyZSAqL1xyXG4gICAgQElucHV0KCkgRW1wdHlNZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSByaW11b3ZlcmUgaSBwYXJhbWV0cmkgZGFsbGEgbGlzdGEgY2xpY2NhbmRvIHN1bGxhIFggZGF2YW50aSBhbGxhIExhYmVsICovXHJcbiAgICBASW5wdXQoKSBSZW1vdmFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBpIGNvbXBvbmVudGkgZGkgSW5wdXQgZ2VuZXJhdGkgc29ubyBSZWFkb25seSBvIG5vICovXHJcbiAgICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBGb3JtIGNoZSB1dGlsaXp6YSBpbCBjb21wb25lbnRlLiBGb25kYW1lbnRhbGUgY29sbGVnYXJsbyBzZSBzaSB2b2dsaW9ubyBsZSB2YWxpZGF6aW9uaSBzdWwgc3VibWl0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtIDogTmdGb3JtID0gbnVsbDtcclxuXHJcbiAgICAvKiogUXVhbmRvIHV0aWxpenphIHVuIHNvdHRvY29tcG9uZW50ZSBhdXRvY29tcGxldGUgYWJpbGl0YSBvIGRpc2FiaWxpdGEgaWwgcmVzZXQgZGVsbCdpbnB1dCBwZXIgb2duaSBzZWxlemlvbmUgKi9cclxuICAgIEBJbnB1dCgpIEF1dG9jb21wbGV0ZUhpZGVDaG9pY2VzT25TZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogRnVuemlvbmUgZGEgdXRpbGl6emFyZSBwZXIgdGlyYXJlIGZ1b3JpIGkgZGF0aSBkaSB1biBhdXRvY29tcGxldGUgKi9cclxuICAgIEBJbnB1dCgpIEF1dG9Db21wbGV0ZURhdGFSZXRyaWV2ZTogKHBhcmFtZXRlcjogR2VuZXJpY1BhcmFtZXRlciwgc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4pID0+IE9ic2VydmFibGU8eyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXT5cclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgc2V0dGFyZSBpbiB1bmEgdm9sdGEgc29sbyBnbGkgaW5wdXQgKipMYWJlbENvbFdpZHRoKiogZSAqKklucHV0Q29sV2lkdGgqKiwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBpbmo6IEluamVjdG9yLCBwdWJsaWMgZGF0ZXM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmopOiB2b2lkIHtcclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMgPSBvYmo7XHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzQ2FjaGUgPSB7fTtcclxuICAgICAgICBpZiAoIXRoaXMuUGFyYW1ldGVycylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5QYXJhbWV0ZXJzQ2FjaGVbdC5pZF0gPSB0O1xyXG5cclxuICAgICAgICAgICAgaWYoIXQudHlwZWNvZGUgJiYgIXQudHlwZSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byBuw6kgdW4gdHlwZSBuw6kgdW4gdHlwZWNvZGVcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlY29kZSAmJiAhdC50eXBlKVxyXG4gICAgICAgICAgICAgICAgdC50eXBlID0gdGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGVjb2RlICYmIHQudHlwZSAhPSB0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiUmlsZXZhdGUgaW5jb25zaXN0ZW56ZSBmcmEgaWwgdGlwbyBcIiArIHQudHlwZSArIFwiIGUgaWwgdGlwbyBcIiArIHRoaXMudXRpRXh0cy5nZXRKc1R5cGVGcm9tVHlwZUNvZGUodC50eXBlY29kZSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZSA9PSBcImJvb2xlYW5cIilcclxuICAgICAgICAgICAgICAgIHQudmFsdWUgPSAoPHN0cmluZz50LnZhbHVlLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQuZW51bXR5cGUgfHwgdC5kaWN0dHlwZSlcclxuICAgICAgICAgICAgICAgIHQudHlwZSA9ICdlbnVtJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXZpZXdQYXJhbWV0ZXJzQmluZGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICB2YWxpZGF0ZShjOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBhbnkge1xyXG4gICAgICAgIC8vIFNlIGxhIHZhbGlkYXppb25lIMOoIHJpY2hpYW1hdGEgZGEgdW4gY29tcG9uZW50ZSBub24gbWUgc3Rlc3NvIHZ1b2wgZGlyZSBjaGUgaSBjb21wb25lbnRpIGRpIHZhbGlkYXppb25lIGludGVybmkgc3Rhbm5vIHJpY2hpYW1hbmRvXHJcbiAgICAgICAgLy8gcXVlc3RvIHZhbGlkYXRvciwgbWEgZGFsIGxvcm8gcHVudG8gZGkgdmlzdGEgbm9uIHNlIG5lIGRldm9ubyBwcmVvY2N1cGFyZSBxdWluZGkgZmFjY2lvIGZpbnRhIG5vbiBjaSBzaWFubyBlcnJvcmkuXHJcbiAgICAgICAgLy8gU2UgaW52ZWNlIHZlbmdvIHJpY2hpYW1hdG8gZGlyZXR0YW1lbnRlIHNpZ25pZmljYSBjaGUgw6ggaWwgZm9ybSBpbiBjdWkgdml2ZSBlcy1wYXJhbWV0ZXJzIGUgbMOsIGRldm8gZWZmZXR0dWFyZSBsYSB2YWxpZGF6aW9uZVxyXG4gICAgICAgIGxldCBjb250cm9sID0gdGhpcy5pbmouZ2V0KE5nQ29udHJvbCwgbnVsbCk/LmNvbnRyb2w7XHJcbiAgICAgICAgaWYgKGMgIT0gY29udHJvbClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuUGFyYW1ldGVycyAmJiB0aGlzLlBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCF0LnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5TnVtYmVyID0gdC50eXBlID09ICdudW1iZXInICYmICh0LnZhbHVlID09IG51bGwgfHwgdC52YWx1ZSA9PSB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtcHR5Tm9uTnVtYmVyID0gdC50eXBlICE9ICdudW1iZXInICYmICF0LnZhbHVlXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHQucmVxdWlyZWQgJiYgKGVtcHR5TnVtYmVyIHx8IGVtcHR5Tm9uTnVtYmVyKSlcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodC52YWx1ZSAmJiB0LnR5cGUgPT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBuZXcgUmVnRXhwKHQucGF0dGVybiB8fCAvXlsrLV0/WzAtOV0qWyxdP1swLTldKyQvKS50ZXN0KHQudmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0LnZhbHVlICYmIHQucGF0dGVybilcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IG5ldyBSZWdFeHAodC5wYXR0ZXJuKS50ZXN0KHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWxpZClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgXCJlcy1wYXJhbWV0ZXJzXCI6IHZhbGlkIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm4pOiB2b2lkIHsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhclxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbik6IHZvaWQgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIG1vZGVsbG8gaW4gdXNjaXRhIGUgcHJvcGFnYXJsbyBzdWwgYmluZGluZyBuZ01vZGVsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5QYXJhbWV0ZXJzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFNlIGNpIHNvbm8gZGVsbGUgbW9kaWZpY2hlIGFpIGJpbmRpbmcgcG90cmViYmVybyBlc3NlcmUgY2FtYmlhdGkgaSByZXF1aXJlZC4gUmljcmVvIHR1dHRpIGkgY29tcG9uZW50aSBlIHJpLWlkcmF0byBsYSBjYWNoZSBkZWkgcGFyYW1ldHJpXHJcbiAgICAgICAgdmFyIGNoYW5nZXMgPSB0aGlzLnJldmlld1BhcmFtZXRlcnNCaW5kaW5ncygpO1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuUGFyYW1ldGVycy5maW5kSW5kZXgodCA9PiB0LmlkID09IGNoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc1tpbmRleF0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuUGFyYW1ldGVyc1tpbmRleF0pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlW2NoXSA9IHRoaXMuUGFyYW1ldGVyc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGh5Q2xlYW5TaGFsdE5vdEJsYW5rTWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuUGFyYW1ldGVycykpO1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoeUNsZWFuU2hhbHROb3RCbGFua01lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpbXVvdmUgaWwgcGFyYW1ldHJvIHNlbGV6aW9uYXRvIGUgcHJvcGFnYSBpbCBtb2RlbGxvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7R2VuZXJpY1BhcmFtZXRlcn0gcGFyIFBhcmFtZXRybyBkYSByaW11b3ZlcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZVBhcmFtZXRlcihwYXI6IEdlbmVyaWNQYXJhbWV0ZXIpIHtcclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMuc3BsaWNlKHRoaXMuUGFyYW1ldGVycy5pbmRleE9mKHBhciksIDEpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUml2ZWRlIGkgYmluZGluZ3MgZGVpIHBhcmFtZXRyaSBpbiBiYXNlIGEgbG9ybyBldmVudHVhbGkgZXNwcmVzc2lvbmkgZGkgY29udHJvbGxvXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gbGlzdGEgY29uIGdsaSBpZCBkZWkgcGFyYW1ldHJpIGNoZSBzb25vIHN0YXRpIG1vZGlmaWNhdGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZXZpZXdQYXJhbWV0ZXJzQmluZGluZ3MoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGxldCBjaGFuZ2VzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLlBhcmFtZXRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAocC5yZXF1aXJlZGV4cCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByZXZSZXEgPSBwLnJlcXVpcmVkO1xyXG4gICAgICAgICAgICAgICAgcC5yZXF1aXJlZCA9IHRoaXMuZXZhbHVhdGUocC5yZXF1aXJlZGV4cCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlJlcSAhPSBwLnJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaChwLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocC52aXNpYmxlZXhwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJldlZpc2kgPSBwLnZpc2libGU7XHJcbiAgICAgICAgICAgICAgICBwLnZpc2libGUgPSB0aGlzLmV2YWx1YXRlKHAudmlzaWJsZWV4cCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlZpc2kgIT0gcC52aXNpYmxlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaChwLmlkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHVuJ2VzcHJlc3Npb25lIGluIGJhc2UgYWkgcGFyYW1ldHJpIHByZXNlbnRpIG5lbCBtb2RlbGxvIGF0dHVhbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV4cHIgRXNwcmVzc2lvbmUgZGEgdmFsdXRhcmUgc2NyaXR0YSBuZWwgZm9ybWF0byAocmlwZXRpYmlsZSkgXCJJRCAoPT18IT18PHw+fD49fDw9KSAoYHZhbG9yZWAgfCBudWxsIHwgdHJ1ZSB8IGZhbHNlIHwgWFhYLFhYWClcIiBzZXBhcmF0byBldmVudHVhbG1lbnRlIGRhICYmIGVkIHx8XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zICoqdHJ1ZSoqIHNlIGxhIGNvbmRpemlvbmUgw6ggdmVyaWZpY2F0YSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZShleHByOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVnZXggPSAvXFxzPyhbYS16QS1aMC05Xy1dKylcXHM/KCE9fD09fDx8Pnw8PXw+PSlcXHM/KGBbXmBdK2B8YGB8bnVsbHxbMC05LF0rfHRydWV8ZmFsc2UpL2dtO1xyXG5cclxuICAgICAgICB2YXIgbWF0Y2hlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB2YXIgZmluYWxFeHByID0gZXhwcjtcclxuICAgICAgICB3aGlsZSAobWF0Y2hlcyA9IHJlZ2V4LmV4ZWMoZXhwcikpIHtcclxuICAgICAgICAgICAgdmFyIGZ1bGxNYXRjaCA9IG1hdGNoZXNbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgaWQgPSBtYXRjaGVzWzFdLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIG9wZXJhdGlvbiA9IG1hdGNoZXNbMl0udHJpbSgpO1xyXG4gICAgICAgICAgICBsZXQgYlZhbHVlID0gbWF0Y2hlc1szXS50cmltKCkudHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBtYXRjaGVzWzNdLnRyaW0oKS50cmltKCkucmVwbGFjZSgnYCcsICcnKS5yZXBsYWNlKCdgJywgJycpO1xyXG5cclxuICAgICAgICAgICAgZmluYWxFeHByID0gZmluYWxFeHByLnJlcGxhY2UoZnVsbE1hdGNoLCBgdGhpcy5jaGVja1ZhbHVlKCcke2lkfScsICcke29wZXJhdGlvbn0nLCAke2JWYWx1ZSA9PSAnbnVsbCcgPyAnbnVsbCcgOiBgJyR7dmFsdWV9J2B9KWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV2YWwoZmluYWxFeHByKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RpdHVpc2NlIGwnb3BlcmF6aW9uZSBkaSBjb21wYXJhemlvbmUgZnJhIHVuIHNpbmdvbG8gdmFsb3JlIGRpIHVuIHBhcmFtZXRybyBlIHVuIHN1byB2YWxvcmUgZGkgY29uZnJvbnRvIGluIGJhc2UgYWQgdW4gb3BlcmF0b3JlXHJcbiAgICAgKiBSaWNoaWFtYXRhIGRhIEVWQUxcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGVsIHBhcmFtZXRybyBkaSBjdWkgdmVyaWZpY2FyZSBpbCB2YWxvcmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciBPcGVyYXRvcmUgY29uIGN1aSB2ZXJpZmljYXJlIGlsIHZhbG9yZTogPT0sICE9LCA+LCA8LCA+PSwgPD1cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWxvcmUgZGkgY29uZnJvbnRvIGRhIHV0aWxpenphcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tWYWx1ZShrZXk6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByUGFyID0gdGhpcy5QYXJhbWV0ZXJzQ2FjaGVba2V5XTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJQYXIudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgXCIke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHJQYXIudmFsdWUsIGBgKX1cIiAke29wZXJhdG9yfSBcIiR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsIGBgKX1cImApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZChyUGFyLnZhbHVlLCBgYCkudG9TdHJpbmcoKX0gJHtvcGVyYXRvcn0gJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZCh2YWx1ZSwgYGApfWApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGAke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHJQYXIudmFsdWUsICdcIlwiJywgdHJ1ZSkucmVwbGFjZSgnLCcsICcuJyl9ICR7b3BlcmF0b3J9ICR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsICdcIlwiJywgdHJ1ZSkucmVwbGFjZSgnLCcsICcuJyl9YCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJEYXRlQ29udiA9IGB0aGlzLmRhdGVzLmdldERhdGVDb252ZXJ0aW9uKFwiJHtyUGFyLnZhbHVlfVwiKWA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbERhdGVDb252ID0gYHRoaXMuZGF0ZXMuZ2V0RGF0ZUNvbnZlcnRpb24oXCIke3ZhbHVlfVwiKWA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI9PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gPT0gJHt2YWxEYXRlQ29udn0gfHwgKCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIiE9XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSAke3ZhbERhdGVDb252fSAmJiAke3BhckRhdGVDb252fSAhPSBudWxsICYmICEke3BhckRhdGVDb252fS5pc1NhbWUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI+XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNBZnRlcigke3ZhbERhdGVDb252fSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjxcIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAke3BhckRhdGVDb252fS5pc0JlZm9yZSgke3ZhbERhdGVDb252fSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj49XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgKCR7cGFyRGF0ZUNvbnZ9LmlzQWZ0ZXIoJHt2YWxEYXRlQ29udn0pIHx8ICR7cGFyRGF0ZUNvbnZ9Py5pc1NhbWUoJHt2YWxEYXRlQ29udn0pKWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPD1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAoJHtwYXJEYXRlQ29udn0uaXNCZWZvcmUoJHt2YWxEYXRlQ29udn0pIHx8ICR7cGFyRGF0ZUNvbnZ9Py5pc1NhbWUoJHt2YWxEYXRlQ29udn0pKWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJFcnJvcmkgbmVsbGEgdmFsdXRhemlvbmUgZGVsbCdlc3ByZXNzaW9uZS4gRmFsbGJhY2sgYSBmYWxzZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgYEBlc2ZhZW56YS9wYXJhbWV0ZXJzOiBUaXBvIHBhcmFtZXRybyAke2tleX0gbm9uIHJpY29ub3NjaXV0bzogJHtyUGFyLnR5cGV9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0SWZudWxsT3JVbmRlZmluZWQ8VD4oaXRlbTogVCwgZGZsdDogVCwgZW1wdHlTdHJpbmdJc051bGw6IGJvb2xlYW4gPSBmYWxzZSk6IFQge1xyXG4gICAgICAgIGlmIChpdGVtID09IG51bGwgfHwgaXRlbSA9PSB1bmRlZmluZWQgfHwgaXRlbS50b1N0cmluZygpID09ICdudWxsJyB8fCAoZW1wdHlTdHJpbmdJc051bGwgJiYgaXRlbS50b1N0cmluZygpID09IFwiXCIpKVxyXG4gICAgICAgICAgICByZXR1cm4gZGZsdDtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIGdldFNvdXJjZShwYXJhbWV0ZXI6IEdlbmVyaWNQYXJhbWV0ZXIsIHNlYXJjaDogc3RyaW5nLCBieWlkOiBib29sZWFuKTogT2JzZXJ2YWJsZTx7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLkF1dG9Db21wbGV0ZURhdGFSZXRyaWV2ZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQGZvcm1zLWFuZC12YWxpZGF0aW9uczogZnVuemlvbmUgZGkgZGF0YXJldHJpZXZlIG5vbiBpbXBvc3RhdGEgcGVyIHVuIHBhcmFtZXRybyBhdXRvY29tcGxldGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihbXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5BdXRvQ29tcGxldGVEYXRhUmV0cmlldmUocGFyYW1ldGVyLCBzZWFyY2gsIGJ5aWQpO1xyXG4gICAgfVxyXG59IiwiPGRpdiAqbmdJZj1cIighUGFyYW1ldGVycyB8fCBQYXJhbWV0ZXJzLmxlbmd0aCA9PSAwKSAmJiBFbXB0eU1lc3NhZ2VcIj5cclxuICAgIDxlbT57e0VtcHR5TWVzc2FnZX19PC9lbT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiUGFyYW1ldGVycyAmJiBQYXJhbWV0ZXJzLmxlbmd0aCA+IDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0Zvcj1cImxldCBwYXIgb2YgUGFyYW1ldGVyczsgbGV0IGk9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7XCIgW2NsYXNzLmFwcC1tYXJnaW4tYm90dG9tLTBdPVwiTGFzdFBhcmFtZXRlck5vTWFyZ2luICYmIGxhc3RcIiBbaGlkZGVuXT1cIiFwYXIudmlzaWJsZVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC17e0xhYmVsQ29sV2lkdGh9fSBtLXQtNVwiPjxzcGFuICpuZ0lmPVwiUmVtb3ZhbFwiIGNsYXNzPVwiZmEgZmEtcmVtb3ZlIHRleHQtZGFuZ2VyXCIgKGNsaWNrKT1cInJlbW92ZVBhcmFtZXRlcihwYXIpXCI+PC9zcGFuPiZuYnNwO3t7cGFyLmRlc2NyaXB0aW9ufX17e3Bhci5yZXF1aXJlZCA/ICcqJyA6ICcnfX06PC9sYWJlbD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWRhdGUgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInBhcnt7aX19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1kYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBzdHJpbmdhLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInBhcnt7aX19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2UgbnVtZXJvLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ251bWJlcidcIj5cclxuICAgICAgICAgICAgPGZvcm0taW5wdXQgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInBhcnt7aX19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yIHBhdHRlcm49XCJ7e3Bhci5wYXR0ZXJuIHx8ICdeWystXT9bMC05XSpbLF0/WzAtOV0rJCd9fVwiPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2UgYm9vbGVhbi0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX0gbS10LTVcIiAqbmdJZj1cInBhci50eXBlID09ICdib29sZWFuJ1wiPlxyXG4gICAgICAgICAgICA8Zm9ybS1jaGVja2JveCBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJwYXJ7e2l9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tY2hlY2tib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIGVudW0gc2luZ2xlIHNlbGVjdC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiAhcGFyLm11bHRpZW51bSAmJiAhcGFyLnNvdXJjZWFwaVwiPlxyXG4gICAgICAgICAgICA8Zm9ybS1zZWxlY3QgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInBhcnt7aX19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yIFtTb3VyY2VdPVwicGFyLmVudW12YWx1ZXNcIj48L2Zvcm0tc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1TZSBlbnVtIG11bHRpIHNlbGVjdC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmICFwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLW11bHRpc2VsZWN0IFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtVc2VDb21tYVNlcGFyYXRlZExpc3RdPVwidHJ1ZVwiIFtTZWxlY3RMYWJlbF09XCIoJ1NlbGVjdCcgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbU291cmNlXT1cInBhci5lbnVtdmFsdWVzXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNlIGVudW0gYXV0b2NvbXBsZXRlLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmICFwYXIubXVsdGllbnVtICYmIHBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgPGZvcm0tYXV0b2NvbXBsZXRlIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtQbGFjZWhvbGRlcl09XCIoJ1NlbGVjdCcgfCBsb2NhbGl6ZSA6IGxjKSArICcuLi4nXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwicGFye3tpfX1cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbU2VhcmNoRnVuY3Rpb25dPVwiZ2V0U291cmNlLmJpbmQodGhpcywgcGFyKVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWF1dG9jb21wbGV0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tU2UgZW51bSBtdWx0aXNlbGVjdCBhdXRvY29tcGxldGUtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgcGFyLm11bHRpZW51bSAmJiBwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgIDxmb3JtLWF1dG9jb21wbGV0ZSBbRm9ybV09XCJGb3JtXCIgW0hpZGVDaG9pY2VzT25TZWxlY3Rpb25dPVwiQXV0b2NvbXBsZXRlSGlkZUNob2ljZXNPblNlbGVjdGlvblwiIFtNdWx0aV09XCJ0cnVlXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUGxhY2Vob2xkZXJdPVwiKCdTZWxlY3QnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJ1wiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInBhcnt7aX19XCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW1NlYXJjaEZ1bmN0aW9uXT1cImdldFNvdXJjZS5iaW5kKHRoaXMsIHBhcilcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { FormsAndValidationsModule } from "@esfaenza/forms-and-validations";
|
|
5
4
|
import { LocalizationModule } from '@esfaenza/localizations';
|
|
6
5
|
import { FullExtensionsModule } from '@esfaenza/extensions';
|
|
7
6
|
import { EsParametersComponent } from './es_parameters.component';
|
|
8
7
|
import { PAR_LOCALE } from './tokens';
|
|
8
|
+
import { FormsAndValidationsModule } from '@esfaenza/forms-and-validations';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export class EsParametersModule {
|
|
11
11
|
static forRoot(config) {
|
|
@@ -17,20 +17,18 @@ export class EsParametersModule {
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
EsParametersModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
21
|
-
EsParametersModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "
|
|
20
|
+
EsParametersModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
+
EsParametersModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: EsParametersModule, declarations: [EsParametersComponent], imports: [CommonModule,
|
|
22
22
|
LocalizationModule,
|
|
23
23
|
FormsModule,
|
|
24
24
|
FullExtensionsModule,
|
|
25
25
|
FormsAndValidationsModule], exports: [EsParametersComponent] });
|
|
26
|
-
EsParametersModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
]] });
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EsParametersModule, decorators: [{
|
|
26
|
+
EsParametersModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersModule, imports: [CommonModule,
|
|
27
|
+
LocalizationModule,
|
|
28
|
+
FormsModule,
|
|
29
|
+
FullExtensionsModule,
|
|
30
|
+
FormsAndValidationsModule] });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EsParametersModule, decorators: [{
|
|
34
32
|
type: NgModule,
|
|
35
33
|
args: [{
|
|
36
34
|
declarations: [EsParametersComponent],
|
|
@@ -44,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
44
42
|
exports: [EsParametersComponent]
|
|
45
43
|
}]
|
|
46
44
|
}] });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQWM1RSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaUM7UUFDOUMsT0FBTztZQUNMLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUU7YUFDN0Q7U0FDRixDQUFDO0lBQ0osQ0FBQzs7Z0hBUlUsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBVmQscUJBQXFCLGFBRWxDLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsV0FBVztRQUNYLG9CQUFvQjtRQUNwQix5QkFBeUIsYUFFakIscUJBQXFCO2lIQUVwQixrQkFBa0IsWUFSM0IsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixXQUFXO1FBQ1gsb0JBQW9CO1FBQ3BCLHlCQUF5Qjs0RkFJaEIsa0JBQWtCO2tCQVg5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsb0JBQW9CO3dCQUNwQix5QkFBeUI7cUJBQzFCO29CQUNELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Nb2R1bGUgfSBmcm9tICdAZXNmYWVuemEvbG9jYWxpemF0aW9ucyc7XHJcbmltcG9ydCB7IEZ1bGxFeHRlbnNpb25zTW9kdWxlIH0gZnJvbSAnQGVzZmFlbnphL2V4dGVuc2lvbnMnO1xyXG5pbXBvcnQgeyBFc1BhcmFtZXRlcnNDb21wb25lbnQgfSBmcm9tICcuL2VzX3BhcmFtZXRlcnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXNQYXJhbWV0ZXJzTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvRXNQYXJhbWV0ZXJzTW9kdWxlQ29uZmlnJztcclxuaW1wb3J0IHsgUEFSX0xPQ0FMRSB9IGZyb20gJy4vdG9rZW5zJztcclxuaW1wb3J0IHsgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSB9IGZyb20gJ0Blc2ZhZW56YS9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMnO1xyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbRXNQYXJhbWV0ZXJzQ29tcG9uZW50XSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBMb2NhbGl6YXRpb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIEZ1bGxFeHRlbnNpb25zTW9kdWxlLFxyXG4gICAgRm9ybXNBbmRWYWxpZGF0aW9uc01vZHVsZSxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtFc1BhcmFtZXRlcnNDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc1BhcmFtZXRlcnNNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEVzUGFyYW1ldGVyc01vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RXNQYXJhbWV0ZXJzTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogRXNQYXJhbWV0ZXJzTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IFBBUl9MT0NBTEUsIHVzZVZhbHVlOiBjb25maWc/LmxvY2FsZSB8fCAnaXQtSVQnIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbiB9XHJcbiJdfQ==
|