fx-form-builder-wrapper 1.0.7 → 1.0.9
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/esm2022/lib/components/uploader-checkbox/uploader-checkbox.component.mjs +31 -10
- package/fesm2022/fx-form-builder-wrapper.mjs +30 -9
- package/fesm2022/fx-form-builder-wrapper.mjs.map +1 -1
- package/lib/components/uploader-checkbox/uploader-checkbox.component.d.ts +3 -0
- package/package.json +1 -1
|
@@ -19,7 +19,7 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
19
19
|
formattedData = {
|
|
20
20
|
uploadedFiles: [],
|
|
21
21
|
deletedFiles: [],
|
|
22
|
-
checkboxEnabled: false
|
|
22
|
+
// checkboxEnabled: false
|
|
23
23
|
};
|
|
24
24
|
uploadedFilesMap = {};
|
|
25
25
|
destroy$ = new Subject();
|
|
@@ -172,18 +172,39 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
172
172
|
// Initialize the map to store the structure of uploaded files and other data
|
|
173
173
|
const uploadedFilesMap = {};
|
|
174
174
|
// Iterate over the variables to extract uploader keys and their corresponding uploaded files data
|
|
175
|
+
// for (const [key, value] of Object.entries(variables)) {
|
|
176
|
+
// // Check if the key starts with 'uploader-checkbox' and if value is an object containing 'uploadedFiles'
|
|
177
|
+
// if (key.startsWith('uploader-checkbox') && (value as UploaderData).uploadedFiles) {
|
|
178
|
+
// uploadedFilesMap[key] = {
|
|
179
|
+
// uploadedFiles: (value as UploaderData).uploadedFiles,
|
|
180
|
+
// checkboxEnabled: (value as UploaderData).checkboxEnabled || false
|
|
181
|
+
// };
|
|
182
|
+
// }
|
|
183
|
+
// }
|
|
175
184
|
for (const [key, value] of Object.entries(variables)) {
|
|
176
|
-
|
|
177
|
-
|
|
185
|
+
if (this.hasUploadedFiles(value)) {
|
|
186
|
+
const otherKey = this.getOtherKey(value);
|
|
187
|
+
const checkboxEnabled = value[otherKey];
|
|
178
188
|
uploadedFilesMap[key] = {
|
|
179
189
|
uploadedFiles: value.uploadedFiles,
|
|
180
|
-
checkboxEnabled:
|
|
190
|
+
checkboxEnabled: checkboxEnabled,
|
|
181
191
|
};
|
|
182
192
|
}
|
|
183
193
|
}
|
|
184
|
-
this.uploadedFilesMap = uploadedFilesMap;
|
|
194
|
+
this.uploadedFilesMap = uploadedFilesMap;
|
|
185
195
|
});
|
|
186
196
|
}
|
|
197
|
+
hasUploadedFiles(value) {
|
|
198
|
+
return value && value.hasOwnProperty('uploadedFiles');
|
|
199
|
+
}
|
|
200
|
+
getOtherKey(value) {
|
|
201
|
+
const keys = Object.keys(value);
|
|
202
|
+
const filteredKeys = keys.filter(key => key !== 'uploadedFiles');
|
|
203
|
+
return filteredKeys.length > 0 ? filteredKeys[0] : '';
|
|
204
|
+
}
|
|
205
|
+
getCheckboxEnabled(value) {
|
|
206
|
+
return value.hasOwnProperty('checkboxEnabled') ? value.checkboxEnabled : false;
|
|
207
|
+
}
|
|
187
208
|
ngAfterViewInit() {
|
|
188
209
|
console.log("fxcomp", this.fxComponent);
|
|
189
210
|
const key = this.fxComponent?.fxData?.name;
|
|
@@ -214,7 +235,7 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
214
235
|
}));
|
|
215
236
|
this.uploadedFiles = [...this.uploadedFiles, ...formatted];
|
|
216
237
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
217
|
-
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
238
|
+
this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;
|
|
218
239
|
this.uploadFileControl.setValue(this.formattedData);
|
|
219
240
|
},
|
|
220
241
|
error: (err) => {
|
|
@@ -244,7 +265,7 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
244
265
|
};
|
|
245
266
|
this.uploadedFiles.push(newFile);
|
|
246
267
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
247
|
-
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
268
|
+
this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;
|
|
248
269
|
this.uploadFileControl.setValue(this.formattedData);
|
|
249
270
|
};
|
|
250
271
|
reader.readAsDataURL(file);
|
|
@@ -281,7 +302,7 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
281
302
|
...this.formattedData,
|
|
282
303
|
uploadedFiles: this.uploadedFiles,
|
|
283
304
|
deletedFiles: this.deletedFiles,
|
|
284
|
-
checkboxEnabled: this.checkboxEnabled
|
|
305
|
+
[this.setting('checkbox-label') || 'checkboxEnabled']: this.checkboxEnabled
|
|
285
306
|
};
|
|
286
307
|
// Set the value of the uploadFileControl
|
|
287
308
|
this.uploadFileControl.setValue(this.formattedData);
|
|
@@ -291,7 +312,7 @@ export class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
291
312
|
...this.formattedData,
|
|
292
313
|
uploadedFiles: this.uploadedFiles,
|
|
293
314
|
deletedFiles: this.deletedFiles,
|
|
294
|
-
checkboxEnabled: this.checkboxEnabled
|
|
315
|
+
[this.setting('checkbox-label') || 'checkboxEnabled']: this.checkboxEnabled
|
|
295
316
|
};
|
|
296
317
|
this.uploadFileControl.setValue(this.formattedData);
|
|
297
318
|
}
|
|
@@ -315,4 +336,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
315
336
|
type: ViewChild,
|
|
316
337
|
args: ['fxComponent']
|
|
317
338
|
}] } });
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXItY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy91cGxvYWRlci1jaGVja2JveC91cGxvYWRlci1jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3VwbG9hZGVyLWNoZWNrYm94L3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFvQyxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFFLGVBQWUsRUFBZ0Isa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEosT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFvQm5DLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxlQUFlO0lBY3ZDO0lBQStCO0lBYm5ELHVEQUF1RDtJQUM3QixXQUFXLENBQWU7SUFDN0MsaUJBQWlCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxhQUFhLEdBQWUsRUFBRSxDQUFD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ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGeEJhc2VDb21wb25lbnQsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFNlbGVjdFNldHRpbmcsIEZ4VmFsaWRhdGlvbiwgRnhWYWxpZGF0b3JTZXJ2aWNlLCBGeENvbXBvbmVudCB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2Z4LWJ1aWxkZXItd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBPYnNlcnZhYmxlLCBtYXAsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NH0gZnJvbSAndXVpZCc7XHJcblxyXG5pbnRlcmZhY2UgVXBsb2FkZWRGaWxlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGZpbGU6IGFueTtcclxuICByZXN1bHQ6IHN0cmluZztcclxuICBvcmlnaW5hbFVybDogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBVcGxvYWRlckRhdGEge1xyXG4gIHVwbG9hZGVkRmlsZXM6IFVwbG9hZGVkRmlsZVtdO1xyXG4gIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1cGxvYWRlci1jaGVja2JveCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGeENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWRlci1jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRlckNoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0ICwgQWZ0ZXJWaWV3SW5pdHtcclxuICAgLy8gcHVibGljIHVwbG9hZEZpbGVDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gICBAVmlld0NoaWxkKCdmeENvbXBvbmVudCcpIGZ4Q29tcG9uZW50ITogRnhDb21wb25lbnQ7XHJcbiAgIHB1YmxpYyB1cGxvYWRGaWxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICBwdWJsaWMgdXBsb2FkZWRGaWxlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICBwdWJsaWMgZm9ybWF0dGVkRGF0YTogYW55ID0ge1xyXG4gICAgIHVwbG9hZGVkRmlsZXM6IFtdLFxyXG4gICAgIGRlbGV0ZWRGaWxlczogW10sXHJcbiAgICAgY2hlY2tib3hFbmFibGVkOiBmYWxzZVxyXG4gICB9O1xyXG4gICB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHsgdXBsb2FkZWRGaWxlczogYW55W10sIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbiB9IH0gPSB7fTtcclxuICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuICAgcHVibGljIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHtcclxuICAgICBzdXBlcihjZHIpXHJcbiAgICAgdGhpcy5vbkluaXQuc3Vic2NyaWJlKChmeERhdGEpPT57XHJcbiAgICAgICB0aGlzLl9yZWdpc3Rlcih0aGlzLnVwbG9hZEZpbGVDb250cm9sKTtcclxuICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dGlkXCIsdGhpcy5nZXRDb250ZXh0QmFzZUlkKCkpO1xyXG4gICAgIH0pXHJcbiAgIH1cclxuICAvLyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgLy8gIGNvbnNvbGUubG9nKFwiZnhjb21wXCIsdGhpcy5meENvbXBvbmVudCk7XHJcbiAgLy8gIHRoaXMuZ2V0Q29udGV4dEJhc2VJZCgpO1xyXG4gIC8vIH1cclxuIFxyXG4gXHJcbiBcclxuIFxyXG4gXHJcbiAgIHVwbG9hZGVkSW1hZ2VzOiB7IFtrZXk6IHN0cmluZ106IHsgcmVzdWx0OiBzdHJpbmcsIGZpbGU6IEZpbGUgfCBudWxsIH1bXSB9ID0ge307XHJcbiAgIGRlbGV0ZWRGaWxlczogYW55W10gPSBbXTtcclxuICBcclxuIFxyXG4gIC8vICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAvLyAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAvLyAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAvLyAgICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgIFxyXG4gIC8vICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICAgXHJcbiAgLy8gICAgICAgIC8vIEV4dHJhY3QgdXBsb2FkZXIga2V5cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBVUkwgYXJyYXlzXHJcbiAgLy8gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICAvLyAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd1cGxvYWRlci1jaGVja2JveCcpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgLy8gICAgICAgICAgICB1cGxvYWRlZEZpbGVzTWFwW2tleV0gPSB2YWx1ZTtcclxuICAvLyAgICAgICAgICB9XHJcbiAgLy8gICAgICAgIH1cclxuICAgXHJcbiAgLy8gICAgICAgIGZvciAoY29uc3QgW3VwbG9hZGVyS2V5LCB1cmxzXSBvZiBPYmplY3QuZW50cmllcyh1cGxvYWRlZEZpbGVzTWFwKSkge1xyXG4gIC8vICAgICAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogYW55IH0+W10gPSBbXTtcclxuICAgXHJcbiAgLy8gICAgICAgICAgdXJscy5mb3JFYWNoKChvcmlnaW5hbFVybDphbnkpID0+IHtcclxuICAvLyAgICAgICAgICAgIGlmIChvcmlnaW5hbFVybCkge1xyXG4gIC8vICAgICAgICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5waXBlKFxyXG4gIC8vICAgICAgICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuICAvLyAgICAgICAgICAgICAgICAgIHJlc3VsdDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgLy8gZm9yIHByZXZpZXdcclxuICAvLyAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwgICAgICAgICAgLy8gcHJlc2VydmUgb3JpZ2luYWxcclxuICAvLyAgICAgICAgICAgICAgICB9KSlcclxuICAvLyAgICAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgICAgICAgaW1hZ2VGZXRjaGVzLnB1c2goaW1hZ2UkKTtcclxuICAvLyAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICB9KTtcclxuICAgXHJcbiAgLy8gICAgICAgICAgaWYgKGltYWdlRmV0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgICAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgICAgICAgIG5leHQ6IChpbWFnZURhdGEpID0+IHtcclxuICAvLyAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBpbWFnZURhdGEubWFwKGl0ZW0gPT4gKHtcclxuICAvLyAgICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAvLyAgICAgICAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgLy8gICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybDogaXRlbS5vcmlnaW5hbFVybCxcclxuICAvLyAgICAgICAgICAgICAgICAgIHJlc3VsdDogaXRlbS5yZXN1bHRcclxuICAvLyAgICAgICAgICAgICAgICB9KSk7XHJcbiAgIFxyXG4gIC8vICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgLy8gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgLy8gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gIC8vICAgICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gIC8vICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBpbWFnZXMgZm9yICR7dXBsb2FkZXJLZXl9OmAsIGVycik7XHJcbiAgLy8gICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICAgIH1cclxuICAvLyAgICAgICAgfVxyXG4gIC8vICAgICAgfSk7XHJcbiAgLy8gIH1cclxuICAgXHJcblxyXG4gICBcclxuIFxyXG4gICAvLyBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgIC8vICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgLy8gICBpZiAoaW5wdXQuZmlsZXMpIHtcclxuICAgLy8gICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpbnB1dD8uZmlsZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgIC8vICAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1tpXTtcclxuICAgLy8gICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgLy8gICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gICAvLyAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKHtcclxuICAgLy8gICAgICAgICAgIGZpbGU6IGZpbGUsXHJcbiAgIC8vICAgICAgICAgICByZXN1bHQ6IGUudGFyZ2V0Py5yZXN1bHQsXHJcbiAgIC8vICAgICAgICAgICBuYW1lOiBmaWxlPy5uYW1lLFxyXG4gICAvLyAgICAgICAgICAgaWQ6IHV1aWR2NCgpXHJcbiAgIC8vICAgICAgICAgfSlcclxuICAgLy8gICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgIC8vICAgICAgICAgY29uc29sZS5sb2codGhpcy51cGxvYWRGaWxlQ29udHJvbCk7XHJcbiAgIC8vICAgICAgIH1cclxuICAgLy8gICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgIC8vICAgICB9XHJcbiAgIC8vICAgfVxyXG4gICAvLyB9XHJcblxyXG4gIC8vICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIC8vIEV4dHJhY3QgdXBsb2FkZXIga2V5cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBVUkwgYXJyYXlzIGFuZCBzdG9yZSB0aGVtIGluIHVwbG9hZGVkRmlsZXNNYXBcclxuICAvLyAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gIC8vICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgLy8gICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuICBcclxuICAvLyAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICBcclxuICAvLyAgICAgICAvLyBFeHRyYWN0IHVwbG9hZGVyIGtleXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgVVJMIGFycmF5c1xyXG4gIC8vICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICAvLyAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3VwbG9hZGVyLWNoZWNrYm94JykgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAvLyAgICAgICAgICAgdXBsb2FkZWRGaWxlc01hcFtrZXldID0gdmFsdWU7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIFxyXG4gIC8vICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc01hcCA9IHVwbG9hZGVkRmlsZXNNYXA7IC8vIFN0b3JlIHRoZSBtYXAgZm9yIGxhdGVyIHVzZVxyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKFwiZnhjb21wXCIsIHRoaXMuZnhDb21wb25lbnQpO1xyXG5cclxuICAvLyAgIGNvbnN0IGtleSA9IHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8ubmFtZTtcclxuXHJcbiAgLy8gICBpZiAoa2V5ICYmIHRoaXMudXBsb2FkZWRGaWxlc01hcD8uW2tleV0pIHtcclxuICAvLyAgICAgY29uc3QgdXJscyA9IHRoaXMudXBsb2FkZWRGaWxlc01hcFtrZXldO1xyXG4gIC8vICAgICBjb25zdCBpbWFnZUZldGNoZXM6IE9ic2VydmFibGU8eyByZXN1bHQ6IHN0cmluZzsgb3JpZ2luYWxVcmw6IGFueSB9PltdID0gW107XHJcblxyXG4gIC8vICAgICB1cmxzLmZvckVhY2goKG9yaWdpbmFsVXJsOiBhbnkpID0+IHtcclxuICAvLyAgICAgICBpZiAob3JpZ2luYWxVcmwpIHtcclxuICAvLyAgICAgICAgIGNvbnN0IGltYWdlJCA9IHRoaXMuaHR0cC5nZXQob3JpZ2luYWxVcmw/Lm9yaWdpbmFsVXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuICAvLyAgICAgICAgICAgICByZXN1bHQ6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksXHJcbiAgLy8gICAgICAgICAgICAgb3JpZ2luYWxVcmw6IG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybFxyXG4gIC8vICAgICAgICAgICB9KSlcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcblxyXG4gIC8vICAgICBpZiAoaW1hZ2VGZXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgICBmb3JrSm9pbihpbWFnZUZldGNoZXMpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgICBuZXh0OiAoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGltYWdlRGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4gIC8vICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAvLyAgICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gIC8vICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBpdGVtLm9yaWdpbmFsVXJsLFxyXG4gIC8vICAgICAgICAgICAgIHJlc3VsdDogaXRlbS5yZXN1bHRcclxuICAvLyAgICAgICAgICAgfSkpO1xyXG5cclxuICAvLyAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gWy4uLnRoaXMudXBsb2FkZWRGaWxlcywgLi4uZm9ybWF0dGVkXTtcclxuICAvLyAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgLy8gICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAvLyAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gIC8vICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke2tleX06YCwgZXJyKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgY29uc29sZS5lcnJvcignTm8gZmlsZXMgZm91bmQgZm9yIHRoZSBwcm92aWRlZCBrZXk6Jywga2V5KTtcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICB0aGlzLmdldENvbnRleHRCYXNlSWQoKTtcclxuICAvLyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gRXh0cmFjdCB1cGxvYWRlciBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGZpbGUgb2JqZWN0cyBhbmQgc3RvcmUgdGhlbSBpbiB1cGxvYWRlZEZpbGVzTWFwXHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgXHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWFwIHRvIHN0b3JlIHRoZSBzdHJ1Y3R1cmUgb2YgdXBsb2FkZWQgZmlsZXMgYW5kIG90aGVyIGRhdGFcclxuICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzTWFwOiB7IFtrZXk6IHN0cmluZ106IHsgdXBsb2FkZWRGaWxlczogYW55W10sIGNoZWNrYm94RW5hYmxlZDogYm9vbGVhbiB9IH0gPSB7fTtcclxuICBcclxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHZhcmlhYmxlcyB0byBleHRyYWN0IHVwbG9hZGVyIGtleXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdXBsb2FkZWQgZmlsZXMgZGF0YVxyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcclxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgc3RhcnRzIHdpdGggJ3VwbG9hZGVyLWNoZWNrYm94JyBhbmQgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgJ3VwbG9hZGVkRmlsZXMnXHJcbiAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ3VwbG9hZGVyLWNoZWNrYm94JykgJiYgKHZhbHVlIGFzIFVwbG9hZGVyRGF0YSkudXBsb2FkZWRGaWxlcykge1xyXG4gICAgICAgICAgICB1cGxvYWRlZEZpbGVzTWFwW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgdXBsb2FkZWRGaWxlczogKHZhbHVlIGFzIFVwbG9hZGVyRGF0YSkudXBsb2FkZWRGaWxlcyxcclxuICAgICAgICAgICAgICBjaGVja2JveEVuYWJsZWQ6ICh2YWx1ZSBhcyBVcGxvYWRlckRhdGEpLmNoZWNrYm94RW5hYmxlZCB8fCBmYWxzZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNNYXAgPSB1cGxvYWRlZEZpbGVzTWFwOyAvLyBTdG9yZSB0aGUgbWFwIGZvciBsYXRlciB1c2VcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiZnhjb21wXCIsIHRoaXMuZnhDb21wb25lbnQpO1xyXG4gIFxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5uYW1lO1xyXG4gIFxyXG4gICAgaWYgKGtleSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNNYXA/LltrZXldKSB7XHJcbiAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXNNYXBba2V5XT8udXBsb2FkZWRGaWxlczsgXHJcbiAgICAgIHRoaXMuY2hlY2tib3hFbmFibGVkID0gdGhpcy51cGxvYWRlZEZpbGVzTWFwW2tleV0/LmNoZWNrYm94RW5hYmxlZDsgLy8gR2V0IHRoZSB1cGxvYWRlZEZpbGVzIGFycmF5XHJcbiAgICAgIGNvbnN0IGltYWdlRmV0Y2hlczogT2JzZXJ2YWJsZTx7IHJlc3VsdDogc3RyaW5nOyBvcmlnaW5hbFVybDogYW55IH0+W10gPSBbXTtcclxuICBcclxuICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB1cGxvYWRlZCBmaWxlcyBhbmQgZmV0Y2ggdGhlIGltYWdlc1xyXG4gICAgICB1cGxvYWRlZEZpbGVzLmZvckVhY2goKGZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gZmlsZT8ub3JpZ2luYWxVcmw7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gKHtcclxuICAgICAgICAgICAgICByZXN1bHQ6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksICAvLyBCbG9iIFVSTCBmb3IgcHJldmlld1xyXG4gICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBmaWxlPy5vcmlnaW5hbFVybCAgICAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIFVSTFxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpbWFnZUZldGNoZXMucHVzaChpbWFnZSQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgXHJcbiAgICAgIC8vIEZldGNoIGFsbCBpbWFnZXMgY29uY3VycmVudGx5IHVzaW5nIGZvcmtKb2luXHJcbiAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvcmtKb2luKGltYWdlRmV0Y2hlcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChpbWFnZURhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gaW1hZ2VEYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGl0ZW0ub3JpZ2luYWxVcmwsXHJcbiAgICAgICAgICAgICAgcmVzdWx0OiBpdGVtLnJlc3VsdFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgXHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlZERhdGEuY2hlY2tib3hFbmFibGVkID0gdGhpcy5jaGVja2JveEVuYWJsZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke2tleX06YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gZmlsZXMgZm91bmQgZm9yIHRoZSBwcm92aWRlZCBrZXk6Jywga2V5KTtcclxuICAgIH1cclxuICBcclxuICAgIHRoaXMuZ2V0Q29udGV4dEJhc2VJZCgpO1xyXG4gIH1cclxuICBcclxuIFxyXG4gICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgIGlmIChpbnB1dC5maWxlcykge1xyXG4gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbaV07XHJcbiAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiBcclxuICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSB7XHJcbiAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgICAgICAgb3JpZ2luYWxVcmw6IG51bGwsXHJcbiAgICAgICAgICAgICByZXN1bHQ6IGUudGFyZ2V0Py5yZXN1bHQsXHJcbiAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWVcclxuICAgICAgICAgICB9O1xyXG4gXHJcbiAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2gobmV3RmlsZSk7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLmNoZWNrYm94RW5hYmxlZCA9IHRoaXMuY2hlY2tib3hFbmFibGVkO1xyXG4gICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgICAgfTtcclxuIFxyXG4gICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgIH1cclxuIFxyXG4gXHJcbiAgIC8vIHB1YmxpYyBkZWxldGVGaWxlKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgLy8gICB0aGlzLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZT8uaWQgIT09IGlkKTtcclxuICAgLy8gfVxyXG4gXHJcbiAgIC8vIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAvLyAgIGNvbnN0IFtkZWxldGVkRmlsZV0gPSB0aGlzLnVwbG9hZGVkRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgXHJcbiAgIC8vICAgaWYgKGRlbGV0ZWRGaWxlKSB7XHJcbiAgIC8vICAgICB0aGlzLmRlbGV0ZWRGaWxlcy5wdXNoKGRlbGV0ZWRGaWxlKTtcclxuICAgLy8gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgLy8gICAgICAgLi4udGhpcy5mb3JtYXR0ZWREYXRhLFxyXG4gICAvLyAgICAgICB1cGxvYWRlZEZpbGVzOiBbLi4udGhpcy51cGxvYWRlZEZpbGVzXSxcclxuICAgLy8gICAgICAgZGVsZXRlZEZpbGVzOiBbLi4udGhpcy5kZWxldGVkRmlsZXNdXHJcbiAgIC8vICAgICB9O1xyXG4gICAvLyAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdHRlZERhdGEpO1xyXG4gICAvLyAgIH1cclxuICAgLy8gfVxyXG4gXHJcbiAgIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgIGNvbnN0IGRlbGV0ZWRGaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzPy5baW5kZXhdO1xyXG4gICAgIGlmICghZGVsZXRlZEZpbGUpIHJldHVybjtcclxuICAgXHJcbiAgICAgLy8gRW5zdXJlIGZvcm1hdHRlZERhdGEgZXhpc3RzIGFuZCBpbml0aWFsaXplIGlmIHVuZGVmaW5lZFxyXG4gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHRoaXMuZm9ybWF0dGVkRGF0YSB8fCB7IHVwbG9hZGVkRmlsZXM6IFtdLCBkZWxldGVkRmlsZXM6IFtdIH07XHJcbiAgIFxyXG4gICAgIC8vIEFkZCB0aGUgZGVsZXRlZCBmaWxlIHRvIHRoZSBkZWxldGVkRmlsZXMgYXJyYXlcclxuICAgICB0aGlzLmRlbGV0ZWRGaWxlcyA9IFsuLi50aGlzLmRlbGV0ZWRGaWxlcywgZGVsZXRlZEZpbGVdO1xyXG4gICBcclxuICAgICAvLyBSZW1vdmUgdGhlIGZpbGUgZnJvbSB1cGxvYWRlZEZpbGVzIHVzaW5nIGZpbHRlciBmb3IgaW1tdXRhYmlsaXR5XHJcbiAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICBcclxuICAgICAvLyBVcGRhdGUgZm9ybWF0dGVkRGF0YVxyXG4gICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgICAgIC4uLnRoaXMuZm9ybWF0dGVkRGF0YSxcclxuICAgICAgIHVwbG9hZGVkRmlsZXM6IHRoaXMudXBsb2FkZWRGaWxlcyxcclxuICAgICAgIGRlbGV0ZWRGaWxlczogdGhpcy5kZWxldGVkRmlsZXMsXHJcbiAgICAgICBjaGVja2JveEVuYWJsZWQgOnRoaXMuY2hlY2tib3hFbmFibGVkXHJcbiAgICAgfTtcclxuICAgXHJcbiAgICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgdXBsb2FkRmlsZUNvbnRyb2xcclxuICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgIH1cclxuICAgXHJcbiAgIG9uQ2hlY2tib3hDaGFuZ2UoKXtcclxuICAgIHRoaXMuZm9ybWF0dGVkRGF0YSA9IHtcclxuICAgICAgLi4udGhpcy5mb3JtYXR0ZWREYXRhLFxyXG4gICAgICB1cGxvYWRlZEZpbGVzOiB0aGlzLnVwbG9hZGVkRmlsZXMsXHJcbiAgICAgIGRlbGV0ZWRGaWxlczogdGhpcy5kZWxldGVkRmlsZXMsXHJcbiAgICAgIGNoZWNrYm94RW5hYmxlZDp0aGlzLmNoZWNrYm94RW5hYmxlZFxyXG4gICAgfTtcclxuICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgfVxyXG4gICBcclxuIFxyXG4gICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgIHJldHVybiBbXHJcbiAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAndXBsb2FkLXRleHQnLCAkdGl0bGU6ICdVcGxvYWQgVGV4dCcsIHZhbHVlOiAnVXBsb2FkIEZpbGUnfSksXHJcbiAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY2hlY2tib3gtbGFiZWwnLCAkdGl0bGU6ICdDaGVja2JveCBMYWJlbCcsIHZhbHVlOiAnJ30pLFxyXG4gICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7a2V5OiAnbXVsdGlwbGUtdXBsb2FkJywgJHRpdGxlOiAnTXVsdGlwbGUgVXBsb2FkJywgdmFsdWU6IGZhbHNlfSwgW3tvcHRpb246ICdFbmFibGUnLCB2YWx1ZTogdHJ1ZX0sIHtvcHRpb246ICdEaXNhYmxlJywgdmFsdWU6IGZhbHNlfV0pXHJcbiAgICAgXTtcclxuICAgfVxyXG4gXHJcbiAgIHByb3RlY3RlZCB2YWxpZGF0aW9ucygpOiBGeFZhbGlkYXRpb25bXSB7XHJcbiAgICAgcmV0dXJuIFtGeFZhbGlkYXRvclNlcnZpY2UucmVxdWlyZWRdO1xyXG4gICB9XHJcblxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIiAjZnhDb21wb25lbnQ+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXSA9IFwiY2hlY2tib3hFbmFibGVkXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2NoZWNrYm94LWxhYmVsJykgfX1cclxuICAgICAgPC9sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdXBsb2FkIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yIHAtMiBwYi0wIHJvdW5kZWQtc21cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjlcIiBoZWlnaHQ9XCIyOFwiIHZpZXdCb3g9XCIwIDAgMjkgMjhcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgZD1cIk0xNC4wMDEgMy4wMDE5NUMxMS41MzIyIDMuMDAxOTUgOS4xNjcyMiAzLjg2OTU2IDcuMjM2NDEgNS4zODQxNEw3LjIzNTk4IDQuNTk2OTVDNy4yMzU5OCA0LjUyNDczIDcuMjIxNzUgNC40NTMyMSA3LjE5NDExIDQuMzg2NDhDNy4xNjY0NyA0LjMxOTc1IDcuMTI1OTYgNC4yNTkxMiA3LjA3NDg5IDQuMjA4MDRDNy4wMjM4MSA0LjE1Njk3IDYuOTYzMTggNC4xMTY0NiA2Ljg5NjQ1IDQuMDg4ODJDNi44Mjk3MiA0LjA2MTE4IDYuNzU4MiA0LjA0Njk1IDYuNjg1OTggNC4wNDY5NUM2LjYxMzc1IDQuMDQ2OTUgNi41NDIyMyA0LjA2MTE4IDYuNDc1NSA0LjA4ODgyQzYuNDA4NzcgNC4xMTY0NiA2LjM0ODE0IDQuMTU2OTcgNi4yOTcwNyA0LjIwODA0QzYuMjQ1OTkgNC4yNTkxMiA2LjIwNTQ4IDQuMzE5NzUgNi4xNzc4NCA0LjM4NjQ4QzYuMTUwMiA0LjQ1MzIxIDYuMTM1OTggNC41MjQ3MyA2LjEzNTk4IDQuNTk2OTVMNi4xMzY0MiA2LjY4NjUyQzYuMTM2NDMgNi44MzIzOSA2LjE5NDM4IDYuOTcyMjggNi4yOTc1MiA3LjA3NTQyQzYuNDAwNjcgNy4xNzg1NiA2LjU0MDU1IDcuMjM2NTEgNi42ODY0MiA3LjIzNjUySDguNzc1OThDOC44NDgyIDcuMjM2NTIgOC45MTk3MiA3LjIyMjMgOC45ODY0NSA3LjE5NDY2QzkuMDUzMTggNy4xNjcwMiA5LjExMzgxIDcuMTI2NTEgOS4xNjQ4OSA3LjA3NTQzQzkuMjE1OTYgNy4wMjQzNiA5LjI1NjQ3IDYuOTYzNzMgOS4yODQxMSA2Ljg5N0M5LjMxMTc1IDYuODMwMjcgOS4zMjU5OCA2Ljc1ODc1IDkuMzI1OTggNi42ODY1MkM5LjMyNTk4IDYuNjE0MyA5LjMxMTc1IDYuNTQyNzggOS4yODQxMSA2LjQ3NjA1QzkuMjU2NDcgNi40MDkzMiA5LjIxNTk2IDYuMzQ4NjkgOS4xNjQ4OSA2LjI5NzYxQzkuMTEzODEgNi4yNDY1NCA5LjA1MzE4IDYuMjA2MDMgOC45ODY0NSA2LjE3ODM5QzguOTE5NzIgNi4xNTA3NSA4Ljg0ODIgNi4xMzY1MiA4Ljc3NTk4IDYuMTM2NTJIOC4wNTg0QzkuNzcwMiA0Ljg0Mzg3IDExLjgzOTkgNC4xMDE5NSAxNC4wMDEgNC4xMDE5NUMxOS40NzUxIDQuMTAxOTUgMjMuOTAxIDguNTI3ODIgMjMuOTAxIDE0LjAwMkMyMy45MDEgMTkuNDc2MSAxOS40NzUxIDIzLjkwMiAxNC4wMDEgMjMuOTAyQzguNTI2ODQgMjMuOTAyIDQuMTAwOTggMTkuNDc2MSA0LjEwMDk4IDE0LjAwMkM0LjEwMDk4IDEyLjYzODEgNC4zODI2MyAxMS4yODg4IDQuOTI4NTUgMTAuMDM4OUM0Ljk4NjkxIDkuOTA1MzIgNC45ODk4MiA5Ljc1Mzk5IDQuOTM2NjUgOS42MTgyMkM0Ljg4MzQ3IDkuNDgyNDYgNC43Nzg1NSA5LjM3MzM2IDQuNjQ0OTYgOS4zMTQ5MkM0LjU3ODc3IDkuMjg1OTYgNC41MDc1MyA5LjI3MDMyIDQuNDM1MyA5LjI2ODlDNC4zNjMwNiA5LjI2NzQ3IDQuMjkxMjYgOS4yODAzIDQuMjIzOTggOS4zMDY2M0M0LjE1NjcxIDkuMzMyOTcgNC4wOTUyOCA5LjM3MjMgNC4wNDMyMSA5LjQyMjM4QzMuOTkxMTQgOS40NzI0NyAzLjk0OTQ0IDkuNTMyMzIgMy45MjA1MSA5LjU5ODUyQzMuMzEzOTMgMTAuOTg3MiAzLjAwMDk4IDEyLjQ4NjYgMy4wMDA5OCAxNC4wMDJDMy4wMDA5OCAyMC4wNzA2IDcuOTMyMzYgMjUuMDAyIDE0LjAwMSAyNS4wMDJDMjAuMDY5NiAyNS4wMDIgMjUuMDAxIDIwLjA3MDYgMjUuMDAxIDE0LjAwMkMyNS4wMDEgNy45MzMzNCAyMC4wNjk2IDMuMDAxOTUgMTQuMDAxIDMuMDAxOTVaXCJcclxuICAgICAgICAgICAgICBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICBkPVwiTTEzLjk5ODggNi4xMzk2NUM5LjY2MTYgNi4xMzk2NSA2LjEzMzc5IDkuNjY3NDYgNi4xMzM3OSAxNC4wMDQ2QzYuMTMzNzkgMTguMzQxOCA5LjY2MTYgMjEuODY5NiAxMy45OTg4IDIxLjg2OTZDMTguMzM2IDIxLjg2OTYgMjEuODYzOCAxOC4zNDE4IDIxLjg2MzggMTQuMDA0NkMyMS44NjM4IDkuNjY3NDYgMTguMzM2IDYuMTM5NjUgMTMuOTk4OCA2LjEzOTY1Wk0xMy45OTg4IDguMjI5NjVDMTQuMTQ0NyA4LjIyOTY1IDE0LjI4NDYgOC4yODc1OSAxNC4zODc3IDguMzkwNzRDMTQuNDkwOCA4LjQ5Mzg4IDE0LjU0ODggOC42MzM3OCAxNC41NDg4IDguNzc5NjVWMTMuNzc2OUwxNy41MjI3IDE2Ljc1MDhDMTcuNjI1OCAxNi44NTM5IDE3LjY4MzcgMTYuOTkzOCAxNy42ODM3IDE3LjEzOTZDMTcuNjgzNyAxNy4yODU1IDE3LjYyNTggMTcuNDI1NCAxNy41MjI3IDE3LjUyODVDMTcuNDE5NSAxNy42MzE2IDE3LjI3OTYgMTcuNjg5NiAxNy4xMzM4IDE3LjY4OTZDMTYuOTg3OSAxNy42ODk2IDE2Ljg0ODEgMTcuNjMxNiAxNi43NDQ5IDE3LjUyODVMMTMuNjA5OSAxNC4zOTM1QzEzLjUwNjggMTQuMjkwNCAxMy40NDg4IDE0LjE1MDUgMTMuNDQ4OCAxNC4wMDQ2VjguNzc5NjVDMTMuNDQ4OCA4LjYzMzc4IDEzLjUwNjcgOC40OTM4OCAxMy42MDk5IDguMzkwNzRDMTMuNzEzIDguMjg3NTkgMTMuODUyOSA4LjIyOTY1IDEzLjk5ODggOC4yMjk2NVpcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCIjRjNBMDQxXCIgLz5cclxuICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyOC41NlwiIGhlaWdodD1cIjI4XCIgcng9XCIxLjUxNDc5XCIgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMTUuMDY4IDIyLjczOTFWMTcuNjcwOEgxOC40OTY4TDE0LjIxMDggMTIuNjAyNUw5LjkyNDggMTcuNjcwOEgxMy4zNTM2VjIyLjczOTFIOS4wNjc1OVYyMi42OTY5QzguOTIzNTggMjIuNzA1MyA4Ljc4NjQzIDIyLjczOTEgOC42Mzg5OSAyMi43MzkxQzYuOTMzOTEgMjIuNzM5MSA1LjI5ODY2IDIyLjA3MTcgNC4wOTI5OCAyMC44ODM1QzIuODg3MyAxOS42OTU0IDIuMjA5OTYgMTguMDg0IDIuMjA5OTYgMTYuNDAzN0MyLjIwOTk2IDEzLjE1MzIgNC43MDQ0MyAxMC41MDQyIDcuOTA1MjMgMTAuMTQxQzguMTg1ODUgOC42OTUzIDguOTY4OTIgNy4zOTExOCAxMC4xMTk3IDYuNDUyOTJDMTEuMjcwNiA1LjUxNDY1IDEyLjcxNzIgNS4wMDA4OSAxNC4yMTA4IDVDMTUuNzA0NyA1LjAwMDgyIDE3LjE1MTUgNS41MTQ1MiAxOC4zMDI2IDYuNDUyNzdDMTkuNDUzNyA3LjM5MTAxIDIwLjIzNzEgOC42OTUxNiAyMC41MTgxIDEwLjE0MUMyMy43MTg5IDEwLjUwNDIgMjYuMjEgMTMuMTUzMiAyNi4yMSAxNi40MDM3QzI2LjIxIDE4LjA4NCAyNS41MzI2IDE5LjY5NTQgMjQuMzI2OSAyMC44ODM1QzIzLjEyMTMgMjIuMDcxNyAyMS40ODYgMjIuNzM5MSAxOS43ODA5IDIyLjczOTFDMTkuNjM2OSAyMi43MzkxIDE5LjQ5ODEgMjIuNzA1MyAxOS4zNTIzIDIyLjY5NjlWMjIuNzM5MUgxNS4wNjhaXCJcclxuICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiIGNsYXNzPVwidGV4dC1iYXNlIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICB7eyBzZXR0aW5nKCd1cGxvYWQtdGV4dCcpIH19XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBbbXVsdGlwbGVdPVwic2V0dGluZygnbXVsdGlwbGUtdXBsb2FkJylcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiBoaWRkZW4gLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1saXN0IGZsZXggaXRlbXMtY2VudGVyIGdhcC00IGZsZXgtd3JhcFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1cGxvYWRlZEZpbGVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2FkZWRGaWxlczsgbGV0IGkgPSBpbmRleFwiIChjbGljayk9XCJkZWxldGVGaWxlKGkpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VfaWNvbiBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjgzN18yOTY4MylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hc2sgaWQ9XCJtYXNrMF82ODM3XzI5NjgzXCIgc3R5bGU9XCJtYXNrLXR5cGU6YWxwaGFcIiBtYXNrVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cIiNEOUQ5RDlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWFzaz5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBtYXNrPVwidXJsKCNtYXNrMF82ODM3XzI5NjgzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjIwNDUgOC45OTgxNUw1LjgxODAyIDYuNjExNjdMNi42MTM1MSA1LjgxNjE3TDkgOC4yMDI2NkwxMS4zODY1IDUuODE2MTdMMTIuMTgyIDYuNjExNjdMOS43OTU1IDguOTk4MTVMMTIuMTgyIDExLjM4NDZMMTEuMzg2NSAxMi4xODAxTDkgOS43OTM2NUw2LjYxMzUxIDEyLjE4MDFMNS44MTgwMiAxMS4zODQ2TDguMjA0NSA4Ljk5ODE1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzY4MzdfMjk2ODNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHJ4PVwiOVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImZpbGUtdGh1bWJuYWlsXCIgc3R5bGU9XCJib3JkZXItcmFkaXVzOiA0cHhcIiBbc3JjXT1cImZpbGU/LnJlc3VsdFwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICA8cD57e2ZpbGU/Lm5hbWV9fTwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZngtY29tcG9uZW50PiJdfQ==
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXItY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy91cGxvYWRlci1jaGVja2JveC91cGxvYWRlci1jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3VwbG9hZGVyLWNoZWNrYm94L3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFvQyxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFFLGVBQWUsRUFBZ0Isa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEosT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFvQm5DLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxlQUFlO0lBY3ZDO0lBQStCO0lBYm5ELHVEQUF1RDtJQUM3QixXQUFXLENBQWU7SUFDN0MsaUJBQWlCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxhQUFhLEdBQWUsRUFBRSxDQUFD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RixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBR1MsUUFBUTtRQUNoQixPQUFPO1lBQ0wsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBQyxDQUFDO1lBQ3ZGLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7WUFDbEYsSUFBSSxlQUFlLENBQUMsRUFBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1NBQzdKLENBQUM7SUFDSixDQUFDO0lBRVMsV0FBVztRQUNuQixPQUFPLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQzt3R0E5WFMseUJBQXlCOzRGQUF6Qix5QkFBeUIsZ05DM0J0Qyx1d01BaUVpQixpZ0JEMUNMLFlBQVksZ1FBQUUsV0FBVyw0RUFBRSxXQUFXLCtnQkFBRSxtQkFBbUI7OzRGQUkxRCx5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDOzRIQU0zQyxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRnhCYXNlQ29tcG9uZW50LCBGeFNldHRpbmcsIEZ4U3RyaW5nU2V0dGluZywgRnhTZWxlY3RTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSwgRnhDb21wb25lbnQgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgT2JzZXJ2YWJsZSwgbWFwLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjR9IGZyb20gJ3V1aWQnO1xyXG5cclxuaW50ZXJmYWNlIFVwbG9hZGVkRmlsZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBmaWxlOiBhbnk7XHJcbiAgcmVzdWx0OiBzdHJpbmc7XHJcbiAgb3JpZ2luYWxVcmw6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgVXBsb2FkZXJEYXRhIHtcclxuICB1cGxvYWRlZEZpbGVzOiBVcGxvYWRlZEZpbGVbXTtcclxuICBjaGVja2JveEVuYWJsZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndXBsb2FkZXItY2hlY2tib3gnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRnhDb21wb25lbnQsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkZXItY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91cGxvYWRlci1jaGVja2JveC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXBsb2FkZXJDaGVja2JveENvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCAsIEFmdGVyVmlld0luaXR7XHJcbiAgIC8vIHB1YmxpYyB1cGxvYWRGaWxlQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgQFZpZXdDaGlsZCgnZnhDb21wb25lbnQnKSBmeENvbXBvbmVudCE6IEZ4Q29tcG9uZW50O1xyXG4gICBwdWJsaWMgdXBsb2FkRmlsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAgcHVibGljIHVwbG9hZGVkRmlsZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgcHVibGljIGZvcm1hdHRlZERhdGE6IGFueSA9IHtcclxuICAgICB1cGxvYWRlZEZpbGVzOiBbXSxcclxuICAgICBkZWxldGVkRmlsZXM6IFtdLFxyXG4gICAgLy8gIGNoZWNrYm94RW5hYmxlZDogZmFsc2VcclxuICAgfTtcclxuICAgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiB7IHVwbG9hZGVkRmlsZXM6IGFueVtdLCBjaGVja2JveEVuYWJsZWQ6IGJvb2xlYW4gfSB9ID0ge307XHJcbiAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxCb29sZWFuPigpO1xyXG4gICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgIHB1YmxpYyBjaGVja2JveEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLHByaXZhdGUgZnhCdWlsZGVyV3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlKSB7XHJcbiAgICAgc3VwZXIoY2RyKVxyXG4gICAgIHRoaXMub25Jbml0LnN1YnNjcmliZSgoZnhEYXRhKT0+e1xyXG4gICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy51cGxvYWRGaWxlQ29udHJvbCk7XHJcbiAgICAgICBjb25zb2xlLmxvZyhcImNvbnRleHRpZFwiLHRoaXMuZ2V0Q29udGV4dEJhc2VJZCgpKTtcclxuICAgICB9KVxyXG4gICB9XHJcbiAgLy8gbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gIC8vICBjb25zb2xlLmxvZyhcImZ4Y29tcFwiLHRoaXMuZnhDb21wb25lbnQpO1xyXG4gIC8vICB0aGlzLmdldENvbnRleHRCYXNlSWQoKTtcclxuICAvLyB9XHJcbiBcclxuIFxyXG4gXHJcbiBcclxuIFxyXG4gICB1cGxvYWRlZEltYWdlczogeyBba2V5OiBzdHJpbmddOiB7IHJlc3VsdDogc3RyaW5nLCBmaWxlOiBGaWxlIHwgbnVsbCB9W10gfSA9IHt9O1xyXG4gICBkZWxldGVkRmlsZXM6IGFueVtdID0gW107XHJcbiAgXHJcbiBcclxuICAvLyAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgLy8gICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgLy8gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgLy8gICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG4gICBcclxuICAvLyAgICAgICAgY29uc3QgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XHJcbiAgIFxyXG4gIC8vICAgICAgICAvLyBFeHRyYWN0IHVwbG9hZGVyIGtleXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgVVJMIGFycmF5c1xyXG4gIC8vICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XHJcbiAgLy8gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygndXBsb2FkZXItY2hlY2tib3gnKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gIC8vICAgICAgICAgICAgdXBsb2FkZWRGaWxlc01hcFtrZXldID0gdmFsdWU7XHJcbiAgLy8gICAgICAgICAgfVxyXG4gIC8vICAgICAgICB9XHJcbiAgIFxyXG4gIC8vICAgICAgICBmb3IgKGNvbnN0IFt1cGxvYWRlcktleSwgdXJsc10gb2YgT2JqZWN0LmVudHJpZXModXBsb2FkZWRGaWxlc01hcCkpIHtcclxuICAvLyAgICAgICAgICBjb25zdCBpbWFnZUZldGNoZXM6IE9ic2VydmFibGU8eyByZXN1bHQ6IHN0cmluZzsgb3JpZ2luYWxVcmw6IGFueSB9PltdID0gW107XHJcbiAgIFxyXG4gIC8vICAgICAgICAgIHVybHMuZm9yRWFjaCgob3JpZ2luYWxVcmw6YW55KSA9PiB7XHJcbiAgLy8gICAgICAgICAgICBpZiAob3JpZ2luYWxVcmwpIHtcclxuICAvLyAgICAgICAgICAgICAgY29uc3QgaW1hZ2UkID0gdGhpcy5odHRwLmdldChvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkucGlwZShcclxuICAvLyAgICAgICAgICAgICAgICBtYXAoKGJsb2I6IEJsb2IpID0+ICh7XHJcbiAgLy8gICAgICAgICAgICAgICAgICByZXN1bHQ6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksIC8vIGZvciBwcmV2aWV3XHJcbiAgLy8gICAgICAgICAgICAgICAgICBvcmlnaW5hbFVybDogb3JpZ2luYWxVcmw/Lm9yaWdpbmFsVXJsICAgICAgICAgIC8vIHByZXNlcnZlIG9yaWdpbmFsXHJcbiAgLy8gICAgICAgICAgICAgICAgfSkpXHJcbiAgLy8gICAgICAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICAgICAgIGltYWdlRmV0Y2hlcy5wdXNoKGltYWdlJCk7XHJcbiAgLy8gICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgfSk7XHJcbiAgIFxyXG4gIC8vICAgICAgICAgIGlmIChpbWFnZUZldGNoZXMubGVuZ3RoID4gMCkge1xyXG4gIC8vICAgICAgICAgICAgZm9ya0pvaW4oaW1hZ2VGZXRjaGVzKS5zdWJzY3JpYmUoe1xyXG4gIC8vICAgICAgICAgICAgICBuZXh0OiAoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gaW1hZ2VEYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgLy8gICAgICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgLy8gICAgICAgICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gIC8vICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGl0ZW0ub3JpZ2luYWxVcmwsXHJcbiAgLy8gICAgICAgICAgICAgICAgICByZXN1bHQ6IGl0ZW0ucmVzdWx0XHJcbiAgLy8gICAgICAgICAgICAgICAgfSkpO1xyXG4gICBcclxuICAvLyAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbLi4udGhpcy51cGxvYWRlZEZpbGVzLCAuLi5mb3JtYXR0ZWRdO1xyXG4gIC8vICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4gIC8vICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAvLyAgICAgICAgICAgICAgfSxcclxuICAvLyAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAvLyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke3VwbG9hZGVyS2V5fTpgLCBlcnIpO1xyXG4gIC8vICAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgICB9KTtcclxuICAvLyAgICAgICAgICB9XHJcbiAgLy8gICAgICAgIH1cclxuICAvLyAgICAgIH0pO1xyXG4gIC8vICB9XHJcbiAgIFxyXG5cclxuICAgXHJcbiBcclxuICAgLy8gcHVibGljIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCkge1xyXG4gICAvLyAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgIC8vICAgaWYgKGlucHV0LmZpbGVzKSB7XHJcbiAgIC8vICAgICBmb3IobGV0IGkgPSAwOyBpIDwgaW5wdXQ/LmZpbGVzPy5sZW5ndGg7IGkrKykge1xyXG4gICAvLyAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbaV07XHJcbiAgIC8vICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgIC8vICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcclxuICAgLy8gICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaCh7XHJcbiAgIC8vICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAvLyAgICAgICAgICAgcmVzdWx0OiBlLnRhcmdldD8ucmVzdWx0LFxyXG4gICAvLyAgICAgICAgICAgbmFtZTogZmlsZT8ubmFtZSxcclxuICAgLy8gICAgICAgICAgIGlkOiB1dWlkdjQoKVxyXG4gICAvLyAgICAgICAgIH0pXHJcbiAgIC8vICAgICAgICAgdGhpcy51cGxvYWRGaWxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVwbG9hZGVkRmlsZXMpO1xyXG4gICAvLyAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudXBsb2FkRmlsZUNvbnRyb2wpO1xyXG4gICAvLyAgICAgICB9XHJcbiAgIC8vICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAvLyAgICAgfVxyXG4gICAvLyAgIH1cclxuICAgLy8gfVxyXG5cclxuICAvLyAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgLy8gICAvLyBFeHRyYWN0IHVwbG9hZGVyIGtleXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgVVJMIGFycmF5cyBhbmQgc3RvcmUgdGhlbSBpbiB1cGxvYWRlZEZpbGVzTWFwXHJcbiAgLy8gICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyRcclxuICAvLyAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC8vICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XHJcbiAgXHJcbiAgLy8gICAgICAgY29uc3QgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XHJcbiAgXHJcbiAgLy8gICAgICAgLy8gRXh0cmFjdCB1cGxvYWRlciBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIFVSTCBhcnJheXNcclxuICAvLyAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XHJcbiAgLy8gICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd1cGxvYWRlci1jaGVja2JveCcpICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgLy8gICAgICAgICAgIHVwbG9hZGVkRmlsZXNNYXBba2V5XSA9IHZhbHVlO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICBcclxuICAvLyAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNNYXAgPSB1cGxvYWRlZEZpbGVzTWFwOyAvLyBTdG9yZSB0aGUgbWFwIGZvciBsYXRlciB1c2VcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyhcImZ4Y29tcFwiLCB0aGlzLmZ4Q29tcG9uZW50KTtcclxuXHJcbiAgLy8gICBjb25zdCBrZXkgPSB0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/Lm5hbWU7XHJcblxyXG4gIC8vICAgaWYgKGtleSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNNYXA/LltrZXldKSB7XHJcbiAgLy8gICAgIGNvbnN0IHVybHMgPSB0aGlzLnVwbG9hZGVkRmlsZXNNYXBba2V5XTtcclxuICAvLyAgICAgY29uc3QgaW1hZ2VGZXRjaGVzOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmc7IG9yaWdpbmFsVXJsOiBhbnkgfT5bXSA9IFtdO1xyXG5cclxuICAvLyAgICAgdXJscy5mb3JFYWNoKChvcmlnaW5hbFVybDogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgaWYgKG9yaWdpbmFsVXJsKSB7XHJcbiAgLy8gICAgICAgICBjb25zdCBpbWFnZSQgPSB0aGlzLmh0dHAuZ2V0KG9yaWdpbmFsVXJsPy5vcmlnaW5hbFVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5waXBlKFxyXG4gIC8vICAgICAgICAgICBtYXAoKGJsb2I6IEJsb2IpID0+ICh7XHJcbiAgLy8gICAgICAgICAgICAgcmVzdWx0OiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLFxyXG4gIC8vICAgICAgICAgICAgIG9yaWdpbmFsVXJsOiBvcmlnaW5hbFVybD8ub3JpZ2luYWxVcmxcclxuICAvLyAgICAgICAgICAgfSkpXHJcbiAgLy8gICAgICAgICApO1xyXG4gIC8vICAgICAgICAgaW1hZ2VGZXRjaGVzLnB1c2goaW1hZ2UkKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pO1xyXG5cclxuICAvLyAgICAgaWYgKGltYWdlRmV0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgICAgZm9ya0pvaW4oaW1hZ2VGZXRjaGVzKS5zdWJzY3JpYmUoe1xyXG4gIC8vICAgICAgICAgbmV4dDogKGltYWdlRGF0YSkgPT4ge1xyXG4gIC8vICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBpbWFnZURhdGEubWFwKGl0ZW0gPT4gKHtcclxuICAvLyAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgLy8gICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAvLyAgICAgICAgICAgICBvcmlnaW5hbFVybDogaXRlbS5vcmlnaW5hbFVybCxcclxuICAvLyAgICAgICAgICAgICByZXN1bHQ6IGl0ZW0ucmVzdWx0XHJcbiAgLy8gICAgICAgICAgIH0pKTtcclxuXHJcbiAgLy8gICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFsuLi50aGlzLnVwbG9hZGVkRmlsZXMsIC4uLmZvcm1hdHRlZF07XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YS51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzO1xyXG4gIC8vICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgLy8gICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAvLyAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGZldGNoIGltYWdlcyBmb3IgJHtrZXl9OmAsIGVycik7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZpbGVzIGZvdW5kIGZvciB0aGUgcHJvdmlkZWQga2V5OicsIGtleSk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgdGhpcy5nZXRDb250ZXh0QmFzZUlkKCk7XHJcbiAgLy8gfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIEV4dHJhY3QgdXBsb2FkZXIga2V5cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBmaWxlIG9iamVjdHMgYW5kIHN0b3JlIHRoZW0gaW4gdXBsb2FkZWRGaWxlc01hcFxyXG4gICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG4gIFxyXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIG1hcCB0byBzdG9yZSB0aGUgc3RydWN0dXJlIG9mIHVwbG9hZGVkIGZpbGVzIGFuZCBvdGhlciBkYXRhXHJcbiAgICAgICAgY29uc3QgdXBsb2FkZWRGaWxlc01hcDogeyBba2V5OiBzdHJpbmddOiB7IHVwbG9hZGVkRmlsZXM6IGFueVtdLCBjaGVja2JveEVuYWJsZWQ6IGJvb2xlYW4gfSB9ID0ge307XHJcbiAgXHJcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB2YXJpYWJsZXMgdG8gZXh0cmFjdCB1cGxvYWRlciBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHVwbG9hZGVkIGZpbGVzIGRhdGFcclxuICAgICAgICAvLyBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XHJcbiAgICAgICAgLy8gICAvLyBDaGVjayBpZiB0aGUga2V5IHN0YXJ0cyB3aXRoICd1cGxvYWRlci1jaGVja2JveCcgYW5kIGlmIHZhbHVlIGlzIGFuIG9iamVjdCBjb250YWluaW5nICd1cGxvYWRlZEZpbGVzJ1xyXG4gICAgICAgIC8vICAgaWYgKGtleS5zdGFydHNXaXRoKCd1cGxvYWRlci1jaGVja2JveCcpICYmICh2YWx1ZSBhcyBVcGxvYWRlckRhdGEpLnVwbG9hZGVkRmlsZXMpIHtcclxuICAgICAgICAvLyAgICAgdXBsb2FkZWRGaWxlc01hcFtrZXldID0ge1xyXG4gICAgICAgIC8vICAgICAgIHVwbG9hZGVkRmlsZXM6ICh2YWx1ZSBhcyBVcGxvYWRlckRhdGEpLnVwbG9hZGVkRmlsZXMsXHJcbiAgICAgICAgLy8gICAgICAgY2hlY2tib3hFbmFibGVkOiAodmFsdWUgYXMgVXBsb2FkZXJEYXRhKS5jaGVja2JveEVuYWJsZWQgfHwgZmFsc2VcclxuICAgICAgICAvLyAgICAgfTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykgYXMgW3N0cmluZywgYW55XVtdKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5oYXNVcGxvYWRlZEZpbGVzKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBvdGhlcktleSA9IHRoaXMuZ2V0T3RoZXJLZXkodmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGVja2JveEVuYWJsZWQgPSB2YWx1ZVtvdGhlcktleV07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHVwbG9hZGVkRmlsZXNNYXBba2V5XSA9IHtcclxuICAgICAgICAgICAgICB1cGxvYWRlZEZpbGVzOiB2YWx1ZS51cGxvYWRlZEZpbGVzLFxyXG4gICAgICAgICAgICAgIGNoZWNrYm94RW5hYmxlZDogY2hlY2tib3hFbmFibGVkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICBcclxuICBcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNNYXAgPSB1cGxvYWRlZEZpbGVzTWFwO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzVXBsb2FkZWRGaWxlcyh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ3VwbG9hZGVkRmlsZXMnKTtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBnZXRPdGhlcktleSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICBcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XHJcbiAgICBcclxuICAgXHJcbiAgICBjb25zdCBmaWx0ZXJlZEtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAndXBsb2FkZWRGaWxlcycpO1xyXG4gIFxyXG4gICBcclxuICAgIHJldHVybiBmaWx0ZXJlZEtleXMubGVuZ3RoID4gMCA/IGZpbHRlcmVkS2V5c1swXSA6ICcnO1xyXG4gIH1cclxuICBcclxuIFxyXG4gIHByaXZhdGUgZ2V0Q2hlY2tib3hFbmFibGVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnY2hlY2tib3hFbmFibGVkJykgPyB2YWx1ZS5jaGVja2JveEVuYWJsZWQgOiBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJmeGNvbXBcIiwgdGhpcy5meENvbXBvbmVudCk7XHJcbiAgXHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/Lm5hbWU7XHJcbiAgXHJcbiAgICBpZiAoa2V5ICYmIHRoaXMudXBsb2FkZWRGaWxlc01hcD8uW2tleV0pIHtcclxuICAgICAgY29uc3QgdXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlc01hcFtrZXldPy51cGxvYWRlZEZpbGVzOyBcclxuICAgICAgdGhpcy5jaGVja2JveEVuYWJsZWQgPSB0aGlzLnVwbG9hZGVkRmlsZXNNYXBba2V5XT8uY2hlY2tib3hFbmFibGVkOyAvLyBHZXQgdGhlIHVwbG9hZGVkRmlsZXMgYXJyYXlcclxuICAgICAgY29uc3QgaW1hZ2VGZXRjaGVzOiBPYnNlcnZhYmxlPHsgcmVzdWx0OiBzdHJpbmc7IG9yaWdpbmFsVXJsOiBhbnkgfT5bXSA9IFtdO1xyXG4gIFxyXG4gICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHVwbG9hZGVkIGZpbGVzIGFuZCBmZXRjaCB0aGUgaW1hZ2VzXHJcbiAgICAgIHVwbG9hZGVkRmlsZXMuZm9yRWFjaCgoZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxVcmwgPSBmaWxlPy5vcmlnaW5hbFVybDtcclxuICAgICAgICBpZiAob3JpZ2luYWxVcmwpIHtcclxuICAgICAgICAgIGNvbnN0IGltYWdlJCA9IHRoaXMuaHR0cC5nZXQob3JpZ2luYWxVcmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChibG9iOiBCbG9iKSA9PiAoe1xyXG4gICAgICAgICAgICAgIHJlc3VsdDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgIC8vIEJsb2IgVVJMIGZvciBwcmV2aWV3XHJcbiAgICAgICAgICAgICAgb3JpZ2luYWxVcmw6IGZpbGU/Lm9yaWdpbmFsVXJsICAgICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgVVJMXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGltYWdlRmV0Y2hlcy5wdXNoKGltYWdlJCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICBcclxuICAgICAgLy8gRmV0Y2ggYWxsIGltYWdlcyBjb25jdXJyZW50bHkgdXNpbmcgZm9ya0pvaW5cclxuICAgICAgaWYgKGltYWdlRmV0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9ya0pvaW4oaW1hZ2VGZXRjaGVzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGltYWdlRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBpbWFnZURhdGEubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgICAgICAgICBvcmlnaW5hbFVybDogaXRlbS5vcmlnaW5hbFVybCxcclxuICAgICAgICAgICAgICByZXN1bHQ6IGl0ZW0ucmVzdWx0XHJcbiAgICAgICAgICAgIH0pKTtcclxuICBcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gWy4uLnRoaXMudXBsb2FkZWRGaWxlcywgLi4uZm9ybWF0dGVkXTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YVt0aGlzLnNldHRpbmcoJ2NoZWNrYm94LWxhYmVsJykgfHwgJ2NoZWNrYm94RW5hYmxlZCddID0gdGhpcy5jaGVja2JveEVuYWJsZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2VzIGZvciAke2tleX06YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gZmlsZXMgZm91bmQgZm9yIHRoZSBwcm92aWRlZCBrZXk6Jywga2V5KTtcclxuICAgIH1cclxuICBcclxuICAgIHRoaXMuZ2V0Q29udGV4dEJhc2VJZCgpO1xyXG4gIH1cclxuICBcclxuIFxyXG4gICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgIGlmIChpbnB1dC5maWxlcykge1xyXG4gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbaV07XHJcbiAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiBcclxuICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xyXG4gICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSB7XHJcbiAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgICAgICAgb3JpZ2luYWxVcmw6IG51bGwsXHJcbiAgICAgICAgICAgICByZXN1bHQ6IGUudGFyZ2V0Py5yZXN1bHQsXHJcbiAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWVcclxuICAgICAgICAgICB9O1xyXG4gXHJcbiAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2gobmV3RmlsZSk7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhLnVwbG9hZGVkRmlsZXMgPSB0aGlzLnVwbG9hZGVkRmlsZXM7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhW3RoaXMuc2V0dGluZygnY2hlY2tib3gtbGFiZWwnKSB8fCAnY2hlY2tib3hFbmFibGVkJ10gPSB0aGlzLmNoZWNrYm94RW5hYmxlZDtcclxuICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgICAgICAgIH07XHJcbiBcclxuICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICB9XHJcbiBcclxuIFxyXG4gICAvLyBwdWJsaWMgZGVsZXRlRmlsZShpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgIC8vICAgdGhpcy51cGxvYWRlZEZpbGVzID0gdGhpcy51cGxvYWRlZEZpbGVzLmZpbHRlcihmaWxlID0+IGZpbGU/LmlkICE9PSBpZCk7XHJcbiAgIC8vIH1cclxuIFxyXG4gICAvLyBkZWxldGVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgLy8gICBjb25zdCBbZGVsZXRlZEZpbGVdID0gdGhpcy51cGxvYWRlZEZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgIFxyXG4gICAvLyAgIGlmIChkZWxldGVkRmlsZSkge1xyXG4gICAvLyAgICAgdGhpcy5kZWxldGVkRmlsZXMucHVzaChkZWxldGVkRmlsZSk7XHJcbiAgIC8vICAgICB0aGlzLmZvcm1hdHRlZERhdGEgPSB7XHJcbiAgIC8vICAgICAgIC4uLnRoaXMuZm9ybWF0dGVkRGF0YSxcclxuICAgLy8gICAgICAgdXBsb2FkZWRGaWxlczogWy4uLnRoaXMudXBsb2FkZWRGaWxlc10sXHJcbiAgIC8vICAgICAgIGRlbGV0ZWRGaWxlczogWy4uLnRoaXMuZGVsZXRlZEZpbGVzXVxyXG4gICAvLyAgICAgfTtcclxuICAgLy8gICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgLy8gICB9XHJcbiAgIC8vIH1cclxuIFxyXG4gICBkZWxldGVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICBjb25zdCBkZWxldGVkRmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlcz8uW2luZGV4XTtcclxuICAgICBpZiAoIWRlbGV0ZWRGaWxlKSByZXR1cm47XHJcbiAgIFxyXG4gICAgIC8vIEVuc3VyZSBmb3JtYXR0ZWREYXRhIGV4aXN0cyBhbmQgaW5pdGlhbGl6ZSBpZiB1bmRlZmluZWRcclxuICAgICB0aGlzLmZvcm1hdHRlZERhdGEgPSB0aGlzLmZvcm1hdHRlZERhdGEgfHwgeyB1cGxvYWRlZEZpbGVzOiBbXSwgZGVsZXRlZEZpbGVzOiBbXSB9O1xyXG4gICBcclxuICAgICAvLyBBZGQgdGhlIGRlbGV0ZWQgZmlsZSB0byB0aGUgZGVsZXRlZEZpbGVzIGFycmF5XHJcbiAgICAgdGhpcy5kZWxldGVkRmlsZXMgPSBbLi4udGhpcy5kZWxldGVkRmlsZXMsIGRlbGV0ZWRGaWxlXTtcclxuICAgXHJcbiAgICAgLy8gUmVtb3ZlIHRoZSBmaWxlIGZyb20gdXBsb2FkZWRGaWxlcyB1c2luZyBmaWx0ZXIgZm9yIGltbXV0YWJpbGl0eVxyXG4gICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IHRoaXMudXBsb2FkZWRGaWxlcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcclxuICAgXHJcbiAgICAgLy8gVXBkYXRlIGZvcm1hdHRlZERhdGFcclxuICAgICB0aGlzLmZvcm1hdHRlZERhdGEgPSB7XHJcbiAgICAgICAuLi50aGlzLmZvcm1hdHRlZERhdGEsXHJcbiAgICAgICB1cGxvYWRlZEZpbGVzOiB0aGlzLnVwbG9hZGVkRmlsZXMsXHJcbiAgICAgICBkZWxldGVkRmlsZXM6IHRoaXMuZGVsZXRlZEZpbGVzLFxyXG4gICAgICAgW3RoaXMuc2V0dGluZygnY2hlY2tib3gtbGFiZWwnKSB8fCAnY2hlY2tib3hFbmFibGVkJ106dGhpcy5jaGVja2JveEVuYWJsZWRcclxuICAgICB9O1xyXG4gICBcclxuICAgICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSB1cGxvYWRGaWxlQ29udHJvbFxyXG4gICAgIHRoaXMudXBsb2FkRmlsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtYXR0ZWREYXRhKTtcclxuICAgfVxyXG4gICBcclxuICAgb25DaGVja2JveENoYW5nZSgpe1xyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRhID0ge1xyXG4gICAgICAuLi50aGlzLmZvcm1hdHRlZERhdGEsXHJcbiAgICAgIHVwbG9hZGVkRmlsZXM6IHRoaXMudXBsb2FkZWRGaWxlcyxcclxuICAgICAgZGVsZXRlZEZpbGVzOiB0aGlzLmRlbGV0ZWRGaWxlcyxcclxuICAgICAgW3RoaXMuc2V0dGluZygnY2hlY2tib3gtbGFiZWwnKSB8fCAnY2hlY2tib3hFbmFibGVkJ106dGhpcy5jaGVja2JveEVuYWJsZWRcclxuICAgIH07XHJcbiAgICB0aGlzLnVwbG9hZEZpbGVDb250cm9sLnNldFZhbHVlKHRoaXMuZm9ybWF0dGVkRGF0YSk7XHJcbiAgIH1cclxuICAgXHJcbiBcclxuICAgcHJvdGVjdGVkIHNldHRpbmdzKCk6IEZ4U2V0dGluZ1tdIHtcclxuICAgICByZXR1cm4gW1xyXG4gICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3VwbG9hZC10ZXh0JywgJHRpdGxlOiAnVXBsb2FkIFRleHQnLCB2YWx1ZTogJ1VwbG9hZCBGaWxlJ30pLFxyXG4gICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NoZWNrYm94LWxhYmVsJywgJHRpdGxlOiAnQ2hlY2tib3ggTGFiZWwnLCB2YWx1ZTogJyd9KSxcclxuICAgICAgIG5ldyBGeFNlbGVjdFNldHRpbmcoe2tleTogJ211bHRpcGxlLXVwbG9hZCcsICR0aXRsZTogJ011bHRpcGxlIFVwbG9hZCcsIHZhbHVlOiBmYWxzZX0sIFt7b3B0aW9uOiAnRW5hYmxlJywgdmFsdWU6IHRydWV9LCB7b3B0aW9uOiAnRGlzYWJsZScsIHZhbHVlOiBmYWxzZX1dKVxyXG4gICAgIF07XHJcbiAgIH1cclxuIFxyXG4gICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICAgfVxyXG5cclxufVxyXG4iLCI8ZngtY29tcG9uZW50IFtmeERhdGFdPVwiZnhEYXRhXCIgI2Z4Q29tcG9uZW50PlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV0gPSBcImNoZWNrYm94RW5hYmxlZFwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICB7eyBzZXR0aW5nKCdjaGVja2JveC1sYWJlbCcpIH19XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXVwbG9hZCBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgcGItMCByb3VuZGVkLXNtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI5XCIgaGVpZ2h0PVwiMjhcIiB2aWV3Qm94PVwiMCAwIDI5IDI4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgIGQ9XCJNMTQuMDAxIDMuMDAxOTVDMTEuNTMyMiAzLjAwMTk1IDkuMTY3MjIgMy44Njk1NiA3LjIzNjQxIDUuMzg0MTRMNy4yMzU5OCA0LjU5Njk1QzcuMjM1OTggNC41MjQ3MyA3LjIyMTc1IDQuNDUzMjEgNy4xOTQxMSA0LjM4NjQ4QzcuMTY2NDcgNC4zMTk3NSA3LjEyNTk2IDQuMjU5MTIgNy4wNzQ4OSA0LjIwODA0QzcuMDIzODEgNC4xNTY5NyA2Ljk2MzE4IDQuMTE2NDYgNi44OTY0NSA0LjA4ODgyQzYuODI5NzIgNC4wNjExOCA2Ljc1ODIgNC4wNDY5NSA2LjY4NTk4IDQuMDQ2OTVDNi42MTM3NSA0LjA0Njk1IDYuNTQyMjMgNC4wNjExOCA2LjQ3NTUgNC4wODg4MkM2LjQwODc3IDQuMTE2NDYgNi4zNDgxNCA0LjE1Njk3IDYuMjk3MDcgNC4yMDgwNEM2LjI0NTk5IDQuMjU5MTIgNi4yMDU0OCA0LjMxOTc1IDYuMTc3ODQgNC4zODY0OEM2LjE1MDIgNC40NTMyMSA2LjEzNTk4IDQuNTI0NzMgNi4xMzU5OCA0LjU5Njk1TDYuMTM2NDIgNi42ODY1MkM2LjEzNjQzIDYuODMyMzkgNi4xOTQzOCA2Ljk3MjI4IDYuMjk3NTIgNy4wNzU0MkM2LjQwMDY3IDcuMTc4NTYgNi41NDA1NSA3LjIzNjUxIDYuNjg2NDIgNy4yMzY1Mkg4Ljc3NTk4QzguODQ4MiA3LjIzNjUyIDguOTE5NzIgNy4yMjIzIDguOTg2NDUgNy4xOTQ2NkM5LjA1MzE4IDcuMTY3MDIgOS4xMTM4MSA3LjEyNjUxIDkuMTY0ODkgNy4wNzU0M0M5LjIxNTk2IDcuMDI0MzYgOS4yNTY0NyA2Ljk2MzczIDkuMjg0MTEgNi44OTdDOS4zMTE3NSA2LjgzMDI3IDkuMzI1OTggNi43NTg3NSA5LjMyNTk4IDYuNjg2NTJDOS4zMjU5OCA2LjYxNDMgOS4zMTE3NSA2LjU0Mjc4IDkuMjg0MTEgNi40NzYwNUM5LjI1NjQ3IDYuNDA5MzIgOS4yMTU5NiA2LjM0ODY5IDkuMTY0ODkgNi4yOTc2MUM5LjExMzgxIDYuMjQ2NTQgOS4wNTMxOCA2LjIwNjAzIDguOTg2NDUgNi4xNzgzOUM4LjkxOTcyIDYuMTUwNzUgOC44NDgyIDYuMTM2NTIgOC43NzU5OCA2LjEzNjUySDguMDU4NEM5Ljc3MDIgNC44NDM4NyAxMS44Mzk5IDQuMTAxOTUgMTQuMDAxIDQuMTAxOTVDMTkuNDc1MSA0LjEwMTk1IDIzLjkwMSA4LjUyNzgyIDIzLjkwMSAxNC4wMDJDMjMuOTAxIDE5LjQ3NjEgMTkuNDc1MSAyMy45MDIgMTQuMDAxIDIzLjkwMkM4LjUyNjg0IDIzLjkwMiA0LjEwMDk4IDE5LjQ3NjEgNC4xMDA5OCAxNC4wMDJDNC4xMDA5OCAxMi42MzgxIDQuMzgyNjMgMTEuMjg4OCA0LjkyODU1IDEwLjAzODlDNC45ODY5MSA5LjkwNTMyIDQuOTg5ODIgOS43NTM5OSA0LjkzNjY1IDkuNjE4MjJDNC44ODM0NyA5LjQ4MjQ2IDQuNzc4NTUgOS4zNzMzNiA0LjY0NDk2IDkuMzE0OTJDNC41Nzg3NyA5LjI4NTk2IDQuNTA3NTMgOS4yNzAzMiA0LjQzNTMgOS4yNjg5QzQuMzYzMDYgOS4yNjc0NyA0LjI5MTI2IDkuMjgwMyA0LjIyMzk4IDkuMzA2NjNDNC4xNTY3MSA5LjMzMjk3IDQuMDk1MjggOS4zNzIzIDQuMDQzMjEgOS40MjIzOEMzLjk5MTE0IDkuNDcyNDcgMy45NDk0NCA5LjUzMjMyIDMuOTIwNTEgOS41OTg1MkMzLjMxMzkzIDEwLjk4NzIgMy4wMDA5OCAxMi40ODY2IDMuMDAwOTggMTQuMDAyQzMuMDAwOTggMjAuMDcwNiA3LjkzMjM2IDI1LjAwMiAxNC4wMDEgMjUuMDAyQzIwLjA2OTYgMjUuMDAyIDI1LjAwMSAyMC4wNzA2IDI1LjAwMSAxNC4wMDJDMjUuMDAxIDcuOTMzMzQgMjAuMDY5NiAzLjAwMTk1IDE0LjAwMSAzLjAwMTk1WlwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgZD1cIk0xMy45OTg4IDYuMTM5NjVDOS42NjE2IDYuMTM5NjUgNi4xMzM3OSA5LjY2NzQ2IDYuMTMzNzkgMTQuMDA0NkM2LjEzMzc5IDE4LjM0MTggOS42NjE2IDIxLjg2OTYgMTMuOTk4OCAyMS44Njk2QzE4LjMzNiAyMS44Njk2IDIxLjg2MzggMTguMzQxOCAyMS44NjM4IDE0LjAwNDZDMjEuODYzOCA5LjY2NzQ2IDE4LjMzNiA2LjEzOTY1IDEzLjk5ODggNi4xMzk2NVpNMTMuOTk4OCA4LjIyOTY1QzE0LjE0NDcgOC4yMjk2NSAxNC4yODQ2IDguMjg3NTkgMTQuMzg3NyA4LjM5MDc0QzE0LjQ5MDggOC40OTM4OCAxNC41NDg4IDguNjMzNzggMTQuNTQ4OCA4Ljc3OTY1VjEzLjc3NjlMMTcuNTIyNyAxNi43NTA4QzE3LjYyNTggMTYuODUzOSAxNy42ODM3IDE2Ljk5MzggMTcuNjgzNyAxNy4xMzk2QzE3LjY4MzcgMTcuMjg1NSAxNy42MjU4IDE3LjQyNTQgMTcuNTIyNyAxNy41Mjg1QzE3LjQxOTUgMTcuNjMxNiAxNy4yNzk2IDE3LjY4OTYgMTcuMTMzOCAxNy42ODk2QzE2Ljk4NzkgMTcuNjg5NiAxNi44NDgxIDE3LjYzMTYgMTYuNzQ0OSAxNy41Mjg1TDEzLjYwOTkgMTQuMzkzNUMxMy41MDY4IDE0LjI5MDQgMTMuNDQ4OCAxNC4xNTA1IDEzLjQ0ODggMTQuMDA0NlY4Ljc3OTY1QzEzLjQ0ODggOC42MzM3OCAxMy41MDY3IDguNDkzODggMTMuNjA5OSA4LjM5MDc0QzEzLjcxMyA4LjI4NzU5IDEzLjg1MjkgOC4yMjk2NSAxMy45OTg4IDguMjI5NjVaXCJcclxuICAgICAgICAgICAgICBmaWxsPVwiI0YzQTA0MVwiIC8+XHJcbiAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjguNTZcIiBoZWlnaHQ9XCIyOFwiIHJ4PVwiMS41MTQ3OVwiIGZpbGw9XCIjRjNBMDQxXCIgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTE1LjA2OCAyMi43MzkxVjE3LjY3MDhIMTguNDk2OEwxNC4yMTA4IDEyLjYwMjVMOS45MjQ4IDE3LjY3MDhIMTMuMzUzNlYyMi43MzkxSDkuMDY3NTlWMjIuNjk2OUM4LjkyMzU4IDIyLjcwNTMgOC43ODY0MyAyMi43MzkxIDguNjM4OTkgMjIuNzM5MUM2LjkzMzkxIDIyLjczOTEgNS4yOTg2NiAyMi4wNzE3IDQuMDkyOTggMjAuODgzNUMyLjg4NzMgMTkuNjk1NCAyLjIwOTk2IDE4LjA4NCAyLjIwOTk2IDE2LjQwMzdDMi4yMDk5NiAxMy4xNTMyIDQuNzA0NDMgMTAuNTA0MiA3LjkwNTIzIDEwLjE0MUM4LjE4NTg1IDguNjk1MyA4Ljk2ODkyIDcuMzkxMTggMTAuMTE5NyA2LjQ1MjkyQzExLjI3MDYgNS41MTQ2NSAxMi43MTcyIDUuMDAwODkgMTQuMjEwOCA1QzE1LjcwNDcgNS4wMDA4MiAxNy4xNTE1IDUuNTE0NTIgMTguMzAyNiA2LjQ1Mjc3QzE5LjQ1MzcgNy4zOTEwMSAyMC4yMzcxIDguNjk1MTYgMjAuNTE4MSAxMC4xNDFDMjMuNzE4OSAxMC41MDQyIDI2LjIxIDEzLjE1MzIgMjYuMjEgMTYuNDAzN0MyNi4yMSAxOC4wODQgMjUuNTMyNiAxOS42OTU0IDI0LjMyNjkgMjAuODgzNUMyMy4xMjEzIDIyLjA3MTcgMjEuNDg2IDIyLjczOTEgMTkuNzgwOSAyMi43MzkxQzE5LjYzNjkgMjIuNzM5MSAxOS40OTgxIDIyLjcwNTMgMTkuMzUyMyAyMi42OTY5VjIyLjczOTFIMTUuMDY4WlwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cInRleHQtYmFzZSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAge3sgc2V0dGluZygndXBsb2FkLXRleHQnKSB9fVxyXG4gICAgICAgIDwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgW211bHRpcGxlXT1cInNldHRpbmcoJ211bHRpcGxlLXVwbG9hZCcpXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgaGlkZGVuIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtbGlzdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBmbGV4LXdyYXBcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXBsb2FkZWRGaWxlcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZGVkRmlsZXM7IGxldCBpID0gaW5kZXhcIiAoY2xpY2spPVwiZGVsZXRlRmlsZShpKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlX2ljb24gY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzY4MzdfMjk2ODMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgcng9XCI5XCIgZmlsbD1cIiNGM0EwNDFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXNrIGlkPVwibWFzazBfNjgzN18yOTY4M1wiIHN0eWxlPVwibWFzay10eXBlOmFscGhhXCIgbWFza1VuaXRzPVwidXNlclNwYWNlT25Vc2VcIiB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCIjRDlEOUQ5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L21hc2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPGcgbWFzaz1cInVybCgjbWFzazBfNjgzN18yOTY4MylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4yMDQ1IDguOTk4MTVMNS44MTgwMiA2LjYxMTY3TDYuNjEzNTEgNS44MTYxN0w5IDguMjAyNjZMMTEuMzg2NSA1LjgxNjE3TDEyLjE4MiA2LjYxMTY3TDkuNzk1NSA4Ljk5ODE1TDEyLjE4MiAxMS4zODQ2TDExLjM4NjUgMTIuMTgwMUw5IDkuNzkzNjVMNi42MTM1MSAxMi4xODAxTDUuODE4MDIgMTEuMzg0Nkw4LjIwNDUgOC45OTgxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82ODM3XzI5NjgzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjlcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJmaWxlLXRodW1ibmFpbFwiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogNHB4XCIgW3NyY109XCJmaWxlPy5yZXN1bHRcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgPHA+e3tmaWxlPy5uYW1lfX08L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Z4LWNvbXBvbmVudD4iXX0=
|
|
@@ -1270,7 +1270,7 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1270
1270
|
formattedData = {
|
|
1271
1271
|
uploadedFiles: [],
|
|
1272
1272
|
deletedFiles: [],
|
|
1273
|
-
checkboxEnabled: false
|
|
1273
|
+
// checkboxEnabled: false
|
|
1274
1274
|
};
|
|
1275
1275
|
uploadedFilesMap = {};
|
|
1276
1276
|
destroy$ = new Subject();
|
|
@@ -1423,18 +1423,39 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1423
1423
|
// Initialize the map to store the structure of uploaded files and other data
|
|
1424
1424
|
const uploadedFilesMap = {};
|
|
1425
1425
|
// Iterate over the variables to extract uploader keys and their corresponding uploaded files data
|
|
1426
|
+
// for (const [key, value] of Object.entries(variables)) {
|
|
1427
|
+
// // Check if the key starts with 'uploader-checkbox' and if value is an object containing 'uploadedFiles'
|
|
1428
|
+
// if (key.startsWith('uploader-checkbox') && (value as UploaderData).uploadedFiles) {
|
|
1429
|
+
// uploadedFilesMap[key] = {
|
|
1430
|
+
// uploadedFiles: (value as UploaderData).uploadedFiles,
|
|
1431
|
+
// checkboxEnabled: (value as UploaderData).checkboxEnabled || false
|
|
1432
|
+
// };
|
|
1433
|
+
// }
|
|
1434
|
+
// }
|
|
1426
1435
|
for (const [key, value] of Object.entries(variables)) {
|
|
1427
|
-
|
|
1428
|
-
|
|
1436
|
+
if (this.hasUploadedFiles(value)) {
|
|
1437
|
+
const otherKey = this.getOtherKey(value);
|
|
1438
|
+
const checkboxEnabled = value[otherKey];
|
|
1429
1439
|
uploadedFilesMap[key] = {
|
|
1430
1440
|
uploadedFiles: value.uploadedFiles,
|
|
1431
|
-
checkboxEnabled:
|
|
1441
|
+
checkboxEnabled: checkboxEnabled,
|
|
1432
1442
|
};
|
|
1433
1443
|
}
|
|
1434
1444
|
}
|
|
1435
|
-
this.uploadedFilesMap = uploadedFilesMap;
|
|
1445
|
+
this.uploadedFilesMap = uploadedFilesMap;
|
|
1436
1446
|
});
|
|
1437
1447
|
}
|
|
1448
|
+
hasUploadedFiles(value) {
|
|
1449
|
+
return value && value.hasOwnProperty('uploadedFiles');
|
|
1450
|
+
}
|
|
1451
|
+
getOtherKey(value) {
|
|
1452
|
+
const keys = Object.keys(value);
|
|
1453
|
+
const filteredKeys = keys.filter(key => key !== 'uploadedFiles');
|
|
1454
|
+
return filteredKeys.length > 0 ? filteredKeys[0] : '';
|
|
1455
|
+
}
|
|
1456
|
+
getCheckboxEnabled(value) {
|
|
1457
|
+
return value.hasOwnProperty('checkboxEnabled') ? value.checkboxEnabled : false;
|
|
1458
|
+
}
|
|
1438
1459
|
ngAfterViewInit() {
|
|
1439
1460
|
console.log("fxcomp", this.fxComponent);
|
|
1440
1461
|
const key = this.fxComponent?.fxData?.name;
|
|
@@ -1465,7 +1486,7 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1465
1486
|
}));
|
|
1466
1487
|
this.uploadedFiles = [...this.uploadedFiles, ...formatted];
|
|
1467
1488
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
1468
|
-
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
1489
|
+
this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;
|
|
1469
1490
|
this.uploadFileControl.setValue(this.formattedData);
|
|
1470
1491
|
},
|
|
1471
1492
|
error: (err) => {
|
|
@@ -1495,7 +1516,7 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1495
1516
|
};
|
|
1496
1517
|
this.uploadedFiles.push(newFile);
|
|
1497
1518
|
this.formattedData.uploadedFiles = this.uploadedFiles;
|
|
1498
|
-
this.formattedData.checkboxEnabled = this.checkboxEnabled;
|
|
1519
|
+
this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;
|
|
1499
1520
|
this.uploadFileControl.setValue(this.formattedData);
|
|
1500
1521
|
};
|
|
1501
1522
|
reader.readAsDataURL(file);
|
|
@@ -1532,7 +1553,7 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1532
1553
|
...this.formattedData,
|
|
1533
1554
|
uploadedFiles: this.uploadedFiles,
|
|
1534
1555
|
deletedFiles: this.deletedFiles,
|
|
1535
|
-
checkboxEnabled: this.checkboxEnabled
|
|
1556
|
+
[this.setting('checkbox-label') || 'checkboxEnabled']: this.checkboxEnabled
|
|
1536
1557
|
};
|
|
1537
1558
|
// Set the value of the uploadFileControl
|
|
1538
1559
|
this.uploadFileControl.setValue(this.formattedData);
|
|
@@ -1542,7 +1563,7 @@ class UploaderCheckboxComponent extends FxBaseComponent {
|
|
|
1542
1563
|
...this.formattedData,
|
|
1543
1564
|
uploadedFiles: this.uploadedFiles,
|
|
1544
1565
|
deletedFiles: this.deletedFiles,
|
|
1545
|
-
checkboxEnabled: this.checkboxEnabled
|
|
1566
|
+
[this.setting('checkbox-label') || 'checkboxEnabled']: this.checkboxEnabled
|
|
1546
1567
|
};
|
|
1547
1568
|
this.uploadFileControl.setValue(this.formattedData);
|
|
1548
1569
|
}
|