@seniorsistemas/angular-components 14.9.1 → 14.9.5
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/bundles/seniorsistemas-angular-components.umd.js +9 -6
- package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
- package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
- package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
- package/esm2015/components/custom-fields/custom-fields.component.js +4 -3
- package/esm2015/components/info-sign/info-sign.component.js +2 -7
- package/esm2015/components/stats-card/stats-card.component.js +6 -4
- package/esm5/components/custom-fields/custom-fields.component.js +4 -3
- package/esm5/components/info-sign/info-sign.component.js +2 -2
- package/esm5/components/stats-card/stats-card.component.js +6 -4
- package/fesm2015/seniorsistemas-angular-components.js +9 -11
- package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
- package/fesm5/seniorsistemas-angular-components.js +9 -6
- package/fesm5/seniorsistemas-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-angular-components.metadata.json +1 -1
|
@@ -207,7 +207,7 @@ let CustomFieldsComponent = CustomFieldsComponent_1 = class CustomFieldsComponen
|
|
|
207
207
|
this.fields.forEach(field => {
|
|
208
208
|
const { type, name, mask, scale } = field;
|
|
209
209
|
let value = this.formGroup.get(name).value;
|
|
210
|
-
if (value)
|
|
210
|
+
if (value) {
|
|
211
211
|
switch (type) {
|
|
212
212
|
case FieldType.Number:
|
|
213
213
|
if (mask)
|
|
@@ -223,7 +223,8 @@ let CustomFieldsComponent = CustomFieldsComponent_1 = class CustomFieldsComponen
|
|
|
223
223
|
value = moment(value).format("HH:mm:ss");
|
|
224
224
|
break;
|
|
225
225
|
}
|
|
226
|
-
|
|
226
|
+
}
|
|
227
|
+
if (value !== null && !Number.isNaN(value)) {
|
|
227
228
|
parsedValues[name] = value;
|
|
228
229
|
}
|
|
229
230
|
else if (this.isTypeNumberOrEnum(type)) {
|
|
@@ -527,4 +528,4 @@ function isUploading(file) {
|
|
|
527
528
|
function errorOnUpload(file) {
|
|
528
529
|
return () => (file.error ? { uploadError: true } : null);
|
|
529
530
|
}
|
|
530
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jdXN0b20tZmllbGRzL2N1c3RvbS1maWVsZHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUVILFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBRXJDLElBQUssZUFhSjtBQWJELFdBQUssZUFBZTtJQUNoQixvQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBbUIsQ0FB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dEI7SUFEQyxLQUFLLEVBQUU7c0RBQ2U7QUFFdkI7SUFEQyxLQUFLLEVBQUU7cURBQ2M7QUFFdEI7SUFEQyxLQUFLLEVBQUU7Z0VBQ3lCO0FBRWpDO0lBREMsS0FBSyxFQUFFOzJEQUNpQjtBQUV6QjtJQURDLEtBQUssRUFBRTttRUFDdUU7QUFFL0U7SUFEQyxLQUFLLEVBQUU7bUVBQzJFO0FBRW5GO0lBREMsS0FBSyxFQUFFO29FQUM0RTtBQWhCM0UscUJBQXFCO0lBaEJqQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLHVJQUE2QztRQUM3QyxTQUFTLEVBQUU7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsdUJBQXFCO2dCQUNsQyxLQUFLLEVBQUUsSUFBSTthQUNkO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSx1QkFBcUI7Z0JBQ2xDLEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSjtLQUNKLENBQUM7R0FDVyxxQkFBcUIsQ0E0Z0JqQztTQTVnQlkscUJBQXFCO0FBOGdCbEMsU0FBUyxXQUFXLENBQUMsSUFBYTtJQUM5QixPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxJQUFhO0lBQ2hDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnRUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtQ29udHJvbCxcbiAgICBGb3JtR3JvdXAsXG4gICAgTkdfVkFMSURBVE9SUyxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBWYWxpZGF0b3IsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtRmllbGQgfSBmcm9tIFwiLi4vZHluYW1pYy1mb3JtL2luZGV4XCI7XG5pbXBvcnQgeyBGaWxlRHRvIH0gZnJvbSBcIi4uL2ZpbGUtdXBsb2FkL2luZGV4XCI7XG5pbXBvcnQgeyBMb2NhbGVPcHRpb25zIH0gZnJvbSBcIi4uL2xvY2FsZVwiO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gXCIuLi9sb2NhbGUvbG9jYWxlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEN1c3RvbUZpZWxkc1NlcnZpY2UgfSBmcm9tIFwiLi9jdXN0b20tZmllbGRzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tIFwiYmlnbnVtYmVyLmpzXCI7XG5cbmVudW0gQ3VzdG9tRmllbGRUeXBlIHtcbiAgICBTdHJpbmcgPSBcIlN0cmluZ1wiLFxuICAgIEJvb2xlYW4gPSBcIkJvb2xlYW5cIixcbiAgICBJbnRlZ2VyID0gXCJJbnRlZ2VyXCIsXG4gICAgRG91YmxlID0gXCJEb3VibGVcIixcbiAgICBEYXRlID0gXCJEYXRlXCIsXG4gICAgRGF0ZVRpbWUgPSBcIkRhdGVUaW1lXCIsXG4gICAgVGltZSA9IFwiVGltZVwiLFxuICAgIE1vbmV5ID0gXCJNb25leVwiLFxuICAgIEJsb2IgPSBcIkJsb2JcIixcbiAgICBCaW5hcnkgPSBcIkJpbmFyeVwiLFxuICAgIEFueSA9IFwiQW55XCIsXG4gICAgRW51bSA9IFwiRW51bVwiXG59XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudF87IC8vIEBIQUNLIE5lY2Vzc2FyeSBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy82NzBcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwicy1jdXN0b20tZmllbGRzXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9jdXN0b20tZmllbGRzLmNvbXBvbmVudC5odG1sXCIsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEN1c3RvbUZpZWxkc0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEN1c3RvbUZpZWxkc0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUZpZWxkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkb21haW46IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXJ2aWNlOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW50aXR5OiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW52YWxpZEVycm9yTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbnRpdHlPYmplY3Q6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21GaWVsZHNFbmRwb2ludCA9IFwicGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9xdWVyaWVzL2dldEVudGl0eVwiO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbGVMb2NhdGlvbkVuZHBvaW50ID0gXCJwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdFVwbG9hZFwiO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3NFbmRwb2ludCA9IFwicGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9hY3Rpb25zL3JlcXVlc3RBY2Nlc3NcIjtcblxuICAgIHB1YmxpYyBmaWVsZHM6IEZvcm1GaWVsZFtdID0gW107XG4gICAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBhbnk7XG4gICAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueTtcbiAgICBwcml2YXRlIHZhbHVlOiBhbnk7XG4gICAgcHJpdmF0ZSBuZ1VzdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgdXBsb2FkQ2FuY2VsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBoYXNCbG9iOiBib29sZWFuO1xuICAgIHByaXZhdGUgaGFzVXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21GaWVsZHNTZXJ2aWNlOiBDdXN0b21GaWVsZHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNoYW5nZSh0aGlzLnBhcnNlRmllbGRzVmFsdWVzKCkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVzRm9yRmllbGRzKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWxlc0lmU2V0Rm9ybVZhbHVlc0FmdGVySW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSB8fCB7fSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoc3RhdGUpIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICAgICAgZWxzZSB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tRmllbGRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0eU9iamVjdCAmJiB0aGlzLmVudGl0eU9iamVjdC5lbnRpdHlfKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5lbnRpdHlPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzKHRoaXMuZG9tYWluLCB0aGlzLnNlcnZpY2UsIHRoaXMuZW50aXR5LCB0aGlzLmN1c3RvbUZpZWxkc0VuZHBvaW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5kb21haW4pIHRocm93IG5ldyBFcnJvcihcIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgZG9tYWluIVwiKTtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHRocm93IG5ldyBFcnJvcihcIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgc2VydmljZSFcIik7XG4gICAgICAgIGlmICghdGhpcy5lbnRpdHkpIHRocm93IG5ldyBFcnJvcihcIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgZW50aXR5IVwiKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IFt0aGlzLmdldEN1c3RvbUZpZWxkcygpLCB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0KCldO1xuICAgICAgICBmb3JrSm9pbihvYnNlcnZhYmxlcylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55W10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbY3VzdG9tRmllbGRzUmVzcG9uc2UsIGxvY2FsZU9wdGlvbnNdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdHM6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5TdHJpbmddID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkJvb2xlYW5dID0geyBkZWZhdWx0VmFsdWU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkludGVnZXJdID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRvdWJsZV0gPSB7IGRlZmF1bHRNYXNrOiBcIlwiIH07XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLk1vbmV5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmxvYl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRW51bV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmluYXJ5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5BbnldID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUZpZWxkc1Jlc3BvbnNlIHx8ICFjdXN0b21GaWVsZHNSZXNwb25zZS5lbnRpdHlfKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhY3RpdmUsIGZpZWxkcyB9ID0gY3VzdG9tRmllbGRzUmVzcG9uc2UuZW50aXR5XztcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLmN1c3RvbWl6YWJsZSAmJiBmaWVsZC5jdXN0b21pemF0aW9uICYmIGZpZWxkLmN1c3RvbWl6YXRpb24uYWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5nZXRGb3JtRmllbGQoZmllbGQsIGxvY2FsZU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5CbG9iICYmIHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZVtmb3JtRmllbGQubmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVCbG9iVG9GaWxlVXBsb2FkKGZvcm1GaWVsZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGlvblJlZ2V4IH0gPSBmaWVsZC5jdXN0b21pemF0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc0lzVHlwZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLk1vbmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5EYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5EYXRlVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuVGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25SZWdleCAmJiAhYXNJc1R5cGVzLmluY2x1ZGVzKGZpZWxkVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybih2YWxpZGF0aW9uUmVnZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5JbnRlZ2VyICYmICFmb3JtRmllbGQubWFzaykgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXlxcLT9cXGQqJC8pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBkZWZhdWx0c1tmaWVsZFR5cGVdLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZm9ybUdyb3VwLmRpc2FibGVkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChmb3JtRmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogYW55ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzOiBjb250cm9sRXJyb3JzIH0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xFcnJvcnMpIGVycm9yc1tmaWVsZF0gPSBjb250cm9sRXJyb3JzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlVmFsdWVzRm9yRmllbGRzKHZhbHVlczogYW55KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlcyA9IHsgLi4udmFsdWVzIH07XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUsIG5hbWUgfSA9IGZpZWxkO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXMgJiYgdmFsdWVzW25hbWVdO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRyYXRhbWVudG8gZXhjbHVzaXZvIHBhcmEgY2FtcG9zIGJvb2xlYW4gcXVlIHRlbSBvIHN0YXR1cyBFbXB0eVxuICAgICAgICAgICAgICogRXNzYSBjb25kaWNpb25hbCBuZWNlc3NpdGEgZXN0YXIgYW50ZXMgZG8gaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgICAgICAgICAgICogUG9pcyBlbGEgdGVtIHVtIHN0YXR1cyBxdWUgdXNhIG51bGwgbm8gdmFsb3IgZG8gY2FtcG8gcmFkaW8gYm9vbGVhblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBub3RWYWxpZCA9ICFpc1N0cmluZyAmJiB0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiO1xuICAgICAgICAgICAgICAgIGlmIChub3RWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbmRpY2lvbmFsIHBhcmEgY2FtcG9zIHF1ZSByZXRvcm5hbSBzdHJpbmcgZGUgYm9vbGVuIGRvIGJhY2thbmRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSB2YWx1ZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCBcIkhIOm1tOnNzXCIpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGd1bWFzIGVxdWlwZXMgc8OzIHNldGFtIHZhbG9yIG5vIGZvcm11bMOhcmlvLCBhcMOzcyBvIGNhcnJlZ2FtZW50byBkYSB0ZWxhXG4gICAgICogQ29tbyDDqSBiZW0gcGFkcsOjbyBpc3NvLCBmb2kgbmVjZXNzw6FyaW8gY3JpYXIgZXNzZSBtw6l0b2RvIHBhcmEgZ2VyYXIgbyBmaWxlXG4gICAgICogYXDDs3Mgc2V0YXIgbyB2YWxvciBubyBmb3JtdWzDoXJpb1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRmlsZXNJZlNldEZvcm1WYWx1ZXNBZnRlckluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVcGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZHMuZmlsdGVyKChmaWVsZDogRm9ybUZpZWxkKSA9PiBmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuQmxvYikuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS52YWx1ZSkgdGhpcy5jcmVhdGVCbG9iVG9GaWxlVXBsb2FkKGZpZWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZUZpZWxkc1ZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWVzOiBhbnkgPSB7fTtcblxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgbmFtZSwgbWFzaywgc2NhbGUgfSA9IGZpZWxkO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KG5hbWUpLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrKSB2YWx1ZSA9IG5ldyBCaWdOdW1iZXIodmFsdWUpLnRvRml4ZWQoc2NhbGUgYXMgbnVtYmVyKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkRhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgIShuZXcgQmlnTnVtYmVyKHZhbHVlKS5pc05hTigpKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVHlwZU51bWJlck9yRW51bSh0eXBlKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IGZpZWxkLm11bHRpcGxlID8gW10gOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5oYXNCbG9iKSBwYXJzZWRWYWx1ZXNbXCJmaWVsZEN1c3RvbWl6YXRpb25cIl0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWU7XG4gICAgICAgIHJldHVybiBwYXJzZWRWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1R5cGVOdW1iZXJPckVudW0odHlwZTogRmllbGRUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bWJlck9yRW51bSA9IFtcbiAgICAgICAgICAgIEZpZWxkVHlwZS5OdW1iZXIsXG4gICAgICAgICAgICBGaWVsZFR5cGUuRW51bVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbnVtYmVyT3JFbnVtLmluY2x1ZGVzKHR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUZpZWxkKGZpZWxkOiBhbnksIGxvY2FsZU9wdGlvbnM6IExvY2FsZU9wdGlvbnMpOiBGb3JtRmllbGQge1xuICAgICAgICBsZXQgcGFyYW1ldGVycztcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkJsb2I6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0QmxvYlBhcmFtZXRlcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJFbnVtZXJhdGlvblwiOlxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuRW51bTpcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gRmllbGRUeXBlLkVudW07XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0RW51bVBhcmFtZXRlcnMoZmllbGQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuTW9uZXk6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLk51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgbGVmdEFkZG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbG9jYWxlT3B0aW9ucz8ubnVtYmVyPy5jdXJyZW5jeVN5bWJvbCA/PyBcIlIkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkRvdWJsZTpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTnVtYmVyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkludGVnZXI6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLk51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge307XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5pZCxcbiAgICAgICAgICAgIGxhYmVsOiBmaWVsZC5jdXN0b21pemF0aW9uLmxhYmVsLFxuICAgICAgICAgICAgdG9vbHRpcDogZmllbGQuY3VzdG9taXphdGlvbi50b29sdGlwLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIG1hc2s6IGZpZWxkLmN1c3RvbWl6YXRpb24ubWFzayxcbiAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9uczogbG9jYWxlT3B0aW9ucy5jYWxlbmRhcixcbiAgICAgICAgICAgIGN1cnJlbmN5T3B0aW9uczogbG9jYWxlT3B0aW9ucy5udW1iZXIsXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVudW1QYXJhbWV0ZXJzKGZpZWxkOiBhbnkpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZpZWxkLmN1c3RvbWl6YXRpb24uY3VzdG9tRW51bWVyYXRpb24ubXVsdGlwbGUsXG4gICAgICAgICAgICBvcHRpb25zOiBmaWVsZC5jdXN0b21pemF0aW9uLmN1c3RvbUVudW1lcmF0aW9uLnZhbHVlcy5tYXAoKGU6IGFueSkgPT4gKHsgbGFiZWw6IGUudmFsdWUsIHZhbHVlOiBlLmtleSB9KSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCb29sZWFuUGFyYW1ldGVycygpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3B0aW9uc0xhYmVsOiB7XG4gICAgICAgICAgICAgICAgdHJ1ZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgdHJ1ZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGZhbHNlOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBmYWxzZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGVtcHR5OiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBlbXB0eV9sYWJlbGApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2JQYXJhbWV0ZXJzKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICAgICAgc206IDEyLFxuICAgICAgICAgICAgICAgIG1kOiAxMixcbiAgICAgICAgICAgICAgICBsZzogMTIsXG4gICAgICAgICAgICAgICAgeGw6IDEyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdDogXCJpbWFnZS8qLCBhcHBsaWNhdGlvbi8qLCB0ZXh0LypcIixcbiAgICAgICAgICAgIGNob29zZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBjaG9vc2VfbGFiZWxgKSxcbiAgICAgICAgICAgIHJlbW92ZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGByZW1vdmVfbGFiZWxgKSxcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBjYW5jZWxfbGFiZWxgKSxcbiAgICAgICAgICAgIHN1Y2Nlc3NUb29sdGlwOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBzdWNjZXNzX3Rvb2x0aXBgKSxcbiAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIG9uVXBsb2FkRmlsZTogKGV2ZW50OiB7IGZpbGVzOiBGaWxlRHRvW10gfSwgZm9ybWZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1VwbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SZW1vdmVGaWxlOiAoZXZlbnQ6IHsgZmlsZTogRmlsZUR0byB9LCBmb3JtZmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShldmVudCwgZm9ybWZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNhbmNlbFVwbG9hZDogKGV2ZW50OiBudW1iZXIsIGZvcm1maWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxVcGxvYWQoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Eb3dubG9hZEZpbGU6IChldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgZm9ybWZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkRmlsZShldmVudCwgZm9ybWZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogw4kgbmVjZXNzw6FyaW8gY3JpYXIgbyBmaWVsZEN1c3RvbWl6YXRpb24gcXVhbmRvIGjDoSB1bSBCbG9iIG5hIGVudGlkYWRlIHBhcmEgZ2VyYXIgb1xuICAgICAqIGNvbSBvcyBmaWVsZHMgaW5zZXJpZG9zIGUgZGVsZXRhZG9zLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRmllbGRDdXN0b21pemF0aW9uKGZpZWxkczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNCbG9iID0gISFmaWVsZHMuZmlsdGVyKChmaWVsZDogYW55KSA9PiBmaWVsZC50eXBlID09PSBDdXN0b21GaWVsZFR5cGUuQmxvYikubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5oYXNCbG9iKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICAgICAgIFwiZmllbGRDdXN0b21pemF0aW9uXCIsXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1BcnJheShbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5kb21haW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZTogbmV3IEZvcm1Db250cm9sKHRoaXMuc2VydmljZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVudGl0eSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0RlbGV0ZTogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0luc2VydDogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVCbG9iVG9GaWxlVXBsb2FkKGZpZWxkOiBGb3JtRmllbGQpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0SWQgPSB0aGlzLnZhbHVlW2ZpZWxkLm5hbWVdID8gdGhpcy52YWx1ZVtmaWVsZC5uYW1lXSA6IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS52YWx1ZTtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBvYmplY3RJZC5zdWJzdHJpbmcob2JqZWN0SWQubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgICAgIGNvbnN0IGZpbGU6IFBhcnRpYWw8RmlsZUR0bz4gPSB7IG5hbWU6IGZpbGVOYW1lLCBvYmplY3RJZCwgc2F2ZWRGaWxlOiB0cnVlIH07XG4gICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGUgYXMgRmlsZUR0b107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZXZlbnQ6IHsgaW5kZXg6IG51bWJlcjsgYW5jaG9yOiBFbGVtZW50UmVmIH0sIGZpZWxkOiBGb3JtRmllbGQpIHtcbiAgICAgICAgY29uc3QgeyBpbmRleCwgYW5jaG9yIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgY3VycmVudEZpbGUgPSBmaWVsZC5maWxlc1tpbmRleF07XG4gICAgICAgIGlmIChjdXJyZW50RmlsZS5vYmplY3RVUkwpIHtcbiAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAucmVxdWVzdEFjY2VzcyhjdXJyZW50RmlsZS5vYmplY3RJZCwgdGhpcy5yZXF1ZXN0QWNjZXNzRW5kcG9pbnQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiB7IGZpbGVOYW1lOiBzdHJpbmc7IHVyaTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaWxlTmFtZSwgdXJpIH0gPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWxlKHVyaSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChibG9iOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gPEZpbGVEdG8+bmV3IEZpbGUoW2Jsb2JdLCBmaWxlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5vYmplY3RVUkwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUub2JqZWN0SWQgPSBjdXJyZW50RmlsZS5vYmplY3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGaWxlLnNhdmVkRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXNbaW5kZXhdID0gbmV3RmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFsuLi5maWVsZC5maWxlc107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGxvYWRGaWxlKGV2ZW50OiB7IGZpbGVzOiBGaWxlRHRvW10gfSwgZm9ybUZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkOiBGb3JtRmllbGQpID0+IHJlY29yZC5uYW1lID09PSBmb3JtRmllbGQubmFtZSk7XG5cbiAgICAgICAgLy8gU2Ugb2NvcnJlciB1bSB1cGxvYWQsIGrDoSBleGlzdGluZG8gdW0gYXJxdWl2byBjb20gdXBsb2FkIGZlaXRvLiDDiSBuZWNlc3PDoXJpbyBleGNsdWlyIG8gbWVzbW8uXG4gICAgICAgIGlmIChmaWVsZC5maWxlcyAmJiBmaWVsZC5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZSh7IGZpbGU6IGZpZWxkLmZpbGVzWzBdIH0sIGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5maWxlcyA9IGZpbGVzO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgICAgICAgIGlmICghZmlsZS5zYXZlZEZpbGUgJiYgIWZpbGUucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBmaWxlLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuc2V0VmFsaWRhdG9ycyhpc1VwbG9hZGluZyhmaWxlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmdldEZpbGVMb2NhdGlvblVybChcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW46IHRoaXMuZG9tYWluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lOiB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUxvY2F0aW9uRW5kcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsb2NhdGlvbiwgdmVyc2lvbiwgb2JqZWN0SWQgfSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5vYmplY3RJZCA9IG9iamVjdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtcInVwbG9hZFN1YnNjcmliZVwiXSA9IHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRUZW1wRmlsZShsb2NhdGlvbiwgZmlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodGhpcy5kZWZhbHRDYXRjaEVycm9yKGZpZWxkLCBlcnIsIGkpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkQ2FuY2VsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKHJlc3BvbnNlLmxvYWRlZCAvIHJlc3BvbnNlLnRvdGFsKSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHsgb2JqZWN0SWQsIG5hbWU6IGZpbGUubmFtZSwgdmVyc2lvbjogZmlsZS52ZXJzaW9uIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9JbnNlcnQgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWVbMF0udG9JbnNlcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvSW5zZXJ0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b0luc2VydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkLm5hbWVdOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5zZXRWYWx1ZShgJHtmaWxlLm9iamVjdElkfS8ke2ZpbGUubmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFtmaWxlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZENhbmNlbGVkICYmIHR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHRoaXMudXBsb2FkQ2FuY2VsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGVdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRmlsZShldmVudDogeyBmaWxlOiBGaWxlRHRvIH0sIGZvcm1GaWVsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsZSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkOiBGb3JtRmllbGQpID0+IHJlY29yZC5uYW1lID09PSBmb3JtRmllbGQubmFtZSk7XG4gICAgICAgIGZpZWxkLmZpbGVzID0gW107XG4gICAgICAgIGlmIChmaWxlLm9iamVjdElkKSB7XG4gICAgICAgICAgICAvLyBRdWFuZG8gw6kgdW0gYXJxdWl2byBqw6Egc2Fsdm8gbyBvYmplY3RJZCBqw6Egw6kgbm8gZm9ybWF0byBcIm9iamVjdElkL25hbWVcIlxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWxlLnNhdmVkRmlsZSA/IGAke2ZpbGUub2JqZWN0SWR9YCA6IGAke2ZpbGUub2JqZWN0SWR9LyR7ZmlsZS5uYW1lfWA7XG4gICAgICAgICAgICBjb25zdCB0b0RlbGV0ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0RlbGV0ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWVbMF0udG9JbnNlcnRbZmllbGQubmFtZV07XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWVbMF0udG9EZWxldGUgPSB7XG4gICAgICAgICAgICAgICAgLi4udG9EZWxldGUsXG4gICAgICAgICAgICAgICAgW2ZpZWxkLm5hbWVdOiBbLi4uKHRvRGVsZXRlW2ZpZWxkLm5hbWVdIHx8IFtdKSwgdmFsdWVdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnNldFZhbHVlKFwiXCIpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuY2VsVXBsb2FkKGluZGV4OiBudW1iZXIsIGZvcm1GaWVsZDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZDogRm9ybUZpZWxkKSA9PiByZWNvcmQubmFtZSA9PT0gZm9ybUZpZWxkLm5hbWUpO1xuICAgICAgICBmaWVsZC5maWxlc1tpbmRleF1bXCJ1cGxvYWRTdWJzY3JpYmVcIl0udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0luc2VydFtmaWVsZC5uYW1lXTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuc2V0VmFsdWUoXCJcIik7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZhbHRDYXRjaEVycm9yKGZpZWxkOiBGb3JtRmllbGQsIGVycjogSHR0cEVycm9yUmVzcG9uc2UsIGluZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGZpZWxkO1xuICAgICAgICBmaWxlc1tpbmRleF0uZXJyb3IgPSBlcnI7XG4gICAgICAgIGZpbGVzW2luZGV4XS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBmaWVsZC5maWxlcyA9IFsuLi5maWxlc107XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5zZXRWYWxpZGF0b3JzKFtlcnJvck9uVXBsb2FkKGZpbGVzW2luZGV4XSldKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKFwiZXJyb3IgaW4gdXBsb2FkIGZpbGUuIERldGFpbHM6IFwiICsgZXJyLm1lc3NhZ2UpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0ZUxhYmVsKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYCR7dGhpcy5kb21haW59LiR7dGhpcy5zZXJ2aWNlfS4ke2xhYmVsfWApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNVcGxvYWRpbmcoZmlsZTogRmlsZUR0byk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKCkgPT4gKGZpbGUuaXNVcGxvYWRpbmcgPyB7IGlzVXBsb2FkaW5nOiB0cnVlIH0gOiBudWxsKTtcbn1cblxuZnVuY3Rpb24gZXJyb3JPblVwbG9hZChmaWxlOiBGaWxlRHRvKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoKSA9PiAoZmlsZS5lcnJvciA/IHsgdXBsb2FkRXJyb3I6IHRydWUgfSA6IG51bGwpO1xufVxuIl19
|
|
531
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jdXN0b20tZmllbGRzL2N1c3RvbS1maWVsZHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUVILFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBRXJDLElBQUssZUFhSjtBQWJELFdBQUssZUFBZTtJQUNoQixvQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBbUIsQ0FB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QUssRUFBRTtzREFDZTtBQUV2QjtJQURDLEtBQUssRUFBRTtxREFDYztBQUV0QjtJQURDLEtBQUssRUFBRTtnRUFDeUI7QUFFakM7SUFEQyxLQUFLLEVBQUU7MkRBQ2lCO0FBRXpCO0lBREMsS0FBSyxFQUFFO21FQUN1RTtBQUUvRTtJQURDLEtBQUssRUFBRTttRUFDMkU7QUFFbkY7SUFEQyxLQUFLLEVBQUU7b0VBQzRFO0FBaEIzRSxxQkFBcUI7SUFoQmpDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsdUlBQTZDO1FBQzdDLFNBQVMsRUFBRTtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSx1QkFBcUI7Z0JBQ2xDLEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRDtnQkFDSSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLHVCQUFxQjtnQkFDbEMsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKO0tBQ0osQ0FBQztHQUNXLHFCQUFxQixDQTZnQmpDO1NBN2dCWSxxQkFBcUI7QUErZ0JsQyxTQUFTLFdBQVcsQ0FBQyxJQUFhO0lBQzlCLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQWE7SUFDaEMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUFycmF5LFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Hcm91cCxcbiAgICBOR19WQUxJREFUT1JTLFxuICAgIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFZhbGlkYXRvcixcbiAgICBWYWxpZGF0b3JGbixcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1GaWVsZCB9IGZyb20gXCIuLi9keW5hbWljLWZvcm0vaW5kZXhcIjtcbmltcG9ydCB7IEZpbGVEdG8gfSBmcm9tIFwiLi4vZmlsZS11cGxvYWQvaW5kZXhcIjtcbmltcG9ydCB7IExvY2FsZU9wdGlvbnMgfSBmcm9tIFwiLi4vbG9jYWxlXCI7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xvY2FsZS9sb2NhbGUuc2VydmljZVwiO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRzU2VydmljZSB9IGZyb20gXCIuL2N1c3RvbS1maWVsZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gXCJiaWdudW1iZXIuanNcIjtcblxuZW51bSBDdXN0b21GaWVsZFR5cGUge1xuICAgIFN0cmluZyA9IFwiU3RyaW5nXCIsXG4gICAgQm9vbGVhbiA9IFwiQm9vbGVhblwiLFxuICAgIEludGVnZXIgPSBcIkludGVnZXJcIixcbiAgICBEb3VibGUgPSBcIkRvdWJsZVwiLFxuICAgIERhdGUgPSBcIkRhdGVcIixcbiAgICBEYXRlVGltZSA9IFwiRGF0ZVRpbWVcIixcbiAgICBUaW1lID0gXCJUaW1lXCIsXG4gICAgTW9uZXkgPSBcIk1vbmV5XCIsXG4gICAgQmxvYiA9IFwiQmxvYlwiLFxuICAgIEJpbmFyeSA9IFwiQmluYXJ5XCIsXG4gICAgQW55ID0gXCJBbnlcIixcbiAgICBFbnVtID0gXCJFbnVtXCJcbn1cblxuY29uc3QgbW9tZW50ID0gbW9tZW50XzsgLy8gQEhBQ0sgTmVjZXNzYXJ5IGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3JvbGx1cC9yb2xsdXAvaXNzdWVzLzY3MFxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWN1c3RvbS1maWVsZHNcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2N1c3RvbS1maWVsZHMuY29tcG9uZW50Lmh0bWxcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRvbWFpbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlcnZpY2U6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbnRpdHk6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbnZhbGlkRXJyb3JMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVudGl0eU9iamVjdDogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUZpZWxkc0VuZHBvaW50ID0gXCJwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL3F1ZXJpZXMvZ2V0RW50aXR5XCI7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsZUxvY2F0aW9uRW5kcG9pbnQgPSBcInBsYXRmb3JtL2ZpZWxkX2N1c3RvbWl6YXRpb24vYWN0aW9ucy9yZXF1ZXN0VXBsb2FkXCI7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVxdWVzdEFjY2Vzc0VuZHBvaW50ID0gXCJwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdEFjY2Vzc1wiO1xuXG4gICAgcHVibGljIGZpZWxkczogRm9ybUZpZWxkW10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHJpdmF0ZSByZWFkeSA9IGZhbHNlO1xuICAgIHByaXZhdGUgb25DaGFuZ2U6IGFueTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogYW55O1xuICAgIHByaXZhdGUgdmFsdWU6IGFueTtcbiAgICBwcml2YXRlIG5nVXN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSB1cGxvYWRDYW5jZWxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGhhc0Jsb2I6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBoYXNVcGxvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGN1c3RvbUZpZWxkc1NlcnZpY2U6IEN1c3RvbUZpZWxkc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ2hhbmdlKHRoaXMucGFyc2VGaWVsZHNWYWx1ZXMoKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGVzSWZTZXRGb3JtVmFsdWVzQWZ0ZXJJbml0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlIHx8IHt9KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKHN0YXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChzdGF0ZSkgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgICBlbHNlIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21GaWVsZHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5T2JqZWN0ICYmIHRoaXMuZW50aXR5T2JqZWN0LmVudGl0eV8pIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmVudGl0eU9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZS5nZXRDdXN0b21GaWVsZHModGhpcy5kb21haW4sIHRoaXMuc2VydmljZSwgdGhpcy5lbnRpdHksIHRoaXMuY3VzdG9tRmllbGRzRW5kcG9pbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvbWFpbikgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBkb21haW4hXCIpO1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSkgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBzZXJ2aWNlIVwiKTtcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eSkgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBlbnRpdHkhXCIpO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gW3RoaXMuZ2V0Q3VzdG9tRmllbGRzKCksIHRoaXMubG9jYWxlU2VydmljZS5nZXQoKV07XG4gICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtjdXN0b21GaWVsZHNSZXNwb25zZSwgbG9jYWxlT3B0aW9uc10gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0czogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlN0cmluZ10gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQm9vbGVhbl0gPSB7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuSW50ZWdlcl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRG91YmxlXSA9IHsgZGVmYXVsdE1hc2s6IFwiXCIgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTW9uZXldID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRhdGVdID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRhdGVUaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5UaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5CbG9iXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5FbnVtXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5CaW5hcnldID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkFueV0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tRmllbGRzUmVzcG9uc2UgfHwgIWN1c3RvbUZpZWxkc1Jlc3BvbnNlLmVudGl0eV8pIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFjdGl2ZSwgZmllbGRzIH0gPSBjdXN0b21GaWVsZHNSZXNwb25zZS5lbnRpdHlfO1xuICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBmaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQuY3VzdG9taXphYmxlICYmIGZpZWxkLmN1c3RvbWl6YXRpb24gJiYgZmllbGQuY3VzdG9taXphdGlvbi5hY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmdldEZvcm1GaWVsZChmaWVsZCwgbG9jYWxlT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gQ3VzdG9tRmllbGRUeXBlLkJsb2IgJiYgdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlW2Zvcm1GaWVsZC5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZm9ybUZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZGF0aW9uUmVnZXggfSA9IGZpZWxkLmN1c3RvbWl6YXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzSXNUeXBlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuQm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuTW9uZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkRhdGVUaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5UaW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlZ2V4ICYmICFhc0lzVHlwZXMuaW5jbHVkZXMoZmllbGRUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHZhbGlkYXRpb25SZWdleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gQ3VzdG9tRmllbGRUeXBlLkludGVnZXIgJiYgIWZvcm1GaWVsZC5tYXNrKSB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eXFwtP1xcZCokLykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGRlZmF1bHRzW2ZpZWxkVHlwZV0uZGVmYXVsdFZhbHVlLCBkaXNhYmxlZDogdGhpcy5mb3JtR3JvdXAuZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKGZvcm1GaWVsZC5uYW1lLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkQ3VzdG9taXphdGlvbihmaWVsZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGhpcy5wYXJzZVZhbHVlc0ZvckZpZWxkcyh0aGlzLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvcnM6IGNvbnRyb2xFcnJvcnMgfSA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29udHJvbEVycm9ycykgZXJyb3JzW2ZpZWxkXSA9IGNvbnRyb2xFcnJvcnM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VWYWx1ZXNGb3JGaWVsZHModmFsdWVzOiBhbnkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWVzID0geyAuLi52YWx1ZXMgfTtcblxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgbmFtZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlcyAmJiB2YWx1ZXNbbmFtZV07XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdGFtZW50byBleGNsdXNpdm8gcGFyYSBjYW1wb3MgYm9vbGVhbiBxdWUgdGVtIG8gc3RhdHVzIEVtcHR5XG4gICAgICAgICAgICAgKiBFc3NhIGNvbmRpY2lvbmFsIG5lY2Vzc2l0YSBlc3RhciBhbnRlcyBkbyBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICAgICAgICAgKiBQb2lzIGVsYSB0ZW0gdW0gc3RhdHVzIHF1ZSB1c2EgbnVsbCBubyB2YWxvciBkbyBjYW1wbyByYWRpbyBib29sZWFuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdFZhbGlkID0gIWlzU3RyaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCI7XG4gICAgICAgICAgICAgICAgaWYgKG5vdFZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uZGljaW9uYWwgcGFyYSBjYW1wb3MgcXVlIHJldG9ybmFtIHN0cmluZyBkZSBib29sZW4gZG8gYmFja2FuZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkRhdGU6XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IG1vbWVudCh2YWx1ZSkudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUsIFwiSEg6bW06c3NcIikudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsZ3VtYXMgZXF1aXBlcyBzw7Mgc2V0YW0gdmFsb3Igbm8gZm9ybXVsw6FyaW8sIGFww7NzIG8gY2FycmVnYW1lbnRvIGRhIHRlbGFcbiAgICAgKiBDb21vIMOpIGJlbSBwYWRyw6NvIGlzc28sIGZvaSBuZWNlc3PDoXJpbyBjcmlhciBlc3NlIG3DqXRvZG8gcGFyYSBnZXJhciBvIGZpbGVcbiAgICAgKiBhcMOzcyBzZXRhciBvIHZhbG9yIG5vIGZvcm11bMOhcmlvXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWxlc0lmU2V0Rm9ybVZhbHVlc0FmdGVySW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1VwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkcy5maWx0ZXIoKGZpZWxkOiBGb3JtRmllbGQpID0+IGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5CbG9iKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnZhbHVlKSB0aGlzLmNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZmllbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlRmllbGRzVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZXM6IGFueSA9IHt9O1xuXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlLCBuYW1lLCBtYXNrLCBzY2FsZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXQobmFtZSkudmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKHZhbHVlKS50b0ZpeGVkKHNjYWxlIGFzIG51bWJlcikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmICFOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNUeXBlTnVtYmVyT3JFbnVtKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gZmllbGQubXVsdGlwbGUgPyBbXSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0Jsb2IpIHBhcnNlZFZhbHVlc1tcImZpZWxkQ3VzdG9taXphdGlvblwiXSA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVHlwZU51bWJlck9yRW51bSh0eXBlOiBGaWVsZFR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbnVtYmVyT3JFbnVtID0gW1xuICAgICAgICAgICAgRmllbGRUeXBlLk51bWJlcixcbiAgICAgICAgICAgIEZpZWxkVHlwZS5FbnVtXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBudW1iZXJPckVudW0uaW5jbHVkZXModHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtRmllbGQoZmllbGQ6IGFueSwgbG9jYWxlT3B0aW9uczogTG9jYWxlT3B0aW9ucyk6IEZvcm1GaWVsZCB7XG4gICAgICAgIGxldCBwYXJhbWV0ZXJzO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQmxvYjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRCbG9iUGFyYW1ldGVycygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRCb29sZWFuUGFyYW1ldGVycygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkVudW1lcmF0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5FbnVtOlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSBGaWVsZFR5cGUuRW51bTtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRFbnVtUGFyYW1ldGVycyhmaWVsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5Nb25leTpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0QWRkb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsb2NhbGVPcHRpb25zPy5udW1iZXI/LmN1cnJlbmN5U3ltYm9sID8/IFwiUiRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuRG91YmxlOlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5OdW1iZXJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlcjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLmlkLFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmN1c3RvbWl6YXRpb24ubGFiZWwsXG4gICAgICAgICAgICB0b29sdGlwOiBmaWVsZC5jdXN0b21pemF0aW9uLnRvb2x0aXAsXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgbWFzazogZmllbGQuY3VzdG9taXphdGlvbi5tYXNrLFxuICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zOiBsb2NhbGVPcHRpb25zLmNhbGVuZGFyLFxuICAgICAgICAgICAgY3VycmVuY3lPcHRpb25zOiBsb2NhbGVPcHRpb25zLm51bWJlcixcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW51bVBhcmFtZXRlcnMoZmllbGQ6IGFueSk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaG93Q2xlYXI6IHRydWUsXG4gICAgICAgICAgICBtdWx0aXBsZTogZmllbGQuY3VzdG9taXphdGlvbi5jdXN0b21FbnVtZXJhdGlvbi5tdWx0aXBsZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IGZpZWxkLmN1c3RvbWl6YXRpb24uY3VzdG9tRW51bWVyYXRpb24udmFsdWVzLm1hcCgoZTogYW55KSA9PiAoeyBsYWJlbDogZS52YWx1ZSwgdmFsdWU6IGUua2V5IH0pKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJvb2xlYW5QYXJhbWV0ZXJzKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcHRpb25zTGFiZWw6IHtcbiAgICAgICAgICAgICAgICB0cnVlOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGB0cnVlX2xhYmVsYCksXG4gICAgICAgICAgICAgICAgZmFsc2U6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYGZhbHNlX2xhYmVsYCksXG4gICAgICAgICAgICAgICAgZW1wdHk6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYGVtcHR5X2xhYmVsYCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmxvYlBhcmFtZXRlcnMoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAgICAgICBzbTogMTIsXG4gICAgICAgICAgICAgICAgbWQ6IDEyLFxuICAgICAgICAgICAgICAgIGxnOiAxMixcbiAgICAgICAgICAgICAgICB4bDogMTIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWNjZXB0OiBcImltYWdlLyosIGFwcGxpY2F0aW9uLyosIHRleHQvKlwiLFxuICAgICAgICAgICAgY2hvb3NlTGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYGNob29zZV9sYWJlbGApLFxuICAgICAgICAgICAgcmVtb3ZlTGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYHJlbW92ZV9sYWJlbGApLFxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYGNhbmNlbF9sYWJlbGApLFxuICAgICAgICAgICAgc3VjY2Vzc1Rvb2x0aXA6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYHN1Y2Nlc3NfdG9vbHRpcGApLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgb25VcGxvYWRGaWxlOiAoZXZlbnQ6IHsgZmlsZXM6IEZpbGVEdG9bXSB9LCBmb3JtZmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVXBsb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZShldmVudCwgZm9ybWZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlbW92ZUZpbGU6IChldmVudDogeyBmaWxlOiBGaWxlRHRvIH0sIGZvcm1maWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGV2ZW50LCBmb3JtZmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2FuY2VsVXBsb2FkOiAoZXZlbnQ6IG51bWJlciwgZm9ybWZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFVwbG9hZChldmVudCwgZm9ybWZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkRvd25sb2FkRmlsZTogKGV2ZW50OiB7IGluZGV4OiBudW1iZXI7IGFuY2hvcjogRWxlbWVudFJlZiB9LCBmb3JtZmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRGaWxlKGV2ZW50LCBmb3JtZmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDDiSBuZWNlc3PDoXJpbyBjcmlhciBvIGZpZWxkQ3VzdG9taXphdGlvbiBxdWFuZG8gaMOhIHVtIEJsb2IgbmEgZW50aWRhZGUgcGFyYSBnZXJhciBvXG4gICAgICogY29tIG9zIGZpZWxkcyBpbnNlcmlkb3MgZSBkZWxldGFkb3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0Jsb2IgPSAhIWZpZWxkcy5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLnR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5CbG9iKS5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmhhc0Jsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgICAgICAgXCJmaWVsZEN1c3RvbWl6YXRpb25cIixcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUFycmF5KFtcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb21haW46IG5ldyBGb3JtQ29udHJvbCh0aGlzLmRvbWFpbiksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5zZXJ2aWNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogbmV3IEZvcm1Db250cm9sKHRoaXMuZW50aXR5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRGVsZXRlOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZToge30sIGRpc2FibGVkOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0OiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZToge30sIGRpc2FibGVkOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZmllbGQ6IEZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCBvYmplY3RJZCA9IHRoaXMudmFsdWVbZmllbGQubmFtZV0gPyB0aGlzLnZhbHVlW2ZpZWxkLm5hbWVdIDogdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnZhbHVlO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IG9iamVjdElkLnN1YnN0cmluZyhvYmplY3RJZC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICAgICAgY29uc3QgZmlsZTogUGFydGlhbDxGaWxlRHRvPiA9IHsgbmFtZTogZmlsZU5hbWUsIG9iamVjdElkLCBzYXZlZEZpbGU6IHRydWUgfTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZSBhcyBGaWxlRHRvXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRvd25sb2FkRmlsZShldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgZmllbGQ6IEZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCB7IGluZGV4LCBhbmNob3IgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBjdXJyZW50RmlsZSA9IGZpZWxkLmZpbGVzW2luZGV4XTtcbiAgICAgICAgaWYgKGN1cnJlbnRGaWxlLm9iamVjdFVSTCkge1xuICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgIC5yZXF1ZXN0QWNjZXNzKGN1cnJlbnRGaWxlLm9iamVjdElkLCB0aGlzLnJlcXVlc3RBY2Nlc3NFbmRwb2ludClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IHsgZmlsZU5hbWU6IHN0cmluZzsgdXJpOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbGVOYW1lLCB1cmkgfSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpbGUodXJpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJsb2I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSA8RmlsZUR0bz5uZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGaWxlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodXJpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5vYmplY3RJZCA9IGN1cnJlbnRGaWxlLm9iamVjdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUuc2F2ZWRGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlc1tpbmRleF0gPSBuZXdGaWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gWy4uLmZpZWxkLmZpbGVzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwbG9hZEZpbGUoZXZlbnQ6IHsgZmlsZXM6IEZpbGVEdG9bXSB9LCBmb3JtRmllbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQ6IEZvcm1GaWVsZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKTtcblxuICAgICAgICAvLyBTZSBvY29ycmVyIHVtIHVwbG9hZCwgasOhIGV4aXN0aW5kbyB1bSBhcnF1aXZvIGNvbSB1cGxvYWQgZmVpdG8uIMOJIG5lY2Vzc8OhcmlvIGV4Y2x1aXIgbyBtZXNtby5cbiAgICAgICAgaWYgKGZpZWxkLmZpbGVzICYmIGZpZWxkLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKHsgZmlsZTogZmllbGQuZmlsZXNbMF0gfSwgZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkLmZpbGVzID0gZmlsZXM7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xuICAgICAgICAgICAgaWYgKCFmaWxlLnNhdmVkRmlsZSAmJiAhZmlsZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGZpbGUuaXNVcGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5zZXRWYWxpZGF0b3JzKGlzVXBsb2FkaW5nKGZpbGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0RmlsZUxvY2F0aW9uVXJsKFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbjogdGhpcy5kb21haW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTG9jYXRpb25FbmRwb2ludFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHRoaXMuZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZCwgZXJyLCBpKSkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxvY2F0aW9uLCB2ZXJzaW9uLCBvYmplY3RJZCB9ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm9iamVjdElkID0gb2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlW1widXBsb2FkU3Vic2NyaWJlXCJdID0gdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwbG9hZFRlbXBGaWxlKGxvY2F0aW9uLCBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRDYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQocmVzcG9uc2UubG9hZGVkIC8gcmVzcG9uc2UudG90YWwpICogMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0geyBvYmplY3RJZCwgbmFtZTogZmlsZS5uYW1lLCB2ZXJzaW9uOiBmaWxlLnZlcnNpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b0luc2VydCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0luc2VydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWVbMF0udG9JbnNlcnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvSW5zZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGQubmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnNldFZhbHVlKGAke2ZpbGUub2JqZWN0SWR9LyR7ZmlsZS5uYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkQ2FuY2VsZWQgJiYgdHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkgdGhpcy51cGxvYWRDYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVGaWxlKGV2ZW50OiB7IGZpbGU6IEZpbGVEdG8gfSwgZm9ybUZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBmaWxlIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQ6IEZvcm1GaWVsZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbXTtcbiAgICAgICAgaWYgKGZpbGUub2JqZWN0SWQpIHtcbiAgICAgICAgICAgIC8vIFF1YW5kbyDDqSB1bSBhcnF1aXZvIGrDoSBzYWx2byBvIG9iamVjdElkIGrDoSDDqSBubyBmb3JtYXRvIFwib2JqZWN0SWQvbmFtZVwiXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbGUuc2F2ZWRGaWxlID8gYCR7ZmlsZS5vYmplY3RJZH1gIDogYCR7ZmlsZS5vYmplY3RJZH0vJHtmaWxlLm5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvRGVsZXRlO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0luc2VydFtmaWVsZC5uYW1lXTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0RlbGV0ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi50b0RlbGV0ZSxcbiAgICAgICAgICAgICAgICBbZmllbGQubmFtZV06IFsuLi4odG9EZWxldGVbZmllbGQubmFtZV0gfHwgW10pLCB2YWx1ZV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuc2V0VmFsdWUoXCJcIik7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5jZWxVcGxvYWQoaW5kZXg6IG51bWJlciwgZm9ybUZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRDYW5jZWxlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkOiBGb3JtRmllbGQpID0+IHJlY29yZC5uYW1lID09PSBmb3JtRmllbGQubmFtZSk7XG4gICAgICAgIGZpZWxkLmZpbGVzW2luZGV4XVtcInVwbG9hZFN1YnNjcmliZVwiXS51bnN1YnNjcmliZSgpO1xuICAgICAgICBmaWVsZC5maWxlcyA9IFtdO1xuICAgICAgICBkZWxldGUgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvSW5zZXJ0W2ZpZWxkLm5hbWVdO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5zZXRWYWx1ZShcIlwiKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZmFsdENhdGNoRXJyb3IoZmllbGQ6IEZvcm1GaWVsZCwgZXJyOiBIdHRwRXJyb3JSZXNwb25zZSwgaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gZmllbGQ7XG4gICAgICAgIGZpbGVzW2luZGV4XS5lcnJvciA9IGVycjtcbiAgICAgICAgZmlsZXNbaW5kZXhdLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGZpZWxkLmZpbGVzID0gWy4uLmZpbGVzXTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnNldFZhbGlkYXRvcnMoW2Vycm9yT25VcGxvYWQoZmlsZXNbaW5kZXhdKV0pO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoXCJlcnJvciBpbiB1cGxvYWQgZmlsZS4gRGV0YWlsczogXCIgKyBlcnIubWVzc2FnZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRlTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgJHt0aGlzLmRvbWFpbn0uJHt0aGlzLnNlcnZpY2V9LiR7bGFiZWx9YCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1VwbG9hZGluZyhmaWxlOiBGaWxlRHRvKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoKSA9PiAoZmlsZS5pc1VwbG9hZGluZyA/IHsgaXNVcGxvYWRpbmc6IHRydWUgfSA6IG51bGwpO1xufVxuXG5mdW5jdGlvbiBlcnJvck9uVXBsb2FkKGZpbGU6IEZpbGVEdG8pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuICgpID0+IChmaWxlLmVycm9yID8geyB1cGxvYWRFcnJvcjogdHJ1ZSB9IDogbnVsbCk7XG59XG4iXX0=
|
|
@@ -6,13 +6,8 @@ let InfoSignComponent = class InfoSignComponent {
|
|
|
6
6
|
InfoSignComponent = __decorate([
|
|
7
7
|
Component({
|
|
8
8
|
selector: "s-info-sign-component",
|
|
9
|
-
template:
|
|
10
|
-
<span style="display: inline-flex; justify-content: flex-start; align-items: baseline;">
|
|
11
|
-
<span *ngTemplateOutlet="templateRef"></span>
|
|
12
|
-
<i class="fa fa-info-circle" aria-hidden="true" style="padding-left: 10px" [pTooltip]="tooltip"></i>
|
|
13
|
-
</span>
|
|
14
|
-
`
|
|
9
|
+
template: "<span style=\"display: inline-flex; justify-content: flex-start; align-items: baseline;\">\n <span *ngTemplateOutlet=\"templateRef\"></span>\n <i class=\"fa fa-info-circle\" aria-hidden=\"true\" style=\"padding-left: 10px\" [pTooltip]=\"tooltip\"></i>\n</span>"
|
|
15
10
|
})
|
|
16
11
|
], InfoSignComponent);
|
|
17
12
|
export { InfoSignComponent };
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1zaWduLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2luZm8tc2lnbi9pbmZvLXNpZ24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBTXZELElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWlCO0lBSTFCLGdCQUFlLENBQUM7Q0FDbkIsQ0FBQTtBQUxZLGlCQUFpQjtJQUo3QixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLHNSQUF5QztLQUM1QyxDQUFDO0dBQ1csaUJBQWlCLENBSzdCO1NBTFksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInMtaW5mby1zaWduLWNvbXBvbmVudFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vaW5mby1zaWduLmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIEluZm9TaWduQ29tcG9uZW50IHtcbiAgICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICB0b29sdGlwOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=
|
|
@@ -30,10 +30,12 @@ let StatsCardComponent = StatsCardComponent_1 = class StatsCardComponent {
|
|
|
30
30
|
return this._value;
|
|
31
31
|
}
|
|
32
32
|
updateDisplayValue() {
|
|
33
|
+
const animationDuration = new BigNumber(this.ANIMATION_DURATION_MS);
|
|
34
|
+
const stepDuration = new BigNumber(this.STEP_DURATION_MS);
|
|
35
|
+
const animationCount = animationDuration.dividedBy(stepDuration);
|
|
33
36
|
const previousRawValue = new BigNumber(this.previousValue.replace(/\D/g, ""));
|
|
34
37
|
const rawValue = new BigNumber(this.value.replace(/\D/g, ""));
|
|
35
|
-
const
|
|
36
|
-
const incrementValue = rawValue.minus(previousRawValue).absoluteValue().dividedBy(eachAnimationDuration).dp(0, 7);
|
|
38
|
+
const incrementValue = rawValue.minus(previousRawValue).absoluteValue().dividedBy(animationCount);
|
|
37
39
|
const incremental = previousRawValue.isLessThan(rawValue);
|
|
38
40
|
clearInterval(this.intervalId);
|
|
39
41
|
this.displayValue = this.replaceNumericPositions(this.value);
|
|
@@ -109,10 +111,10 @@ __decorate([
|
|
|
109
111
|
StatsCardComponent = StatsCardComponent_1 = __decorate([
|
|
110
112
|
Component({
|
|
111
113
|
selector: "s-stats-card",
|
|
112
|
-
template: "<div [id]=\"id\" [ngClass]=\"{\n 's-stats-card-light': lightMode,\n 's-stats-card-color': !lightMode,\n 's-stats-card-container-light-version': lightVersion,\n 's-stats-card-clickable': clickable\n}\" class=\"s-stats-card-container\" (click)=\"clickable && onClick.next($event)\">\n\n <div [id]=\"id + '-background'\" class=\"s-stats-card-background\" [ngStyle]=\"{'background-color': !lightMode && color || ''}\"></div>\n <div [id]=\"id + '-overlay'\" class=\"s-stats-card-overlay\"></div>\n\n <div [id]=\"id + '-info-container'\" class=\"s-stats-card-info-container\">\n <div class=\"s-stats-card-info-inner-container\">\n\n <div [id]=\"id + '-icon-container'\" class=\"s-stats-card-icon-container\" [ngClass]=\"{'s-stats-card-icon-container-light-version': lightVersion}\"\n [ngStyle]=\"{'background-color': lightMode && color || ''}\">\n <span [id]=\"id + '-icon'\" [class]=\"iconClass\" [ngClass]=\"{'s-stats-card-icon': true, 's-stats-card-icon-light-version': lightVersion}\"\n [ngStyle]=\"{'color': !lightMode && color || ''}\" aria-hidden=\"true\"></span>\n </div>\n\n <div [id]=\"id + '-text-container'\" class=\"s-stats-card-text-container\" [ngClass]=\"{'s-stats-card-text-container-light-version': lightVersion}\">\n <h4 [id]=\"id + '-label'\" class=\"s-stats-card-label\" [ngClass]=\"{'s-stats-card-label-light-version': lightVersion}\" [pTooltip]=\"label\" tooltipPosition=\"top\" showDelay=\"500\">{{label}}</h4>\n <span [id]=\"id + '-value'\" class=\"s-stats-card-value\" [ngClass]=\"{'s-stats-card-value-light-version': lightVersion}\" [pTooltip]=\"
|
|
114
|
+
template: "<div [id]=\"id\" [ngClass]=\"{\n 's-stats-card-light': lightMode,\n 's-stats-card-color': !lightMode,\n 's-stats-card-container-light-version': lightVersion,\n 's-stats-card-clickable': clickable\n}\" class=\"s-stats-card-container\" (click)=\"clickable && onClick.next($event)\">\n\n <div [id]=\"id + '-background'\" class=\"s-stats-card-background\" [ngStyle]=\"{'background-color': !lightMode && color || ''}\"></div>\n <div [id]=\"id + '-overlay'\" class=\"s-stats-card-overlay\"></div>\n\n <div [id]=\"id + '-info-container'\" class=\"s-stats-card-info-container\">\n <div class=\"s-stats-card-info-inner-container\">\n\n <div [id]=\"id + '-icon-container'\" class=\"s-stats-card-icon-container\" [ngClass]=\"{'s-stats-card-icon-container-light-version': lightVersion}\"\n [ngStyle]=\"{'background-color': lightMode && color || ''}\">\n <span [id]=\"id + '-icon'\" [class]=\"iconClass\" [ngClass]=\"{'s-stats-card-icon': true, 's-stats-card-icon-light-version': lightVersion}\"\n [ngStyle]=\"{'color': !lightMode && color || ''}\" aria-hidden=\"true\"></span>\n </div>\n\n <div [id]=\"id + '-text-container'\" class=\"s-stats-card-text-container\" [ngClass]=\"{'s-stats-card-text-container-light-version': lightVersion}\">\n <h4 [id]=\"id + '-label'\" class=\"s-stats-card-label\" [ngClass]=\"{'s-stats-card-label-light-version': lightVersion}\" [pTooltip]=\"label\" tooltipPosition=\"top\" showDelay=\"500\">{{label}}</h4>\n <span [id]=\"id + '-value'\" class=\"s-stats-card-value\" [ngClass]=\"{'s-stats-card-value-light-version': lightVersion}\" [pTooltip]=\"displayValue\" tooltipPosition=\"top\" showDelay=\"500\">{{ displayValue }}</span>\n </div>\n\n </div>\n <span *ngIf=\"tooltip\" class=\"s-status-card-tooltip\" [pTooltip]=\"tooltip\" tooltipPosition=\"right\">\n <i class=\"fa fa-info-circle s-status-card-tooltip-icon\"></i>\n </span>\n </div>\n\n</div>\n",
|
|
113
115
|
encapsulation: ViewEncapsulation.None,
|
|
114
116
|
styles: ["s-stats-card{display:block;position:relative;height:auto}s-stats-card .s-stats-card-background,s-stats-card .s-stats-card-overlay{height:calc(100% - 2px);position:absolute;top:1px;left:1px;width:calc(100% - 2px)}s-stats-card .s-stats-card-background{background-color:#fff}s-stats-card .s-stats-card-overlay{background-color:#000;opacity:0;transition:opacity .2s ease-out}s-stats-card .s-stats-card-container{border:1px solid transparent;min-width:120px;overflow:hidden}s-stats-card .s-stats-card-container.s-stats-card-clickable{cursor:pointer}s-stats-card .s-stats-card-container:hover .s-stats-card-overlay{opacity:.2}s-stats-card .s-stats-card-container.s-stats-card-light:hover .s-stats-card-overlay{opacity:.08}s-stats-card .s-stats-card-container.s-stats-card-light{border-color:#ccc}s-stats-card .s-stats-card-info-container{padding:15px;position:relative;overflow:auto}s-stats-card .s-stats-card-info-inner-container{overflow:hidden;position:relative}.s-sidebar-content s-stats-card .s-stats-card-container.s-stats-card-light,.ui-dialog-content s-stats-card .s-stats-card-container.s-stats-card-light,p-panel s-stats-card .s-stats-card-container.s-stats-card-light{border-color:transparent}s-stats-card .s-stats-card-color .s-stats-card-icon-container{background-color:#fff}s-stats-card .s-stats-card-icon-container{float:left;font-size:24px;height:50px;line-height:50px;text-align:center;transition:width .2s ease-out;width:50px}s-stats-card .s-stats-card-light *{color:#333}s-stats-card .s-stats-card-light .s-stats-card-icon{color:#fff}s-stats-card .s-stats-card-light * .s-status-card-tooltip .s-status-card-tooltip-icon,s-stats-card .s-stats-card-light .s-stats-card-label{color:#999}s-stats-card .s-stats-card-text-container{color:#fff;float:left;height:50px;max-width:calc(100% - 65px);padding-left:15px}s-stats-card .s-stats-card-text-container,s-stats-card .s-stats-card-text-container .s-stats-card-label,s-stats-card .s-stats-card-text-container .s-stats-card-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}s-stats-card .s-stats-card-label{font-weight:400;width:100%}s-stats-card .s-stats-card-value{display:inline-block;font-weight:700;font-size:20px;width:100%}s-stats-card .s-stats-card-container-light-version,s-stats-card .s-stats-card-text-container-light-version{height:auto}s-stats-card .s-stats-card-text-container-light-version{max-width:calc(100% - 25px);padding-left:25px}s-stats-card .s-stats-card-icon-container-light-version{height:100%;left:0;position:absolute;right:0;width:10px}s-stats-card .s-stats-card-icon-light-version{display:none}@media (max-width:767px){s-stats-card,s-stats-card .s-stats-card-container,s-stats-card .s-stats-card-text-container{height:auto}s-stats-card .s-stats-card-text-container{max-width:calc(100% - 25px);padding-left:25px}s-stats-card .s-stats-card-text-container,s-stats-card .s-stats-card-text-container .s-stats-card-label,s-stats-card .s-stats-card-text-container .s-stats-card-value{overflow:visible;white-space:normal;word-break:break-all}s-stats-card .s-stats-card-icon-container{height:100%;left:0;position:absolute;right:0;width:10px}s-stats-card .s-stats-card-icon{display:none}}.s-status-card-tooltip{font-size:1rem;line-height:0;margin:.3rem;position:absolute;right:0;top:0}.s-status-card-tooltip .s-status-card-tooltip-icon{color:#fff}"]
|
|
115
117
|
})
|
|
116
118
|
], StatsCardComponent);
|
|
117
119
|
export { StatsCardComponent };
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9zdGF0cy1jYXJkL3N0YXRzLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBUXpDLElBQWEsa0JBQWtCLDBCQUEvQixNQUFhLGtCQUFrQjtJQUEvQjtRQUlXLE9BQUUsR0FBRyxnQkFBZ0Isb0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQU1uRCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUdyQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLGNBQVMsR0FBRyxpQkFBaUIsQ0FBQztRQUc5QixVQUFLLEdBQUcsU0FBUyxDQUFDO1FBR2xCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBR3RCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFXbEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQU9iLFlBQU8sR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUl0RCwwQkFBcUIsR0FBRyxHQUFHLENBQUM7UUFDNUIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FBRXBCLFdBQU0sR0FBRyxHQUFHLENBQUM7SUFvRHpCLENBQUM7SUEzRUcsSUFBVyxLQUFLLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYztZ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SzthQUNQLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDUixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxNQUFNLElBQUksSUFBSSxLQUFLLEdBQUc7Z0JBQUUsT0FBTyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBQ0osQ0FBQTtBQXRHaUIseUJBQU0sR0FBRyxDQUFDLENBQUM7QUFHekI7SUFEQyxLQUFLLEVBQUU7OENBQ2tEO0FBRzFEO0lBREMsS0FBSyxFQUFFO2lEQUNhO0FBR3JCO0lBREMsS0FBSyxFQUFFO3dEQUNvQjtBQUc1QjtJQURDLEtBQUssRUFBRTtxREFDZ0I7QUFHeEI7SUFEQyxLQUFLLEVBQUU7cURBQzZCO0FBR3JDO0lBREMsS0FBSyxFQUFFO2lEQUNpQjtBQUd6QjtJQURDLEtBQUssRUFBRTswREFDcUI7QUFHN0I7SUFEQyxLQUFLLEVBQUU7cURBQ2lCO0FBR3pCO0lBREMsS0FBSyxFQUFFOytDQU1QO0FBR0Q7SUFEQyxLQUFLLEVBQUU7bURBQ1k7QUFPcEI7SUFEQyxNQUFNLEVBQUU7bURBQ3FEO0FBM0NyRCxrQkFBa0I7SUFOOUIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGNBQWM7UUFDeEIsdWhFQUEwQztRQUUxQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7S0FDeEMsQ0FBQztHQUNXLGtCQUFrQixDQXVHOUI7U0F2R1ksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24sIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJpZ051bWJlciB9IGZyb20gXCJiaWdudW1iZXIuanNcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwicy1zdGF0cy1jYXJkXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9zdGF0cy1jYXJkLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3N0YXRzLWNhcmQuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU3RhdHNDYXJkQ29tcG9uZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBzLXN0YXRzLWNhcmQtJHtTdGF0c0NhcmRDb21wb25lbnQubmV4dElkKyt9YDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsaWdodFZlcnNpb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxpZ2h0TW9kZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpY29uQ2xhc3MgPSBcImZhIGZhLWJhci1jaGFydFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sb3IgPSBcIiMzMzk5NjZcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGVOdW1iZXJzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNsaWNrYWJsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZU51bWJlcnMpIHRoaXMudXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gICAgICAgIGVsc2UgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvb2x0aXAgPSBcIlwiO1xuXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIEFOSU1BVElPTl9EVVJBVElPTl9NUyA9IDIwMDtcbiAgICBwcml2YXRlIFNURVBfRFVSQVRJT05fTVMgPSAyMDtcbiAgICBwcml2YXRlIHByZXZpb3VzVmFsdWUgPSBcIjBcIjtcbiAgICBwcml2YXRlIGludGVydmFsSWQ6IGFueTtcbiAgICBwcml2YXRlIF92YWx1ZSA9IFwiMFwiO1xuXG4gICAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbkR1cmF0aW9uID0gbmV3IEJpZ051bWJlcih0aGlzLkFOSU1BVElPTl9EVVJBVElPTl9NUyk7XG4gICAgICAgIGNvbnN0IHN0ZXBEdXJhdGlvbiA9IG5ldyBCaWdOdW1iZXIodGhpcy5TVEVQX0RVUkFUSU9OX01TKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uQ291bnQgPSBhbmltYXRpb25EdXJhdGlvbi5kaXZpZGVkQnkoc3RlcER1cmF0aW9uKTtcblxuICAgICAgICBjb25zdCBwcmV2aW91c1Jhd1ZhbHVlID0gbmV3IEJpZ051bWJlcih0aGlzLnByZXZpb3VzVmFsdWUucmVwbGFjZSgvXFxEL2csIFwiXCIpKTtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSBuZXcgQmlnTnVtYmVyKHRoaXMudmFsdWUucmVwbGFjZSgvXFxEL2csIFwiXCIpKTtcblxuICAgICAgICBjb25zdCBpbmNyZW1lbnRWYWx1ZSA9IHJhd1ZhbHVlLm1pbnVzKHByZXZpb3VzUmF3VmFsdWUpLmFic29sdXRlVmFsdWUoKS5kaXZpZGVkQnkoYW5pbWF0aW9uQ291bnQpO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnRhbCA9IHByZXZpb3VzUmF3VmFsdWUuaXNMZXNzVGhhbihyYXdWYWx1ZSk7XG5cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5yZXBsYWNlTnVtZXJpY1Bvc2l0aW9ucyh0aGlzLnZhbHVlKTtcblxuICAgICAgICBsZXQgY291bnRlciA9IHByZXZpb3VzUmF3VmFsdWU7XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluY3JlbWVudGFsICYmIGNvdW50ZXIuaXNMZXNzVGhhbihyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMucmVwbGFjZU51bWVyaWNQb3NpdGlvbnModGhpcy5kaXNwbGF5VmFsdWUsIGNvdW50ZXIpO1xuICAgICAgICAgICAgICAgIGNvdW50ZXIgPSBjb3VudGVyLnBsdXMoaW5jcmVtZW50VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaW5jcmVtZW50YWwgJiYgY291bnRlci5pc0dyZWF0ZXJUaGFuKHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5yZXBsYWNlTnVtZXJpY1Bvc2l0aW9ucyh0aGlzLmRpc3BsYXlWYWx1ZSwgY291bnRlcik7XG4gICAgICAgICAgICAgICAgY291bnRlciA9IGNvdW50ZXIubWludXMoaW5jcmVtZW50VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuU1RFUF9EVVJBVElPTl9NUyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlcGxhY2VOdW1lcmljUG9zaXRpb25zKHZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlPzogQmlnTnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXGRdL2csIFwiXCIpO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZVN0cmluZyA9IG5ld1ZhbHVlID8gbmV3VmFsdWUudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZE5ld1ZhbHVlID0gbmV3VmFsdWVTdHJpbmdcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxEL2csIFwiXCIpXG4gICAgICAgICAgICAucGFkU3RhcnQocmF3VmFsdWUubGVuZ3RoLCBcIjBcIik7XG4gICAgICAgIGxldCBuZXdWYWx1ZUluZGV4ID0gMDtcblxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAgICAgLm1hcChjaGFyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIoY2hhcik7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciB8fCBjaGFyID09PSBcIjBcIikgcmV0dXJuIGZvcm1hdHRlZE5ld1ZhbHVlW25ld1ZhbHVlSW5kZXgrK107XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgfVxufVxuIl19
|