@pega/angular-sdk-components 0.23.4 → 0.23.6

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.
Files changed (31) hide show
  1. package/esm2022/lib/_bridge/helpers/sdk-pega-component-map.mjs +61 -52
  2. package/esm2022/lib/_components/designSystemExtension/field-group/field-group.component.mjs +31 -0
  3. package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +3 -3
  4. package/esm2022/lib/_components/field/check-box/check-box.component.mjs +5 -3
  5. package/esm2022/lib/_components/field/date/date.component.mjs +9 -3
  6. package/esm2022/lib/_components/field/group/group.component.mjs +61 -0
  7. package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +3 -3
  8. package/esm2022/lib/_components/template/default-form/default-form.component.mjs +3 -3
  9. package/esm2022/lib/_components/template/details/details.component.mjs +3 -2
  10. package/esm2022/lib/_components/template/list-view/utils.mjs +5 -3
  11. package/esm2022/lib/_helpers/formatters/boolean.mjs +20 -0
  12. package/esm2022/lib/_helpers/formatters/common.mjs +16 -0
  13. package/esm2022/lib/_helpers/formatters/currency.mjs +68 -0
  14. package/esm2022/lib/_helpers/formatters/date.mjs +69 -0
  15. package/esm2022/lib/_helpers/formatters/index.mjs +110 -0
  16. package/esm2022/public-api.mjs +2 -1
  17. package/fesm2022/pega-angular-sdk-components.mjs +13949 -13584
  18. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  19. package/lib/_bridge/helpers/sdk-pega-component-map.d.ts +55 -51
  20. package/lib/_components/designSystemExtension/field-group/field-group.component.d.ts +12 -0
  21. package/lib/_components/field/check-box/check-box.component.d.ts +4 -0
  22. package/lib/_components/field/date/date.component.d.ts +1 -0
  23. package/lib/_components/field/group/group.component.d.ts +33 -0
  24. package/lib/_helpers/formatters/boolean.d.ts +4 -0
  25. package/lib/_helpers/formatters/common.d.ts +2 -0
  26. package/lib/_helpers/formatters/currency.d.ts +9 -0
  27. package/lib/_helpers/formatters/date.d.ts +10 -0
  28. package/lib/_helpers/formatters/index.d.ts +18 -0
  29. package/lib/doc/KeyReleaseUpdates.md +63 -0
  30. package/package.json +1 -1
  31. package/public-api.d.ts +1 -0
