@mediusinc/mng-commons 0.4.5 → 0.6.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/assets/i18n/en.json +2 -2
- package/assets/i18n/sl.json +2 -2
- package/esm2020/lib/api/services/api.abstract.service.mjs +15 -4
- package/esm2020/lib/api/services/crud-api.abstract.service.mjs +3 -3
- package/esm2020/lib/components/action/action.component.mjs +54 -10
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +3 -3
- package/esm2020/lib/components/action/route/action-route.component.mjs +3 -3
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +3 -3
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +28 -4
- package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +14 -5
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +29 -4
- package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +17 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +11 -7
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +5 -5
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/index.mjs +2 -1
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +5 -5
- package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +5 -5
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +3 -3
- package/esm2020/lib/components/layout/footer.component.mjs +3 -3
- package/esm2020/lib/components/layout/main-layout.component.mjs +3 -3
- package/esm2020/lib/components/layout/menu-item.component.mjs +3 -3
- package/esm2020/lib/components/layout/menu.component.mjs +3 -3
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +3 -3
- package/esm2020/lib/components/layout/topbar.component.mjs +3 -3
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +3 -3
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +3 -3
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +3 -3
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +3 -3
- package/esm2020/lib/components/tableview/table/table.component.mjs +6 -7
- package/esm2020/lib/components/tableview/tableview.component.mjs +3 -3
- package/esm2020/lib/config/formly.config.mjs +9 -4
- package/esm2020/lib/descriptors/action.descriptor.mjs +34 -6
- package/esm2020/lib/descriptors/editor.descriptor.mjs +3 -3
- package/esm2020/lib/descriptors/field-validation.descriptor.mjs +21 -0
- package/esm2020/lib/descriptors/field.descriptor.mjs +61 -23
- package/esm2020/lib/descriptors/index.mjs +2 -2
- package/esm2020/lib/descriptors/table.descriptor.mjs +23 -13
- package/esm2020/lib/descriptors/tableview.descriptor.mjs +4 -4
- package/esm2020/lib/directives/component.directive.mjs +3 -3
- package/esm2020/lib/directives/template.directive.mjs +3 -3
- package/esm2020/lib/mng-commons.module.mjs +13 -8
- package/esm2020/lib/pipes/boolean.pipe.mjs +3 -3
- package/esm2020/lib/pipes/enum.pipe.mjs +5 -5
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +3 -3
- package/esm2020/lib/pipes/json-path.pipe.mjs +3 -3
- package/esm2020/lib/pipes/link-formatter.pipe.mjs +3 -3
- package/esm2020/lib/services/action-executor.service.mjs +31 -8
- package/esm2020/lib/services/commons.service.mjs +57 -83
- package/esm2020/lib/services/internal/commons-init.provider.mjs +4 -0
- package/esm2020/lib/services/internal/commons-init.service.mjs +44 -0
- package/esm2020/lib/services/internal/index.mjs +3 -0
- package/esm2020/lib/services/navigation.service.mjs +3 -3
- package/esm2020/lib/services/providers/index.mjs +1 -2
- package/esm2020/lib/services/view-container.component.service.mjs +3 -3
- package/esm2020/lib/types/type.model.mjs +1 -1
- package/esm2020/lib/utils/editor-formly.util.mjs +75 -15
- package/fesm2015/mediusinc-mng-commons.mjs +607 -296
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +596 -294
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/api/services/api.abstract.service.d.ts +1 -1
- package/lib/api/services/crud-api.abstract.service.d.ts +8 -8
- package/lib/components/action/action.component.d.ts +13 -2
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +4 -2
- package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +7 -1
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +4 -2
- package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +6 -0
- package/lib/components/form/formly/fields/index.d.ts +1 -0
- package/lib/components/tableview/table/table.component.d.ts +1 -1
- package/lib/descriptors/action.descriptor.d.ts +28 -3
- package/lib/descriptors/editor.descriptor.d.ts +2 -3
- package/lib/descriptors/field-validation.descriptor.d.ts +18 -0
- package/lib/descriptors/field.descriptor.d.ts +34 -21
- package/lib/descriptors/index.d.ts +1 -1
- package/lib/descriptors/table.descriptor.d.ts +5 -1
- package/lib/descriptors/tableview.descriptor.d.ts +2 -2
- package/lib/mng-commons.module.d.ts +58 -57
- package/lib/pipes/enum.pipe.d.ts +2 -1
- package/lib/services/commons.service.d.ts +5 -7
- package/lib/services/internal/commons-init.provider.d.ts +3 -0
- package/lib/services/internal/commons-init.service.d.ts +16 -0
- package/lib/services/internal/index.d.ts +2 -0
- package/lib/services/providers/index.d.ts +0 -1
- package/lib/types/type.model.d.ts +7 -0
- package/lib/utils/editor-formly.util.d.ts +2 -1
- package/package.json +6 -6
- package/scss/mng-overrides/_layout_dialog.scss +44 -14
- package/scss/mng-overrides/_theme_dialog.scss +2 -3
- package/esm2020/lib/descriptors/field.validator.mjs +0 -21
- package/esm2020/lib/services/providers/commons-init.provider.mjs +0 -4
- package/lib/descriptors/field.validator.d.ts +0 -18
- package/lib/services/providers/commons-init.provider.d.ts +0 -3
|
@@ -65,36 +65,32 @@ export class EditorFormlyUtil {
|
|
|
65
65
|
// wrap in group to be able to use flex grid
|
|
66
66
|
const wrapperGroup = {
|
|
67
67
|
fieldGroupClassName: 'p-fluid formgrid grid',
|
|
68
|
-
fieldGroup: fields
|
|
69
|
-
validators: {}
|
|
68
|
+
fieldGroup: fields
|
|
70
69
|
};
|
|
71
|
-
|
|
72
|
-
wrapperGroup.validators[validator.name] = { expression: validator.expression, message: validator.message };
|
|
73
|
-
}
|
|
70
|
+
EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
|
|
74
71
|
return [wrapperGroup];
|
|
75
72
|
}
|
|
76
73
|
static createFormlyField(descriptor) {
|
|
77
74
|
const field = {
|
|
78
75
|
key: descriptor.property,
|
|
79
76
|
expressionProperties: {},
|
|
80
|
-
templateOptions: {}
|
|
81
|
-
validators: {}
|
|
77
|
+
templateOptions: {}
|
|
82
78
|
};
|
|
83
79
|
let className = descriptor.className;
|
|
84
80
|
if (!className) {
|
|
85
81
|
// assign default field width through entire row
|
|
86
82
|
className = 'col-12';
|
|
87
83
|
}
|
|
88
|
-
if (className.indexOf('col-') < 0) {
|
|
89
|
-
// class was provided, but does not contain col- definition
|
|
90
|
-
className = `col-12 ${descriptor.className}`;
|
|
91
|
-
}
|
|
92
84
|
field.className = className;
|
|
93
85
|
field.templateOptions['descriptor'] = descriptor;
|
|
94
86
|
if (descriptor instanceof FieldInputDescriptor) {
|
|
95
87
|
switch (descriptor.fieldType) {
|
|
96
88
|
case FieldInputDescriptor.TypeEnum.Hidden:
|
|
97
89
|
break;
|
|
90
|
+
case FieldInputDescriptor.TypeEnum.Label:
|
|
91
|
+
field.type = 'label';
|
|
92
|
+
delete field.key;
|
|
93
|
+
break;
|
|
98
94
|
case FieldInputDescriptor.TypeEnum.Textarea:
|
|
99
95
|
field.type = 'textarea';
|
|
100
96
|
break;
|
|
@@ -173,10 +169,74 @@ export class EditorFormlyUtil {
|
|
|
173
169
|
if (typeof descriptor.defaultValue !== 'undefined') {
|
|
174
170
|
field.defaultValue = descriptor.defaultValue;
|
|
175
171
|
}
|
|
176
|
-
|
|
177
|
-
field.validators[validator.name] = { expression: validator.expression, message: validator.message };
|
|
178
|
-
}
|
|
172
|
+
EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
|
|
179
173
|
return field;
|
|
180
174
|
}
|
|
175
|
+
static addValidationsToFormlyField(config, validations) {
|
|
176
|
+
if (!config.validators) {
|
|
177
|
+
config.validators = {};
|
|
178
|
+
}
|
|
179
|
+
for (const validation of validations) {
|
|
180
|
+
if (typeof validation.validator === 'function') {
|
|
181
|
+
config.validators[validation.name] = {
|
|
182
|
+
expression: (control, field, options) => {
|
|
183
|
+
const validatorRes = validation.validator(control, field, options);
|
|
184
|
+
// formly validator only excepts true/false for validation
|
|
185
|
+
// map possible angular validator result to true/false
|
|
186
|
+
const res = typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
|
|
187
|
+
console.log('mapper', config.key, validatorRes, res);
|
|
188
|
+
return res;
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
if (typeof validation.message === 'function') {
|
|
192
|
+
config.validators[validation.name].message = validation.message;
|
|
193
|
+
}
|
|
194
|
+
// if (typeof validation.validator === 'function' && typeof validation.message === 'function') {
|
|
195
|
+
// config.validators[validation.name] = {
|
|
196
|
+
// expression: (
|
|
197
|
+
// control: AbstractControl,
|
|
198
|
+
// field: FormlyFieldConfig,
|
|
199
|
+
// options?: {
|
|
200
|
+
// [id: string]: any;
|
|
201
|
+
// }
|
|
202
|
+
// ) => {
|
|
203
|
+
// const validatorRes = validation.validator!(control, field, options);
|
|
204
|
+
// // formly validator only excepts true/false for validation
|
|
205
|
+
// // map possible angular validator result to true/false
|
|
206
|
+
// const res = typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
|
|
207
|
+
// console.log('mapper', config.key, validatorRes, res);
|
|
208
|
+
// return res;
|
|
209
|
+
// },
|
|
210
|
+
// message: validation.message
|
|
211
|
+
// };
|
|
212
|
+
// } else if (typeof validation.validator === 'function') {
|
|
213
|
+
// config.validators[validation.name] = {
|
|
214
|
+
// expression: (
|
|
215
|
+
// control: AbstractControl,
|
|
216
|
+
// field: FormlyFieldConfig,
|
|
217
|
+
// options?: {
|
|
218
|
+
// [id: string]: any;
|
|
219
|
+
// }
|
|
220
|
+
// ) => {
|
|
221
|
+
// const validatorRes = validation.validator!(control, field, options);
|
|
222
|
+
// // formly validator only excepts true/false for validation
|
|
223
|
+
// // map possible angular validator result to true/false
|
|
224
|
+
// const res = typeof validatorRes === 'boolean' ? (validatorRes === false ? {[validation.name]: true} : null) : validatorRes;
|
|
225
|
+
// console.log('mapper', config.key, validatorRes, res);
|
|
226
|
+
// return res;
|
|
227
|
+
// }
|
|
228
|
+
// };
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
if (!Array.isArray(config.validators.validation)) {
|
|
232
|
+
config.validators.validation = [];
|
|
233
|
+
}
|
|
234
|
+
config.validators.validation.push(validation.name);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (validations.length > 0) {
|
|
238
|
+
console.log(config.validators);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
181
241
|
}
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUlILG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFFbEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFpQztRQUM1RSxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1FBRXZDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQzVELGdCQUFnQjtZQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JGO2FBQU07WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQXlDO1FBQ3ZFLE1BQU0sU0FBUyxHQUFzQjtZQUNqQyxJQUFJLEVBQUUsTUFBTTtZQUNaLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUN6QixNQUFNLFFBQVEsR0FBc0I7Z0JBQ2hDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSTtnQkFDWixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsVUFBVSxFQUFFLEVBQUU7YUFDakIsQ0FBQztZQUNGLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDWCxRQUFRLENBQUMsZUFBZ0IsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzthQUMvQztZQUNELFFBQVEsQ0FBQyxVQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakYsU0FBUyxDQUFDLFVBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFtQztRQUNuRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDMUMsd0NBQXdDO1lBQ3hDLE9BQU8sZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNILE1BQU0sV0FBVyxHQUFzQjtnQkFDbkMsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7WUFDRixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtnQkFDeEIsTUFBTSxVQUFVLEdBQXNCO29CQUNsQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2QsZUFBZSxFQUFFO3dCQUNiLFVBQVUsRUFBRSxLQUFLO3FCQUNwQjtvQkFDRCxVQUFVLEVBQUUsRUFBRTtpQkFDakIsQ0FBQztnQkFDRixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ2IsVUFBVSxDQUFDLGVBQWdCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQ25EO2dCQUNELFVBQVUsQ0FBQyxVQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDM0UsV0FBVyxDQUFDLFVBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDNUM7WUFDRCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQXFDO1FBQ2xFLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELDRDQUE0QztRQUM1QyxNQUFNLFlBQVksR0FBc0I7WUFDcEMsbUJBQW1CLEVBQUUsdUJBQXVCO1lBQzVDLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFFRixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDM0MsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBQyxDQUFDO1NBQzVHO1FBRUQsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsVUFBc0M7UUFDbEUsTUFBTSxLQUFLLEdBQXNCO1lBQzdCLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUN4QixvQkFBb0IsRUFBRSxFQUFFO1lBQ3hCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFFRixJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDWixnREFBZ0Q7WUFDaEQsU0FBUyxHQUFHLFFBQVEsQ0FBQztTQUN4QjtRQUNELElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0IsMkRBQTJEO1lBQzNELFNBQVMsR0FBRyxVQUFVLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNoRDtRQUNELEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBRTVCLEtBQUssQ0FBQyxlQUFnQixDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUNsRCxJQUFJLFVBQVUsWUFBWSxvQkFBb0IsRUFBRTtZQUM1QyxRQUFRLFVBQVUsQ0FBQyxTQUFTLEVBQUU7Z0JBQzFCLEtBQUssb0JBQW9CLENBQUMsUUFBUSxDQUFDLE1BQU07b0JBQ3JDLE1BQU07Z0JBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUTtvQkFDdkMsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7b0JBQ3hCLE1BQU07Z0JBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDckMsS0FBSyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7b0JBQ3RCLEtBQUssQ0FBQyxlQUFnQixDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUNsRCxLQUFLLENBQUMsZUFBZ0IsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztvQkFDbEQsTUFBTTtnQkFDVixLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxNQUFNO29CQUNyQyxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztvQkFDdEIsTUFBTTtnQkFDVixLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLO29CQUNwQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztvQkFDckIsTUFBTTtnQkFDVixLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxVQUFVO29CQUN6QyxLQUFLLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztvQkFDMUIsTUFBTTtnQkFDVixLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJO29CQUNuQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztvQkFDcEIsTUFBTTtnQkFDVixLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxNQUFNO29CQUNyQyxLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDNUMsTUFBTTtnQkFDVjtvQkFDSSxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztvQkFDckIsS0FBSyxDQUFDLGVBQWdCLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQ3hELEtBQUssQ0FBQyxlQUFnQixDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUN4RCxLQUFLLENBQUMsZUFBZ0IsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztvQkFDcEQsTUFBTTthQUNiO1NBQ0o7YUFBTSxJQUFJLFVBQVUsWUFBWSx5QkFBeUIsRUFBRTtZQUN4RCxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUN2QjthQUFNLElBQUksVUFBVSxZQUFZLHFCQUFxQixFQUFFO1lBQ3BELFFBQVEsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsWUFBWTtvQkFDbEQsS0FBSyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1YsS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsTUFBTTtvQkFDNUMsS0FBSyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1YsS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dCQUNuRDtvQkFDSSxLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztvQkFDeEIsTUFBTTthQUNiO1NBQ0o7YUFBTSxJQUFJLFVBQVUsWUFBWSwrQkFBK0IsRUFBRTtZQUM5RCxLQUFLLENBQUMsSUFBSSxHQUFHLDBCQUEwQixDQUFDO1NBQzNDO2FBQU0sSUFBSSxVQUFVLFlBQVkseUJBQXlCLEVBQUU7WUFDeEQsS0FBSyxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztTQUNwQztRQUVELElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNsQixLQUFLLENBQUMsZUFBZ0IsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNuRDtRQUVELElBQUksVUFBVSxDQUFDLGtCQUFrQixFQUFFO1lBQy9CLEtBQUssQ0FBQyxvQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUMzRjtRQUNELElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLENBQUMsZUFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDN0IsS0FBSyxDQUFDLG9CQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNyRTtRQUVELElBQUksVUFBVSxDQUFDLGtCQUFrQixFQUFFO1lBQy9CLEtBQUssQ0FBQyxvQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztTQUMzRjthQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUM1QixLQUFLLENBQUMsZUFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzFDO2FBQU07WUFDSCxLQUFLLENBQUMsb0JBQXFCLENBQUMsMEJBQTBCLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztTQUNsRjtRQUVELElBQUksT0FBTyxVQUFVLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUNoRCxLQUFLLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7U0FDaEQ7UUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDM0MsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBQyxDQUFDO1NBQ3JHO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgQUZpZWxkRGVzY3JpcHRvcixcbiAgICBFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkSW5wdXREZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yLFxuICAgIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvclxufSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JGb3JtbHlVdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUNvbmZpZ0Zyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8YW55Pik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvci50YWJzLmxlbmd0aCA9PT0gMSAmJiBkZXNjcmlwdG9yLnRhYnNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgdGFic1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlHcm91cFR5cGUoZGVzY3JpcHRvci50YWJzWzBdLmZpZWxkcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlUYWJUeXBlKGRlc2NyaXB0b3IudGFicykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seVRhYlR5cGUodGFiR3JvdXBzOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgY29uc3QgdGFic0ZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgIHR5cGU6ICd0YWJzJyxcbiAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIHRhYkdyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgdGFiRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGlkOiB0YWIubmFtZSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRhYi50aXRsZSkge1xuICAgICAgICAgICAgICAgIHRhYkZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubGFiZWwgPSB0YWIudGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5R3JvdXBUeXBlKHRhYi5maWVsZHMpKTtcbiAgICAgICAgICAgIHRhYnNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKHRhYkZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RhYnNGaWVsZF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlHcm91cFR5cGUoZ3JvdXBzOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgaWYgKGdyb3Vwcy5sZW5ndGggPT09IDEgJiYgZ3JvdXBzWzBdLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgdXNlIGZpZWxkc2V0LCBqdXN0IGNyZWF0ZSBmaWVsZHNcbiAgICAgICAgICAgIHJldHVybiBFZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cHNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmaWVsZHNldCcsXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBncm91cFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRmllbGQudGVtcGxhdGVPcHRpb25zIS5sYWJlbCA9IGdyb3VwLnRpdGxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cEZpZWxkLmZpZWxkR3JvdXAhLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZHMoZ3JvdXApKTtcbiAgICAgICAgICAgICAgICBncm91cHNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKGdyb3VwRmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtncm91cHNGaWVsZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkcyhkZXNjcmlwdG9yOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3JGaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yRmllbGQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3cmFwIGluIGdyb3VwIHRvIGJlIGFibGUgdG8gdXNlIGZsZXggZ3JpZFxuICAgICAgICBjb25zdCB3cmFwcGVyR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ3AtZmx1aWQgZm9ybWdyaWQgZ3JpZCcsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBmaWVsZHMsXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIGRlc2NyaXB0b3IudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgd3JhcHBlckdyb3VwLnZhbGlkYXRvcnNbdmFsaWRhdG9yLm5hbWVdID0ge2V4cHJlc3Npb246IHZhbGlkYXRvci5leHByZXNzaW9uLCBtZXNzYWdlOiB2YWxpZGF0b3IubWVzc2FnZX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3dyYXBwZXJHcm91cF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yOiBBRmllbGREZXNjcmlwdG9yPGFueSwgYW55Pik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAga2V5OiBkZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7fSxcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGRlc2NyaXB0b3IuY2xhc3NOYW1lO1xuICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICAgICAgLy8gYXNzaWduIGRlZmF1bHQgZmllbGQgd2lkdGggdGhyb3VnaCBlbnRpcmUgcm93XG4gICAgICAgICAgICBjbGFzc05hbWUgPSAnY29sLTEyJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhc3NOYW1lLmluZGV4T2YoJ2NvbC0nKSA8IDApIHtcbiAgICAgICAgICAgIC8vIGNsYXNzIHdhcyBwcm92aWRlZCwgYnV0IGRvZXMgbm90IGNvbnRhaW4gY29sLSBkZWZpbml0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBgY29sLTEyICR7ZGVzY3JpcHRvci5jbGFzc05hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIVsnZGVzY3JpcHRvciddID0gZGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uSGlkZGVuOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLlRleHRhcmVhOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RleHRhcmVhJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnbnVtYmVyJztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5taW4gPSBkZXNjcmlwdG9yLm51bWJlck1pbjtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5tYXggPSBkZXNjcmlwdG9yLm51bWJlck1heDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5Td2l0Y2g6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnc3dpdGNoJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdyYWRpbyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uRGF0ZXBpY2tlcjpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkYXRlcGlja2VyJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5NYXNrOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ21hc2snO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9IGRlc2NyaXB0b3IuY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWluTGVuZ3RoID0gZGVzY3JpcHRvci5taW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWF4TGVuZ3RoID0gZGVzY3JpcHRvci5tYXhMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEucGF0dGVybiA9IGRlc2NyaXB0b3IucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZW51bSc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTG9va3VwRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmxvb2t1cFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnYXV0b2NvbXBsZXRlJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uRGlhbG9nOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2RpYWxvZyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkRyb3Bkb3duOlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZHJvcGRvd24nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0YWJsZS1kaWFsb2ctbXVsdGlzZWxlY3QnO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RhYmxlLWRpYWxvZy1mb3JtJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmxhYmVsKSB7XG4gICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLmxhYmVsID0gZGVzY3JpcHRvci5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnJlcXVpcmVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXMhWyd0ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQnXSA9IGRlc2NyaXB0b3IucmVxdWlyZWRFeHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmhpZGRlbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIVsnaGlkZSddID0gZGVzY3JpcHRvci5oaWRkZW5FeHByZXNzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGlzYWJsZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyFbJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCddID0gZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyFbJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCddID0gJ2Zvcm1TdGF0ZS5kaXNhYmxlZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmllbGQuZGVmYXVsdFZhbHVlID0gZGVzY3JpcHRvci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBkZXNjcmlwdG9yLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRvcnNbdmFsaWRhdG9yLm5hbWVdID0ge2V4cHJlc3Npb246IHZhbGlkYXRvci5leHByZXNzaW9uLCBtZXNzYWdlOiB2YWxpZGF0b3IubWVzc2FnZX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuIl19
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUlILG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFHbEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFpQztRQUM1RSxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1FBRXZDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQzVELGdCQUFnQjtZQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JGO2FBQU07WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQXlDO1FBQ3ZFLE1BQU0sU0FBUyxHQUFzQjtZQUNqQyxJQUFJLEVBQUUsTUFBTTtZQUNaLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUN6QixNQUFNLFFBQVEsR0FBc0I7Z0JBQ2hDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSTtnQkFDWixlQUFlLEVBQUUsRUFBRTtn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O2dCQUNULDJEQUEyRDtnQkFDM0QsNkNBQTZDO2dCQUM3Qyx3QkFBd0I7Z0JBQ3hCLHdDQUF3QztnQkFDeEMsd0NBQXdDO2dCQUN4QywwQkFBMEI7Z0JBQzFCLHFDQUFxQztnQkFDckMsZ0JBQWdCO2dCQUNoQixpQkFBaUI7Z0JBQ2pCLG1GQUFtRjtnQkFDbkYseUVBQXlFO2dCQUN6RSxxRUFBcUU7Z0JBQ3JFLDBJQUEwSTtnQkFDMUksb0VBQW9FO2dCQUNwRSwwQkFBMEI7Z0JBQzFCLFlBQVk7Z0JBQ1osU0FBUzthQUNaO2lCQUFNO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQzlDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztpQkFDckM7Z0JBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0RDtTQUNKO1FBRUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIEFGaWVsZERlc2NyaXB0b3IsXG4gICAgRWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZEdyb3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZElucHV0RGVzY3JpcHRvcixcbiAgICBGaWVsZExvb2t1cERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRUYWJHcm91cERlc2NyaXB0b3IsXG4gICAgRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvclxufSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JGb3JtbHlVdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUNvbmZpZ0Zyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8YW55Pik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvci50YWJzLmxlbmd0aCA9PT0gMSAmJiBkZXNjcmlwdG9yLnRhYnNbMF0uZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gZG9udCB1c2UgdGFic1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlHcm91cFR5cGUoZGVzY3JpcHRvci50YWJzWzBdLmZpZWxkcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlUYWJUeXBlKGRlc2NyaXB0b3IudGFicykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seVRhYlR5cGUodGFiR3JvdXBzOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgY29uc3QgdGFic0ZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgIHR5cGU6ICd0YWJzJyxcbiAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIHRhYkdyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgdGFiRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGlkOiB0YWIubmFtZSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRhYi50aXRsZSkge1xuICAgICAgICAgICAgICAgIHRhYkZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubGFiZWwgPSB0YWIudGl0bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5R3JvdXBUeXBlKHRhYi5maWVsZHMpKTtcbiAgICAgICAgICAgIHRhYnNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKHRhYkZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RhYnNGaWVsZF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlHcm91cFR5cGUoZ3JvdXBzOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+W10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgaWYgKGdyb3Vwcy5sZW5ndGggPT09IDEgJiYgZ3JvdXBzWzBdLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgdXNlIGZpZWxkc2V0LCBqdXN0IGNyZWF0ZSBmaWVsZHNcbiAgICAgICAgICAgIHJldHVybiBFZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUZpZWxkcyhncm91cHNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmaWVsZHNldCcsXG4gICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBncm91cFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRmllbGQudGVtcGxhdGVPcHRpb25zIS5sYWJlbCA9IGdyb3VwLnRpdGxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cEZpZWxkLmZpZWxkR3JvdXAhLnB1c2goLi4uRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZHMoZ3JvdXApKTtcbiAgICAgICAgICAgICAgICBncm91cHNGaWVsZC5maWVsZEdyb3VwIS5wdXNoKGdyb3VwRmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtncm91cHNGaWVsZF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkcyhkZXNjcmlwdG9yOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxhbnk+KTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRlc2NyaXB0b3JGaWVsZCBvZiBkZXNjcmlwdG9yLmZpZWxkcykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yRmllbGQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3cmFwIGluIGdyb3VwIHRvIGJlIGFibGUgdG8gdXNlIGZsZXggZ3JpZFxuICAgICAgICBjb25zdCB3cmFwcGVyR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ3AtZmx1aWQgZm9ybWdyaWQgZ3JpZCcsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBmaWVsZHNcbiAgICAgICAgfTtcblxuICAgICAgICBFZGl0b3JGb3JtbHlVdGlsLmFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZCh3cmFwcGVyR3JvdXAsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBbd3JhcHBlckdyb3VwXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZvcm1seUZpZWxkKGRlc2NyaXB0b3I6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBhbnk+KTogRm9ybWx5RmllbGRDb25maWcge1xuICAgICAgICBjb25zdCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICBrZXk6IGRlc2NyaXB0b3IucHJvcGVydHksXG4gICAgICAgICAgICBleHByZXNzaW9uUHJvcGVydGllczoge30sXG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGRlc2NyaXB0b3IuY2xhc3NOYW1lO1xuICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICAgICAgLy8gYXNzaWduIGRlZmF1bHQgZmllbGQgd2lkdGggdGhyb3VnaCBlbnRpcmUgcm93XG4gICAgICAgICAgICBjbGFzc05hbWUgPSAnY29sLTEyJztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIVsnZGVzY3JpcHRvciddID0gZGVzY3JpcHRvcjtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uSGlkZGVuOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkxhYmVsOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2xhYmVsJztcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpZWxkLmtleTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5UZXh0YXJlYTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0ZXh0YXJlYSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWluID0gZGVzY3JpcHRvci5udW1iZXJNaW47XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubWF4ID0gZGVzY3JpcHRvci5udW1iZXJNYXg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uU3dpdGNoOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ3N3aXRjaCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uUmFkaW86XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAncmFkaW8nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkRhdGVwaWNrZXI6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uTWFzazpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdtYXNrJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSBkZXNjcmlwdG9yLmN1c3RvbUNvbXBvbmVudE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnaW5wdXQnO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLm1pbkxlbmd0aCA9IGRlc2NyaXB0b3IubWluTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLm1heExlbmd0aCA9IGRlc2NyaXB0b3IubWF4TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLnBhdHRlcm4gPSBkZXNjcmlwdG9yLnBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ2VudW0nO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZExvb2t1cERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5sb29rdXBUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2F1dG9jb21wbGV0ZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkRpYWxvZzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkaWFsb2cnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bS5Ecm9wZG93bjpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2Ryb3Bkb3duJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAndGFibGUtZGlhbG9nLW11bHRpc2VsZWN0JztcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICd0YWJsZS1kaWFsb2ctZm9ybSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5sYWJlbCkge1xuICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5sYWJlbCA9IGRlc2NyaXB0b3IubGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIVsndGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkJ10gPSBkZXNjcmlwdG9yLnJlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVzY3JpcHRvci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5oaWRkZW5FeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyFbJ2hpZGUnXSA9IGRlc2NyaXB0b3IuaGlkZGVuRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmRpc2FibGVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXMhWyd0ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQnXSA9IGRlc2NyaXB0b3IuZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXMhWyd0ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQnXSA9ICdmb3JtU3RhdGUuZGlzYWJsZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoZmllbGQsIGRlc2NyaXB0b3IudmFsaWRhdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZFZhbGlkYXRpb25zVG9Gb3JtbHlGaWVsZChjb25maWc6IEZvcm1seUZpZWxkQ29uZmlnLCB2YWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcj4pIHtcbiAgICAgICAgaWYgKCFjb25maWcudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgY29uZmlnLnZhbGlkYXRvcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiB2YWxpZGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkOiBzdHJpbmddOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yUmVzID0gdmFsaWRhdGlvbi52YWxpZGF0b3IhKGNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm1seSB2YWxpZGF0b3Igb25seSBleGNlcHRzIHRydWUvZmFsc2UgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcCBwb3NzaWJsZSBhbmd1bGFyIHZhbGlkYXRvciByZXN1bHQgdG8gdHJ1ZS9mYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdHlwZW9mIHZhbGlkYXRvclJlcyA9PT0gJ2Jvb2xlYW4nID8gdmFsaWRhdG9yUmVzIDogdmFsaWRhdG9yUmVzID09PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ21hcHBlcicsIGNvbmZpZy5rZXksIHZhbGlkYXRvclJlcywgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0ubWVzc2FnZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgKHR5cGVvZiB2YWxpZGF0aW9uLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsaWRhdGlvbi5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHByZXNzaW9uOiAoXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBvcHRpb25zPzoge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JSZXMgPSB2YWxpZGF0aW9uLnZhbGlkYXRvciEoY29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGZvcm1seSB2YWxpZGF0b3Igb25seSBleGNlcHRzIHRydWUvZmFsc2UgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBtYXAgcG9zc2libGUgYW5ndWxhciB2YWxpZGF0b3IgcmVzdWx0IHRvIHRydWUvZmFsc2VcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCByZXMgPSB0eXBlb2YgdmFsaWRhdG9yUmVzID09PSAnYm9vbGVhbicgPyB2YWxpZGF0b3JSZXMgOiB2YWxpZGF0b3JSZXMgPT09IG51bGw7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJ21hcHBlcicsIGNvbmZpZy5rZXksIHZhbGlkYXRvclJlcywgcmVzKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIG1lc3NhZ2U6IHZhbGlkYXRpb24ubWVzc2FnZVxuICAgICAgICAgICAgICAgIC8vICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodHlwZW9mIHZhbGlkYXRpb24udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHByZXNzaW9uOiAoXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBvcHRpb25zPzoge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBbaWQ6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JSZXMgPSB2YWxpZGF0aW9uLnZhbGlkYXRvciEoY29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGZvcm1seSB2YWxpZGF0b3Igb25seSBleGNlcHRzIHRydWUvZmFsc2UgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBtYXAgcG9zc2libGUgYW5ndWxhciB2YWxpZGF0b3IgcmVzdWx0IHRvIHRydWUvZmFsc2VcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCByZXMgPSB0eXBlb2YgdmFsaWRhdG9yUmVzID09PSAnYm9vbGVhbicgPyAodmFsaWRhdG9yUmVzID09PSBmYWxzZSA/IHtbdmFsaWRhdGlvbi5uYW1lXTogdHJ1ZX0gOiBudWxsKSA6IHZhbGlkYXRvclJlcztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBjb25zb2xlLmxvZygnbWFwcGVyJywgY29uZmlnLmtleSwgdmFsaWRhdG9yUmVzLCByZXMpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24ucHVzaCh2YWxpZGF0aW9uLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZy52YWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|