@@ -55,7 +55,7 @@ export class DetailsComponent {
55
55
  fields?.forEach(field => {
56
56
  const thePConn = field.getPConnect();
57
57
  const theCompType = thePConn.getComponentName().toLowerCase();
58
- if (theCompType === 'reference') {
58
+ if (theCompType === 'reference' || theCompType === 'group') {
59
59
  const configProps = thePConn.getConfigProps();
60
60
  configProps.readOnly = true;
61
61
  configProps.displayMode = 'LABELS_LEFT';
@@ -68,6 +68,7 @@ export class DetailsComponent {
68
68
  };
69
69
  const viewContConfig = {
70
70
  meta: {
71
+ ...thePConn.getMetadata(),
71
72
  type: theCompType,
72
73
  config: configProps
73
74
  },
@@ -99,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
99
100
  }], ctorParameters: function () { return [{ type: i1.AngularPConnectService }]; }, propDecorators: { pConn$: [{
100
101
  type: Input
101
102
  }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvdGVtcGxhdGUvZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy90ZW1wbGF0ZS9kZXRhaWxzL2RldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7QUFTeEcsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUFvQixlQUF1QztRQUF2QyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFJM0QsdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBRS9CLGNBQVMsR0FBVSxFQUFFLENBQUM7UUFFdEIsNEJBQTRCO1FBQzVCLHdCQUFtQixHQUF3QixFQUFFLENBQUM7SUFUZ0IsQ0FBQztJQVcvRCxRQUFRO1FBQ04sOEZBQThGO1FBQzlGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEcscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRTtZQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtR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QUM7b0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzNCO3FCQUFNO29CQUNMLE1BQU0sSUFBSSxHQUFHO3dCQUNYLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsRUFBRTtxQkFDbEMsQ0FBQztvQkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDM0I7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzsrR0FwR1UsZ0JBQWdCO21HQUFoQixnQkFBZ0IscUdDWDdCLDRLQUdBLDJORE02Qix3QkFBd0I7OzRGQUV4QyxnQkFBZ0I7a0JBUDVCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksV0FDUCxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDOzZHQUs1QyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIGZvcndhcmRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhclBDb25uZWN0RGF0YSwgQW5ndWxhclBDb25uZWN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19icmlkZ2UvYW5ndWxhci1wY29ubmVjdCc7XG5pbXBvcnQgeyBDb21wb25lbnRNYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2NvbXBvbmVudC1tYXBwZXIvY29tcG9uZW50LW1hcHBlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGV0YWlscy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbZm9yd2FyZFJlZigoKSA9PiBDb21wb25lbnRNYXBwZXJDb21wb25lbnQpXVxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFuZ3VsYXJQQ29ubmVjdDogQW5ndWxhclBDb25uZWN0U2VydmljZSkge31cblxuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcblxuICBoaWdobGlnaHRlZERhdGFBcnI6IGFueVtdID0gW107XG4gIHNob3dIaWdobGlnaHRlZERhdGE6IGJvb2xlYW47XG4gIGFyRmllbGRzJDogYW55W10gPSBbXTtcblxuICAvLyBVc2VkIHdpdGggQW5ndWxhclBDb25uZWN0XG4gIGFuZ3VsYXJQQ29ubmVjdERhdGE6IEFuZ3VsYXJQQ29ubmVjdERhdGEgPSB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBGaXJzdCB0aGluZyBpbiBpbml0aWFsaXphdGlvbiBpcyByZWdpc3RlcmluZyBhbmQgc3Vic2NyaWJpbmcgdG8gdGhlIEFuZ3VsYXJQQ29ubmVjdCBzZXJ2aWNlXG4gICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhID0gdGhpcy5hbmd1bGFyUENvbm5lY3QucmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQodGhpcywgdGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgIC8vIHRoaXMudXBkYXRlU2VsZigpO1xuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbikge1xuICAgICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4oKTtcbiAgICB9XG4gIH1cblxuICBvblN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcbiAgfVxuXG4gIGNoZWNrQW5kVXBkYXRlKCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGJyaWRnZSB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGRcbiAgICAvLyB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gICAgY29uc3QgYlVwZGF0ZVNlbGYgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5zaG91bGRDb21wb25lbnRVcGRhdGUodGhpcyk7XG5cbiAgICAvLyBPTkxZIGNhbGwgdXBkYXRlU2VsZiB3aGVuIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZVxuICAgIGlmIChiVXBkYXRlU2VsZikge1xuICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU2VsZigpIHtcbiAgICBjb25zdCByYXdNZXRhRGF0YTogYW55ID0gdGhpcy5wQ29ubiQucmVzb2x2ZUNvbmZpZ1Byb3BzKCh0aGlzLnBDb25uJC5nZXRSYXdNZXRhZGF0YSgpIGFzIGFueSkuY29uZmlnKTtcbiAgICB0aGlzLnNob3dIaWdobGlnaHRlZERhdGEgPSByYXdNZXRhRGF0YT8uc2hvd0hpZ2hsaWdodGVkRGF0YTtcblxuICAgIGlmICh0aGlzLnNob3dIaWdobGlnaHRlZERhdGEpIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodGVkRGF0YSA9IHJhd01ldGFEYXRhPy5oaWdobGlnaHRlZERhdGE7XG4gICAgICB0aGlzLmhpZ2hsaWdodGVkRGF0YUFyciA9IGhpZ2hsaWdodGVkRGF0YS5tYXAoZmllbGQgPT4ge1xuICAgICAgICBmaWVsZC5jb25maWcuZGlzcGxheU1vZGUgPSAnU1RBQ0tFRF9MQVJHRV9WQUwnO1xuXG4gICAgICAgIGlmIChmaWVsZC5jb25maWcudmFsdWUgPT09ICdAUCAucHlTdGF0dXNXb3JrJykge1xuICAgICAgICAgIGZpZWxkLnR5cGUgPSAnVGV4dElucHV0JztcbiAgICAgICAgICBmaWVsZC5jb25maWcuZGlzcGxheUFzU3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGtpZHMgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpIGFzIGFueVtdO1xuICAgIGZvciAoY29uc3Qga2lkIG9mIGtpZHMpIHtcbiAgICAgIHRoaXMuYXJGaWVsZHMkID0gW107XG4gICAgICBjb25zdCBwS2lkID0ga2lkLmdldFBDb25uZWN0KCk7XG4gICAgICBjb25zdCBmaWVsZHMgPSBwS2lkLmdldENoaWxkcmVuKCk7XG4gICAgICBmaWVsZHM/LmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBjb25zdCB0aGVQQ29ubiA9IGZpZWxkLmdldFBDb25uZWN0KCk7XG4gICAgICAgIGNvbnN0IHRoZUNvbXBUeXBlID0gdGhlUENvbm4uZ2V0Q29tcG9uZW50TmFtZSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0aGVDb21wVHlwZSA9PT0gJ3JlZmVyZW5jZScpIHtcbiAgICAgICAgICBjb25zdCBjb25maWdQcm9wcyA9IHRoZVBDb25uLmdldENvbmZpZ1Byb3BzKCk7XG4gICAgICAgICAgY29uZmlnUHJvcHMucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgIGNvbmZpZ1Byb3BzLmRpc3BsYXlNb2RlID0gJ0xBQkVMU19MRUZUJztcbiAgICAgICAgICBjb25zdCBwcm9wVG9Vc2UgPSB7IC4uLnRoZVBDb25uLmdldEluaGVyaXRlZFByb3BzKCkgfTtcbiAgICAgICAgICBjb25maWdQcm9wcy5sYWJlbCA9IHByb3BUb1VzZT8ubGFiZWw7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHRoZVBDb25uLmdldENvbnRleHROYW1lKCksXG4gICAgICAgICAgICBwYWdlUmVmZXJlbmNlOiB0aGVQQ29ubi5nZXRQYWdlUmVmZXJlbmNlKCksXG4gICAgICAgICAgICByZWZlcmVuY2VMaXN0OiB0aGVQQ29ubi5nZXRSZWZlcmVuY2VMaXN0KClcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHZpZXdDb250Q29uZmlnID0ge1xuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICB0eXBlOiB0aGVDb21wVHlwZSxcbiAgICAgICAgICAgICAgY29uZmlnOiBjb25maWdQcm9wc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHRoZVZpZXdDb250ID0gUENvcmUuY3JlYXRlUENvbm5lY3Qodmlld0NvbnRDb25maWcpO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGVDb21wVHlwZSxcbiAgICAgICAgICAgIHBDb25uOiB0aGVWaWV3Q29udD8uZ2V0UENvbm5lY3QoKVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5hckZpZWxkcyQucHVzaChkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgdHlwZTogdGhlQ29tcFR5cGUsXG4gICAgICAgICAgICBjb25maWc6IHRoZVBDb25uLmdldENvbmZpZ1Byb3BzKClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYXJGaWVsZHMkLnB1c2goZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdj5cbiAgPGNvbXBvbmVudC1tYXBwZXIgbmFtZT1cIk1hdGVyaWFsRGV0YWlsc1wiIFtwcm9wc109XCJ7IGFyRmllbGRzJCwgYXJIaWdobGlnaHRlZEZpZWxkczogaGlnaGxpZ2h0ZWREYXRhQXJyLCBsYXlvdXQ6ICdvbmUtY29sdW1uJyB9XCI+PC9jb21wb25lbnQtbWFwcGVyPlxuPC9kaXY+XG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvdGVtcGxhdGUvZGV0YWlscy9kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy90ZW1wbGF0ZS9kZXRhaWxzL2RldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7QUFTeEcsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUFvQixlQUF1QztRQUF2QyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFJM0QsdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBRS9CLGNBQVMsR0FBVSxFQUFFLENBQUM7UUFFdEIsNEJBQTRCO1FBQzVCLHdCQUFtQixHQUF3QixFQUFFLENBQUM7SUFUZ0IsQ0FBQztJQVcvRCxRQUFRO1FBQ04sOEZBQThGO1FBQzlGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEcscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRTtZQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtR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LFdBQVc7d0JBQ2pCLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO3FCQUNsQyxDQUFDO29CQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMzQjtxQkFBTTtvQkFDTCxNQUFNLElBQUksR0FBRzt3QkFDWCxJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUU7cUJBQ2xDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzNCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7K0dBckdVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHFHQ1g3Qiw0S0FHQSwyTkRNNkIsd0JBQXdCOzs0RkFFeEMsZ0JBQWdCO2tCQVA1QixTQUFTOytCQUNFLGFBQWEsY0FHWCxJQUFJLFdBQ1AsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQzs2R0FLNUMsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBmb3J3YXJkUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZ3VsYXJQQ29ubmVjdERhdGEsIEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QnO1xuaW1wb3J0IHsgQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9jb21wb25lbnQtbWFwcGVyL2NvbXBvbmVudC1tYXBwZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RldGFpbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW2ZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbmd1bGFyUENvbm5lY3Q6IEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UpIHt9XG5cbiAgQElucHV0KCkgcENvbm4kOiB0eXBlb2YgUENvbm5lY3Q7XG5cbiAgaGlnaGxpZ2h0ZWREYXRhQXJyOiBhbnlbXSA9IFtdO1xuICBzaG93SGlnaGxpZ2h0ZWREYXRhOiBib29sZWFuO1xuICBhckZpZWxkcyQ6IGFueVtdID0gW107XG5cbiAgLy8gVXNlZCB3aXRoIEFuZ3VsYXJQQ29ubmVjdFxuICBhbmd1bGFyUENvbm5lY3REYXRhOiBBbmd1bGFyUENvbm5lY3REYXRhID0ge307XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gRmlyc3QgdGhpbmcgaW4gaW5pdGlhbGl6YXRpb24gaXMgcmVnaXN0ZXJpbmcgYW5kIHN1YnNjcmliaW5nIHRvIHRoZSBBbmd1bGFyUENvbm5lY3Qgc2VydmljZVxuICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YSA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KHRoaXMsIHRoaXMub25TdGF0ZUNoYW5nZSk7XG5cbiAgICAvLyB0aGlzLnVwZGF0ZVNlbGYoKTtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4pIHtcbiAgICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZSgpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBicmlkZ2UgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkXG4gICAgLy8gdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgIGNvbnN0IGJVcGRhdGVTZWxmID0gdGhpcy5hbmd1bGFyUENvbm5lY3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKHRoaXMpO1xuXG4gICAgLy8gT05MWSBjYWxsIHVwZGF0ZVNlbGYgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGVcbiAgICBpZiAoYlVwZGF0ZVNlbGYpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNlbGYoKSB7XG4gICAgY29uc3QgcmF3TWV0YURhdGE6IGFueSA9IHRoaXMucENvbm4kLnJlc29sdmVDb25maWdQcm9wcygodGhpcy5wQ29ubiQuZ2V0UmF3TWV0YWRhdGEoKSBhcyBhbnkpLmNvbmZpZyk7XG4gICAgdGhpcy5zaG93SGlnaGxpZ2h0ZWREYXRhID0gcmF3TWV0YURhdGE/LnNob3dIaWdobGlnaHRlZERhdGE7XG5cbiAgICBpZiAodGhpcy5zaG93SGlnaGxpZ2h0ZWREYXRhKSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRlZERhdGEgPSByYXdNZXRhRGF0YT8uaGlnaGxpZ2h0ZWREYXRhO1xuICAgICAgdGhpcy5oaWdobGlnaHRlZERhdGFBcnIgPSBoaWdobGlnaHRlZERhdGEubWFwKGZpZWxkID0+IHtcbiAgICAgICAgZmllbGQuY29uZmlnLmRpc3BsYXlNb2RlID0gJ1NUQUNLRURfTEFSR0VfVkFMJztcblxuICAgICAgICBpZiAoZmllbGQuY29uZmlnLnZhbHVlID09PSAnQFAgLnB5U3RhdHVzV29yaycpIHtcbiAgICAgICAgICBmaWVsZC50eXBlID0gJ1RleHRJbnB1dCc7XG4gICAgICAgICAgZmllbGQuY29uZmlnLmRpc3BsYXlBc1N0YXR1cyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBraWRzID0gdGhpcy5wQ29ubiQuZ2V0Q2hpbGRyZW4oKSBhcyBhbnlbXTtcbiAgICBmb3IgKGNvbnN0IGtpZCBvZiBraWRzKSB7XG4gICAgICB0aGlzLmFyRmllbGRzJCA9IFtdO1xuICAgICAgY29uc3QgcEtpZCA9IGtpZC5nZXRQQ29ubmVjdCgpO1xuICAgICAgY29uc3QgZmllbGRzID0gcEtpZC5nZXRDaGlsZHJlbigpO1xuICAgICAgZmllbGRzPy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgdGhlUENvbm4gPSBmaWVsZC5nZXRQQ29ubmVjdCgpO1xuICAgICAgICBjb25zdCB0aGVDb21wVHlwZSA9IHRoZVBDb25uLmdldENvbXBvbmVudE5hbWUoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodGhlQ29tcFR5cGUgPT09ICdyZWZlcmVuY2UnIHx8IHRoZUNvbXBUeXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnUHJvcHMgPSB0aGVQQ29ubi5nZXRDb25maWdQcm9wcygpO1xuICAgICAgICAgIGNvbmZpZ1Byb3BzLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICBjb25maWdQcm9wcy5kaXNwbGF5TW9kZSA9ICdMQUJFTFNfTEVGVCc7XG4gICAgICAgICAgY29uc3QgcHJvcFRvVXNlID0geyAuLi50aGVQQ29ubi5nZXRJbmhlcml0ZWRQcm9wcygpIH07XG4gICAgICAgICAgY29uZmlnUHJvcHMubGFiZWwgPSBwcm9wVG9Vc2U/LmxhYmVsO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjb250ZXh0OiB0aGVQQ29ubi5nZXRDb250ZXh0TmFtZSgpLFxuICAgICAgICAgICAgcGFnZVJlZmVyZW5jZTogdGhlUENvbm4uZ2V0UGFnZVJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgcmVmZXJlbmNlTGlzdDogdGhlUENvbm4uZ2V0UmVmZXJlbmNlTGlzdCgpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB2aWV3Q29udENvbmZpZyA9IHtcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4udGhlUENvbm4uZ2V0TWV0YWRhdGEoKSxcbiAgICAgICAgICAgICAgdHlwZTogdGhlQ29tcFR5cGUsXG4gICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnUHJvcHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0aGVWaWV3Q29udCA9IFBDb3JlLmNyZWF0ZVBDb25uZWN0KHZpZXdDb250Q29uZmlnKTtcbiAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgdHlwZTogdGhlQ29tcFR5cGUsXG4gICAgICAgICAgICBwQ29ubjogdGhlVmlld0NvbnQ/LmdldFBDb25uZWN0KClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYXJGaWVsZHMkLnB1c2goZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHRoZUNvbXBUeXBlLFxuICAgICAgICAgICAgY29uZmlnOiB0aGVQQ29ubi5nZXRDb25maWdQcm9wcygpXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmFyRmllbGRzJC5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxjb21wb25lbnQtbWFwcGVyIG5hbWU9XCJNYXRlcmlhbERldGFpbHNcIiBbcHJvcHNdPVwieyBhckZpZWxkcyQsIGFySGlnaGxpZ2h0ZWRGaWVsZHM6IGhpZ2hsaWdodGVkRGF0YUFyciwgbGF5b3V0OiAnb25lLWNvbHVtbicgfVwiPjwvY29tcG9uZW50LW1hcHBlcj5cbjwvZGl2PlxuIl19
@@ -614,10 +614,12 @@ export const readContextResponse = async (context, params) => {
614
614
  const dataViewName = PCore.getDataTypeUtils().getSavableDataPage(classID);
615
615
  const dataPageKeys = PCore.getDataTypeUtils().getDataPageKeys(dataViewName);
616
616
  dataPageKeys?.forEach(item => (item.isAlternateKeyStorage ? compositeKeys.push(item.linkedField) : compositeKeys.push(item.keyName)));
617
- if (compositeKeys.length) {
617
+ if (compositeKeys.length && otherContext) {
618
618
  otherContext.setCompositeKeys(compositeKeys);
619
619
  }
620
- otherContext.fetchRowActionDetails = null;
620
+ if (otherContext) {
621
+ otherContext.fetchRowActionDetails = null;
622
+ }
621
623
  }
622
624
  const presetArray = [];
623
625
  const rawMetadata = pConn$.getRawMetadata().config;
@@ -657,4 +659,4 @@ export const readContextResponse = async (context, params) => {
657
659
  params.listContext = { meta, presets: presetArray, apiContext: { ...apiContext } };
658
660
  return params.listContext;
659
661
  };
660
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvdGVtcGxhdGUvbGlzdC12aWV3L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS3ZELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQztBQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUM7QUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixVQUFVLEVBQUUsWUFBWTtJQUN4QixPQUFPLEVBQUUsU0FBUztJQUNsQixRQUFRLEVBQUUsVUFBVTtDQUNyQixDQUFDO0FBRUYsTUFBTSxPQUFPO0lBR1g7UUFDRSxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsZUFBZSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsRUFBRSwyQkFBMkIsR0FBRyxFQUFFO1FBQ2hGLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRztZQUN0QyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0M7WUFDeEMsR0FBRywyQkFBMkI7U0FDL0IsQ0FBQztRQUNGLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRztZQUN0QyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0M7WUFDeEMsR0FBRywyQkFBMkI7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxZQUFZO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQztJQUM3RSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsWUFBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLENBQUM7SUFDN0UsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsZUFBZTtJQUM5QyxNQUFNLEVBQ0osYUFBYSxHQUFHLEVBQUUsQ0FBQyxvREFBb0Q7TUFDeEUsR0FBRyxlQUFlLENBQUM7SUFDcEIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM5QixPQUFPO1FBQ0wscUJBQXFCO1FBQ3JCLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtRQUN4QyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1FBQzVDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7S0FDakQsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLFlBQVk7SUFDNUQsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDO0lBQ3pCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3hELEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsVUFBVTtJQUNsRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDcEMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsRixTQUFTLENBQUMsT0FBTyxHQUFHLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxRTtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRTtJQUNyQyxJQUFJLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDMUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO1lBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7SUFDRCxPQUFPLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFlBQVk7SUFDN0MsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3JGLElBQUksUUFBUSxFQUFFLElBQUksS0FBSyxXQUFXLEVBQUU7UUFDbEMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsWUFBWSxFQUFFLE9BQU87SUFDeEQsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDO0lBQ3pCLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ3BDLEtBQUssR0FBRyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7S0FDNUM7U0FBTTtRQUNMLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7S0FDM0M7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU87SUFDMUQsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUN4QixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNiLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7Z0JBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDakIsdUNBQXVDO1FBQ3ZDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDZjtRQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUVyQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFDRCxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQ2hCLENBQUM7SUFDRixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFlBQVksRUFBRSxPQUFPO0lBQy9ELE1BQU0sd0JBQXdCLEdBQVUsRUFBRSxDQUFDO0lBQzNDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDM0IsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLGdFQUFnRTtZQUNoRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzFGO1lBQ0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsMkJBQTJCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyx3QkFBd0IsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLHdCQUF3QixFQUFFLFVBQVU7SUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDekMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ2pELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxLQUFLLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsU0FBUztZQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVELE1BQU0sd0JBQXdCLEdBQUc7SUFDL0IsV0FBVyxFQUFFLGFBQWE7SUFDMUIsSUFBSSxFQUFFLFdBQVc7Q0FDbEIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsU0FBUyxlQUFlLENBQUMsVUFBVTtJQUNqQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzdCLElBQUksU0FBUyxDQUFDLElBQUk7WUFBRSxTQUFTLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ2xHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsU0FBUztJQUN2QyxNQUFNLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDekIsR0FBRyxTQUFTLENBQUM7SUFDZCxPQUFPO1FBQ0wsSUFBSTtRQUNKLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ3hELEtBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO0tBQzFELENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTO0lBQ3pELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxlQUFlLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTztJQUN2RSxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQztJQUN4QyxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLGlCQUFpQixDQUFDLENBQUM7SUFDL0csSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7UUFDM0MsSUFBSSxzQkFBc0IsR0FBRyxDQUFDO1lBQUUsT0FBTyxrQkFBa0IsQ0FBQztRQUUxRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckQsT0FBTyxrQkFBa0IsQ0FBQztLQUMzQjtJQUVELElBQUksc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDL0Isc0hBQXNIO1FBQ3RILE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDN0MsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLENBQzdILENBQUM7UUFDRixNQUFNLHFCQUFxQixHQUFVLEVBQUUsQ0FBQztRQUN4QyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDekMsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsQ0FBQztZQUM1RixJQUFJLGlCQUFpQjtnQkFBRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sd0JBQXdCLEdBQUcsb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTVGLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ25GO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVU7SUFDcEgsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxjQUFjLENBQUM7SUFDbkIsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUMxRCxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksWUFBWSxDQUFDO0lBQ2pCLElBQUksaUJBQWlCLEVBQUU7UUFDckIsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDekIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDOUIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksc0JBQXNCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BGLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RixZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUYsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLElBQUksc0JBQXNCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdGLGNBQWMsR0FBRyxVQUFVLENBQUMsY0FBYyxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUYsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RCxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFDRSxVQUFVLENBQUMsYUFBYTtZQUN4QixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUM5RSxDQUFDLENBQUMsRUFDRjtZQUNBLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUNsRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFDRSxVQUFVLENBQUMsWUFBWTtZQUN2QixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUM3RSxDQUFDLENBQUMsRUFDRjtZQUNBLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUNqRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsWUFBWSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDekY7U0FBTTtRQUNMLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzlCLFlBQVksR0FBRyxlQUFlLENBQzVCLFVBQVU7YUFDUCxXQUFXLEVBQUU7YUFDYixXQUFXLEVBQUU7WUFDZCxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNaLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxFQUNKLGFBQWEsRUFDYixVQUFVLEVBQ1YsT0FBTyxDQUNSLENBQUM7S0FDSDtJQUNELE9BQU87UUFDTCxRQUFRO1FBQ1IsVUFBVTtRQUNWLFVBQVU7UUFDVixhQUFhO1FBQ2IsWUFBWTtRQUNaLGFBQWE7UUFDYixjQUFjO1FBQ2QsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixVQUFVO1FBQ1YsWUFBWTtLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFRO0lBQ2hDLE1BQU0sRUFDSixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQzlCLEdBQUcsUUFBUSxDQUFDO0lBQ2IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25DLGFBQWEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQixrREFBa0Q7UUFDbEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQ2xCLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsbUJBQW1CLENBQUMsTUFBTTtJQUNqQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7WUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsRDtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLFlBQVksRUFBRSxvQkFBb0I7SUFDN0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNqQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzFCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsT0FBTztJQUM5QyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDckMsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxLQUFLLE9BQU8sQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxnQ0FBZ0MsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU87SUFDbkUsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxJQUFJLGFBQWEsRUFBRSxNQUFNLEVBQUU7UUFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDakQ7UUFDRCxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztRQUV2RCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO1lBQ3pDLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN6RTtRQUNELGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUMsbUVBQW1FO1FBQ25FLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEQscUNBQXFDO1FBQ3JDLDZEQUE2RDtRQUM3RCxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDaEU7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsaUJBQWlCO0lBQ3RHLHNEQUFzRDtJQUN0RCxtRUFBbUU7SUFDbkUsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNwQyxnQ0FBZ0MsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCwwRUFBMEU7SUFDMUUsT0FBTyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxpQkFBaUI7SUFDaEgsOEJBQThCO0lBQzlCLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDM0MsT0FBTyxjQUFjLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDMUcsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsc0RBQXNEO0FBQ3hELENBQUM7QUFFRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUVuRSxTQUFTLHdCQUF3QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSztJQUNuRCxNQUFNLDJCQUEyQixHQUFHLGVBQWUsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ2xHLElBQUksMkJBQTJCLEVBQUU7UUFDL0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDMUM7UUFDRCxNQUFNLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7S0FDaEQ7U0FBTSxJQUFJLElBQUksS0FBSyxjQUFjLElBQUksSUFBSSxLQUFLLG9CQUFvQixFQUFFO1FBQ25FLE1BQU0sQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQztLQUNsRDtTQUFNLElBQUksSUFBSSxLQUFLLGVBQWUsRUFBRTtRQUNuQyxNQUFNLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7S0FDL0M7QUFDSCxDQUFDO0FBQ0QsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQWdCLEVBQUUsRUFBRSxvQkFBeUIsSUFBSTtJQUNqRixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtRQUM1QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO2dCQUFFLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxHQUFHLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1FBRXpDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDaEQsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDYixJQUFJO1lBQ0osS0FBSztZQUNMLElBQUk7WUFDSixPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQzdCLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxnQkFBZ0I7WUFDeEMsU0FBUztZQUNULGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWE7WUFDekMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEUsWUFBWSxFQUFFLEVBQUU7WUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNqQyxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxLQUFLO2FBQ1Q7U0FDRixDQUFDO1FBRUYsd0JBQXdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU5QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEVBQUU7SUFDakMsSUFBSSxPQUFPLENBQUM7SUFDWixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3pELE9BQU8sR0FBRyxRQUFRLENBQUM7S0FDcEI7U0FBTTtRQUNMLE9BQU8sR0FBRyxVQUFVLENBQUM7S0FDdEI7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBTSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUUsT0FBTyxHQUFHLEVBQUU7SUFDaEYsTUFBTSxXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckIsTUFBTSxXQUFXLEdBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxVQUFVLEVBQUU7WUFDckMsSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzdELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdkYsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsVUFBVSxDQUFDLENBQUM7Z0JBQy9DLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLGtCQUFrQixDQUFDLENBQUM7YUFDeEQ7aUJBQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2dCQUNqRSxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLGFBQWEsQ0FBQyxDQUFDO2FBQ3ZEO2lCQUFNLElBQUksWUFBWSxFQUFFO2dCQUN2QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM1RSxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkk7aUJBQU07Z0JBQ0wsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0IsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNoQztTQUNGO1FBQ0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDbkMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsWUFBWSxFQUFFLGFBQWE7SUFDaEUsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sRUFDSixJQUFJLEVBQ0osTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQ2xCLEdBQUcsSUFBSSxDQUFDO1FBQ1QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO1NBQ3BDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUMzRCxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNoRyxnQ0FBZ0M7SUFDaEMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDcEUsd0RBQXdEO0lBQ3hELE1BQU0sZ0JBQWdCLEdBQVUsRUFBRSxDQUFDO0lBQ25DLE1BQU0sRUFDSixJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFDbkQsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFJLEVBQ0YsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQ3hCLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsaUhBQWlIO0lBQ2pILElBQUksaUJBQWlCLEVBQUU7UUFDckIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkYsSUFBSSxjQUFjLEVBQUUsYUFBYSxFQUFFO1lBQ2pDLGFBQWEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1NBQzlDO1FBQ0QseUZBQXlGO1FBQ3pGLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3ZDO0lBQ0QsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTVCLElBQUksWUFBWSxFQUFFO1FBQ2hCLE1BQU0sYUFBYSxHQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RJLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUN4QixZQUFZLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDOUM7UUFDRCxZQUFZLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0tBQzNDO0lBRUQsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDbkQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUN2QyxNQUFNLGlCQUFpQixHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNoRSxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQ3hELElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxXQUFXLENBQUM7SUFDaEIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzlDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyw0QkFBNEIsQ0FDbkQsRUFBRSxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUN0RCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2IsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxFQUFFO1lBQ3ZDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7UUFDRixnSkFBZ0o7UUFDaEosTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFFOUYsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFL0UsK0JBQStCO1FBQy9CLDhHQUE4RztRQUM5RywyS0FBMks7UUFDM0ssMkVBQTJFO1FBQzNFLE1BQU0sd0JBQXdCLEdBQUcsMkJBQTJCLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sZ0JBQWdCLEdBQUcsNkJBQTZCLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFN0YsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQ3BDLGdCQUFnQixFQUFFLGdHQUFnRztRQUNsSCxZQUFZLEVBQ1osY0FBYyxFQUNkLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsaUJBQWlCLENBQ2xCLENBQUM7UUFFRixJQUFJLFdBQVcsRUFBRTtZQUNmLHNCQUFzQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzFFO1FBRUQsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXRDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNqRixNQUFNLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLFdBQVcsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzlFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDbkYsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldERlZmF1bHRWaWV3TWV0YSB9IGZyb20gJy4vRGVmYXVsdFZpZXdNZXRhJztcblxuLy8gUmVtb3ZlIHRoaXMgYW5kIHVzZSBcInJlYWxcIiBQQ29yZSB0eXBlIG9uY2UgLmQudHMgaXMgZml4ZWQgKGN1cnJlbnRseSBzaG93cyA1IGVycm9ycylcbmRlY2xhcmUgY29uc3QgUENvcmU6IGFueTtcblxuY29uc3QgVVNFUl9SRUZFUkVOQ0UgPSAnVXNlclJlZmVyZW5jZSc7XG5jb25zdCBQQUdFID0gJyFQISc7XG5jb25zdCBQQUdFTElTVCA9ICchUEwhJztcblxuZXhwb3J0IGNvbnN0IGZvcm1hdENvbnN0YW50cyA9IHtcbiAgV29ya1N0YXR1czogJ1dvcmtTdGF0dXMnLFxuICBJbnRlZ2VyOiAnSW50ZWdlcicsXG4gIFdvcmtMaW5rOiAnV29ya0xpbmsnXG59O1xuXG5jbGFzcyBEYXRhQXBpIHtcbiAgbWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHk6IGFueTtcbiAgb3JpZ2luYWxQcm9wZXJ0eVRvTWFwcGVkUHJvcGVydHk6IGFueTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5vcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eSA9IHt9O1xuICAgIHRoaXMubWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHkgPSB7fTtcbiAgICB0aGlzLnNldFByb3BlcnR5TWFwcyA9IHRoaXMuc2V0UHJvcGVydHlNYXBzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXRNYXBwZWRQcm9wZXJ0eSA9IHRoaXMuZ2V0TWFwcGVkUHJvcGVydHkuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE9yaWdpbmFsUHJvcGVydHkgPSB0aGlzLmdldE9yaWdpbmFsUHJvcGVydHkuYmluZCh0aGlzKTtcbiAgfVxuXG4gIHNldFByb3BlcnR5TWFwcyhvcmlnaW5hbFRvTWFwcGVkUHJvcGVydHlPYmogPSB7fSwgbWFwcGVkVG9PcmlnaW5hbFByb3BlcnR5T2JqID0ge30pIHtcbiAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHlUb01hcHBlZFByb3BlcnR5ID0ge1xuICAgICAgLi4udGhpcy5vcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eSxcbiAgICAgIC4uLm9yaWdpbmFsVG9NYXBwZWRQcm9wZXJ0eU9ialxuICAgIH07XG4gICAgdGhpcy5tYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eSA9IHtcbiAgICAgIC4uLnRoaXMubWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHksXG4gICAgICAuLi5tYXBwZWRUb09yaWdpbmFsUHJvcGVydHlPYmpcbiAgICB9O1xuICB9XG5cbiAgZ2V0TWFwcGVkUHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRvTWFwcGVkUHJvcGVydHlbcHJvcGVydHlOYW1lXSA/PyBwcm9wZXJ0eU5hbWU7XG4gIH1cblxuICBnZXRPcmlnaW5hbFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcHBlZFByb3BlcnR5VG9PcmlnaW5hbFByb3BlcnR5W3Byb3BlcnR5TmFtZV0gPz8gcHJvcGVydHlOYW1lO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0KGNvbXBvbmVudENvbmZpZykge1xuICBjb25zdCB7XG4gICAgcHJvbWlzZXNBcnJheSA9IFtdIC8vIGFycmF5IG9mIHByb21pc2VzIHdoaWNoIGNhbiBiZSBpbnZva2VkIHBhcmFsZWxseSxcbiAgfSA9IGNvbXBvbmVudENvbmZpZztcbiAgY29uc3QgcHJvbWlzZXNSZXNwb25zZUFycmF5ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXNBcnJheSk7XG4gIGNvbnN0IGRhdGFBcGkgPSBuZXcgRGF0YUFwaSgpO1xuICByZXR1cm4ge1xuICAgIHByb21pc2VzUmVzcG9uc2VBcnJheSxcbiAgICBzZXRQcm9wZXJ0eU1hcHM6IGRhdGFBcGkuc2V0UHJvcGVydHlNYXBzLFxuICAgIGdldE1hcHBlZFByb3BlcnR5OiBkYXRhQXBpLmdldE1hcHBlZFByb3BlcnR5LFxuICAgIGdldE9yaWdpbmFsUHJvcGVydHk6IGRhdGFBcGkuZ2V0T3JpZ2luYWxQcm9wZXJ0eVxuICB9O1xufVxuXG4vKipcbiAqIFtnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWVdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICAgICAgY29udmVydGluZyBlbWJlZGRlZEZpZWxkIG5hbWUgc3RhcnRpbmcgd2l0aCAhUCEgb3IgIVBMISB0byBub3JtYWwgZmllbGRcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgICBFbWJlZGRlZEZpZWxkIG5hbWUgc3RhcnRpbmcgd2l0aCAhUCEgb3IgIVBMIVxuICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICAgIHJldHVybnMgY29udmVydGVkIHN0cmluZyB3aXRob3V0ICFQISBvciAhUEwhIGFuZCA6XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXhhbXBsZSBmb3IgZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lIDwvY2FwdGlvbj5cbiAqIGdldEZpZWxkTmFtZUZyb21FbWJlZGRlZEZpZWxkTmFtZSgnIVAhT3JnYW5pc2F0aW9uOk5hbWUnKSByZXR1cm4gJ09yZ2FuaXNhdGlvbi5OYW1lJ1xuICogZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKCchUEwhRW1wbG95ZWVzOk5hbWUnKSByZXR1cm4gJ0VtcGxveWVlcy5OYW1lJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKHByb3BlcnR5TmFtZSkge1xuICBsZXQgdmFsdWUgPSBwcm9wZXJ0eU5hbWU7XG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKFBBR0UpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoUEFHRUxJU1QpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcodmFsdWUubGFzdEluZGV4T2YoJyEnKSArIDEpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvOi9nLCAnLicpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBbdXBkYXRlTWV0YUVtYmVkZGVkRmllbGRJRF1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgIElmIHRoZSBmaWVsZElEIGluIG1ldGEgc3RhcnRzIHdpdGggJyFQIScgb3IgJyFQTCEnIGFuZCBjb250YWlucyAnOicgdGhlbiByZXBsYWNlIHRoZW0gd2l0aCAuKGRvdClcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7QXJyYXl9IG1ldGFGaWVsZHMgIEZpZWxkcyBtZXRhZGF0YSBBcnJheS4gQ29udGFpbnMgbWV0YWRhdGEgb2YgYWxsIHRoZSBmaWVsZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVNZXRhRW1iZWRkZWRGaWVsZElEKG1ldGFGaWVsZHMpIHtcbiAgcmV0dXJuIG1ldGFGaWVsZHMuZm9yRWFjaChtZXRhRmllbGQgPT4ge1xuICAgIGlmIChtZXRhRmllbGQuZmllbGRJRD8uc3RhcnRzV2l0aChQQUdFKSB8fCBtZXRhRmllbGQuZmllbGRJRD8uc3RhcnRzV2l0aChQQUdFTElTVCkpIHtcbiAgICAgIG1ldGFGaWVsZC5maWVsZElEID0gZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKG1ldGFGaWVsZC5maWVsZElEKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgaXNFbWJlZGRlZEZpZWxkID0gZmllbGQgPT4ge1xuICBpZiAoZmllbGQ/LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgIGZpZWxkID0gZmllbGQuc3Vic3RyaW5nKGZpZWxkLmluZGV4T2YoJyAnKSArIDEpO1xuICAgIGlmIChmaWVsZFswXSA9PT0gJy4nKSBmaWVsZCA9IGZpZWxkLnN1YnN0cmluZygxKTtcbiAgfVxuICByZXR1cm4gZmllbGQ/LmluZGV4T2YoJy4nKSA+IDA7XG59O1xuXG4vKipcbiAqIFtpc1BhZ2VMaXN0UHJvcGVydHldXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICBjaGVja2luZyBpZiBwcm9wZXJ0eU5hbWUgaXMgcGFnZUxpc3Qgb3Igbm90XG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lICAgUHJvcGVydHlOYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gIHRydWUgaWYgcHJvcGVydHkgaXMgcGFnZUxpc3QgZWxzZSBmYWxzZVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkV4YW1wbGUgZm9yIGlzUGFnZUxpc3RQcm9wZXJ0eSA8L2NhcHRpb24+XG4gKiBpc1BhZ2VMaXN0UHJvcGVydHkoJyFQTCFFbXBsb3llZXMuTmFtZScpIHJldHVybiB0cnVlXG4gKiBpc1BhZ2VMaXN0UHJvcGVydHkoJyFQIUVtcGxveWVlcy5OYW1lJykgcmV0dXJuIGZhbHNlXG4gKiBpc1BhZ2VMaXN0UHJvcGVydHkoJ05hbWUnKSByZXR1cm4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFnZUxpc3RQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgcmV0dXJuIHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKFBBR0VMSVNUKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzUGFnZUxpc3RJblBhdGggPSAocHJvcGVydHlOYW1lLCBjdXJyZW50Q2xhc3NJRCkgPT4ge1xuICBpZiAoIXByb3BlcnR5TmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwcm9wZXJ0eU5hbWUuc3BsaXQoJy4nKTtcbiAgY29uc3QgbWV0YWRhdGEgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0UHJvcGVydHlNZXRhZGF0YShmaXJzdCwgY3VycmVudENsYXNzSUQpO1xuICBpZiAobWV0YWRhdGE/LnR5cGUgPT09ICdQYWdlIExpc3QnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzUGFnZUxpc3RJblBhdGgocmVzdC5qb2luKCcuJyksIG1ldGFkYXRhPy5wYWdlQ2xhc3MpO1xufTtcblxuLyoqXG4gKiBbZ2V0RW1iZWRkZWRGaWVsZE5hbWVdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICAgICAgY29udmVydGluZyBub3JtYWwgZmllbGQgbmFtZSB0byBlbWJlZGRlZCBmaWVsZCBzdGFydGluZyB3aXRoICFQISBvciAhUEwhXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lICAgRmllbGQgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzSUQgICAgICAgIGNsYXNzSUQgb2YgZGF0YXBhZ2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgICAgICByZXR1cm5zIGNvbnZlcnRlZCBzdHJpbmcgd2l0aCAhUCEgb3IgIVBMISBhbmQgOlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkV4YW1wbGUgZm9yIGdldEVtYmVkZGVkRmllbGROYW1lIDwvY2FwdGlvbj5cbiAqIEZvciBwYWdlIHByb3BlcnR5LCBnZXRFbWJlZGRlZEZpZWxkTmFtZSgnT3JnYW5pc2F0aW9uLk5hbWUnKSByZXR1cm4gJyFQIU9yZ2FuaXNhdGlvbjpOYW1lJ1xuICogRm9yIHBhZ2VMaXN0IHByb3BlcnR5LCBnZXRFbWJlZGRlZEZpZWxkTmFtZSgnRW1wbG95ZWVzLk5hbWUnKSByZXR1cm4gJyFQTCFFbXBsb3llZXM6TmFtZSdcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRkZWRGaWVsZE5hbWUocHJvcGVydHlOYW1lLCBjbGFzc0lEKSB7XG4gIGxldCB2YWx1ZSA9IHByb3BlcnR5TmFtZTtcbiAgaWYgKGlzUGFnZUxpc3RJblBhdGgodmFsdWUsIGNsYXNzSUQpKSB7XG4gICAgdmFsdWUgPSBgIVBMISR7dmFsdWUucmVwbGFjZSgvXFwuL2csICc6Jyl9YDtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGAhUCEke3ZhbHVlLnJlcGxhY2UoL1xcLi9nLCAnOicpfWA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFtwcmVwYXJlUHJvcGVydHlNYXBzXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgcHJlcGFyaW5nIG1hcHMgZm9yIHByb3BlcnR5IG5hbWVzIGFuZCBzZXQgaXQgaW4gZGF0YUFwaSBjb250ZXh0XG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgICBmaWVsZHMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc0lEICBjbGFzc0lEIG9mIGRhdGFwYWdlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dCAgZGF0YUFwaSBjb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBwYWdlTGlzdFByb3BlcnR5IGlzIHByZXNlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQcm9wZXJ0eU1hcHMoZmllbGRzLCBjbGFzc0lELCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgc2V0UHJvcGVydHlNYXBzIH0gPSBjb250ZXh0O1xuICBjb25zdCBtYXBzID0gZmllbGRzLnJlZHVjZShcbiAgICAoYWNjLCBmaWVsZCkgPT4ge1xuICAgICAgbGV0IHsgdmFsdWUgfSA9IGZpZWxkLmNvbmZpZztcbiAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcodmFsdWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgICAgIGlmICh2YWx1ZVswXSA9PT0gJy4nKSB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxKTtcbiAgICAgIH1cbiAgICAgIGxldCBuYW1lID0gdmFsdWU7XG4gICAgICAvLyBQcmVwYXJpbmcgbmFtZSBmb3IgZW1iZWRkZWQgcHJvcGVydHlcbiAgICAgIGlmIChpc0VtYmVkZGVkRmllbGQobmFtZSkpIHtcbiAgICAgICAgbmFtZSA9IGdldEVtYmVkZGVkRmllbGROYW1lKG5hbWUsIGNsYXNzSUQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGFnZUxpc3RQcm9wZXJ0eShuYW1lKSAmJiAhYWNjWzJdKSB7XG4gICAgICAgIGFjY1syXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBhY2NbMF1bdmFsdWVdID0gbmFtZTtcbiAgICAgIGFjY1sxXVtuYW1lXSA9IHZhbHVlO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAgW3t9LCB7fSwgZmFsc2VdXG4gICk7XG4gIHNldFByb3BlcnR5TWFwcyhtYXBzWzBdLCBtYXBzWzFdKTtcbiAgcmV0dXJuIG1hcHNbMl07XG59XG5cbi8qKlxuICogW2dldENvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgIEdldCB0aGUgbWV0YWRhdGEgZm9yIGNvbmZpZ3VyZWQgZW1iZWRkZWQgZmllbGRzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge1NldH0gY29uZmlnRmllbGRzICBTZXQgb2YgY29uZmlnIGZpZWxkc1xuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzSUQgICAgY2xhc0lEIG9mIGRhdGFwYWdlXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICBNZXRhZGF0YSBvZiBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhKGNvbmZpZ0ZpZWxkcywgY2xhc3NJRCkge1xuICBjb25zdCBjb25maWdFbWJlZGRlZEZpZWxkc01ldGE6IGFueVtdID0gW107XG4gIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBsZXQgdmFsdWUgPSBmaWVsZDtcbiAgICBpZiAoaXNFbWJlZGRlZEZpZWxkKHZhbHVlKSkge1xuICAgICAgLy8gY29udmVyc2lvbiBQYWdlLlBhZ2VMaXN0W10ucHJvcGVydHkgPT4gUGFnZS5QYWdlTGlzdC5wcm9wZXJ0eVxuICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUuaW5kZXhPZignWycpKSArIHZhbHVlLnN1YnN0cmluZyh2YWx1ZS5pbmRleE9mKCddJykgKyAxKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGEgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0RW1iZWRkZWRQcm9wZXJ0eU1ldGFkYXRhKHZhbHVlLCBjbGFzc0lEKTtcbiAgICAgIG1ldGEuZmllbGRJRCA9IGZpZWxkO1xuICAgICAgY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLnB1c2gobWV0YSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YTtcbn1cblxuLyoqXG4gKiBbbWVyZ2VDb25maWdFbWJlZGRlZEZpZWxkc01ldGFdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICBHZXQgdGhlIG1ldGFkYXRhIGZvciBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHtBcnJheX0gY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhICBjb25maWcgZmllbGRzIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gbWV0YUZpZWxkcyAgRmllbGRzIG1ldGFkYXRhIEFycmF5LiBDb250YWlucyBtZXRhZGF0YSBvZiBhbGwgdGhlIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDb25maWdFbWJlZGRlZEZpZWxkc01ldGEoY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLCBtZXRhRmllbGRzKSB7XG4gIGNvbnN0IG1lcmdlZE1ldGFGaWVsZHMgPSBbLi4ubWV0YUZpZWxkc107XG4gIGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YS5mb3JFYWNoKGNvbmZpZ0ZpZWxkTWV0YSA9PiB7XG4gICAgY29uc3QgZmllbGRNZXRhID0gbWV0YUZpZWxkcy5maW5kKG1ldGFGaWVsZCA9PiBtZXRhRmllbGQuZmllbGRJRCA9PT0gY29uZmlnRmllbGRNZXRhLmZpZWxkSUQpO1xuICAgIGlmICghZmllbGRNZXRhKSBtZXJnZWRNZXRhRmllbGRzLnB1c2goY29uZmlnRmllbGRNZXRhKTtcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRNZXRhRmllbGRzO1xufVxuXG5jb25zdCBvbGRUb05ld0ZpZWxkVHlwZU1hcHBpbmcgPSB7XG4gICdEYXRlIFRpbWUnOiAnRGF0ZSAmIHRpbWUnLFxuICBEYXRlOiAnRGF0ZSBvbmx5J1xufTtcblxuLyoqXG4gKiBbdXBkYXRlRmllbGRUeXBlXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgICAgVXBkYXRlcyB0aGUgZmllbGQgdHlwZSBpZiBpdHMgY2hhbmdlZCBpbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLiBTdWNoIG1hcHBpbmcgaXMgbWFpbnRhaW5lZCBpbiBvbGRUb05ld0ZpZWxkVHlwZU1hcHBpbmcuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRhRmllbGRzICBGaWVsZHMgbWV0YWRhdGEgQXJyYXkuIENvbnRhaW5zIG1ldGFkYXRhIG9mIGFsbCB0aGUgZmllbGRzLlxuICovXG5mdW5jdGlvbiB1cGRhdGVGaWVsZFR5cGUobWV0YUZpZWxkcykge1xuICBtZXRhRmllbGRzLmZvckVhY2gobWV0YUZpZWxkID0+IHtcbiAgICBpZiAobWV0YUZpZWxkLnR5cGUpIG1ldGFGaWVsZC50eXBlID0gb2xkVG9OZXdGaWVsZFR5cGVNYXBwaW5nW21ldGFGaWVsZC50eXBlXSB8fCBtZXRhRmllbGQudHlwZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFByZXNldE1ldGFBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbmZpZzogeyBsYWJlbCwgdmFsdWUgfVxuICB9ID0gYXR0cmlidXRlO1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgbmFtZTogdmFsdWUuc3RhcnRzV2l0aCgnQCcpID8gdmFsdWUuc3Vic3RyaW5nKDQpIDogdmFsdWUsXG4gICAgbGFiZWw6IGxhYmVsLnN0YXJ0c1dpdGgoJ0AnKSA/IGxhYmVsLnN1YnN0cmluZygzKSA6IGxhYmVsXG4gIH07XG59XG5cbi8qKlxuICogW2dlbmVyYXRlVmlld01ldGFEYXRhXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIGEgbGlzdCBvZiAgbWV0YW9iamVjdHMgb2YgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICByYXdGaWVsZHMgICAgICAgICBMaXN0IG9mIGZpZWxkcyB0byB1cGRhdGUgbWV0YSBmb3JcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lEICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZpZWxkcyB3aXRoIHVwZGF0ZWQgbWV0YSBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVZpZXdNZXRhRGF0YShyYXdGaWVsZHMsIGNsYXNzSUQsIHNob3dGaWVsZCkge1xuICByZXR1cm4gcmF3RmllbGRzLm1hcChpdGVtID0+IGdldERlZmF1bHRWaWV3TWV0YShpdGVtLCBjbGFzc0lELCBzaG93RmllbGQpKTtcbn1cblxuLyoqXG4gKiBbZ2V0Q29uZmlnRmllbGRzXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIGxpc3Qgb2YgY29uZmlnIGZpZWxkcyB3aXRoIHByaW1hcnkgZmllbGRzIG1ldGEgdXBkYXRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBjb25maWdGaWVsZHMgICAgICBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge0FycmF5fSAgIHByaW1hcnlGaWVsZHMgICAgIExpc3Qgb2YgUHJpbWFyeSBGaWVsZHNcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBtZXRhRmllbGRzICAgICAgICBNZXRhZGF0YSBvZiBhbGwgZmllbGRzXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgY2xhc3NJRCAgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCB0aGVpciBtZXRhIHVwZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0ZpZWxkcyhjb25maWdGaWVsZHMsIHByaW1hcnlGaWVsZHMsIG1ldGFGaWVsZHMsIGNsYXNzSUQpIHtcbiAgY29uc3QgcHJlc2V0Q29uZmlnRmllbGRzID0gY29uZmlnRmllbGRzO1xuICBjb25zdCBwcmltYXJ5RmllbGRzVmlld0luZGV4ID0gcHJlc2V0Q29uZmlnRmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5jb25maWcudmFsdWUgPT09ICdweVByaW1hcnlGaWVsZHMnKTtcbiAgaWYgKCFwcmltYXJ5RmllbGRzIHx8ICFwcmltYXJ5RmllbGRzLmxlbmd0aCkge1xuICAgIGlmIChwcmltYXJ5RmllbGRzVmlld0luZGV4IDwgMCkgcmV0dXJuIHByZXNldENvbmZpZ0ZpZWxkcztcblxuICAgIHByZXNldENvbmZpZ0ZpZWxkcy5zcGxpY2UocHJpbWFyeUZpZWxkc1ZpZXdJbmRleCwgMSk7XG5cbiAgICByZXR1cm4gcHJlc2V0Q29uZmlnRmllbGRzO1xuICB9XG5cbiAgaWYgKHByaW1hcnlGaWVsZHNWaWV3SW5kZXggPiAtMSkge1xuICAgIC8vIGxpc3Qgb2YgdW5jb21tb24gZmllbGRzIC0gbm9uIG92ZXJsYXAgb2YgcHJpbWFyeSBmaWVsZHMgZ3JvdXBlZCB2aWV3IGFuZCBpbmRlcGVuZGVudCBlbnRpdHkgY29sdW1ucyBvZiBwcmltYXJ5IHR5cGVcbiAgICBjb25zdCB1bmNvbW1vbkZpZWxkc0xpc3QgPSBwcmltYXJ5RmllbGRzLmZpbHRlcihcbiAgICAgIHByaW1hcnlGaWVsZCA9PiAhcHJlc2V0Q29uZmlnRmllbGRzLnNvbWUocHJlc2V0Q29uZmlnRmllbGQgPT4gcHJlc2V0Q29uZmlnRmllbGQuY29uZmlnLnZhbHVlLnNwbGl0KCcuJylbMV0gPT09IHByaW1hcnlGaWVsZClcbiAgICApO1xuICAgIGNvbnN0IHVuY29tbW9uRmllbGRzUmF3TWV0YTogYW55W10gPSBbXTtcbiAgICB1bmNvbW1vbkZpZWxkc0xpc3QuZm9yRWFjaCh1bmNvbW1vbkZpZWxkID0+IHtcbiAgICAgIGNvbnN0IHVuY29tbW9uRmllbGRNZXRhID0gbWV0YUZpZWxkcy5maW5kKG1ldGFGaWVsZCA9PiBtZXRhRmllbGQuZmllbGRJRCA9PT0gdW5jb21tb25GaWVsZCk7XG4gICAgICBpZiAodW5jb21tb25GaWVsZE1ldGEpIHVuY29tbW9uRmllbGRzUmF3TWV0YS5wdXNoKHVuY29tbW9uRmllbGRNZXRhKTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmNvbW1vbkZpZWxkc0NvbmZpZ01ldGEgPSBnZW5lcmF0ZVZpZXdNZXRhRGF0YSh1bmNvbW1vbkZpZWxkc1Jhd01ldGEsIGNsYXNzSUQsIHRydWUpO1xuXG4gICAgcHJlc2V0Q29uZmlnRmllbGRzLnNwbGljZShwcmltYXJ5RmllbGRzVmlld0luZGV4LCAxLCAuLi51bmNvbW1vbkZpZWxkc0NvbmZpZ01ldGEpO1xuICB9XG4gIHJldHVybiBwcmVzZXRDb25maWdGaWVsZHM7XG59XG5cbi8qKlxuICogW2dldFRhYmxlQ29uZmlnRnJvbVByZXNldE1ldGFdXG4gKiBEZXNjcmlwdGlvbiAtIEdldCB0aGUgdGFibGUgY29uZmlnIGZyb20gdGhlIHByZXNldHMgbWV0YS5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9ICAgIHByZXNldE1ldGEgICAgICAgICAgUHJlc2V0cyBtZXRhXG4gKiBAcGFyYW0gICB7Ym9vbGVhbn0gICBpc01ldGFXaXRoUHJlc2V0cyAgIHRydWUgaWYgbWV0YSBoYXMgcHJlc2V0cyBlbHNlIGZhbHNlXG4gKiBAcGFyYW0gICB7RnVuY3Rpb259ICBnZXRQQ29ubmVjdCAgICAgICAgIENhbGxiYWNrIHRvIGdldCB0aGUgUENvbm5lY3Qgb2JqZWN0XG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgICBjbGFzc0lEICAgICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgICBwcmltYXJ5RmllbGRzICAgICAgIExpc3Qgb2YgUHJpbWFyeSBGaWVsZHNcbiAqIEBwYXJhbSAgIHtBcnJheX0gICAgIG1ldGFGaWVsZHMgICAgICAgICAgTGlzdCBvZiBhbGwgbWV0YWZpZWxkc1xuICogQHJldHVybnMge29iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSBjb25maWcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbmZpZ0Zyb21QcmVzZXRNZXRhKHByZXNldE1ldGEsIGlzTWV0YVdpdGhQcmVzZXRzLCBwQ29ubiQsIGNsYXNzSUQsIHByaW1hcnlGaWVsZHMsIG1ldGFGaWVsZHMpIHtcbiAgbGV0IHByZXNldElkO1xuICBsZXQgcHJlc2V0TmFtZTtcbiAgbGV0IGNhcmRIZWFkZXI7XG4gIGxldCBzZWNvbmRhcnlUZXh0O1xuICBsZXQgdGltZWxpbmVEYXRlO1xuICBsZXQgdGltZWxpbmVUaXRsZTtcbiAgbGV0IHRpbWVsaW5lU3RhdHVzO1xuICBsZXQgdGltZWxpbmVJY29uO1xuICBsZXQgeyBmaWx0ZXJFeHByZXNzaW9uIH0gPSBwQ29ubiQuZ2V0UmF3TWV0YWRhdGEoKS5jb25maWc7XG4gIGxldCBmaWVsZHNNZXRhO1xuICBsZXQgY29uZmlnRmllbGRzO1xuICBpZiAoaXNNZXRhV2l0aFByZXNldHMpIHtcbiAgICBwcmVzZXRJZCA9IHByZXNldE1ldGEuaWQ7XG4gICAgcHJlc2V0TmFtZSA9IHByZXNldE1ldGEubGFiZWw7XG4gICAgY2FyZEhlYWRlciA9IHByZXNldE1ldGEuY2FyZEhlYWRlciAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEuY2FyZEhlYWRlcik7XG4gICAgc2Vjb25kYXJ5VGV4dCA9IHByZXNldE1ldGEuc2Vjb25kYXJ5VGV4dCAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEuc2Vjb25kYXJ5VGV4dCk7XG4gICAgdGltZWxpbmVEYXRlID0gcHJlc2V0TWV0YS50aW1lbGluZURhdGUgJiYgZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZSk7XG4gICAgdGltZWxpbmVUaXRsZSA9IHByZXNldE1ldGEudGltZWxpbmVUaXRsZSAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEudGltZWxpbmVUaXRsZSk7XG4gICAgdGltZWxpbmVTdGF0dXMgPSBwcmVzZXRNZXRhLnRpbWVsaW5lU3RhdHVzICYmIGdldFByZXNldE1ldGFBdHRyaWJ1dGUocHJlc2V0TWV0YS50aW1lbGluZVN0YXR1cyk7XG4gICAgdGltZWxpbmVJY29uID0gcHJlc2V0TWV0YS50aW1lbGluZUljb24gJiYgZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShwcmVzZXRNZXRhLnRpbWVsaW5lSWNvbik7XG4gICAgZmlsdGVyRXhwcmVzc2lvbiA9IHByZXNldE1ldGEuY29uZmlnLmZpbHRlckV4cHJlc3Npb247XG4gICAgW2ZpZWxkc01ldGFdID0gcHJlc2V0TWV0YS5jaGlsZHJlbjtcbiAgICBpZiAoXG4gICAgICBwcmVzZXRNZXRhLnRpbWVsaW5lVGl0bGUgJiZcbiAgICAgICFmaWVsZHNNZXRhLmNoaWxkcmVuLmZpbmQoZmllbGRNZXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkTWV0YT8uY29uZmlnPy52YWx1ZSA9PT0gcHJlc2V0TWV0YS50aW1lbGluZVRpdGxlPy5jb25maWc/LnZhbHVlO1xuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgY29uZmlnIH0gPSBwcmVzZXRNZXRhLnRpbWVsaW5lVGl0bGU7XG4gICAgICBmaWVsZHNNZXRhLmNoaWxkcmVuLnB1c2goeyB0eXBlLCBjb25maWc6IHsgLi4uY29uZmlnLCBzaG93OiBmYWxzZSB9IH0pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZSAmJlxuICAgICAgIWZpZWxkc01ldGEuY2hpbGRyZW4uZmluZChmaWVsZE1ldGEgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRNZXRhPy5jb25maWc/LnZhbHVlID09PSBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZT8uY29uZmlnPy52YWx1ZTtcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIGNvbmZpZyB9ID0gcHJlc2V0TWV0YS50aW1lbGluZURhdGU7XG4gICAgICBmaWVsZHNNZXRhLmNoaWxkcmVuLnB1c2goeyB0eXBlLCBjb25maWc6IHsgLi4uY29uZmlnLCBzaG93OiBmYWxzZSB9IH0pO1xuICAgIH1cbiAgICBjb25maWdGaWVsZHMgPSBnZXRDb25maWdGaWVsZHMoZmllbGRzTWV0YS5jaGlsZHJlbiwgcHJpbWFyeUZpZWxkcywgbWV0YUZpZWxkcywgY2xhc3NJRCk7XG4gIH0gZWxzZSB7XG4gICAgZmllbGRzTWV0YSA9IHByZXNldE1ldGEucHJvcHM7XG4gICAgY29uZmlnRmllbGRzID0gZ2V0Q29uZmlnRmllbGRzKFxuICAgICAgZmllbGRzTWV0YVxuICAgICAgICAuZ2V0UENvbm5lY3QoKVxuICAgICAgICAuZ2V0Q2hpbGRyZW4oKVxuICAgICAgICA/Lm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLmdldFBDb25uZWN0KCkuZ2V0UmF3TWV0YWRhdGEoKTtcbiAgICAgICAgfSksXG4gICAgICBwcmltYXJ5RmllbGRzLFxuICAgICAgbWV0YUZpZWxkcyxcbiAgICAgIGNsYXNzSURcbiAgICApO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJlc2V0SWQsXG4gICAgcHJlc2V0TmFtZSxcbiAgICBjYXJkSGVhZGVyLFxuICAgIHNlY29uZGFyeVRleHQsXG4gICAgdGltZWxpbmVEYXRlLFxuICAgIHRpbWVsaW5lVGl0bGUsXG4gICAgdGltZWxpbmVTdGF0dXMsXG4gICAgdGltZWxpbmVJY29uLFxuICAgIGZpbHRlckV4cHJlc3Npb24sXG4gICAgZmllbGRzTWV0YSxcbiAgICBjb25maWdGaWVsZHNcbiAgfTtcbn1cblxuLyoqXG4gKiBbZ2V0UmVwb3J0Q29sdW1uc11cbiAqIERlc2NyaXB0aW9uIC0gUmV0dXJucyBhIHNldCBvZiBjb2x1bW5zIGZyb20gdGhlIHJlcG9ydCByZXNwb25zZS5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9IHJlc3BvbnNlIC1cbiAqIEByZXR1cm5zIHtTZXR9IFNldCBvZiBjb2x1bW5zIGZyb20gdGhlIHJlcG9ydCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBnZXRSZXBvcnRDb2x1bW5zKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhOiB7IGRhdGE6IHJlcG9ydENvbHVtbnMgfVxuICB9ID0gcmVzcG9uc2U7XG4gIGNvbnN0IHJlcG9ydENvbHVtbnNTZXQgPSBuZXcgU2V0KCk7XG4gIHJlcG9ydENvbHVtbnM/LmZvckVhY2goaXRlbSA9PiB7XG4gICAgbGV0IHZhbCA9IGl0ZW0ucHlGaWVsZE5hbWU7XG4gICAgLy8gUmVtb3ZlICcuJyBmcm9tIGluZGV4IDAgb25seSwgaWYgJy4nIGlzIHByZXNlbnRcbiAgICBpZiAodmFsWzBdID09PSAnLicpIHtcbiAgICAgIHZhbCA9IHZhbC5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIHJlcG9ydENvbHVtbnNTZXQuYWRkKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gcmVwb3J0Q29sdW1uc1NldDtcbn1cblxuLyoqXG4gKiBbZ2V0Q29uZmlnRmllbGRWYWx1ZV1cbiAqIERlc2NyaXRwaW9uIC0gUmV0dXJucyBhIHZhbGlkIHZhbHVlIGZvciBhIGNvbmZpZ3VyYXRpb24gZmllbGQuIFJlbW92ZSBhbnkgYW5ub3RhdGlvbnMgYW5kIGFsc28gXCIuXCJcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9IGNvbmZpZ1xuICogICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbHVlIC0gUmF3IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB2YWx1ZSAtIFZhbHVlIHdpdGggb3V0IGFueSBhbm5vdGF0aW9ucyBvciBcIi5cIlxuICovXG5mdW5jdGlvbiBnZXRDb25maWdGaWVsZFZhbHVlKGNvbmZpZykge1xuICBsZXQgeyB2YWx1ZSB9ID0gY29uZmlnO1xuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcodmFsdWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgaWYgKHZhbHVlWzBdID09PSAnLicpIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBbcHJlcGFyZUNvbmZpZ0ZpZWxkc11cbiAqIERlc2NyaXB0aW9uIC0gUHJlcGFyZXMgYSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWVsZHMgYW5kIHB1c2hlcyBlYWNoIGNvbmZpZyB0eXBlIHRvIGEgc2V0IHVzaW5nIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7b2JqZWN0fSAgICBjb25maWdGaWVsZHMgICAgICAgICAgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gIHB1c2hUb0NvbXBvbmVudHNMaXN0IENhbGxiYWNrIHRvIHB1c2ggdGhlIGZpZWxkIHR5cGUgdG8gYSBzZXQuXG4gKiBAcmV0dXJucyB7U2V0fSAgICAgICBjb25maWdGaWVsZFNldFxuICovXG5mdW5jdGlvbiBwcmVwYXJlQ29uZmlnRmllbGRzKGNvbmZpZ0ZpZWxkcywgcHVzaFRvQ29tcG9uZW50c0xpc3QpIHtcbiAgY29uc3QgY29uZmlnRmllbGRTZXQgPSBuZXcgU2V0KCk7XG4gIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIHB1c2hUb0NvbXBvbmVudHNMaXN0KGl0ZW0udHlwZSk7XG4gICAgY29uc3QgdmFsID0gZ2V0Q29uZmlnRmllbGRWYWx1ZShpdGVtLmNvbmZpZyk7XG4gICAgY29uZmlnRmllbGRTZXQuYWRkKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gY29uZmlnRmllbGRTZXQ7XG59XG5cbi8qKlxuICogW2ZpbmRBdXRob3JlZEZpZWxkXVxuICogRGVzY3JpcHRpb24gLSBGaW5kcyBhbiBhdXRob3JlZCBmaWVsZCBmcm9tIHloZSBsaXN0IG9mIGNvbmZpZyBmaWVsZHMuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgZmllbGRJRCAgICAgIEZpbHRlclxuICogQHJldHVybnMge29iamVjdH0gICAgICAgICAgICAgIGNvbmZpZyB3aXRoIGl0cyBmaWVsZCB2YWx1ZSBlcXVhbCB0byBmaWVsZElELCB3aGljaCBtZWFucyBhbiBhdXRob3JlZCBmaWVsZFxuICovXG5mdW5jdGlvbiBmaW5kQXV0aG9yZWRGaWVsZChjb25maWdGaWVsZHMsIGZpZWxkSUQpIHtcbiAgcmV0dXJuIGNvbmZpZ0ZpZWxkcy5maW5kKGNvbmZpZ0ZpZWxkID0+IHtcbiAgICBjb25zdCB2YWwgPSBnZXRDb25maWdGaWVsZFZhbHVlKGNvbmZpZ0ZpZWxkLmNvbmZpZyk7XG4gICAgcmV0dXJuIHZhbCA9PT0gZmllbGRJRDtcbiAgfSk7XG59XG5cbi8qKlxuICogW2ZpbmRBbmRVcGRhdGVBdXRob3JlZEZpZWxkQ29uZmlnXVxuICogRGVzY3JpcHRpb24gLSBGaW5kIHRoZSBhdXRob3JlZCBmaWVsZCwgYW5kIHVwZGF0ZSBpdHMgY29uZmlnLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIGNvbmZpZ0ZpZWxkcyBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge29iamVjdH0gIGl0ZW0gICAgICAgIEZpZWxkIGl0ZW0gdG8gY29weSBkaXNwbGF5QXMgYW5kIGNhdGVnb3J5IGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgY2xhc3NJZCAgICAgY2xhc3NJRCBmcm9tIHRoZSByZXNwb25zZVxuICovXG5mdW5jdGlvbiBmaW5kQW5kVXBkYXRlQXV0aG9yZWRGaWVsZENvbmZpZyhjb25maWdGaWVsZHMsIGl0ZW0sIGNsYXNzSWQpIHtcbiAgY29uc3QgYXV0aG9yZWRGaWVsZCA9IGZpbmRBdXRob3JlZEZpZWxkKGNvbmZpZ0ZpZWxkcywgaXRlbS5maWVsZElEKTtcbiAgaWYgKGF1dGhvcmVkRmllbGQ/LmNvbmZpZykge1xuICAgIGlmIChpdGVtLmRpc3BsYXlBcykge1xuICAgICAgYXV0aG9yZWRGaWVsZC5jb25maWcuZGlzcGxheUFzID0gaXRlbS5kaXNwbGF5QXM7XG4gICAgfVxuICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLmNsYXNzSUQgPSBpdGVtLmNsYXNzSUQgPz8gY2xhc3NJZDtcblxuICAgIGlmIChhdXRob3JlZEZpZWxkLnR5cGUgPT09IFVTRVJfUkVGRVJFTkNFKSB7XG4gICAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5hc3NvY2lhdGlvbklEID0gaXRlbS5hc3NvY2lhdGlvbklEIHx8IGl0ZW0uZmllbGRJRDtcbiAgICB9XG4gICAgYXV0aG9yZWRGaWVsZC5jb25maWcuY2F0ZWdvcnkgPSBpdGVtLmNhdGVnb3J5O1xuICAgIC8vIEZpZWxkVHlwZSBpZGVudGlmaWVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGNvbmZpZ3VyZWQgYXMgcGlja0xpc3RcbiAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5maWVsZFR5cGUgPSBpdGVtLmZpZWxkVHlwZTtcbiAgICAvLyB0eXBlIGRlZmluZWQgb24gdGhlIHByb3BlcnR5IHJ1bGUsXG4gICAgLy8gdXNlZCBmb3IgdGhlIHBpY2tsaXN0IGZpZWxkIHRvIGFzc2lnbiB0aGUgYXBwcm9wcmlhdGUgdHlwZVxuICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLnByb3BlcnR5VHlwZSA9IGl0ZW0uZGF0YVR5cGUgfHwgaXRlbS50eXBlO1xuICB9XG59XG5cbi8qKlxuICogW2lzQW5FeHRyYUZpZWxkXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlzIGFuIGV4dHJhIGZpZWxkLiBFeHRyYSBmaWVsZCBpcyB0aGUgb25lIHdoaWNoIGlzIG5vdCBhdXRob3JlZCBidXQgcGFydCBvZiB0aGUgcmVwb3J0LlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIGNvbmZpZ0ZpZWxkcyAgICAgIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7U2V0fSAgICAgY29uZmlnRmllbGRTZXQgICAgU2V0IGlmIEF1dGhvcmVkIGZpbGVkIHZhbHVlc1xuICogQHBhcmFtICAge1NldH0gICAgIHJlcG9ydENvbHVtbnNTZXQgU2V0IG9mIGNvbHVtbnMgZnJvbSB0aGUgcmVwb3J0XG4gKiBAcGFyYW0gICB7b2JqZWN0fSAgaXRlbSAgICAgICAgICAgICBDb25maWcgZmllbGQgaXRlbVxuICogQHBhcmFtICAge3N0cmluZ30gIGNsYXNzSWQgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSAgIHtib29sZWFufSBzaG93RHluYW1pY0ZpZWxkcyBGbGFnIGluZGljYXRpbmcgd2hldGhlciBmaWVsZHMgYXJlIGZldGNoZWQgZHluYW1pY2FsbHkgYXQgcnVudGltZVxuICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgdHJ1ZSBJZiB0aGUgZmllbGQgaXMgYW4gZXh0cmEgZmllbGQgZWxzZSBmYWxzZS5cbiAqL1xuZnVuY3Rpb24gaXNBbkV4dHJhRmllbGQoY29uZmlnRmllbGRzLCBjb25maWdGaWVsZFNldCwgcmVwb3J0Q29sdW1uc1NldCwgaXRlbSwgY2xhc3NJZCwgc2hvd0R5bmFtaWNGaWVsZHMpIHtcbiAgLy8gSXMgdGhlIGZpZWxkIGFscmVhZHkgcHJlc2VudCBpbiBhdXRob3JpbmcgbWV0YWRhdGE/XG4gIC8vIE11dGF0ZXMgY29uZmlnIGZpZWxkcyB0byBjb3B5IGRpc3BsYXlBcyBhbmQgY2F0ZWdvcnkgaW5mb3JtYXRpb25cbiAgaWYgKGNvbmZpZ0ZpZWxkU2V0LmhhcyhpdGVtLmZpZWxkSUQpKSB7XG4gICAgZmluZEFuZFVwZGF0ZUF1dGhvcmVkRmllbGRDb25maWcoY29uZmlnRmllbGRzLCBpdGVtLCBjbGFzc0lkKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBmaWVsZCBpcyBub3QgYXV0aG9yZWQgYW5kIG5vdCBwYXJ0IG9mIHJlcG9ydCBjb2x1bW5zIHRoZW4gZGlzY2FyZCBpdFxuICByZXR1cm4gc2hvd0R5bmFtaWNGaWVsZHMgfHwgISFyZXBvcnRDb2x1bW5zU2V0LmhhcyhpdGVtLmZpZWxkSUQpO1xufVxuXG4vKipcbiAqIFtwcmVwYXJlRXh0cmFGaWVsZHNdXG4gKiBEZXNjcmlwdGlvbiAtIFJldHVybnMgYSBsaXN0IG9mIGV4dHJhIGZpZWxkcyB3aXRoIHRoZWlyIG1ldGEgdXBkYXRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBtZXRhRmllbGRzICAgICAgIExpc3Qgb2YgZmllbGRzXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzICAgICAgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtTZXR9ICAgICBjb25maWdGaWVsZFNldCAgICBTZXQgaWYgQXV0aG9yZWQgZmlsZWQgdmFsdWVzXG4gKiBAcGFyYW0gICB7U2V0fSAgICAgcmVwb3J0Q29sdW1uc1NldCBTZXQgb2YgY29sdW1ucyBmcm9tIHRoZSByZXBvcnRcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lEICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcGFyYW0gICB7Ym9vbGVhbn0gc2hvd0R5bmFtaWNGaWVsZHMgRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgZmllbGRzIGFyZSBmZXRjaGVkIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWVcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZXh0cmEgZmllbGRzIHdpdGggdGhlaXIgbWV0YSB1cGRhdGVkLlxuICovXG5mdW5jdGlvbiBwcmVwYXJlRXh0cmFGaWVsZHMobWV0YUZpZWxkcywgY29uZmlnRmllbGRzLCBjb25maWdGaWVsZFNldCwgcmVwb3J0Q29sdW1uc1NldCwgY2xhc3NJRCwgc2hvd0R5bmFtaWNGaWVsZHMpIHtcbiAgLy8gRmlsdGVyIGFsbCB0aGUgZXh0cmEgZmllbGRzXG4gIGNvbnN0IGV4dHJhRmlsZWRzID0gbWV0YUZpZWxkcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgcmV0dXJuIGlzQW5FeHRyYUZpZWxkKGNvbmZpZ0ZpZWxkcywgY29uZmlnRmllbGRTZXQsIHJlcG9ydENvbHVtbnNTZXQsIGl0ZW0sIGNsYXNzSUQsIHNob3dEeW5hbWljRmllbGRzKTtcbiAgfSk7XG4gIHJldHVybiBnZW5lcmF0ZVZpZXdNZXRhRGF0YShleHRyYUZpbGVkcywgY2xhc3NJRCwgZmFsc2UpO1xuICAvLyBVcGRhdGUgdGhlIG1ldGEgb2JqZWN0IG9mIGVhY2ggb2YgdGhlIGV4dHJhIGZpZWxkcy5cbn1cblxuY29uc3QgQXNzaWduRGFzaE9iamVjdHMgPSBbJ0Fzc2lnbi1Xb3JrbGlzdCcsICdBc3NpZ24tV29ya0Jhc2tldCddO1xuXG5mdW5jdGlvbiBwb3B1bGF0ZVJlbmRlcmluZ09wdGlvbnMobmFtZSwgY29uZmlnLCBmaWVsZCkge1xuICBjb25zdCBzaG91bGREaXNwbGF5QXNTZW1hbnRpY0xpbmsgPSAnZGlzcGxheUFzTGluaycgaW4gZmllbGQuY29uZmlnICYmIGZpZWxkLmNvbmZpZy5kaXNwbGF5QXNMaW5rO1xuICBpZiAoc2hvdWxkRGlzcGxheUFzU2VtYW50aWNMaW5rKSB7XG4gICAgY29uZmlnLmN1c3RvbU9iamVjdC5pc0Fzc2lnbm1lbnRMaW5rID0gQXNzaWduRGFzaE9iamVjdHMuaW5jbHVkZXMoZmllbGQuY29uZmlnLmNsYXNzSUQpO1xuICAgIGlmIChmaWVsZC5jb25maWcudmFsdWUuc3RhcnRzV2l0aCgnQENBJykpIHtcbiAgICAgIGNvbmZpZy5jdXN0b21PYmplY3QuaXNBc3NvY2lhdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGNvbmZpZy5jZWxsUmVuZGVyZXIgPSBmb3JtYXRDb25zdGFudHMuV29ya0xpbms7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3B5U3RhdHVzV29yaycgfHwgbmFtZSA9PT0gJ3B5QXNzaWdubWVudFN0YXR1cycpIHtcbiAgICBjb25maWcuY2VsbFJlbmRlcmVyID0gZm9ybWF0Q29uc3RhbnRzLldvcmtTdGF0dXM7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3B4VXJnZW5jeVdvcmsnKSB7XG4gICAgY29uZmlnLmNlbGxSZW5kZXJlciA9IGZvcm1hdENvbnN0YW50cy5JbnRlZ2VyO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbHVtbnMoZmllbGRzOiBhbnlbXSA9IFtdLCBnZXRNYXBwZWRQcm9wZXJ0eTogYW55ID0gbnVsbCkge1xuICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQsIG9yaWdpbmFsQ29sSW5kZXgpID0+IHtcbiAgICBsZXQgbmFtZSA9IGZpZWxkLmNvbmZpZy52YWx1ZTtcblxuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKG5hbWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgICBpZiAobmFtZVswXSA9PT0gJy4nKSBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIG5hbWUgPSBnZXRNYXBwZWRQcm9wZXJ0eT8uKG5hbWUpID8/IG5hbWU7XG5cbiAgICBsZXQgbGFiZWwgPSBmaWVsZC5jb25maWcubGFiZWwgfHwgZmllbGQuY29uZmlnLmNhcHRpb247XG4gICAgY29uc3QgeyBzaG93ID0gdHJ1ZSwgZGlzcGxheUFzIH0gPSBmaWVsZC5jb25maWc7XG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgbGFiZWwgPSBsYWJlbC5zdWJzdHJpbmcoMyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGxhYmVsLFxuICAgICAgc2hvdyxcbiAgICAgIGNsYXNzSUQ6IGZpZWxkLmNvbmZpZy5jbGFzc0lELFxuICAgICAgaWQ6IGZpZWxkLmlkIHx8IG5hbWUgfHwgb3JpZ2luYWxDb2xJbmRleCxcbiAgICAgIGRpc3BsYXlBcyxcbiAgICAgIGFzc29jaWF0aW9uSUQ6IGZpZWxkLmNvbmZpZy5hc3NvY2lhdGlvbklELFxuICAgICAgLi4uKGZpZWxkLmNvbmZpZy5jbGFzc0lEICYmIHsgY2F0ZWdvcnk6IGZpZWxkLmNvbmZpZy5jYXRlZ29yeSB9KSxcbiAgICAgIGN1c3RvbU9iamVjdDoge30sXG4gICAgICBmaWVsZFR5cGU6IGZpZWxkLmNvbmZpZy5maWVsZFR5cGUsXG4gICAgICBtZXRhOiB7XG4gICAgICAgIC4uLmZpZWxkXG4gICAgICB9XG4gICAgfTtcblxuICAgIHBvcHVsYXRlUmVuZGVyaW5nT3B0aW9ucyhuYW1lLCBjb25maWcsIGZpZWxkKTtcblxuICAgIHJldHVybiBjb25maWc7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SXRlbUtleSA9IGZpZWxkcyA9PiB7XG4gIGxldCBpdGVtS2V5O1xuICBpZiAoZmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5pZCA9PT0gJ3B5R1VJRCcpID4gLTEpIHtcbiAgICBpdGVtS2V5ID0gJ3B5R1VJRCc7XG4gIH0gZWxzZSB7XG4gICAgaXRlbUtleSA9ICdwekluc0tleSc7XG4gIH1cbiAgcmV0dXJuIGl0ZW1LZXk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhdGNoUXVlcnlGaWVsZHMoZmllbGRzLCBpc0RhdGFPYmplY3QgPSBmYWxzZSwgY2xhc3NJRCA9ICcnKSB7XG4gIGNvbnN0IHF1ZXJ5RmllbGRzOiBhbnlbXSA9IFtdO1xuICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgcGF0Y2hGaWVsZHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpZWxkLmNlbGxSZW5kZXJlciA9PT0gJ1dvcmtMaW5rJykge1xuICAgICAgaWYgKGZpZWxkLmN1c3RvbU9iamVjdCAmJiBmaWVsZC5jdXN0b21PYmplY3QuaXNBc3NpZ25tZW50TGluaykge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbk5hbWUgPSBmaWVsZC5uYW1lLmluY2x1ZGVzKCc6JykgPyBgJHtmaWVsZC5uYW1lLnNwbGl0KCc6JylbMF19OmAgOiAnJztcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbk5hbWV9cHpJbnNLZXlgKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbk5hbWV9cHhSZWZPYmplY3RDbGFzc2ApO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC5jdXN0b21PYmplY3QgJiYgZmllbGQuY3VzdG9tT2JqZWN0LmlzQXNzb2NpYXRpb24pIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25DYXRlZ29yeSA9IGZpZWxkLm5hbWUuc3BsaXQoJzonKVswXTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbkNhdGVnb3J5fTpweUlEYCk7XG4gICAgICAgIHBhdGNoRmllbGRzLnB1c2goYCR7YXNzb2NpYXRpb25DYXRlZ29yeX06cHpJbnNLZXlgKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbkNhdGVnb3J5fTpweE9iakNsYXNzYCk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGF0YU9iamVjdCkge1xuICAgICAgICBjb25zdCBkYXRhVmlld05hbWUgPSBQQ29yZS5nZXREYXRhVHlwZVV0aWxzKCkuZ2V0U2F2YWJsZURhdGFQYWdlKGNsYXNzSUQpO1xuICAgICAgICBjb25zdCBkYXRhUGFnZUtleXMgPSBQQ29yZS5nZXREYXRhVHlwZVV0aWxzKCkuZ2V0RGF0YVBhZ2VLZXlzKGRhdGFWaWV3TmFtZSk7XG4gICAgICAgIGRhdGFQYWdlS2V5cz8uZm9yRWFjaChpdGVtID0+IChpdGVtLmlzQWx0ZXJuYXRlS2V5U3RvcmFnZSA/IHBhdGNoRmllbGRzLnB1c2goaXRlbS5saW5rZWRGaWVsZCkgOiBwYXRjaEZpZWxkcy5wdXNoKGl0ZW0ua2V5TmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGNoRmllbGRzLnB1c2goJ3B5SUQnKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaCgncHpJbnNLZXknKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaCgncHhPYmpDbGFzcycpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXRjaEZpZWxkcy5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKCFxdWVyeUZpZWxkcy5maW5kKHEgPT4gcSA9PT0gaykpIHtcbiAgICAgICAgcXVlcnlGaWVsZHMucHVzaChrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHF1ZXJ5RmllbGRzO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgcmVuZGVyZXIgdHlwZSBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdHlwZSBQYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUGFnZUZpZWxkc0NvbmZpZyhjb25maWdGaWVsZHMsIHBhcmVudENsYXNzSUQpIHtcbiAgcmV0dXJuIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWc6IHsgdmFsdWUgfVxuICAgIH0gPSBpdGVtO1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IFBDb3JlLmdldEFubm90YXRpb25VdGlscygpLmdldFByb3BlcnR5TmFtZSh2YWx1ZSk7XG4gICAgaWYgKGlzRW1iZWRkZWRGaWVsZCh2YWx1ZSkgJiYgIWlzUGFnZUxpc3RJblBhdGgocHJvcGVydHlOYW1lLCBwYXJlbnRDbGFzc0lEKSkge1xuICAgICAgaXRlbS5jb25maWcuY29tcG9uZW50VHlwZSA9IHR5cGU7XG4gICAgICBpdGVtLnR5cGUgPSAnUGFnZVByb3BlcnR5UmVuZGVyZXInO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQ29udGV4dFJlc3BvbnNlID0gYXN5bmMgKGNvbnRleHQsIHBhcmFtcykgPT4ge1xuICBjb25zdCB7IHBDb25uJCwgYXBpQ29udGV4dCwgY2hpbGRyZW4sIHNob3dEeW5hbWljRmllbGRzLCByZWZlcmVuY2VMaXN0LCBpc0RhdGFPYmplY3QgfSA9IHBhcmFtcztcbiAgLy8gbGV0IHsgbGlzdENvbnRleHQgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBwcm9taXNlc1Jlc3BvbnNlQXJyYXksIGFwaUNvbnRleHQ6IG90aGVyQ29udGV4dCB9ID0gY29udGV4dDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tdW51c2VkLWNvbGxlY3Rpb25cbiAgY29uc3QgbGlzdE9mQ29tcG9uZW50czogYW55W10gPSBbXTtcbiAgY29uc3Qge1xuICAgIGRhdGE6IHsgZmllbGRzOiBtZXRhRmllbGRzLCBjbGFzc0lELCBpc1F1ZXJ5YWJsZSB9XG4gIH0gPSBwcm9taXNlc1Jlc3BvbnNlQXJyYXlbMF07XG4gIGxldCB7XG4gICAgZGF0YTogeyBwcmltYXJ5RmllbGRzIH1cbiAgfSA9IHByb21pc2VzUmVzcG9uc2VBcnJheVswXTtcbiAgLy8gV2hlbiBsaXN0IGlzIGNvbmZpZ3VyZWQgd2l0aCBJbmNsdWRlIGFsbCBjbGFzcyBmaWVsZHMgY29uZmlndXJhdGlvbiwgcHJvdmlkZSBzdXBwb3J0IGZvciBQcmltYXJ5IGZpZWxkcyBjb2x1bW5cbiAgaWYgKHNob3dEeW5hbWljRmllbGRzKSB7XG4gICAgY29uc3Qgc291cmNlTWV0YWRhdGEgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0RGF0YVBhZ2VNZXRhZGF0YShyZWZlcmVuY2VMaXN0KTtcbiAgICBpZiAoc291cmNlTWV0YWRhdGE/LnByaW1hcnlGaWVsZHMpIHtcbiAgICAgIHByaW1hcnlGaWVsZHMgPSBzb3VyY2VNZXRhZGF0YS5wcmltYXJ5RmllbGRzO1xuICAgIH1cbiAgICAvLyB1cGRhdGluZyBtZXRhRGF0YSBmaWVsZElEIHRvIG5vcm1hbCBwcm9wZXJ0eSBpZiBpdCBoYXMgZmllbGRJRCBzdGFydHMgd2l0aCAhUCEgb3IgIVBMIVxuICAgIHVwZGF0ZU1ldGFFbWJlZGRlZEZpZWxkSUQobWV0YUZpZWxkcyk7XG4gIH1cbiAgdXBkYXRlRmllbGRUeXBlKG1ldGFGaWVsZHMpO1xuXG4gIGlmIChpc0RhdGFPYmplY3QpIHtcbiAgICBjb25zdCBjb21wb3NpdGVLZXlzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGFWaWV3TmFtZSA9IFBDb3JlLmdldERhdGFUeXBlVXRpbHMoKS5nZXRTYXZhYmxlRGF0YVBhZ2UoY2xhc3NJRCk7XG4gICAgY29uc3QgZGF0YVBhZ2VLZXlzID0gUENvcmUuZ2V0RGF0YVR5cGVVdGlscygpLmdldERhdGFQYWdlS2V5cyhkYXRhVmlld05hbWUpO1xuICAgIGRhdGFQYWdlS2V5cz8uZm9yRWFjaChpdGVtID0+IChpdGVtLmlzQWx0ZXJuYXRlS2V5U3RvcmFnZSA/IGNvbXBvc2l0ZUtleXMucHVzaChpdGVtLmxpbmtlZEZpZWxkKSA6IGNvbXBvc2l0ZUtleXMucHVzaChpdGVtLmtleU5hbWUpKSk7XG4gICAgaWYgKGNvbXBvc2l0ZUtleXMubGVuZ3RoKSB7XG4gICAgICBvdGhlckNvbnRleHQuc2V0Q29tcG9zaXRlS2V5cyhjb21wb3NpdGVLZXlzKTtcbiAgICB9XG4gICAgb3RoZXJDb250ZXh0LmZldGNoUm93QWN0aW9uRGV0YWlscyA9IG51bGw7XG4gIH1cblxuICBjb25zdCBwcmVzZXRBcnJheSA9IFtdO1xuICBjb25zdCByYXdNZXRhZGF0YSA9IHBDb25uJC5nZXRSYXdNZXRhZGF0YSgpLmNvbmZpZztcbiAgY29uc3QgcmF3UHJlc2V0cyA9IHJhd01ldGFkYXRhLnByZXNldHM7XG4gIGNvbnN0IGlzTWV0YVdpdGhQcmVzZXRzID0gcmF3UHJlc2V0cyAmJiByYXdQcmVzZXRzLmxlbmd0aCAhPT0gMDtcbiAgY29uc3QgY2hpbGRyZW5JdGVyYXRvciA9IGlzTWV0YVdpdGhQcmVzZXRzID8gcmF3UHJlc2V0cyA6IGNoaWxkcmVuO1xuICBjb25zdCByZXNvbHZlZFByZXNldHMgPSBwQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKS5wcmVzZXRzO1xuICBsZXQgZmllbGRzO1xuICBsZXQgdGFibGVDb25maWc7XG4gIGNoaWxkcmVuSXRlcmF0b3I/LmZvckVhY2goKHByZXNldE1ldGEsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBjb25maWdGaWVsZHMgfSA9IGdldFRhYmxlQ29uZmlnRnJvbVByZXNldE1ldGEoXG4gICAgICB7IC4uLnByZXNldE1ldGEsIGxhYmVsOiByZXNvbHZlZFByZXNldHNbaW5kZXhdLmxhYmVsIH0sXG4gICAgICBpc01ldGFXaXRoUHJlc2V0cyxcbiAgICAgIHBDb25uJCxcbiAgICAgIGNsYXNzSUQsXG4gICAgICBwcmltYXJ5RmllbGRzLFxuICAgICAgbWV0YUZpZWxkc1xuICAgICk7XG4gICAgY29uc3QgcHVzaFRvQ29tcG9uZW50c0xpc3QgPSBmaWVsZFR5cGUgPT4ge1xuICAgICAgbGlzdE9mQ29tcG9uZW50cy5wdXNoKGZpZWxkVHlwZSk7XG4gICAgfTtcbiAgICAvLyByZWFkIHJlcG9ydCBjb2x1bW5zIHJlc3BvbnNlIC0gaW4gY2FzZSBvZiBub25xdWVyeWFibGUgaWdub3JlIHRoZSByZXNwb25zZSBhbmQgcmVseSBvbmx5IG9uIHRoZSBmaWVsZHMgY29uZmlndXJlZCBhdCBhdXRob2luZyB0aW1lIGluIHByZXNldHNcbiAgICBjb25zdCByZXBvcnRDb2x1bW5zU2V0ID0gaXNRdWVyeWFibGUgPyBnZXRSZXBvcnRDb2x1bW5zKHByb21pc2VzUmVzcG9uc2VBcnJheVsxXSkgOiBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBjb25maWdGaWVsZFNldCA9IHByZXBhcmVDb25maWdGaWVsZHMoY29uZmlnRmllbGRzLCBwdXNoVG9Db21wb25lbnRzTGlzdCk7XG5cbiAgICAvLyBGSVhNRSAjRW1iZWRkZWRQcm9wZXJ0eVBhdGNoXG4gICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgbWVyZ2UgbG9naWMgd2hlbiB0aGUgbWV0YWRhdGEgcmVzcG9uc2UgaW5jbHVkZXMgYWxsIG9wdGltaXplZCBlbWJlZGRlZCBwYWdlIGFuZCBwYWdlbGlzdHNcbiAgICAvLyBtZXJnaW5nIGNvbmZpZ3VyZWQgZW1iZWRkZWQgcHJvcGVydGllcyB3aXRoIG1ldGFkYXRhIHNvIHRoYXQgd2hpbGUgcHJlcGFyaW5nIGV4dHJhIGZpZWxkcywgY29uZmlnIGZpZWxkcyBjYW4gZ2V0IG90aGVyIHByb3BlcnRpZXMgZnJvbSBtZXRhKGVnOiBjYXRlZ29yeSwgZGlzcGxheUFzTGluaylcbiAgICAvLyBnZXQgY29uZmlndXJlZCBlbWJlZGRlZCBwcm9wZXJ0aWVzIG1ldGFkYXRhIGFuZCBnZXQgbmV3IG1lcmdlZE1ldGFGaWVsZHNcbiAgICBjb25zdCBjb25maWdFbWJlZGRlZEZpZWxkc01ldGEgPSBnZXRDb25maWdFbWJlZGRlZEZpZWxkc01ldGEoY29uZmlnRmllbGRTZXQsIGNsYXNzSUQpO1xuICAgIGNvbnN0IG1lcmdlZE1ldGFGaWVsZHMgPSBtZXJnZUNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YShjb25maWdFbWJlZGRlZEZpZWxkc01ldGEsIG1ldGFGaWVsZHMpO1xuXG4gICAgY29uc3QgZXh0cmFGaWVsZHMgPSBwcmVwYXJlRXh0cmFGaWVsZHMoXG4gICAgICBtZXJnZWRNZXRhRmllbGRzLCAvLyBwYXNzaW5nIG5ldyBtZXJnZWQgbWV0YSBmaWVsZHMgd2hpY2ggaGFzIG1ldGEgb2YgY29uZmlndXJlZCBlbWJlZGRlZCBmaWVsZHMgb2YgY3VycmVudCBwcmVzZXRcbiAgICAgIGNvbmZpZ0ZpZWxkcyxcbiAgICAgIGNvbmZpZ0ZpZWxkU2V0LFxuICAgICAgcmVwb3J0Q29sdW1uc1NldCxcbiAgICAgIGNsYXNzSUQsXG4gICAgICBzaG93RHluYW1pY0ZpZWxkc1xuICAgICk7XG5cbiAgICBpZiAoaXNRdWVyeWFibGUpIHtcbiAgICAgIHVwZGF0ZVBhZ2VGaWVsZHNDb25maWcoY29uZmlnRmllbGRzLCBjbGFzc0lEKTtcbiAgICAgIHByZXBhcmVQcm9wZXJ0eU1hcHMoWy4uLmNvbmZpZ0ZpZWxkcywgLi4uZXh0cmFGaWVsZHNdLCBjbGFzc0lELCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGdldE1hcHBlZFByb3BlcnR5IH0gPSBjb250ZXh0O1xuXG4gICAgZmllbGRzID0gaW5pdGlhbGl6ZUNvbHVtbnMoWy4uLmNvbmZpZ0ZpZWxkcywgLi4uZXh0cmFGaWVsZHNdLCBnZXRNYXBwZWRQcm9wZXJ0eSk7XG4gICAgY29uc3QgcGF0Y2hRdWVyeUZpZWxkcyA9IHByZXBhcmVQYXRjaFF1ZXJ5RmllbGRzKGZpZWxkcywgaXNEYXRhT2JqZWN0LCBjbGFzc0lEKTtcbiAgICBjb25zdCBpdGVtS2V5ID0gZ2V0SXRlbUtleShmaWVsZHMpO1xuICAgIHRhYmxlQ29uZmlnID0geyBmaWVsZERlZnM6IGZpZWxkcywgcGF0Y2hRdWVyeUZpZWxkcywgaXRlbUtleSwgaXNRdWVyeWFibGUgfTtcbiAgfSk7XG4gIGNvbnN0IG1ldGEgPSB0YWJsZUNvbmZpZztcbiAgcGFyYW1zLmxpc3RDb250ZXh0ID0geyBtZXRhLCBwcmVzZXRzOiBwcmVzZXRBcnJheSwgYXBpQ29udGV4dDogeyAuLi5hcGlDb250ZXh0IH0gfTtcbiAgcmV0dXJuIHBhcmFtcy5saXN0Q29udGV4dDtcbn07XG4iXX0=
662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvdGVtcGxhdGUvbGlzdC12aWV3L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS3ZELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQztBQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUM7QUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixVQUFVLEVBQUUsWUFBWTtJQUN4QixPQUFPLEVBQUUsU0FBUztJQUNsQixRQUFRLEVBQUUsVUFBVTtDQUNyQixDQUFDO0FBRUYsTUFBTSxPQUFPO0lBR1g7UUFDRSxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsZUFBZSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsRUFBRSwyQkFBMkIsR0FBRyxFQUFFO1FBQ2hGLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRztZQUN0QyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0M7WUFDeEMsR0FBRywyQkFBMkI7U0FDL0IsQ0FBQztRQUNGLElB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QXdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFN0YsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQ3BDLGdCQUFnQixFQUFFLGdHQUFnRztRQUNsSCxZQUFZLEVBQ1osY0FBYyxFQUNkLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsaUJBQWlCLENBQ2xCLENBQUM7UUFFRixJQUFJLFdBQVcsRUFBRTtZQUNmLHNCQUFzQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzFFO1FBRUQsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXRDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNqRixNQUFNLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLFdBQVcsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzlFLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDbkYsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldERlZmF1bHRWaWV3TWV0YSB9IGZyb20gJy4vRGVmYXVsdFZpZXdNZXRhJztcblxuLy8gUmVtb3ZlIHRoaXMgYW5kIHVzZSBcInJlYWxcIiBQQ29yZSB0eXBlIG9uY2UgLmQudHMgaXMgZml4ZWQgKGN1cnJlbnRseSBzaG93cyA1IGVycm9ycylcbmRlY2xhcmUgY29uc3QgUENvcmU6IGFueTtcblxuY29uc3QgVVNFUl9SRUZFUkVOQ0UgPSAnVXNlclJlZmVyZW5jZSc7XG5jb25zdCBQQUdFID0gJyFQISc7XG5jb25zdCBQQUdFTElTVCA9ICchUEwhJztcblxuZXhwb3J0IGNvbnN0IGZvcm1hdENvbnN0YW50cyA9IHtcbiAgV29ya1N0YXR1czogJ1dvcmtTdGF0dXMnLFxuICBJbnRlZ2VyOiAnSW50ZWdlcicsXG4gIFdvcmtMaW5rOiAnV29ya0xpbmsnXG59O1xuXG5jbGFzcyBEYXRhQXBpIHtcbiAgbWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHk6IGFueTtcbiAgb3JpZ2luYWxQcm9wZXJ0eVRvTWFwcGVkUHJvcGVydHk6IGFueTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5vcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eSA9IHt9O1xuICAgIHRoaXMubWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHkgPSB7fTtcbiAgICB0aGlzLnNldFByb3BlcnR5TWFwcyA9IHRoaXMuc2V0UHJvcGVydHlNYXBzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXRNYXBwZWRQcm9wZXJ0eSA9IHRoaXMuZ2V0TWFwcGVkUHJvcGVydHkuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE9yaWdpbmFsUHJvcGVydHkgPSB0aGlzLmdldE9yaWdpbmFsUHJvcGVydHkuYmluZCh0aGlzKTtcbiAgfVxuXG4gIHNldFByb3BlcnR5TWFwcyhvcmlnaW5hbFRvTWFwcGVkUHJvcGVydHlPYmogPSB7fSwgbWFwcGVkVG9PcmlnaW5hbFByb3BlcnR5T2JqID0ge30pIHtcbiAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHlUb01hcHBlZFByb3BlcnR5ID0ge1xuICAgICAgLi4udGhpcy5vcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eSxcbiAgICAgIC4uLm9yaWdpbmFsVG9NYXBwZWRQcm9wZXJ0eU9ialxuICAgIH07XG4gICAgdGhpcy5tYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eSA9IHtcbiAgICAgIC4uLnRoaXMubWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHksXG4gICAgICAuLi5tYXBwZWRUb09yaWdpbmFsUHJvcGVydHlPYmpcbiAgICB9O1xuICB9XG5cbiAgZ2V0TWFwcGVkUHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRvTWFwcGVkUHJvcGVydHlbcHJvcGVydHlOYW1lXSA/PyBwcm9wZXJ0eU5hbWU7XG4gIH1cblxuICBnZXRPcmlnaW5hbFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcHBlZFByb3BlcnR5VG9PcmlnaW5hbFByb3BlcnR5W3Byb3BlcnR5TmFtZV0gPz8gcHJvcGVydHlOYW1lO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0KGNvbXBvbmVudENvbmZpZykge1xuICBjb25zdCB7XG4gICAgcHJvbWlzZXNBcnJheSA9IFtdIC8vIGFycmF5IG9mIHByb21pc2VzIHdoaWNoIGNhbiBiZSBpbnZva2VkIHBhcmFsZWxseSxcbiAgfSA9IGNvbXBvbmVudENvbmZpZztcbiAgY29uc3QgcHJvbWlzZXNSZXNwb25zZUFycmF5ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXNBcnJheSk7XG4gIGNvbnN0IGRhdGFBcGkgPSBuZXcgRGF0YUFwaSgpO1xuICByZXR1cm4ge1xuICAgIHByb21pc2VzUmVzcG9uc2VBcnJheSxcbiAgICBzZXRQcm9wZXJ0eU1hcHM6IGRhdGFBcGkuc2V0UHJvcGVydHlNYXBzLFxuICAgIGdldE1hcHBlZFByb3BlcnR5OiBkYXRhQXBpLmdldE1hcHBlZFByb3BlcnR5LFxuICAgIGdldE9yaWdpbmFsUHJvcGVydHk6IGRhdGFBcGkuZ2V0T3JpZ2luYWxQcm9wZXJ0eVxuICB9O1xufVxuXG4vKipcbiAqIFtnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWVdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICAgICAgY29udmVydGluZyBlbWJlZGRlZEZpZWxkIG5hbWUgc3RhcnRpbmcgd2l0aCAhUCEgb3IgIVBMISB0byBub3JtYWwgZmllbGRcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgICBFbWJlZGRlZEZpZWxkIG5hbWUgc3RhcnRpbmcgd2l0aCAhUCEgb3IgIVBMIVxuICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICAgIHJldHVybnMgY29udmVydGVkIHN0cmluZyB3aXRob3V0ICFQISBvciAhUEwhIGFuZCA6XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXhhbXBsZSBmb3IgZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lIDwvY2FwdGlvbj5cbiAqIGdldEZpZWxkTmFtZUZyb21FbWJlZGRlZEZpZWxkTmFtZSgnIVAhT3JnYW5pc2F0aW9uOk5hbWUnKSByZXR1cm4gJ09yZ2FuaXNhdGlvbi5OYW1lJ1xuICogZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKCchUEwhRW1wbG95ZWVzOk5hbWUnKSByZXR1cm4gJ0VtcGxveWVlcy5OYW1lJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKHByb3BlcnR5TmFtZSkge1xuICBsZXQgdmFsdWUgPSBwcm9wZXJ0eU5hbWU7XG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKFBBR0UpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoUEFHRUxJU1QpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcodmFsdWUubGFzdEluZGV4T2YoJyEnKSArIDEpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvOi9nLCAnLicpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBbdXBkYXRlTWV0YUVtYmVkZGVkRmllbGRJRF1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgIElmIHRoZSBmaWVsZElEIGluIG1ldGEgc3RhcnRzIHdpdGggJyFQIScgb3IgJyFQTCEnIGFuZCBjb250YWlucyAnOicgdGhlbiByZXBsYWNlIHRoZW0gd2l0aCAuKGRvdClcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7QXJyYXl9IG1ldGFGaWVsZHMgIEZpZWxkcyBtZXRhZGF0YSBBcnJheS4gQ29udGFpbnMgbWV0YWRhdGEgb2YgYWxsIHRoZSBmaWVsZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVNZXRhRW1iZWRkZWRGaWVsZElEKG1ldGFGaWVsZHMpIHtcbiAgcmV0dXJuIG1ldGFGaWVsZHMuZm9yRWFjaChtZXRhRmllbGQgPT4ge1xuICAgIGlmIChtZXRhRmllbGQuZmllbGRJRD8uc3RhcnRzV2l0aChQQUdFKSB8fCBtZXRhRmllbGQuZmllbGRJRD8uc3RhcnRzV2l0aChQQUdFTElTVCkpIHtcbiAgICAgIG1ldGFGaWVsZC5maWVsZElEID0gZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKG1ldGFGaWVsZC5maWVsZElEKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgaXNFbWJlZGRlZEZpZWxkID0gZmllbGQgPT4ge1xuICBpZiAoZmllbGQ/LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgIGZpZWxkID0gZmllbGQuc3Vic3RyaW5nKGZpZWxkLmluZGV4T2YoJyAnKSArIDEpO1xuICAgIGlmIChmaWVsZFswXSA9PT0gJy4nKSBmaWVsZCA9IGZpZWxkLnN1YnN0cmluZygxKTtcbiAgfVxuICByZXR1cm4gZmllbGQ/LmluZGV4T2YoJy4nKSA+IDA7XG59O1xuXG4vKipcbiAqIFtpc1BhZ2VMaXN0UHJvcGVydHldXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICBjaGVja2luZyBpZiBwcm9wZXJ0eU5hbWUgaXMgcGFnZUxpc3Qgb3Igbm90XG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lICAgUHJvcGVydHlOYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gIHRydWUgaWYgcHJvcGVydHkgaXMgcGFnZUxpc3QgZWxzZSBmYWxzZVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkV4YW1wbGUgZm9yIGlzUGFnZUxpc3RQcm9wZXJ0eSA8L2NhcHRpb24+XG4gKiBpc1BhZ2VMaXN0UHJvcGVydHkoJyFQTCFFbXBsb3llZXMuTmFtZScpIHJldHVybiB0cnVlXG4gKiBpc1BhZ2VMaXN0UHJvcGVydHkoJyFQIUVtcGxveWVlcy5OYW1lJykgcmV0dXJuIGZhbHNlXG4gKiBpc1BhZ2VMaXN0UHJvcGVydHkoJ05hbWUnKSByZXR1cm4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFnZUxpc3RQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgcmV0dXJuIHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKFBBR0VMSVNUKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzUGFnZUxpc3RJblBhdGggPSAocHJvcGVydHlOYW1lLCBjdXJyZW50Q2xhc3NJRCkgPT4ge1xuICBpZiAoIXByb3BlcnR5TmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwcm9wZXJ0eU5hbWUuc3BsaXQoJy4nKTtcbiAgY29uc3QgbWV0YWRhdGEgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0UHJvcGVydHlNZXRhZGF0YShmaXJzdCwgY3VycmVudENsYXNzSUQpO1xuICBpZiAobWV0YWRhdGE/LnR5cGUgPT09ICdQYWdlIExpc3QnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzUGFnZUxpc3RJblBhdGgocmVzdC5qb2luKCcuJyksIG1ldGFkYXRhPy5wYWdlQ2xhc3MpO1xufTtcblxuLyoqXG4gKiBbZ2V0RW1iZWRkZWRGaWVsZE5hbWVdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICAgICAgY29udmVydGluZyBub3JtYWwgZmllbGQgbmFtZSB0byBlbWJlZGRlZCBmaWVsZCBzdGFydGluZyB3aXRoICFQISBvciAhUEwhXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lICAgRmllbGQgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzSUQgICAgICAgIGNsYXNzSUQgb2YgZGF0YXBhZ2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICAgICAgICAgICByZXR1cm5zIGNvbnZlcnRlZCBzdHJpbmcgd2l0aCAhUCEgb3IgIVBMISBhbmQgOlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkV4YW1wbGUgZm9yIGdldEVtYmVkZGVkRmllbGROYW1lIDwvY2FwdGlvbj5cbiAqIEZvciBwYWdlIHByb3BlcnR5LCBnZXRFbWJlZGRlZEZpZWxkTmFtZSgnT3JnYW5pc2F0aW9uLk5hbWUnKSByZXR1cm4gJyFQIU9yZ2FuaXNhdGlvbjpOYW1lJ1xuICogRm9yIHBhZ2VMaXN0IHByb3BlcnR5LCBnZXRFbWJlZGRlZEZpZWxkTmFtZSgnRW1wbG95ZWVzLk5hbWUnKSByZXR1cm4gJyFQTCFFbXBsb3llZXM6TmFtZSdcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRkZWRGaWVsZE5hbWUocHJvcGVydHlOYW1lLCBjbGFzc0lEKSB7XG4gIGxldCB2YWx1ZSA9IHByb3BlcnR5TmFtZTtcbiAgaWYgKGlzUGFnZUxpc3RJblBhdGgodmFsdWUsIGNsYXNzSUQpKSB7XG4gICAgdmFsdWUgPSBgIVBMISR7dmFsdWUucmVwbGFjZSgvXFwuL2csICc6Jyl9YDtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGAhUCEke3ZhbHVlLnJlcGxhY2UoL1xcLi9nLCAnOicpfWA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFtwcmVwYXJlUHJvcGVydHlNYXBzXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgcHJlcGFyaW5nIG1hcHMgZm9yIHByb3BlcnR5IG5hbWVzIGFuZCBzZXQgaXQgaW4gZGF0YUFwaSBjb250ZXh0XG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgICBmaWVsZHMgYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc0lEICBjbGFzc0lEIG9mIGRhdGFwYWdlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dCAgZGF0YUFwaSBjb250ZXh0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBwYWdlTGlzdFByb3BlcnR5IGlzIHByZXNlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQcm9wZXJ0eU1hcHMoZmllbGRzLCBjbGFzc0lELCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgc2V0UHJvcGVydHlNYXBzIH0gPSBjb250ZXh0O1xuICBjb25zdCBtYXBzID0gZmllbGRzLnJlZHVjZShcbiAgICAoYWNjLCBmaWVsZCkgPT4ge1xuICAgICAgbGV0IHsgdmFsdWUgfSA9IGZpZWxkLmNvbmZpZztcbiAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcodmFsdWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgICAgIGlmICh2YWx1ZVswXSA9PT0gJy4nKSB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxKTtcbiAgICAgIH1cbiAgICAgIGxldCBuYW1lID0gdmFsdWU7XG4gICAgICAvLyBQcmVwYXJpbmcgbmFtZSBmb3IgZW1iZWRkZWQgcHJvcGVydHlcbiAgICAgIGlmIChpc0VtYmVkZGVkRmllbGQobmFtZSkpIHtcbiAgICAgICAgbmFtZSA9IGdldEVtYmVkZGVkRmllbGROYW1lKG5hbWUsIGNsYXNzSUQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGFnZUxpc3RQcm9wZXJ0eShuYW1lKSAmJiAhYWNjWzJdKSB7XG4gICAgICAgIGFjY1syXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBhY2NbMF1bdmFsdWVdID0gbmFtZTtcbiAgICAgIGFjY1sxXVtuYW1lXSA9IHZhbHVlO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAgW3t9LCB7fSwgZmFsc2VdXG4gICk7XG4gIHNldFByb3BlcnR5TWFwcyhtYXBzWzBdLCBtYXBzWzFdKTtcbiAgcmV0dXJuIG1hcHNbMl07XG59XG5cbi8qKlxuICogW2dldENvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgIEdldCB0aGUgbWV0YWRhdGEgZm9yIGNvbmZpZ3VyZWQgZW1iZWRkZWQgZmllbGRzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge1NldH0gY29uZmlnRmllbGRzICBTZXQgb2YgY29uZmlnIGZpZWxkc1xuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzSUQgICAgY2xhc0lEIG9mIGRhdGFwYWdlXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICBNZXRhZGF0YSBvZiBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhKGNvbmZpZ0ZpZWxkcywgY2xhc3NJRCkge1xuICBjb25zdCBjb25maWdFbWJlZGRlZEZpZWxkc01ldGE6IGFueVtdID0gW107XG4gIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBsZXQgdmFsdWUgPSBmaWVsZDtcbiAgICBpZiAoaXNFbWJlZGRlZEZpZWxkKHZhbHVlKSkge1xuICAgICAgLy8gY29udmVyc2lvbiBQYWdlLlBhZ2VMaXN0W10ucHJvcGVydHkgPT4gUGFnZS5QYWdlTGlzdC5wcm9wZXJ0eVxuICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUuaW5kZXhPZignWycpKSArIHZhbHVlLnN1YnN0cmluZyh2YWx1ZS5pbmRleE9mKCddJykgKyAxKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGEgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0RW1iZWRkZWRQcm9wZXJ0eU1ldGFkYXRhKHZhbHVlLCBjbGFzc0lEKTtcbiAgICAgIG1ldGEuZmllbGRJRCA9IGZpZWxkO1xuICAgICAgY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLnB1c2gobWV0YSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YTtcbn1cblxuLyoqXG4gKiBbbWVyZ2VDb25maWdFbWJlZGRlZEZpZWxkc01ldGFdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICBHZXQgdGhlIG1ldGFkYXRhIGZvciBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHtBcnJheX0gY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhICBjb25maWcgZmllbGRzIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gbWV0YUZpZWxkcyAgRmllbGRzIG1ldGFkYXRhIEFycmF5LiBDb250YWlucyBtZXRhZGF0YSBvZiBhbGwgdGhlIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDb25maWdFbWJlZGRlZEZpZWxkc01ldGEoY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLCBtZXRhRmllbGRzKSB7XG4gIGNvbnN0IG1lcmdlZE1ldGFGaWVsZHMgPSBbLi4ubWV0YUZpZWxkc107XG4gIGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YS5mb3JFYWNoKGNvbmZpZ0ZpZWxkTWV0YSA9PiB7XG4gICAgY29uc3QgZmllbGRNZXRhID0gbWV0YUZpZWxkcy5maW5kKG1ldGFGaWVsZCA9PiBtZXRhRmllbGQuZmllbGRJRCA9PT0gY29uZmlnRmllbGRNZXRhLmZpZWxkSUQpO1xuICAgIGlmICghZmllbGRNZXRhKSBtZXJnZWRNZXRhRmllbGRzLnB1c2goY29uZmlnRmllbGRNZXRhKTtcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRNZXRhRmllbGRzO1xufVxuXG5jb25zdCBvbGRUb05ld0ZpZWxkVHlwZU1hcHBpbmcgPSB7XG4gICdEYXRlIFRpbWUnOiAnRGF0ZSAmIHRpbWUnLFxuICBEYXRlOiAnRGF0ZSBvbmx5J1xufTtcblxuLyoqXG4gKiBbdXBkYXRlRmllbGRUeXBlXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgICAgVXBkYXRlcyB0aGUgZmllbGQgdHlwZSBpZiBpdHMgY2hhbmdlZCBpbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLiBTdWNoIG1hcHBpbmcgaXMgbWFpbnRhaW5lZCBpbiBvbGRUb05ld0ZpZWxkVHlwZU1hcHBpbmcuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRhRmllbGRzICBGaWVsZHMgbWV0YWRhdGEgQXJyYXkuIENvbnRhaW5zIG1ldGFkYXRhIG9mIGFsbCB0aGUgZmllbGRzLlxuICovXG5mdW5jdGlvbiB1cGRhdGVGaWVsZFR5cGUobWV0YUZpZWxkcykge1xuICBtZXRhRmllbGRzLmZvckVhY2gobWV0YUZpZWxkID0+IHtcbiAgICBpZiAobWV0YUZpZWxkLnR5cGUpIG1ldGFGaWVsZC50eXBlID0gb2xkVG9OZXdGaWVsZFR5cGVNYXBwaW5nW21ldGFGaWVsZC50eXBlXSB8fCBtZXRhRmllbGQudHlwZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFByZXNldE1ldGFBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbmZpZzogeyBsYWJlbCwgdmFsdWUgfVxuICB9ID0gYXR0cmlidXRlO1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgbmFtZTogdmFsdWUuc3RhcnRzV2l0aCgnQCcpID8gdmFsdWUuc3Vic3RyaW5nKDQpIDogdmFsdWUsXG4gICAgbGFiZWw6IGxhYmVsLnN0YXJ0c1dpdGgoJ0AnKSA/IGxhYmVsLnN1YnN0cmluZygzKSA6IGxhYmVsXG4gIH07XG59XG5cbi8qKlxuICogW2dlbmVyYXRlVmlld01ldGFEYXRhXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIGEgbGlzdCBvZiAgbWV0YW9iamVjdHMgb2YgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICByYXdGaWVsZHMgICAgICAgICBMaXN0IG9mIGZpZWxkcyB0byB1cGRhdGUgbWV0YSBmb3JcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lEICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZpZWxkcyB3aXRoIHVwZGF0ZWQgbWV0YSBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVZpZXdNZXRhRGF0YShyYXdGaWVsZHMsIGNsYXNzSUQsIHNob3dGaWVsZCkge1xuICByZXR1cm4gcmF3RmllbGRzLm1hcChpdGVtID0+IGdldERlZmF1bHRWaWV3TWV0YShpdGVtLCBjbGFzc0lELCBzaG93RmllbGQpKTtcbn1cblxuLyoqXG4gKiBbZ2V0Q29uZmlnRmllbGRzXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIGxpc3Qgb2YgY29uZmlnIGZpZWxkcyB3aXRoIHByaW1hcnkgZmllbGRzIG1ldGEgdXBkYXRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBjb25maWdGaWVsZHMgICAgICBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge0FycmF5fSAgIHByaW1hcnlGaWVsZHMgICAgIExpc3Qgb2YgUHJpbWFyeSBGaWVsZHNcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBtZXRhRmllbGRzICAgICAgICBNZXRhZGF0YSBvZiBhbGwgZmllbGRzXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgY2xhc3NJRCAgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCB0aGVpciBtZXRhIHVwZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0ZpZWxkcyhjb25maWdGaWVsZHMsIHByaW1hcnlGaWVsZHMsIG1ldGFGaWVsZHMsIGNsYXNzSUQpIHtcbiAgY29uc3QgcHJlc2V0Q29uZmlnRmllbGRzID0gY29uZmlnRmllbGRzO1xuICBjb25zdCBwcmltYXJ5RmllbGRzVmlld0luZGV4ID0gcHJlc2V0Q29uZmlnRmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5jb25maWcudmFsdWUgPT09ICdweVByaW1hcnlGaWVsZHMnKTtcbiAgaWYgKCFwcmltYXJ5RmllbGRzIHx8ICFwcmltYXJ5RmllbGRzLmxlbmd0aCkge1xuICAgIGlmIChwcmltYXJ5RmllbGRzVmlld0luZGV4IDwgMCkgcmV0dXJuIHByZXNldENvbmZpZ0ZpZWxkcztcblxuICAgIHByZXNldENvbmZpZ0ZpZWxkcy5zcGxpY2UocHJpbWFyeUZpZWxkc1ZpZXdJbmRleCwgMSk7XG5cbiAgICByZXR1cm4gcHJlc2V0Q29uZmlnRmllbGRzO1xuICB9XG5cbiAgaWYgKHByaW1hcnlGaWVsZHNWaWV3SW5kZXggPiAtMSkge1xuICAgIC8vIGxpc3Qgb2YgdW5jb21tb24gZmllbGRzIC0gbm9uIG92ZXJsYXAgb2YgcHJpbWFyeSBmaWVsZHMgZ3JvdXBlZCB2aWV3IGFuZCBpbmRlcGVuZGVudCBlbnRpdHkgY29sdW1ucyBvZiBwcmltYXJ5IHR5cGVcbiAgICBjb25zdCB1bmNvbW1vbkZpZWxkc0xpc3QgPSBwcmltYXJ5RmllbGRzLmZpbHRlcihcbiAgICAgIHByaW1hcnlGaWVsZCA9PiAhcHJlc2V0Q29uZmlnRmllbGRzLnNvbWUocHJlc2V0Q29uZmlnRmllbGQgPT4gcHJlc2V0Q29uZmlnRmllbGQuY29uZmlnLnZhbHVlLnNwbGl0KCcuJylbMV0gPT09IHByaW1hcnlGaWVsZClcbiAgICApO1xuICAgIGNvbnN0IHVuY29tbW9uRmllbGRzUmF3TWV0YTogYW55W10gPSBbXTtcbiAgICB1bmNvbW1vbkZpZWxkc0xpc3QuZm9yRWFjaCh1bmNvbW1vbkZpZWxkID0+IHtcbiAgICAgIGNvbnN0IHVuY29tbW9uRmllbGRNZXRhID0gbWV0YUZpZWxkcy5maW5kKG1ldGFGaWVsZCA9PiBtZXRhRmllbGQuZmllbGRJRCA9PT0gdW5jb21tb25GaWVsZCk7XG4gICAgICBpZiAodW5jb21tb25GaWVsZE1ldGEpIHVuY29tbW9uRmllbGRzUmF3TWV0YS5wdXNoKHVuY29tbW9uRmllbGRNZXRhKTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmNvbW1vbkZpZWxkc0NvbmZpZ01ldGEgPSBnZW5lcmF0ZVZpZXdNZXRhRGF0YSh1bmNvbW1vbkZpZWxkc1Jhd01ldGEsIGNsYXNzSUQsIHRydWUpO1xuXG4gICAgcHJlc2V0Q29uZmlnRmllbGRzLnNwbGljZShwcmltYXJ5RmllbGRzVmlld0luZGV4LCAxLCAuLi51bmNvbW1vbkZpZWxkc0NvbmZpZ01ldGEpO1xuICB9XG4gIHJldHVybiBwcmVzZXRDb25maWdGaWVsZHM7XG59XG5cbi8qKlxuICogW2dldFRhYmxlQ29uZmlnRnJvbVByZXNldE1ldGFdXG4gKiBEZXNjcmlwdGlvbiAtIEdldCB0aGUgdGFibGUgY29uZmlnIGZyb20gdGhlIHByZXNldHMgbWV0YS5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9ICAgIHByZXNldE1ldGEgICAgICAgICAgUHJlc2V0cyBtZXRhXG4gKiBAcGFyYW0gICB7Ym9vbGVhbn0gICBpc01ldGFXaXRoUHJlc2V0cyAgIHRydWUgaWYgbWV0YSBoYXMgcHJlc2V0cyBlbHNlIGZhbHNlXG4gKiBAcGFyYW0gICB7RnVuY3Rpb259ICBnZXRQQ29ubmVjdCAgICAgICAgIENhbGxiYWNrIHRvIGdldCB0aGUgUENvbm5lY3Qgb2JqZWN0XG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgICBjbGFzc0lEICAgICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgICBwcmltYXJ5RmllbGRzICAgICAgIExpc3Qgb2YgUHJpbWFyeSBGaWVsZHNcbiAqIEBwYXJhbSAgIHtBcnJheX0gICAgIG1ldGFGaWVsZHMgICAgICAgICAgTGlzdCBvZiBhbGwgbWV0YWZpZWxkc1xuICogQHJldHVybnMge29iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSBjb25maWcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbmZpZ0Zyb21QcmVzZXRNZXRhKHByZXNldE1ldGEsIGlzTWV0YVdpdGhQcmVzZXRzLCBwQ29ubiQsIGNsYXNzSUQsIHByaW1hcnlGaWVsZHMsIG1ldGFGaWVsZHMpIHtcbiAgbGV0IHByZXNldElkO1xuICBsZXQgcHJlc2V0TmFtZTtcbiAgbGV0IGNhcmRIZWFkZXI7XG4gIGxldCBzZWNvbmRhcnlUZXh0O1xuICBsZXQgdGltZWxpbmVEYXRlO1xuICBsZXQgdGltZWxpbmVUaXRsZTtcbiAgbGV0IHRpbWVsaW5lU3RhdHVzO1xuICBsZXQgdGltZWxpbmVJY29uO1xuICBsZXQgeyBmaWx0ZXJFeHByZXNzaW9uIH0gPSBwQ29ubiQuZ2V0UmF3TWV0YWRhdGEoKS5jb25maWc7XG4gIGxldCBmaWVsZHNNZXRhO1xuICBsZXQgY29uZmlnRmllbGRzO1xuICBpZiAoaXNNZXRhV2l0aFByZXNldHMpIHtcbiAgICBwcmVzZXRJZCA9IHByZXNldE1ldGEuaWQ7XG4gICAgcHJlc2V0TmFtZSA9IHByZXNldE1ldGEubGFiZWw7XG4gICAgY2FyZEhlYWRlciA9IHByZXNldE1ldGEuY2FyZEhlYWRlciAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEuY2FyZEhlYWRlcik7XG4gICAgc2Vjb25kYXJ5VGV4dCA9IHByZXNldE1ldGEuc2Vjb25kYXJ5VGV4dCAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEuc2Vjb25kYXJ5VGV4dCk7XG4gICAgdGltZWxpbmVEYXRlID0gcHJlc2V0TWV0YS50aW1lbGluZURhdGUgJiYgZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZSk7XG4gICAgdGltZWxpbmVUaXRsZSA9IHByZXNldE1ldGEudGltZWxpbmVUaXRsZSAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEudGltZWxpbmVUaXRsZSk7XG4gICAgdGltZWxpbmVTdGF0dXMgPSBwcmVzZXRNZXRhLnRpbWVsaW5lU3RhdHVzICYmIGdldFByZXNldE1ldGFBdHRyaWJ1dGUocHJlc2V0TWV0YS50aW1lbGluZVN0YXR1cyk7XG4gICAgdGltZWxpbmVJY29uID0gcHJlc2V0TWV0YS50aW1lbGluZUljb24gJiYgZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShwcmVzZXRNZXRhLnRpbWVsaW5lSWNvbik7XG4gICAgZmlsdGVyRXhwcmVzc2lvbiA9IHByZXNldE1ldGEuY29uZmlnLmZpbHRlckV4cHJlc3Npb247XG4gICAgW2ZpZWxkc01ldGFdID0gcHJlc2V0TWV0YS5jaGlsZHJlbjtcbiAgICBpZiAoXG4gICAgICBwcmVzZXRNZXRhLnRpbWVsaW5lVGl0bGUgJiZcbiAgICAgICFmaWVsZHNNZXRhLmNoaWxkcmVuLmZpbmQoZmllbGRNZXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkTWV0YT8uY29uZmlnPy52YWx1ZSA9PT0gcHJlc2V0TWV0YS50aW1lbGluZVRpdGxlPy5jb25maWc/LnZhbHVlO1xuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgY29uZmlnIH0gPSBwcmVzZXRNZXRhLnRpbWVsaW5lVGl0bGU7XG4gICAgICBmaWVsZHNNZXRhLmNoaWxkcmVuLnB1c2goeyB0eXBlLCBjb25maWc6IHsgLi4uY29uZmlnLCBzaG93OiBmYWxzZSB9IH0pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZSAmJlxuICAgICAgIWZpZWxkc01ldGEuY2hpbGRyZW4uZmluZChmaWVsZE1ldGEgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRNZXRhPy5jb25maWc/LnZhbHVlID09PSBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZT8uY29uZmlnPy52YWx1ZTtcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIGNvbmZpZyB9ID0gcHJlc2V0TWV0YS50aW1lbGluZURhdGU7XG4gICAgICBmaWVsZHNNZXRhLmNoaWxkcmVuLnB1c2goeyB0eXBlLCBjb25maWc6IHsgLi4uY29uZmlnLCBzaG93OiBmYWxzZSB9IH0pO1xuICAgIH1cbiAgICBjb25maWdGaWVsZHMgPSBnZXRDb25maWdGaWVsZHMoZmllbGRzTWV0YS5jaGlsZHJlbiwgcHJpbWFyeUZpZWxkcywgbWV0YUZpZWxkcywgY2xhc3NJRCk7XG4gIH0gZWxzZSB7XG4gICAgZmllbGRzTWV0YSA9IHByZXNldE1ldGEucHJvcHM7XG4gICAgY29uZmlnRmllbGRzID0gZ2V0Q29uZmlnRmllbGRzKFxuICAgICAgZmllbGRzTWV0YVxuICAgICAgICAuZ2V0UENvbm5lY3QoKVxuICAgICAgICAuZ2V0Q2hpbGRyZW4oKVxuICAgICAgICA/Lm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLmdldFBDb25uZWN0KCkuZ2V0UmF3TWV0YWRhdGEoKTtcbiAgICAgICAgfSksXG4gICAgICBwcmltYXJ5RmllbGRzLFxuICAgICAgbWV0YUZpZWxkcyxcbiAgICAgIGNsYXNzSURcbiAgICApO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJlc2V0SWQsXG4gICAgcHJlc2V0TmFtZSxcbiAgICBjYXJkSGVhZGVyLFxuICAgIHNlY29uZGFyeVRleHQsXG4gICAgdGltZWxpbmVEYXRlLFxuICAgIHRpbWVsaW5lVGl0bGUsXG4gICAgdGltZWxpbmVTdGF0dXMsXG4gICAgdGltZWxpbmVJY29uLFxuICAgIGZpbHRlckV4cHJlc3Npb24sXG4gICAgZmllbGRzTWV0YSxcbiAgICBjb25maWdGaWVsZHNcbiAgfTtcbn1cblxuLyoqXG4gKiBbZ2V0UmVwb3J0Q29sdW1uc11cbiAqIERlc2NyaXB0aW9uIC0gUmV0dXJucyBhIHNldCBvZiBjb2x1bW5zIGZyb20gdGhlIHJlcG9ydCByZXNwb25zZS5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9IHJlc3BvbnNlIC1cbiAqIEByZXR1cm5zIHtTZXR9IFNldCBvZiBjb2x1bW5zIGZyb20gdGhlIHJlcG9ydCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBnZXRSZXBvcnRDb2x1bW5zKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhOiB7IGRhdGE6IHJlcG9ydENvbHVtbnMgfVxuICB9ID0gcmVzcG9uc2U7XG4gIGNvbnN0IHJlcG9ydENvbHVtbnNTZXQgPSBuZXcgU2V0KCk7XG4gIHJlcG9ydENvbHVtbnM/LmZvckVhY2goaXRlbSA9PiB7XG4gICAgbGV0IHZhbCA9IGl0ZW0ucHlGaWVsZE5hbWU7XG4gICAgLy8gUmVtb3ZlICcuJyBmcm9tIGluZGV4IDAgb25seSwgaWYgJy4nIGlzIHByZXNlbnRcbiAgICBpZiAodmFsWzBdID09PSAnLicpIHtcbiAgICAgIHZhbCA9IHZhbC5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIHJlcG9ydENvbHVtbnNTZXQuYWRkKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gcmVwb3J0Q29sdW1uc1NldDtcbn1cblxuLyoqXG4gKiBbZ2V0Q29uZmlnRmllbGRWYWx1ZV1cbiAqIERlc2NyaXRwaW9uIC0gUmV0dXJucyBhIHZhbGlkIHZhbHVlIGZvciBhIGNvbmZpZ3VyYXRpb24gZmllbGQuIFJlbW92ZSBhbnkgYW5ub3RhdGlvbnMgYW5kIGFsc28gXCIuXCJcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9IGNvbmZpZ1xuICogICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbHVlIC0gUmF3IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB2YWx1ZSAtIFZhbHVlIHdpdGggb3V0IGFueSBhbm5vdGF0aW9ucyBvciBcIi5cIlxuICovXG5mdW5jdGlvbiBnZXRDb25maWdGaWVsZFZhbHVlKGNvbmZpZykge1xuICBsZXQgeyB2YWx1ZSB9ID0gY29uZmlnO1xuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcodmFsdWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgaWYgKHZhbHVlWzBdID09PSAnLicpIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBbcHJlcGFyZUNvbmZpZ0ZpZWxkc11cbiAqIERlc2NyaXB0aW9uIC0gUHJlcGFyZXMgYSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWVsZHMgYW5kIHB1c2hlcyBlYWNoIGNvbmZpZyB0eXBlIHRvIGEgc2V0IHVzaW5nIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7b2JqZWN0fSAgICBjb25maWdGaWVsZHMgICAgICAgICAgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gIHB1c2hUb0NvbXBvbmVudHNMaXN0IENhbGxiYWNrIHRvIHB1c2ggdGhlIGZpZWxkIHR5cGUgdG8gYSBzZXQuXG4gKiBAcmV0dXJucyB7U2V0fSAgICAgICBjb25maWdGaWVsZFNldFxuICovXG5mdW5jdGlvbiBwcmVwYXJlQ29uZmlnRmllbGRzKGNvbmZpZ0ZpZWxkcywgcHVzaFRvQ29tcG9uZW50c0xpc3QpIHtcbiAgY29uc3QgY29uZmlnRmllbGRTZXQgPSBuZXcgU2V0KCk7XG4gIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIHB1c2hUb0NvbXBvbmVudHNMaXN0KGl0ZW0udHlwZSk7XG4gICAgY29uc3QgdmFsID0gZ2V0Q29uZmlnRmllbGRWYWx1ZShpdGVtLmNvbmZpZyk7XG4gICAgY29uZmlnRmllbGRTZXQuYWRkKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gY29uZmlnRmllbGRTZXQ7XG59XG5cbi8qKlxuICogW2ZpbmRBdXRob3JlZEZpZWxkXVxuICogRGVzY3JpcHRpb24gLSBGaW5kcyBhbiBhdXRob3JlZCBmaWVsZCBmcm9tIHloZSBsaXN0IG9mIGNvbmZpZyBmaWVsZHMuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgZmllbGRJRCAgICAgIEZpbHRlclxuICogQHJldHVybnMge29iamVjdH0gICAgICAgICAgICAgIGNvbmZpZyB3aXRoIGl0cyBmaWVsZCB2YWx1ZSBlcXVhbCB0byBmaWVsZElELCB3aGljaCBtZWFucyBhbiBhdXRob3JlZCBmaWVsZFxuICovXG5mdW5jdGlvbiBmaW5kQXV0aG9yZWRGaWVsZChjb25maWdGaWVsZHMsIGZpZWxkSUQpIHtcbiAgcmV0dXJuIGNvbmZpZ0ZpZWxkcy5maW5kKGNvbmZpZ0ZpZWxkID0+IHtcbiAgICBjb25zdCB2YWwgPSBnZXRDb25maWdGaWVsZFZhbHVlKGNvbmZpZ0ZpZWxkLmNvbmZpZyk7XG4gICAgcmV0dXJuIHZhbCA9PT0gZmllbGRJRDtcbiAgfSk7XG59XG5cbi8qKlxuICogW2ZpbmRBbmRVcGRhdGVBdXRob3JlZEZpZWxkQ29uZmlnXVxuICogRGVzY3JpcHRpb24gLSBGaW5kIHRoZSBhdXRob3JlZCBmaWVsZCwgYW5kIHVwZGF0ZSBpdHMgY29uZmlnLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIGNvbmZpZ0ZpZWxkcyBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge29iamVjdH0gIGl0ZW0gICAgICAgIEZpZWxkIGl0ZW0gdG8gY29weSBkaXNwbGF5QXMgYW5kIGNhdGVnb3J5IGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgY2xhc3NJZCAgICAgY2xhc3NJRCBmcm9tIHRoZSByZXNwb25zZVxuICovXG5mdW5jdGlvbiBmaW5kQW5kVXBkYXRlQXV0aG9yZWRGaWVsZENvbmZpZyhjb25maWdGaWVsZHMsIGl0ZW0sIGNsYXNzSWQpIHtcbiAgY29uc3QgYXV0aG9yZWRGaWVsZCA9IGZpbmRBdXRob3JlZEZpZWxkKGNvbmZpZ0ZpZWxkcywgaXRlbS5maWVsZElEKTtcbiAgaWYgKGF1dGhvcmVkRmllbGQ/LmNvbmZpZykge1xuICAgIGlmIChpdGVtLmRpc3BsYXlBcykge1xuICAgICAgYXV0aG9yZWRGaWVsZC5jb25maWcuZGlzcGxheUFzID0gaXRlbS5kaXNwbGF5QXM7XG4gICAgfVxuICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLmNsYXNzSUQgPSBpdGVtLmNsYXNzSUQgPz8gY2xhc3NJZDtcblxuICAgIGlmIChhdXRob3JlZEZpZWxkLnR5cGUgPT09IFVTRVJfUkVGRVJFTkNFKSB7XG4gICAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5hc3NvY2lhdGlvbklEID0gaXRlbS5hc3NvY2lhdGlvbklEIHx8IGl0ZW0uZmllbGRJRDtcbiAgICB9XG4gICAgYXV0aG9yZWRGaWVsZC5jb25maWcuY2F0ZWdvcnkgPSBpdGVtLmNhdGVnb3J5O1xuICAgIC8vIEZpZWxkVHlwZSBpZGVudGlmaWVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGNvbmZpZ3VyZWQgYXMgcGlja0xpc3RcbiAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5maWVsZFR5cGUgPSBpdGVtLmZpZWxkVHlwZTtcbiAgICAvLyB0eXBlIGRlZmluZWQgb24gdGhlIHByb3BlcnR5IHJ1bGUsXG4gICAgLy8gdXNlZCBmb3IgdGhlIHBpY2tsaXN0IGZpZWxkIHRvIGFzc2lnbiB0aGUgYXBwcm9wcmlhdGUgdHlwZVxuICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLnByb3BlcnR5VHlwZSA9IGl0ZW0uZGF0YVR5cGUgfHwgaXRlbS50eXBlO1xuICB9XG59XG5cbi8qKlxuICogW2lzQW5FeHRyYUZpZWxkXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlzIGFuIGV4dHJhIGZpZWxkLiBFeHRyYSBmaWVsZCBpcyB0aGUgb25lIHdoaWNoIGlzIG5vdCBhdXRob3JlZCBidXQgcGFydCBvZiB0aGUgcmVwb3J0LlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIGNvbmZpZ0ZpZWxkcyAgICAgIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7U2V0fSAgICAgY29uZmlnRmllbGRTZXQgICAgU2V0IGlmIEF1dGhvcmVkIGZpbGVkIHZhbHVlc1xuICogQHBhcmFtICAge1NldH0gICAgIHJlcG9ydENvbHVtbnNTZXQgU2V0IG9mIGNvbHVtbnMgZnJvbSB0aGUgcmVwb3J0XG4gKiBAcGFyYW0gICB7b2JqZWN0fSAgaXRlbSAgICAgICAgICAgICBDb25maWcgZmllbGQgaXRlbVxuICogQHBhcmFtICAge3N0cmluZ30gIGNsYXNzSWQgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSAgIHtib29sZWFufSBzaG93RHluYW1pY0ZpZWxkcyBGbGFnIGluZGljYXRpbmcgd2hldGhlciBmaWVsZHMgYXJlIGZldGNoZWQgZHluYW1pY2FsbHkgYXQgcnVudGltZVxuICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgdHJ1ZSBJZiB0aGUgZmllbGQgaXMgYW4gZXh0cmEgZmllbGQgZWxzZSBmYWxzZS5cbiAqL1xuZnVuY3Rpb24gaXNBbkV4dHJhRmllbGQoY29uZmlnRmllbGRzLCBjb25maWdGaWVsZFNldCwgcmVwb3J0Q29sdW1uc1NldCwgaXRlbSwgY2xhc3NJZCwgc2hvd0R5bmFtaWNGaWVsZHMpIHtcbiAgLy8gSXMgdGhlIGZpZWxkIGFscmVhZHkgcHJlc2VudCBpbiBhdXRob3JpbmcgbWV0YWRhdGE/XG4gIC8vIE11dGF0ZXMgY29uZmlnIGZpZWxkcyB0byBjb3B5IGRpc3BsYXlBcyBhbmQgY2F0ZWdvcnkgaW5mb3JtYXRpb25cbiAgaWYgKGNvbmZpZ0ZpZWxkU2V0LmhhcyhpdGVtLmZpZWxkSUQpKSB7XG4gICAgZmluZEFuZFVwZGF0ZUF1dGhvcmVkRmllbGRDb25maWcoY29uZmlnRmllbGRzLCBpdGVtLCBjbGFzc0lkKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBmaWVsZCBpcyBub3QgYXV0aG9yZWQgYW5kIG5vdCBwYXJ0IG9mIHJlcG9ydCBjb2x1bW5zIHRoZW4gZGlzY2FyZCBpdFxuICByZXR1cm4gc2hvd0R5bmFtaWNGaWVsZHMgfHwgISFyZXBvcnRDb2x1bW5zU2V0LmhhcyhpdGVtLmZpZWxkSUQpO1xufVxuXG4vKipcbiAqIFtwcmVwYXJlRXh0cmFGaWVsZHNdXG4gKiBEZXNjcmlwdGlvbiAtIFJldHVybnMgYSBsaXN0IG9mIGV4dHJhIGZpZWxkcyB3aXRoIHRoZWlyIG1ldGEgdXBkYXRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBtZXRhRmllbGRzICAgICAgIExpc3Qgb2YgZmllbGRzXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzICAgICAgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtTZXR9ICAgICBjb25maWdGaWVsZFNldCAgICBTZXQgaWYgQXV0aG9yZWQgZmlsZWQgdmFsdWVzXG4gKiBAcGFyYW0gICB7U2V0fSAgICAgcmVwb3J0Q29sdW1uc1NldCBTZXQgb2YgY29sdW1ucyBmcm9tIHRoZSByZXBvcnRcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lEICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcGFyYW0gICB7Ym9vbGVhbn0gc2hvd0R5bmFtaWNGaWVsZHMgRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgZmllbGRzIGFyZSBmZXRjaGVkIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWVcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZXh0cmEgZmllbGRzIHdpdGggdGhlaXIgbWV0YSB1cGRhdGVkLlxuICovXG5mdW5jdGlvbiBwcmVwYXJlRXh0cmFGaWVsZHMobWV0YUZpZWxkcywgY29uZmlnRmllbGRzLCBjb25maWdGaWVsZFNldCwgcmVwb3J0Q29sdW1uc1NldCwgY2xhc3NJRCwgc2hvd0R5bmFtaWNGaWVsZHMpIHtcbiAgLy8gRmlsdGVyIGFsbCB0aGUgZXh0cmEgZmllbGRzXG4gIGNvbnN0IGV4dHJhRmlsZWRzID0gbWV0YUZpZWxkcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgcmV0dXJuIGlzQW5FeHRyYUZpZWxkKGNvbmZpZ0ZpZWxkcywgY29uZmlnRmllbGRTZXQsIHJlcG9ydENvbHVtbnNTZXQsIGl0ZW0sIGNsYXNzSUQsIHNob3dEeW5hbWljRmllbGRzKTtcbiAgfSk7XG4gIHJldHVybiBnZW5lcmF0ZVZpZXdNZXRhRGF0YShleHRyYUZpbGVkcywgY2xhc3NJRCwgZmFsc2UpO1xuICAvLyBVcGRhdGUgdGhlIG1ldGEgb2JqZWN0IG9mIGVhY2ggb2YgdGhlIGV4dHJhIGZpZWxkcy5cbn1cblxuY29uc3QgQXNzaWduRGFzaE9iamVjdHMgPSBbJ0Fzc2lnbi1Xb3JrbGlzdCcsICdBc3NpZ24tV29ya0Jhc2tldCddO1xuXG5mdW5jdGlvbiBwb3B1bGF0ZVJlbmRlcmluZ09wdGlvbnMobmFtZSwgY29uZmlnLCBmaWVsZCkge1xuICBjb25zdCBzaG91bGREaXNwbGF5QXNTZW1hbnRpY0xpbmsgPSAnZGlzcGxheUFzTGluaycgaW4gZmllbGQuY29uZmlnICYmIGZpZWxkLmNvbmZpZy5kaXNwbGF5QXNMaW5rO1xuICBpZiAoc2hvdWxkRGlzcGxheUFzU2VtYW50aWNMaW5rKSB7XG4gICAgY29uZmlnLmN1c3RvbU9iamVjdC5pc0Fzc2lnbm1lbnRMaW5rID0gQXNzaWduRGFzaE9iamVjdHMuaW5jbHVkZXMoZmllbGQuY29uZmlnLmNsYXNzSUQpO1xuICAgIGlmIChmaWVsZC5jb25maWcudmFsdWUuc3RhcnRzV2l0aCgnQENBJykpIHtcbiAgICAgIGNvbmZpZy5jdXN0b21PYmplY3QuaXNBc3NvY2lhdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGNvbmZpZy5jZWxsUmVuZGVyZXIgPSBmb3JtYXRDb25zdGFudHMuV29ya0xpbms7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3B5U3RhdHVzV29yaycgfHwgbmFtZSA9PT0gJ3B5QXNzaWdubWVudFN0YXR1cycpIHtcbiAgICBjb25maWcuY2VsbFJlbmRlcmVyID0gZm9ybWF0Q29uc3RhbnRzLldvcmtTdGF0dXM7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3B4VXJnZW5jeVdvcmsnKSB7XG4gICAgY29uZmlnLmNlbGxSZW5kZXJlciA9IGZvcm1hdENvbnN0YW50cy5JbnRlZ2VyO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbHVtbnMoZmllbGRzOiBhbnlbXSA9IFtdLCBnZXRNYXBwZWRQcm9wZXJ0eTogYW55ID0gbnVsbCkge1xuICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQsIG9yaWdpbmFsQ29sSW5kZXgpID0+IHtcbiAgICBsZXQgbmFtZSA9IGZpZWxkLmNvbmZpZy52YWx1ZTtcblxuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKG5hbWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgICBpZiAobmFtZVswXSA9PT0gJy4nKSBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIG5hbWUgPSBnZXRNYXBwZWRQcm9wZXJ0eT8uKG5hbWUpID8/IG5hbWU7XG5cbiAgICBsZXQgbGFiZWwgPSBmaWVsZC5jb25maWcubGFiZWwgfHwgZmllbGQuY29uZmlnLmNhcHRpb247XG4gICAgY29uc3QgeyBzaG93ID0gdHJ1ZSwgZGlzcGxheUFzIH0gPSBmaWVsZC5jb25maWc7XG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgbGFiZWwgPSBsYWJlbC5zdWJzdHJpbmcoMyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGxhYmVsLFxuICAgICAgc2hvdyxcbiAgICAgIGNsYXNzSUQ6IGZpZWxkLmNvbmZpZy5jbGFzc0lELFxuICAgICAgaWQ6IGZpZWxkLmlkIHx8IG5hbWUgfHwgb3JpZ2luYWxDb2xJbmRleCxcbiAgICAgIGRpc3BsYXlBcyxcbiAgICAgIGFzc29jaWF0aW9uSUQ6IGZpZWxkLmNvbmZpZy5hc3NvY2lhdGlvbklELFxuICAgICAgLi4uKGZpZWxkLmNvbmZpZy5jbGFzc0lEICYmIHsgY2F0ZWdvcnk6IGZpZWxkLmNvbmZpZy5jYXRlZ29yeSB9KSxcbiAgICAgIGN1c3RvbU9iamVjdDoge30sXG4gICAgICBmaWVsZFR5cGU6IGZpZWxkLmNvbmZpZy5maWVsZFR5cGUsXG4gICAgICBtZXRhOiB7XG4gICAgICAgIC4uLmZpZWxkXG4gICAgICB9XG4gICAgfTtcblxuICAgIHBvcHVsYXRlUmVuZGVyaW5nT3B0aW9ucyhuYW1lLCBjb25maWcsIGZpZWxkKTtcblxuICAgIHJldHVybiBjb25maWc7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SXRlbUtleSA9IGZpZWxkcyA9PiB7XG4gIGxldCBpdGVtS2V5O1xuICBpZiAoZmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5pZCA9PT0gJ3B5R1VJRCcpID4gLTEpIHtcbiAgICBpdGVtS2V5ID0gJ3B5R1VJRCc7XG4gIH0gZWxzZSB7XG4gICAgaXRlbUtleSA9ICdwekluc0tleSc7XG4gIH1cbiAgcmV0dXJuIGl0ZW1LZXk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhdGNoUXVlcnlGaWVsZHMoZmllbGRzLCBpc0RhdGFPYmplY3QgPSBmYWxzZSwgY2xhc3NJRCA9ICcnKSB7XG4gIGNvbnN0IHF1ZXJ5RmllbGRzOiBhbnlbXSA9IFtdO1xuICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgcGF0Y2hGaWVsZHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpZWxkLmNlbGxSZW5kZXJlciA9PT0gJ1dvcmtMaW5rJykge1xuICAgICAgaWYgKGZpZWxkLmN1c3RvbU9iamVjdCAmJiBmaWVsZC5jdXN0b21PYmplY3QuaXNBc3NpZ25tZW50TGluaykge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbk5hbWUgPSBmaWVsZC5uYW1lLmluY2x1ZGVzKCc6JykgPyBgJHtmaWVsZC5uYW1lLnNwbGl0KCc6JylbMF19OmAgOiAnJztcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbk5hbWV9cHpJbnNLZXlgKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbk5hbWV9cHhSZWZPYmplY3RDbGFzc2ApO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC5jdXN0b21PYmplY3QgJiYgZmllbGQuY3VzdG9tT2JqZWN0LmlzQXNzb2NpYXRpb24pIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25DYXRlZ29yeSA9IGZpZWxkLm5hbWUuc3BsaXQoJzonKVswXTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbkNhdGVnb3J5fTpweUlEYCk7XG4gICAgICAgIHBhdGNoRmllbGRzLnB1c2goYCR7YXNzb2NpYXRpb25DYXRlZ29yeX06cHpJbnNLZXlgKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbkNhdGVnb3J5fTpweE9iakNsYXNzYCk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGF0YU9iamVjdCkge1xuICAgICAgICBjb25zdCBkYXRhVmlld05hbWUgPSBQQ29yZS5nZXREYXRhVHlwZVV0aWxzKCkuZ2V0U2F2YWJsZURhdGFQYWdlKGNsYXNzSUQpO1xuICAgICAgICBjb25zdCBkYXRhUGFnZUtleXMgPSBQQ29yZS5nZXREYXRhVHlwZVV0aWxzKCkuZ2V0RGF0YVBhZ2VLZXlzKGRhdGFWaWV3TmFtZSk7XG4gICAgICAgIGRhdGFQYWdlS2V5cz8uZm9yRWFjaChpdGVtID0+IChpdGVtLmlzQWx0ZXJuYXRlS2V5U3RvcmFnZSA/IHBhdGNoRmllbGRzLnB1c2goaXRlbS5saW5rZWRGaWVsZCkgOiBwYXRjaEZpZWxkcy5wdXNoKGl0ZW0ua2V5TmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGNoRmllbGRzLnB1c2goJ3B5SUQnKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaCgncHpJbnNLZXknKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaCgncHhPYmpDbGFzcycpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXRjaEZpZWxkcy5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKCFxdWVyeUZpZWxkcy5maW5kKHEgPT4gcSA9PT0gaykpIHtcbiAgICAgICAgcXVlcnlGaWVsZHMucHVzaChrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHF1ZXJ5RmllbGRzO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgcmVuZGVyZXIgdHlwZSBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdHlwZSBQYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUGFnZUZpZWxkc0NvbmZpZyhjb25maWdGaWVsZHMsIHBhcmVudENsYXNzSUQpIHtcbiAgcmV0dXJuIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWc6IHsgdmFsdWUgfVxuICAgIH0gPSBpdGVtO1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IFBDb3JlLmdldEFubm90YXRpb25VdGlscygpLmdldFByb3BlcnR5TmFtZSh2YWx1ZSk7XG4gICAgaWYgKGlzRW1iZWRkZWRGaWVsZCh2YWx1ZSkgJiYgIWlzUGFnZUxpc3RJblBhdGgocHJvcGVydHlOYW1lLCBwYXJlbnRDbGFzc0lEKSkge1xuICAgICAgaXRlbS5jb25maWcuY29tcG9uZW50VHlwZSA9IHR5cGU7XG4gICAgICBpdGVtLnR5cGUgPSAnUGFnZVByb3BlcnR5UmVuZGVyZXInO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQ29udGV4dFJlc3BvbnNlID0gYXN5bmMgKGNvbnRleHQsIHBhcmFtcykgPT4ge1xuICBjb25zdCB7IHBDb25uJCwgYXBpQ29udGV4dCwgY2hpbGRyZW4sIHNob3dEeW5hbWljRmllbGRzLCByZWZlcmVuY2VMaXN0LCBpc0RhdGFPYmplY3QgfSA9IHBhcmFtcztcbiAgLy8gbGV0IHsgbGlzdENvbnRleHQgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBwcm9taXNlc1Jlc3BvbnNlQXJyYXksIGFwaUNvbnRleHQ6IG90aGVyQ29udGV4dCB9ID0gY29udGV4dDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tdW51c2VkLWNvbGxlY3Rpb25cbiAgY29uc3QgbGlzdE9mQ29tcG9uZW50czogYW55W10gPSBbXTtcbiAgY29uc3Qge1xuICAgIGRhdGE6IHsgZmllbGRzOiBtZXRhRmllbGRzLCBjbGFzc0lELCBpc1F1ZXJ5YWJsZSB9XG4gIH0gPSBwcm9taXNlc1Jlc3BvbnNlQXJyYXlbMF07XG4gIGxldCB7XG4gICAgZGF0YTogeyBwcmltYXJ5RmllbGRzIH1cbiAgfSA9IHByb21pc2VzUmVzcG9uc2VBcnJheVswXTtcbiAgLy8gV2hlbiBsaXN0IGlzIGNvbmZpZ3VyZWQgd2l0aCBJbmNsdWRlIGFsbCBjbGFzcyBmaWVsZHMgY29uZmlndXJhdGlvbiwgcHJvdmlkZSBzdXBwb3J0IGZvciBQcmltYXJ5IGZpZWxkcyBjb2x1bW5cbiAgaWYgKHNob3dEeW5hbWljRmllbGRzKSB7XG4gICAgY29uc3Qgc291cmNlTWV0YWRhdGEgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0RGF0YVBhZ2VNZXRhZGF0YShyZWZlcmVuY2VMaXN0KTtcbiAgICBpZiAoc291cmNlTWV0YWRhdGE/LnByaW1hcnlGaWVsZHMpIHtcbiAgICAgIHByaW1hcnlGaWVsZHMgPSBzb3VyY2VNZXRhZGF0YS5wcmltYXJ5RmllbGRzO1xuICAgIH1cbiAgICAvLyB1cGRhdGluZyBtZXRhRGF0YSBmaWVsZElEIHRvIG5vcm1hbCBwcm9wZXJ0eSBpZiBpdCBoYXMgZmllbGRJRCBzdGFydHMgd2l0aCAhUCEgb3IgIVBMIVxuICAgIHVwZGF0ZU1ldGFFbWJlZGRlZEZpZWxkSUQobWV0YUZpZWxkcyk7XG4gIH1cbiAgdXBkYXRlRmllbGRUeXBlKG1ldGFGaWVsZHMpO1xuXG4gIGlmIChpc0RhdGFPYmplY3QpIHtcbiAgICBjb25zdCBjb21wb3NpdGVLZXlzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGFWaWV3TmFtZSA9IFBDb3JlLmdldERhdGFUeXBlVXRpbHMoKS5nZXRTYXZhYmxlRGF0YVBhZ2UoY2xhc3NJRCk7XG4gICAgY29uc3QgZGF0YVBhZ2VLZXlzID0gUENvcmUuZ2V0RGF0YVR5cGVVdGlscygpLmdldERhdGFQYWdlS2V5cyhkYXRhVmlld05hbWUpO1xuICAgIGRhdGFQYWdlS2V5cz8uZm9yRWFjaChpdGVtID0+IChpdGVtLmlzQWx0ZXJuYXRlS2V5U3RvcmFnZSA/IGNvbXBvc2l0ZUtleXMucHVzaChpdGVtLmxpbmtlZEZpZWxkKSA6IGNvbXBvc2l0ZUtleXMucHVzaChpdGVtLmtleU5hbWUpKSk7XG4gICAgaWYgKGNvbXBvc2l0ZUtleXMubGVuZ3RoICYmIG90aGVyQ29udGV4dCkge1xuICAgICAgb3RoZXJDb250ZXh0LnNldENvbXBvc2l0ZUtleXMoY29tcG9zaXRlS2V5cyk7XG4gICAgfVxuICAgIGlmIChvdGhlckNvbnRleHQpIHtcbiAgICAgIG90aGVyQ29udGV4dC5mZXRjaFJvd0FjdGlvbkRldGFpbHMgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByZXNldEFycmF5ID0gW107XG4gIGNvbnN0IHJhd01ldGFkYXRhID0gcENvbm4kLmdldFJhd01ldGFkYXRhKCkuY29uZmlnO1xuICBjb25zdCByYXdQcmVzZXRzID0gcmF3TWV0YWRhdGEucHJlc2V0cztcbiAgY29uc3QgaXNNZXRhV2l0aFByZXNldHMgPSByYXdQcmVzZXRzICYmIHJhd1ByZXNldHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBjaGlsZHJlbkl0ZXJhdG9yID0gaXNNZXRhV2l0aFByZXNldHMgPyByYXdQcmVzZXRzIDogY2hpbGRyZW47XG4gIGNvbnN0IHJlc29sdmVkUHJlc2V0cyA9IHBDb25uJC5nZXRDb25maWdQcm9wcygpLnByZXNldHM7XG4gIGxldCBmaWVsZHM7XG4gIGxldCB0YWJsZUNvbmZpZztcbiAgY2hpbGRyZW5JdGVyYXRvcj8uZm9yRWFjaCgocHJlc2V0TWV0YSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7IGNvbmZpZ0ZpZWxkcyB9ID0gZ2V0VGFibGVDb25maWdGcm9tUHJlc2V0TWV0YShcbiAgICAgIHsgLi4ucHJlc2V0TWV0YSwgbGFiZWw6IHJlc29sdmVkUHJlc2V0c1tpbmRleF0ubGFiZWwgfSxcbiAgICAgIGlzTWV0YVdpdGhQcmVzZXRzLFxuICAgICAgcENvbm4kLFxuICAgICAgY2xhc3NJRCxcbiAgICAgIHByaW1hcnlGaWVsZHMsXG4gICAgICBtZXRhRmllbGRzXG4gICAgKTtcbiAgICBjb25zdCBwdXNoVG9Db21wb25lbnRzTGlzdCA9IGZpZWxkVHlwZSA9PiB7XG4gICAgICBsaXN0T2ZDb21wb25lbnRzLnB1c2goZmllbGRUeXBlKTtcbiAgICB9O1xuICAgIC8vIHJlYWQgcmVwb3J0IGNvbHVtbnMgcmVzcG9uc2UgLSBpbiBjYXNlIG9mIG5vbnF1ZXJ5YWJsZSBpZ25vcmUgdGhlIHJlc3BvbnNlIGFuZCByZWx5IG9ubHkgb24gdGhlIGZpZWxkcyBjb25maWd1cmVkIGF0IGF1dGhvaW5nIHRpbWUgaW4gcHJlc2V0c1xuICAgIGNvbnN0IHJlcG9ydENvbHVtbnNTZXQgPSBpc1F1ZXJ5YWJsZSA/IGdldFJlcG9ydENvbHVtbnMocHJvbWlzZXNSZXNwb25zZUFycmF5WzFdKSA6IG5ldyBTZXQoKTtcblxuICAgIGNvbnN0IGNvbmZpZ0ZpZWxkU2V0ID0gcHJlcGFyZUNvbmZpZ0ZpZWxkcyhjb25maWdGaWVsZHMsIHB1c2hUb0NvbXBvbmVudHNMaXN0KTtcblxuICAgIC8vIEZJWE1FICNFbWJlZGRlZFByb3BlcnR5UGF0Y2hcbiAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBtZXJnZSBsb2dpYyB3aGVuIHRoZSBtZXRhZGF0YSByZXNwb25zZSBpbmNsdWRlcyBhbGwgb3B0aW1pemVkIGVtYmVkZGVkIHBhZ2UgYW5kIHBhZ2VsaXN0c1xuICAgIC8vIG1lcmdpbmcgY29uZmlndXJlZCBlbWJlZGRlZCBwcm9wZXJ0aWVzIHdpdGggbWV0YWRhdGEgc28gdGhhdCB3aGlsZSBwcmVwYXJpbmcgZXh0cmEgZmllbGRzLCBjb25maWcgZmllbGRzIGNhbiBnZXQgb3RoZXIgcHJvcGVydGllcyBmcm9tIG1ldGEoZWc6IGNhdGVnb3J5LCBkaXNwbGF5QXNMaW5rKVxuICAgIC8vIGdldCBjb25maWd1cmVkIGVtYmVkZGVkIHByb3BlcnRpZXMgbWV0YWRhdGEgYW5kIGdldCBuZXcgbWVyZ2VkTWV0YUZpZWxkc1xuICAgIGNvbnN0IGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YSA9IGdldENvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YShjb25maWdGaWVsZFNldCwgY2xhc3NJRCk7XG4gICAgY29uc3QgbWVyZ2VkTWV0YUZpZWxkcyA9IG1lcmdlQ29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhKGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YSwgbWV0YUZpZWxkcyk7XG5cbiAgICBjb25zdCBleHRyYUZpZWxkcyA9IHByZXBhcmVFeHRyYUZpZWxkcyhcbiAgICAgIG1lcmdlZE1ldGFGaWVsZHMsIC8vIHBhc3NpbmcgbmV3IG1lcmdlZCBtZXRhIGZpZWxkcyB3aGljaCBoYXMgbWV0YSBvZiBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkcyBvZiBjdXJyZW50IHByZXNldFxuICAgICAgY29uZmlnRmllbGRzLFxuICAgICAgY29uZmlnRmllbGRTZXQsXG4gICAgICByZXBvcnRDb2x1bW5zU2V0LFxuICAgICAgY2xhc3NJRCxcbiAgICAgIHNob3dEeW5hbWljRmllbGRzXG4gICAgKTtcblxuICAgIGlmIChpc1F1ZXJ5YWJsZSkge1xuICAgICAgdXBkYXRlUGFnZUZpZWxkc0NvbmZpZyhjb25maWdGaWVsZHMsIGNsYXNzSUQpO1xuICAgICAgcHJlcGFyZVByb3BlcnR5TWFwcyhbLi4uY29uZmlnRmllbGRzLCAuLi5leHRyYUZpZWxkc10sIGNsYXNzSUQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZ2V0TWFwcGVkUHJvcGVydHkgfSA9IGNvbnRleHQ7XG5cbiAgICBmaWVsZHMgPSBpbml0aWFsaXplQ29sdW1ucyhbLi4uY29uZmlnRmllbGRzLCAuLi5leHRyYUZpZWxkc10sIGdldE1hcHBlZFByb3BlcnR5KTtcbiAgICBjb25zdCBwYXRjaFF1ZXJ5RmllbGRzID0gcHJlcGFyZVBhdGNoUXVlcnlGaWVsZHMoZmllbGRzLCBpc0RhdGFPYmplY3QsIGNsYXNzSUQpO1xuICAgIGNvbnN0IGl0ZW1LZXkgPSBnZXRJdGVtS2V5KGZpZWxkcyk7XG4gICAgdGFibGVDb25maWcgPSB7IGZpZWxkRGVmczogZmllbGRzLCBwYXRjaFF1ZXJ5RmllbGRzLCBpdGVtS2V5LCBpc1F1ZXJ5YWJsZSB9O1xuICB9KTtcbiAgY29uc3QgbWV0YSA9IHRhYmxlQ29uZmlnO1xuICBwYXJhbXMubGlzdENvbnRleHQgPSB7IG1ldGEsIHByZXNldHM6IHByZXNldEFycmF5LCBhcGlDb250ZXh0OiB7IC4uLmFwaUNvbnRleHQgfSB9O1xuICByZXR1cm4gcGFyYW1zLmxpc3RDb250ZXh0O1xufTtcbiJdfQ==
@@ -0,0 +1,20 @@
1
+ function Boolean(value, { allowEmpty = true, tick = '', cross = '' } = {}) {
2
+ if ((!allowEmpty && !value) || value === false || value?.toString()?.toLowerCase() === 'false' || value === 0 || value === '0') {
3
+ return cross || '';
4
+ }
5
+ if (value === true || value?.toString()?.toLowerCase() === 'true' || value === 1 || value === '1') {
6
+ return tick || '';
7
+ }
8
+ if (allowEmpty && (value === 'null' || value === '' || value === null || typeof value === 'undefined')) {
9
+ return '- -';
10
+ }
11
+ return value;
12
+ }
13
+ export default {
14
+ TrueFalse: (value, options) => Boolean(value, {
15
+ ...options,
16
+ tick: options.trueLabel || 'True',
17
+ cross: options.falseLabel || 'False'
18
+ })
19
+ };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9faGVscGVycy9mb3JtYXR0ZXJzL2Jvb2xlYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFO0lBQ3ZFLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7UUFDOUgsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO0tBQ3BCO0lBQ0QsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO1FBQ2pHLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztLQUNuQjtJQUNELElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLEVBQUU7UUFDdEcsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELGVBQWU7SUFDYixTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FDNUIsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUNiLEdBQUcsT0FBTztRQUNWLElBQUksRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLE1BQU07UUFDakMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTztLQUNyQyxDQUFDO0NBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIEJvb2xlYW4odmFsdWUsIHsgYWxsb3dFbXB0eSA9IHRydWUsIHRpY2sgPSAnJywgY3Jvc3MgPSAnJyB9ID0ge30pIHtcbiAgaWYgKCghYWxsb3dFbXB0eSAmJiAhdmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gJzAnKSB7XG4gICAgcmV0dXJuIGNyb3NzIHx8ICcnO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAxIHx8IHZhbHVlID09PSAnMScpIHtcbiAgICByZXR1cm4gdGljayB8fCAnJztcbiAgfVxuICBpZiAoYWxsb3dFbXB0eSAmJiAodmFsdWUgPT09ICdudWxsJyB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykpIHtcbiAgICByZXR1cm4gJy0gLSc7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRydWVGYWxzZTogKHZhbHVlLCBvcHRpb25zKSA9PlxuICAgIEJvb2xlYW4odmFsdWUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB0aWNrOiBvcHRpb25zLnRydWVMYWJlbCB8fCAnVHJ1ZScsXG4gICAgICBjcm9zczogb3B0aW9ucy5mYWxzZUxhYmVsIHx8ICdGYWxzZSdcbiAgICB9KVxufTtcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ export function getLocale(locale = '') {
2
+ // use locale if specified
3
+ if (locale)
4
+ return locale;
5
+ // otherwise, use operator locale if it's defined
6
+ if (PCore.getEnvironmentInfo().getLocale())
7
+ return PCore.getEnvironmentInfo().getLocale();
8
+ // fallback
9
+ return Intl.DateTimeFormat().resolvedOptions().locale;
10
+ }
11
+ export function getCurrentTimezone(timezone = 'America/New_York') {
12
+ if (timezone)
13
+ return timezone;
14
+ return PCore?.getLocaleUtils?.().getTimeZoneInUse?.();
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19oZWxwZXJzL2Zvcm1hdHRlcnMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxTQUFTLENBQUMsU0FBaUIsRUFBRTtJQUMzQywwQkFBMEI7SUFDMUIsSUFBSSxNQUFNO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDMUIsaURBQWlEO0lBQ2pELElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxRixXQUFXO0lBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsV0FBbUIsa0JBQWtCO0lBQ3RFLElBQUksUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzlCLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlKGxvY2FsZTogc3RyaW5nID0gJycpIHtcbiAgLy8gdXNlIGxvY2FsZSBpZiBzcGVjaWZpZWRcbiAgaWYgKGxvY2FsZSkgcmV0dXJuIGxvY2FsZTtcbiAgLy8gb3RoZXJ3aXNlLCB1c2Ugb3BlcmF0b3IgbG9jYWxlIGlmIGl0J3MgZGVmaW5lZFxuICBpZiAoUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0TG9jYWxlKCkpIHJldHVybiBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRMb2NhbGUoKTtcbiAgLy8gZmFsbGJhY2tcbiAgcmV0dXJuIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50VGltZXpvbmUodGltZXpvbmU6IHN0cmluZyA9ICdBbWVyaWNhL05ld19Zb3JrJykge1xuICBpZiAodGltZXpvbmUpIHJldHVybiB0aW1lem9uZTtcbiAgcmV0dXJuIFBDb3JlPy5nZXRMb2NhbGVVdGlscz8uKCkuZ2V0VGltZVpvbmVJblVzZT8uKCk7XG59XG4iXX0=
@@ -0,0 +1,68 @@
1
+ import { getLocale } from './common';
2
+ import { currencyMap } from './currency-map';
3
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4
+ function NumberFormatter(value, { locale = 'en-US', decPlaces = 2, style = '', currency = 'USD' } = {}) {
5
+ const currentLocale = getLocale(locale);
6
+ if (value !== null && value !== undefined) {
7
+ return Number(value).toLocaleString(currentLocale, {
8
+ minimumFractionDigits: decPlaces,
9
+ maximumFractionDigits: decPlaces
10
+ });
11
+ }
12
+ return value;
13
+ }
14
+ function CurrencyFormatter(value, { symbol = true, position = 'before', locale = 'en-US', decPlaces = 2, style = 'currency', currency = 'USD' } = {}) {
15
+ const currentLocale = getLocale(locale);
16
+ let formattedValue = value;
17
+ if (value !== null && value !== undefined && value !== '') {
18
+ formattedValue = NumberFormatter(value, {
19
+ locale: currentLocale,
20
+ decPlaces,
21
+ style,
22
+ currency
23
+ });
24
+ let countryCode = currentLocale?.split('-')[1].toUpperCase();
25
+ // If countryCode is still undefined, setting it as US
26
+ if (!countryCode) {
27
+ countryCode = 'US';
28
+ }
29
+ let code;
30
+ if (symbol) {
31
+ code = currencyMap[countryCode]?.symbolFormat;
32
+ }
33
+ else {
34
+ code = currencyMap[countryCode]?.currencyCode;
35
+ }
36
+ // if position is provided, change placeholder accordingly.
37
+ if (position && code) {
38
+ if (position.toLowerCase() === 'before' && code.startsWith('{#}')) {
39
+ code = code.slice(3) + code.slice(0, 3);
40
+ }
41
+ else if (position.toLowerCase() === 'after' && code.indexOf('{#}') === code.length - 3) {
42
+ code = code.slice(-3) + code.slice(0, -3);
43
+ }
44
+ }
45
+ return code?.replace('{#}', formattedValue) || formattedValue;
46
+ }
47
+ return formattedValue;
48
+ }
49
+ function SymbolFormatter(value, { symbol = '$', suffix = true, locale = 'en-US' } = {}) {
50
+ let formattedValue = value;
51
+ if (value !== null && value !== undefined) {
52
+ formattedValue = NumberFormatter(value, { locale });
53
+ return suffix ? `${formattedValue}${symbol}` : `${symbol}${formattedValue}`;
54
+ }
55
+ return formattedValue;
56
+ }
57
+ export default {
58
+ Currency: (value, options) => CurrencyFormatter(value, options),
59
+ 'Currency-Code': (value, options) => CurrencyFormatter(value, { ...options, symbol: false }),
60
+ Decimal: (value, options) => NumberFormatter(value, options),
61
+ 'Decimal-Auto': (value, options) => NumberFormatter(value, {
62
+ ...options,
63
+ decPlaces: Number.isInteger(value) ? 0 : 2
64
+ }),
65
+ Integer: (value, options) => NumberFormatter(value, { ...options, decPlaces: 0 }),
66
+ Percentage: (value, options) => SymbolFormatter(value, { ...options, symbol: '%' })
67
+ };
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2hlbHBlcnMvZm9ybWF0dGVycy9jdXJyZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3Qyw2REFBNkQ7QUFDN0QsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxHQUFHLE9BQU8sRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDcEcsTUFBTSxhQUFhLEdBQXVCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUN6QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFO1lBQ2pELHFCQUFxQixFQUFFLFNBQVM7WUFDaEMscUJBQXFCLEVBQUUsU0FBUztTQUNqQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQ3hCLEtBQWEsRUFDYixFQUFFLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxHQUFHLFFBQVEsRUFBRSxNQUFNLEdBQUcsT0FBTyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFVBQVUsRUFBRSxRQUFRLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUVsSCxNQUFNLGFBQWEsR0FBdUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksY0FBYyxHQUFXLEtBQUssQ0FBQztJQUNu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QUcsT0FBTztRQUNWLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0MsQ0FBQztJQUNKLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDakYsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUNwRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9jYWxlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgY3VycmVuY3lNYXAgfSBmcm9tICcuL2N1cnJlbmN5LW1hcCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIE51bWJlckZvcm1hdHRlcih2YWx1ZSwgeyBsb2NhbGUgPSAnZW4tVVMnLCBkZWNQbGFjZXMgPSAyLCBzdHlsZSA9ICcnLCBjdXJyZW5jeSA9ICdVU0QnIH0gPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IGN1cnJlbnRMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExvY2FsZShsb2NhbGUpO1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpLnRvTG9jYWxlU3RyaW5nKGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZGVjUGxhY2VzLFxuICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkZWNQbGFjZXNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEN1cnJlbmN5Rm9ybWF0dGVyKFxuICB2YWx1ZTogc3RyaW5nLFxuICB7IHN5bWJvbCA9IHRydWUsIHBvc2l0aW9uID0gJ2JlZm9yZScsIGxvY2FsZSA9ICdlbi1VUycsIGRlY1BsYWNlcyA9IDIsIHN0eWxlID0gJ2N1cnJlbmN5JywgY3VycmVuY3kgPSAnVVNEJyB9ID0ge31cbik6IHN0cmluZyB7XG4gIGNvbnN0IGN1cnJlbnRMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExvY2FsZShsb2NhbGUpO1xuICBsZXQgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyA9IHZhbHVlO1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICBmb3JtYXR0ZWRWYWx1ZSA9IE51bWJlckZvcm1hdHRlcih2YWx1ZSwge1xuICAgICAgbG9jYWxlOiBjdXJyZW50TG9jYWxlLFxuICAgICAgZGVjUGxhY2VzLFxuICAgICAgc3R5bGUsXG4gICAgICBjdXJyZW5jeVxuICAgIH0pO1xuXG4gICAgbGV0IGNvdW50cnlDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjdXJyZW50TG9jYWxlPy5zcGxpdCgnLScpWzFdLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAvLyBJZiBjb3VudHJ5Q29kZSBpcyBzdGlsbCB1bmRlZmluZWQsIHNldHRpbmcgaXQgYXMgVVNcbiAgICBpZiAoIWNvdW50cnlDb2RlKSB7XG4gICAgICBjb3VudHJ5Q29kZSA9ICdVUyc7XG4gICAgfVxuXG4gICAgbGV0IGNvZGU6IHN0cmluZztcbiAgICBpZiAoc3ltYm9sKSB7XG4gICAgICBjb2RlID0gY3VycmVuY3lNYXBbY291bnRyeUNvZGVdPy5zeW1ib2xGb3JtYXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGUgPSBjdXJyZW5jeU1hcFtjb3VudHJ5Q29kZV0/LmN1cnJlbmN5Q29kZTtcbiAgICB9XG5cbiAgICAvLyBpZiBwb3NpdGlvbiBpcyBwcm92aWRlZCwgY2hhbmdlIHBsYWNlaG9sZGVyIGFjY29yZGluZ2x5LlxuICAgIGlmIChwb3NpdGlvbiAmJiBjb2RlKSB7XG4gICAgICBpZiAocG9zaXRpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2JlZm9yZScgJiYgY29kZS5zdGFydHNXaXRoKCd7I30nKSkge1xuICAgICAgICBjb2RlID0gY29kZS5zbGljZSgzKSArIGNvZGUuc2xpY2UoMCwgMyk7XG4gICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdhZnRlcicgJiYgY29kZS5pbmRleE9mKCd7I30nKSA9PT0gY29kZS5sZW5ndGggLSAzKSB7XG4gICAgICAgIGNvZGUgPSBjb2RlLnNsaWNlKC0zKSArIGNvZGUuc2xpY2UoMCwgLTMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29kZT8ucmVwbGFjZSgneyN9JywgZm9ybWF0dGVkVmFsdWUpIHx8IGZvcm1hdHRlZFZhbHVlO1xuICB9XG4gIHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gU3ltYm9sRm9ybWF0dGVyKHZhbHVlLCB7IHN5bWJvbCA9ICckJywgc3VmZml4ID0gdHJ1ZSwgbG9jYWxlID0gJ2VuLVVTJyB9ID0ge30pOiBzdHJpbmcge1xuICBsZXQgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyA9IHZhbHVlO1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvcm1hdHRlZFZhbHVlID0gTnVtYmVyRm9ybWF0dGVyKHZhbHVlLCB7IGxvY2FsZSB9KTtcbiAgICByZXR1cm4gc3VmZml4ID8gYCR7Zm9ybWF0dGVkVmFsdWV9JHtzeW1ib2x9YCA6IGAke3N5bWJvbH0ke2Zvcm1hdHRlZFZhbHVlfWA7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEN1cnJlbmN5OiAodmFsdWUsIG9wdGlvbnMpID0+IEN1cnJlbmN5Rm9ybWF0dGVyKHZhbHVlLCBvcHRpb25zKSxcbiAgJ0N1cnJlbmN5LUNvZGUnOiAodmFsdWUsIG9wdGlvbnMpID0+IEN1cnJlbmN5Rm9ybWF0dGVyKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHN5bWJvbDogZmFsc2UgfSksXG4gIERlY2ltYWw6ICh2YWx1ZSwgb3B0aW9ucykgPT4gTnVtYmVyRm9ybWF0dGVyKHZhbHVlLCBvcHRpb25zKSxcbiAgJ0RlY2ltYWwtQXV0byc6ICh2YWx1ZSwgb3B0aW9ucykgPT5cbiAgICBOdW1iZXJGb3JtYXR0ZXIodmFsdWUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBkZWNQbGFjZXM6IE51bWJlci5pc0ludGVnZXIodmFsdWUpID8gMCA6IDJcbiAgICB9KSxcbiAgSW50ZWdlcjogKHZhbHVlLCBvcHRpb25zKSA9PiBOdW1iZXJGb3JtYXR0ZXIodmFsdWUsIHsgLi4ub3B0aW9ucywgZGVjUGxhY2VzOiAwIH0pLFxuICBQZXJjZW50YWdlOiAodmFsdWUsIG9wdGlvbnMpID0+IFN5bWJvbEZvcm1hdHRlcih2YWx1ZSwgeyAuLi5vcHRpb25zLCBzeW1ib2w6ICclJyB9KVxufTtcbiJdfQ==
@@ -0,0 +1,69 @@
1
+ import dayjs from 'dayjs';
2
+ import relativeTime from 'dayjs/plugin/relativeTime';
3
+ import localizedFormat from 'dayjs/plugin/localizedFormat';
4
+ import utc from 'dayjs/plugin/utc';
5
+ import tzone from 'dayjs/plugin/timezone';
6
+ dayjs.extend(relativeTime);
7
+ dayjs.extend(localizedFormat);
8
+ dayjs.extend(utc);
9
+ dayjs.extend(tzone);
10
+ const types = ['fromNow', 'customFormat'];
11
+ // value should be in ISO 8601 format.
12
+ function DateFormatter(value, { type = types[1], format = 'DD/MM/YYYY', timezone = 'America/New_York' } = {}) {
13
+ if (!value)
14
+ return value;
15
+ switch (type) {
16
+ case types[1]:
17
+ if (timezone)
18
+ return dayjs(value).tz(timezone).format(format);
19
+ return dayjs(value).format(format);
20
+ case types[0]:
21
+ return dayjs(value).from(dayjs());
22
+ default:
23
+ return value;
24
+ }
25
+ }
26
+ // value should be in hh:mm:ss format (00:00:00 - 23:59:59).
27
+ function TimeFormatter(value, options) {
28
+ if (!value)
29
+ return value;
30
+ const { locale = 'en-US' } = options;
31
+ const timeOnlyRegex = /^(?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d)$/;
32
+ if (value.length === 8 && timeOnlyRegex.test(value)) {
33
+ const tempDate = new Date();
34
+ const hours = parseInt(value.substr(0, 2), 10);
35
+ const minutes = parseInt(value.substr(3, 2), 10);
36
+ const seconds = parseInt(value.substr(6, 2), 10);
37
+ tempDate.setHours(hours);
38
+ tempDate.setMinutes(minutes);
39
+ tempDate.setSeconds(seconds);
40
+ return tempDate.toLocaleTimeString(locale);
41
+ }
42
+ return DateFormatter(value, options);
43
+ }
44
+ export default {
45
+ 'DateTime-Long': (value, options) => DateFormatter(value, { ...options, type: 'customFormat', format: 'LLL' }),
46
+ 'DateTime-Short': (value, options) => DateFormatter(value, {
47
+ ...options,
48
+ type: 'customFormat',
49
+ format: 'MMM DD, YYYY'
50
+ }),
51
+ 'DateTime-Since': value => DateFormatter(value, { type: 'fromNow' }),
52
+ 'Time-Only': (value, options) => TimeFormatter(value, {
53
+ ...options,
54
+ type: 'customFormat',
55
+ format: 'hh:mm:ss A'
56
+ }),
57
+ convertToTimezone: (value, options) => {
58
+ return value && options && options.timezone
59
+ ? DateFormatter(value, {
60
+ ...options,
61
+ type: 'customFormat',
62
+ format: 'YYYY-MM-DDTHH:mm:ss'
63
+ })
64
+ : value;
65
+ },
66
+ convertFromTimezone: (value, timezone) => (value && timezone ? dayjs.tz(value, timezone).utc().format() : value),
67
+ Date: (value, options) => DateFormatter(value, { type: 'customFormat', ...options })
68
+ };
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9faGVscGVycy9mb3JtYXR0ZXJzL2RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sZUFBZSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sS0FBSyxNQUFNLHVCQUF1QixDQUFDO0FBRTFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFcEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFMUMsc0NBQXNDO0FBQ3RDLFNBQVMsYUFBYSxDQUFDLEtBQWEsRUFBRSxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLFlBQVksRUFBRSxRQUFRLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2xILElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsUUFBUSxJQUFJLEVBQUU7UUFDWixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxJQUFJLFFBQVE7Z0JBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEM7WUFDRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNILENBQUM7QUFDRCw0REFBNEQ7QUFDNUQsU0FBUyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU87SUFDbkMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QixNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNyQyxNQUFNLGFBQWEsR0FBRyxvREFBb0QsQ0FBQztJQUMzRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRCxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixPQUFPLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM1QztJQUNELE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsZUFBZTtJQUNiLGVBQWUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM5RyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUNuQyxhQUFhLENBQUMsS0FBSyxFQUFFO1FBQ25CLEdBQUcsT0FBTztRQUNWLElBQUksRUFBRSxjQUFjO1FBQ3BCLE1BQU0sRUFBRSxjQUFjO0tBQ3ZCLENBQUM7SUFDSixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDcEUsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQzlCLGFBQWEsQ0FBQyxLQUFLLEVBQUU7UUFDbkIsR0FBRyxPQUFPO1FBQ1YsSUFBSSxFQUFFLGNBQWM7UUFDcEIsTUFBTSxFQUFFLFlBQVk7S0FDckIsQ0FBQztJQUNKLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3BDLE9BQU8sS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUTtZQUN6QyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtnQkFDbkIsR0FBRyxPQUFPO2dCQUNWLElBQUksRUFBRSxjQUFjO2dCQUNwQixNQUFNLEVBQUUscUJBQXFCO2FBQzlCLENBQUM7WUFDSixDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1osQ0FBQztJQUNELG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2hILElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7Q0FDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgcmVsYXRpdmVUaW1lIGZyb20gJ2RheWpzL3BsdWdpbi9yZWxhdGl2ZVRpbWUnO1xuaW1wb3J0IGxvY2FsaXplZEZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxpemVkRm9ybWF0JztcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XG5pbXBvcnQgdHpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcblxuZGF5anMuZXh0ZW5kKHJlbGF0aXZlVGltZSk7XG5kYXlqcy5leHRlbmQobG9jYWxpemVkRm9ybWF0KTtcbmRheWpzLmV4dGVuZCh1dGMpO1xuZGF5anMuZXh0ZW5kKHR6b25lKTtcblxuY29uc3QgdHlwZXMgPSBbJ2Zyb21Ob3cnLCAnY3VzdG9tRm9ybWF0J107XG5cbi8vIHZhbHVlIHNob3VsZCBiZSBpbiBJU08gODYwMSBmb3JtYXQuXG5mdW5jdGlvbiBEYXRlRm9ybWF0dGVyKHZhbHVlOiBzdHJpbmcsIHsgdHlwZSA9IHR5cGVzWzFdLCBmb3JtYXQgPSAnREQvTU0vWVlZWScsIHRpbWV6b25lID0gJ0FtZXJpY2EvTmV3X1lvcmsnIH0gPSB7fSkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgdHlwZXNbMV06XG4gICAgICBpZiAodGltZXpvbmUpIHJldHVybiBkYXlqcyh2YWx1ZSkudHoodGltZXpvbmUpLmZvcm1hdChmb3JtYXQpO1xuICAgICAgcmV0dXJuIGRheWpzKHZhbHVlKS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjYXNlIHR5cGVzWzBdOlxuICAgICAgcmV0dXJuIGRheWpzKHZhbHVlKS5mcm9tKGRheWpzKCkpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8vIHZhbHVlIHNob3VsZCBiZSBpbiBoaDptbTpzcyBmb3JtYXQgKDAwOjAwOjAwIC0gMjM6NTk6NTkpLlxuZnVuY3Rpb24gVGltZUZvcm1hdHRlcih2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IHsgbG9jYWxlID0gJ2VuLVVTJyB9ID0gb3B0aW9ucztcbiAgY29uc3QgdGltZU9ubHlSZWdleCA9IC9eKD86WzAxXVxcZHwyWzAxMjNdKTooPzpbMDEyMzQ1XVxcZCk6KD86WzAxMjM0NV1cXGQpJC87XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDggJiYgdGltZU9ubHlSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBob3VycyA9IHBhcnNlSW50KHZhbHVlLnN1YnN0cigwLCAyKSwgMTApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZUludCh2YWx1ZS5zdWJzdHIoMywgMiksIDEwKTtcbiAgICBjb25zdCBzZWNvbmRzID0gcGFyc2VJbnQodmFsdWUuc3Vic3RyKDYsIDIpLCAxMCk7XG4gICAgdGVtcERhdGUuc2V0SG91cnMoaG91cnMpO1xuICAgIHRlbXBEYXRlLnNldE1pbnV0ZXMobWludXRlcyk7XG4gICAgdGVtcERhdGUuc2V0U2Vjb25kcyhzZWNvbmRzKTtcbiAgICByZXR1cm4gdGVtcERhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxvY2FsZSk7XG4gIH1cbiAgcmV0dXJuIERhdGVGb3JtYXR0ZXIodmFsdWUsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICdEYXRlVGltZS1Mb25nJzogKHZhbHVlLCBvcHRpb25zKSA9PiBEYXRlRm9ybWF0dGVyKHZhbHVlLCB7IC4uLm9wdGlvbnMsIHR5cGU6ICdjdXN0b21Gb3JtYXQnLCBmb3JtYXQ6ICdMTEwnIH0pLFxuICAnRGF0ZVRpbWUtU2hvcnQnOiAodmFsdWUsIG9wdGlvbnMpID0+XG4gICAgRGF0ZUZvcm1hdHRlcih2YWx1ZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHR5cGU6ICdjdXN0b21Gb3JtYXQnLFxuICAgICAgZm9ybWF0OiAnTU1NIERELCBZWVlZJ1xuICAgIH0pLFxuICAnRGF0ZVRpbWUtU2luY2UnOiB2YWx1ZSA9PiBEYXRlRm9ybWF0dGVyKHZhbHVlLCB7IHR5cGU6ICdmcm9tTm93JyB9KSxcbiAgJ1RpbWUtT25seSc6ICh2YWx1ZSwgb3B0aW9ucykgPT5cbiAgICBUaW1lRm9ybWF0dGVyKHZhbHVlLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdHlwZTogJ2N1c3RvbUZvcm1hdCcsXG4gICAgICBmb3JtYXQ6ICdoaDptbTpzcyBBJ1xuICAgIH0pLFxuICBjb252ZXJ0VG9UaW1lem9uZTogKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHZhbHVlICYmIG9wdGlvbnMgJiYgb3B0aW9ucy50aW1lem9uZVxuICAgICAgPyBEYXRlRm9ybWF0dGVyKHZhbHVlLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tRm9ybWF0JyxcbiAgICAgICAgICBmb3JtYXQ6ICdZWVlZLU1NLUREVEhIOm1tOnNzJ1xuICAgICAgICB9KVxuICAgICAgOiB2YWx1ZTtcbiAgfSxcbiAgY29udmVydEZyb21UaW1lem9uZTogKHZhbHVlLCB0aW1lem9uZSkgPT4gKHZhbHVlICYmIHRpbWV6b25lID8gZGF5anMudHoodmFsdWUsIHRpbWV6b25lKS51dGMoKS5mb3JtYXQoKSA6IHZhbHVlKSxcbiAgRGF0ZTogKHZhbHVlLCBvcHRpb25zKSA9PiBEYXRlRm9ybWF0dGVyKHZhbHVlLCB7IHR5cGU6ICdjdXN0b21Gb3JtYXQnLCAuLi5vcHRpb25zIH0pXG59O1xuIl19