@seniorsistemas/angular-components 17.19.2 → 17.19.3

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.
@@ -46,7 +46,7 @@ export declare class TablePagingComponent implements OnChanges {
46
46
  * @returns Returns the correctly mapped tableData.
47
47
  */
48
48
  mapNumberFormatOptionsExport(columns: Partial<Column>[], tableData: {
49
- [key: string]: RowValueFormatOption | number | string;
49
+ [key: string]: RowValueFormatOption | number | string | null | undefined;
50
50
  }[]): {
51
51
  [key: string]: string | number | RowValueFormatOption;
52
52
  }[];
@@ -2,7 +2,7 @@ import { __awaiter, __decorate, __param } from "tslib";
2
2
  import { Component, Inject, Input, Output } from "@angular/core";
3
3
  import { TranslateService } from "@ngx-translate/core";
4
4
  import { HostProjectConfigsInjectionToken } from "../../../angular-components.module";
5
- import { ExportUtils } from "../../utils";
5
+ import { ExportUtils, isNullOrUndefined } from "../../utils";
6
6
  import BigNumber from "bignumber.js";
7
7
  let TablePagingComponent = class TablePagingComponent {
8
8
  constructor(translate, hostProjectConfigs) {
@@ -156,6 +156,8 @@ let TablePagingComponent = class TablePagingComponent {
156
156
  const columnsWithNumberFormatOptions = columns.filter((column) => column.numberFormatOptions);
157
157
  for (const { attributes, numberFormatOptions } of columnsWithNumberFormatOptions) {
158
158
  for (const attribute of attributes) {
159
+ if (isNullOrUndefined(row[attribute]))
160
+ continue;
159
161
  if ((_a = row[attribute].options) === null || _a === void 0 ? void 0 : _a.numberFormatOptions) {
160
162
  continue;
161
163
  }
@@ -303,4 +305,4 @@ TablePagingComponent = __decorate([
303
305
  __param(1, Inject(HostProjectConfigsInjectionToken))
304
306
  ], TablePagingComponent);
305
307
  export { TablePagingComponent };
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RCxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFjckMsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBb0I7SUErQjdCLFlBQ3FCLFNBQTJCLEVBQ2Usa0JBQXNDO1FBRGhGLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ2UsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXRCOUYsZUFBVSxHQUFHLElBQUksQ0FBQztRQUdsQixnQ0FBMkIsR0FBRyxJQUFJLENBQUM7SUFvQnRDLENBQUM7SUFFTCxXQUFXLENBQUMsT0FBc0I7O1FBQzlCLFVBQUksT0FBTyxDQUFDLFlBQVksMENBQUUsWUFBWSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUU7Z0JBQ3hGLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVk7YUFDM0MsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtC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SUFEQyxLQUFLLEVBQUU7bURBQ2E7QUFHckI7SUFEQyxLQUFLLEVBQUU7d0RBQ2lCO0FBR3pCO0lBREMsS0FBSyxFQUFFO3lFQUNrQztBQUcxQztJQURDLEtBQUssRUFBRTsyREFDOEI7QUFHdEM7SUFEQyxLQUFLLEVBQUU7NERBQ3FDO0FBRzdDO0lBREMsS0FBSyxFQUFFO29FQUNvQztBQUc1QztJQURDLEtBQUssRUFBRTtpRUFDaUM7QUFHekM7SUFEQyxNQUFNLEVBQUU7OERBQ3VCO0FBN0J2QixvQkFBb0I7SUFMaEMsU0FBUyxDQUFDO1FBQ1AsOGJBQTRDO1FBRTVDLFFBQVEsRUFBRSxnQkFBZ0I7O0tBQzdCLENBQUM7SUFrQ08sV0FBQSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtHQWpDcEMsb0JBQW9CLENBaVhoQztTQWpYWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gXCIuLi90YWJsZS1jb2x1bW4vbW9kZWxzL2NvbHVtbi5pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuLi8uLi8uLi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlXCI7XG5pbXBvcnQgeyBFeHBvcnRVdGlscyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gXCJiaWdudW1iZXIuanNcIjtcblxudHlwZSBSb3dWYWx1ZUZvcm1hdE9wdGlvbiA9IHtcbiAgICB2YWx1ZT86IG51bWJlcjtcbiAgICBvcHRpb25zPzoge1xuICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zPzogSW50bC5OdW1iZXJGb3JtYXRPcHRpb25zO1xuICAgIH07XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiBcIi4vdGFibGUtcGFnaW5nLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBzZWxlY3RvcjogXCJzLXRhYmxlLXBhZ2luZ1wiLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVBhZ2luZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzITogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwb3J0RmlsZU5hbWU/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0YWJsZSE6IFRhYmxlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwb3J0YWJsZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbmFibGVFeHBvcnRTZWxlY3RlZFJlY29yZHMgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tQWN0aW9ucz86IEN1c3RvbUFjdGlvbltdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZEFsbFJlY29yZHM/OiAoKSA9PiBQcm9taXNlPGFueVtdPjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRDdXJyZW50UGFnZVJlY29yZHM/OiAoKSA9PiBhbnlbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRTZWxlY3RlZFJlY29yZHM/OiAoKSA9PiBhbnlbXTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB0b3RhbFJlY29yZHNUZXh0OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgaG9zdFByb2plY3RDb25maWdzOiBIb3N0UHJvamVjdENvbmZpZ3NcbiAgICApIHsgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy50b3RhbFJlY29yZHM/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNUZXh0ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfXRvdGFsX3JlY29yZHNgLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGNoYW5nZXMudG90YWxSZWNvcmRzLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGVQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5kb21haW59LiR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3Muc2VydmljZX0uYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG9vbHRpcFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X3RvX2NzdmApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY3Rpb25zKCk6IE1lbnVJdGVtW10ge1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBNZW51SXRlbVtdID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBcImV4cG9ydEN1cnJlbnRQYWdlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfY3VycmVudF9wYWdlYCksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5leHBvcnRDdXJyZW50UGFnZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5lbmFibGVFeHBvcnRTZWxlY3RlZFJlY29yZHMpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IFwiZXhwb3J0U2VsZWN0ZWRcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9zZWxlY3RlZF9yZWNvcmRzYCksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5leHBvcnRTZWxlY3RlZFJlY29yZHMoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZEFsbFJlY29yZHMpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IFwiZXhwb3J0QWxsXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfYWxsX3JlY29yZHNgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydEFsbFJlY29yZHMoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tQWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21NZW51cyA9IHRoaXMuY3VzdG9tQWN0aW9ucy5tYXAoKHAsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgIGlkOiBcImN1c3RvbUFjdGlvbl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwLmxhYmVsLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHAuY29tbWFuZCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCguLi5jdXN0b21NZW51cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQ29tcG9uZW50KCkge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIGNvbXBvbmVudCBub3QgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5zVG9FeHBvcnQoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy50YWJsZS5jb2x1bW5zXS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0Q29sdW1uID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICAgICAgICAgICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgIHNlcGFyYXRvcjogY29sdW1uLnNlcGFyYXRvciA/PyBcIiAtIFwiLFxuICAgICAgICAgICAgICAgIGVudW1QcmVmaXg6IGNvbHVtbi5lbnVtUHJlZml4LFxuICAgICAgICAgICAgICAgIGN1c3RvbUV4cG9ydDogY29sdW1uLmN1c3RvbUV4cG9ydCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZXhwb3J0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBleHBvcnRDb2x1bW4uZXhwb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZXMgJiYgY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRDb2x1bW4uZmllbGQgPSBjb2x1bW4uYXR0cmlidXRlc1swXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRDb2x1bW4uZmllbGQgPSBjb2x1bW4uYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBleHBvcnRDb2x1bW47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFBhZ2VSb3dzVG9FeHBvcnQoY29sdW1uczogYW55W10pIHtcbiAgICAgICAgbGV0IHRhYmxlRGF0YSA9IHRoaXMudGFibGUudmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmxvYWRDdXJyZW50UGFnZVJlY29yZHMpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubG9hZEN1cnJlbnRQYWdlUmVjb3JkcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBDdXN0b21FeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICB0YWJsZURhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFJvd3NUb0V4cG9ydChjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBsZXQgdGFibGVEYXRhID0gdGhpcy50YWJsZS5zZWxlY3Rpb247XG4gICAgICAgIGlmICh0aGlzLmxvYWRTZWxlY3RlZFJlY29yZHMpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubG9hZFNlbGVjdGVkUmVjb3JkcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBDdXN0b21FeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICB0YWJsZURhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT4gKHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByb3BlcnR5VmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnJlY3Vyc2lvblNldFZhbHVlKG9iaiwgcGF0aC5zcGxpdChcIi5cIiksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY3Vyc2lvblNldFZhbHVlKG9iajogYW55LCBrZXlzTGlzdDogc3RyaW5nW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzTGlzdFswXTtcbiAgICAgICAgaWYgKGtleXNMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgb2JqW2tleV0gPSB0aGlzLnJlY3Vyc2lvblNldFZhbHVlKG9iaj8uW2tleV0gfHwge30sIGtleXNMaXN0LnNsaWNlKDEpLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcENvbHVtbnNUcmFuc2xhdGlvbnMoY29sdW1uczogYW55W10sIHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGVudW1Db2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKHApID0+IHAuZW51bVByZWZpeCk7XG4gICAgICAgIGlmICghZW51bUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbLi4ucm93c10ubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgICBlbnVtQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSAhQXJyYXkuaXNBcnJheShjb2x1bW4uZmllbGQpID8gW2NvbHVtbi5maWVsZF0gOiBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUocm93LCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSA9PT0gbnVsbCB8fCBjb2x1bW5EYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy50cmFuc2xhdGVWYWx1ZShjb2x1bW4sIGNvbHVtbkRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUobmV3Um93LCBmaWVsZE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIG1hcCB2YWx1ZXNcbiAgICAgKiBmcm9tIHRoZSBUYWJsZUNvbHVtbnNDb21wb25lbnQsIHdoaWNoIHVzZXMgdGhlIG51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgKiBmaWVsZCwgYWxvbmcgd2l0aCByb3dzIHRoYXQgaGF2ZSBhIGN1c3RvbSBudW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAqIHRvIGVuc3VyZSB0aGUgY29ycmVjdCB2YWx1ZXMgYXJlIGV4cG9ydGVkIGJ5IHRoZSBUYWJsZVBhZ2luZ0NvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvcnJlY3RseSBtYXBwZWQgdGFibGVEYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KFxuICAgICAgICBjb2x1bW5zOiBQYXJ0aWFsPENvbHVtbj5bXSxcbiAgICAgICAgdGFibGVEYXRhOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOlxuICAgICAgICAgICAgfCBSb3dWYWx1ZUZvcm1hdE9wdGlvblxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgIHwgc3RyaW5nO1xuICAgICAgICB9W11cbiAgICApIHtcbiAgICAgICAgY29uc3QgaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMgPSBjb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBoYXNOdW1iZXJGb3JtYXRPcHRpb25zUm93cyA9IHRhYmxlRGF0YS5zb21lKChyb3dEYXRhKSA9PiBPYmplY3Qua2V5cyhyb3dEYXRhKS5zb21lKChrZXkpID0+IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKSk7XG5cbiAgICAgICAgaWYgKCFoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucyAmJiAhaGFzTnVtYmVyRm9ybWF0T3B0aW9uc1Jvd3MpIHJldHVybiB0YWJsZURhdGE7XG5cbiAgICAgICAgbGV0IG1hcHBlZFRhYmxlRGF0YSA9IFsuLi50YWJsZURhdGFdO1xuXG4gICAgICAgIGlmIChoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucykge1xuICAgICAgICAgICAgbWFwcGVkVGFibGVEYXRhID0gbWFwcGVkVGFibGVEYXRhLm1hcCgocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHsgLi4ucm93RGF0YSB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zID0gY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IGF0dHJpYnV0ZXMsIG51bWJlckZvcm1hdE9wdGlvbnMgfSBvZiBjb2x1bW5zV2l0aE51bWJlckZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3dbYXR0cmlidXRlXSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbikub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1thdHRyaWJ1dGVdIGFzIHN0cmluZyB8IG51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnMuc3R5bGUgPT09IFwicGVyY2VudFwiID8gbmV3IEJpZ051bWJlcih2YWx1ZSkudGltZXMoMTAwKSA6IG5ldyBCaWdOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nTW9kZTogXCJ0cnVuY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1thdHRyaWJ1dGVdID0gbnVtYmVyRm9ybWF0LmZvcm1hdChtYXBwZWRWYWx1ZS50b051bWJlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNOdW1iZXJGb3JtYXRPcHRpb25zUm93cykge1xuICAgICAgICAgICAgbWFwcGVkVGFibGVEYXRhID0gdGFibGVEYXRhLm1hcCgocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHsgLi4ucm93RGF0YSB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5c1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zID0gT2JqZWN0LmtleXMocm93KVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IChyb3dba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbik/Lm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPSAocm93RGF0YVtrZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zLm51bWJlckZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBudW1iZXJGb3JtYXRPcHRpb25zLnN0eWxlID09PSBcInBlcmNlbnRcIiA/IG5ldyBCaWdOdW1iZXIodmFsdWUpLnRpbWVzKDEwMCkgOiBuZXcgQmlnTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5udW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdNb2RlOiBcInRydW5jXCJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgICAgICAgICAgIChyb3dba2V5XSBhcyBzdHJpbmcgfCBudW1iZXIpID0gbnVtYmVyRm9ybWF0LmZvcm1hdChtYXBwZWRWYWx1ZS50b051bWJlcigpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWFwcGVkVGFibGVEYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBDdXN0b21FeHBvcnQoY29sdW1uczogYW55W10sIHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigocCkgPT4gcC5jdXN0b21FeHBvcnQpO1xuICAgICAgICBpZiAoIWN1c3RvbUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbLi4ucm93c10ubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgICBjdXN0b21Db2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9ICFBcnJheS5pc0FycmF5KGNvbHVtbi5maWVsZCkgPyBbY29sdW1uLmZpZWxkXSA6IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShyb3csIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5EYXRhID09PSBudWxsIHx8IGNvbHVtbkRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29sdW1uLmN1c3RvbUV4cG9ydChjb2x1bW5EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKG5ld1JvdywgZmllbGROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVWYWx1ZShjb2x1bW46IGFueSwgY29sdW1uRGF0YTogYW55KSB7XG4gICAgICAgIC8vIERlZmF1bHQgdXNhZ2U6IEVOVU1fVkFMVUUgLT4gZG9tYWluLnNlcnZpY2UuZW51bV92YWx1ZVxuICAgICAgICBjb25zdCBlbnVtVmFsdWUgPSBjb2x1bW5EYXRhLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uS2V5ID0gY29sdW1uLmVudW1QcmVmaXggKyBlbnVtVmFsdWU7XG4gICAgICAgIGxldCB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcblxuICAgICAgICAvLyBDdXN0b20gdXNhZ2UgMTogVjkgLT4gZG9tYWluLnNlcnZpY2Uudl85XG4gICAgICAgIGlmICh0cmFuc2xhdGlvbktleSA9PT0gdHJhbnNsYXRlZFZhbHVlICYmIGVudW1WYWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbktleSA9IGAke2NvbHVtbi5lbnVtUHJlZml4fSR7ZW51bVZhbHVlLnN1YnN0cmluZygwLCAxKX1fJHtlbnVtVmFsdWUuc3Vic3RyKDEpfWA7XG4gICAgICAgICAgICB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1c3RvbSB1c2FnZSAyOiBFbnVtVmFsdWUgLT4gZG9tYWluLnNlcnZpY2UuZW51bV92YWx1ZVxuICAgICAgICBpZiAodHJhbnNsYXRpb25LZXkgPT09IHRyYW5zbGF0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZW51bUtleSA9IHRoaXMuY29udmVydFRvU25ha2VDYXNlKGNvbHVtbkRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbktleSA9IGAke2NvbHVtbi5lbnVtUHJlZml4fSR7ZW51bUtleX1gO1xuICAgICAgICAgICAgdHJhbnNsYXRlZFZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRvU25ha2VDYXNlKHN0cjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFtBLVpdKS9nLCAobWF0Y2gsIGdyb3VwKSA9PiBgXyR7Z3JvdXAudG9Mb3dlckNhc2UoKX1gKS5yZXBsYWNlKC9eXy8sIFwiXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0RmlsZU5hbWUoKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyA/PyBcInB0LUJSXCI7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHBvcnRGaWxlTmFtZSA/PyBcImRvd25sb2FkXCI7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhsYW5nKS5yZXBsYWNlKFwiX1wiLCBcIi1cIik7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBkYXRlLnRvTG9jYWxlVGltZVN0cmluZyhsYW5nKS5yZXBsYWNlKFwiIFwiLCBcIi1cIik7XG5cbiAgICAgICAgcmV0dXJuIGAke2ZpbGVOYW1lfV8ke2Zvcm1hdHRlZERhdGV9XyR7Zm9ybWF0dGVkVGltZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRDdXJyZW50UGFnZSgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zVG9FeHBvcnQoKTtcbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5nZXRDdXJyZW50UGFnZVJvd3NUb0V4cG9ydChjb2x1bW5zKTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRTZWxlY3RlZFJlY29yZHMoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnQoKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzVG9FeHBvcnQoY29sdW1ucyk7XG4gICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENTVihjb2x1bW5zLCBkYXRhVG9FeHBvcnQsIHVuZGVmaW5lZCwgdGhpcy5nZXRFeHBvcnRGaWxlTmFtZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhwb3J0QWxsUmVjb3JkcygpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuXG4gICAgICAgIGxldCBzZXJ2ZXJEYXRhID0gYXdhaXQgdGhpcy5sb2FkQWxsUmVjb3JkcygpO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNUb0V4cG9ydCgpO1xuXG4gICAgICAgIHNlcnZlckRhdGEgPSB0aGlzLm1hcEN1c3RvbUV4cG9ydChjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBzZXJ2ZXJEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxufVxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RCxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFjckMsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBb0I7SUErQjdCLFlBQ3FCLFNBQTJCLEVBQ2Usa0JBQXNDO1FBRGhGLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ2UsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXRCOUYsZUFBVSxHQUFHLElBQUksQ0FBQztRQUdsQixnQ0FBMkIsR0FBRyxJQUFJLENBQUM7SUFvQnRDLENBQUM7SUFFTCxXQUFXLENBQUMsT0FBc0I7O1FBQzlCLFVBQUksT0FBTyxDQUFDLFlBQVksMENBQUUsWUFBWSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUU7Z0JBQ3hGLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVk7YUFDM0MsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsQ0FBQztJQUNuRixDQUFDO0lBRU0sY0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFTSxVQUFVOztRQUNiLE1BQU0sT0FBTyxHQUFlO1lBQ3hCO2dCQUNJLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztnQkFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTthQUMxQztTQUNKLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNULEVBQUUsRUFBRSxnQkFBZ0I7Z0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSx5QkFBeUIsQ0FBQztnQkFDcEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUM5QyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNULEVBQUUsRUFBRSxXQUFXO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQztnQkFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTthQUN6QyxDQUFDLENBQUM7U0FDTjtRQUVELFVBQUksSUFBSSxDQUFDLGFBQWEsMENBQUUsTUFBTSxFQUFFO1lBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEQsRUFBRSxFQUFFLGVBQWUsR0FBRyxLQUFLO2dCQUMzQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO2FBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTs7WUFDMUMsTUFBTSxZQUFZLG1DQUNYLE1BQU0sS0FDVCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFDckIsVUFBVSxFQUFFLElBQUksRUFDaEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQ25CLFNBQVMsUUFBRSxNQUFNLENBQUMsU0FBUyxtQ0FBSSxLQUFLLEVBQ3BDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUM3QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksR0FDcEMsQ0FBQztZQUVGLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7Z0JBQzdCLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ25DO1lBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDaEMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM3QztxQkFBTTtvQkFDSCxZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7aUJBQzFDO2FBQ0o7WUFFRCxPQUFPLFlBQVksQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxPQUFjO1FBQzdDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzdCLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUM3QztRQUVELFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVyRCxTQUFTLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVsRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE9BQWM7UUFDMUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDMUIsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzFDO1FBRUQsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXJELFNBQVMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWxFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1SCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxLQUFVO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBUSxFQUFFLFFBQWtCLEVBQUUsS0FBVTtRQUM5RCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFHLEdBQUcsTUFBSyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxPQUFjLEVBQUUsSUFBVztRQUNyRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sTUFBTSxxQkFBUSxHQUFHLENBQUUsQ0FBQztZQUMxQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUM1RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFO29CQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTt3QkFDakQsT0FBTztxQkFDVjtvQkFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHRDs7Ozs7OztPQU9HO0lBQ0ksNEJBQTRCLENBQy9CLE9BQTBCLEVBQzFCLFNBT0c7UUFFSCxNQUFNLDZCQUE2QixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sMEJBQTBCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQ0FBRSxPQUFPLENBQUMsR0FBRyxDQUEwQiwwQ0FBRSxPQUFPLDBDQUFFLG1CQUFtQixHQUFBLENBQUMsQ0FBQyxDQUFDO1FBRXpLLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLDBCQUEwQjtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRXBGLElBQUksZUFBZSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUVyQyxJQUFJLDZCQUE2QixFQUFFO1lBQy9CLGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O2dCQUM5QyxNQUFNLEdBQUcscUJBQVEsT0FBTyxDQUFFLENBQUM7Z0JBRTNCLE1BQU0sOEJBQThCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBRTlGLEtBQUssTUFBTSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLDhCQUE4QixFQUFFO29CQUM5RSxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTt3QkFDaEMsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQUUsU0FBUzt3QkFFaEQsVUFBSyxHQUFHLENBQUMsU0FBUyxDQUEwQixDQUFDLE9BQU8sMENBQUUsbUJBQW1CLEVBQUU7NEJBQ3ZFLFNBQVM7eUJBQ1o7d0JBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBb0IsQ0FBQzt3QkFFaEQsTUFBTSxXQUFXLEdBQ2IsbUJBQW1CLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFFckcsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxnQ0FDN0MsbUJBQW1CLEtBQ3RCLEtBQUssRUFBRSxTQUFTLEVBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLFlBQVksRUFBRSxPQUFPLEdBQ2pCLENBQUMsQ0FBQzt3QkFFVixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztxQkFDaEU7aUJBQ0o7Z0JBRUQsT0FBTyxHQUFHLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSwwQkFBMEIsRUFBRTtZQUM1QixlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN4QyxNQUFNLEdBQUcscUJBQVEsT0FBTyxDQUFFLENBQUM7Z0JBRTNCLE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7cUJBQy9DLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLGtDQUFFLEdBQUcsQ0FBQyxHQUFHLENBQTBCLDBDQUFFLE9BQU8sMENBQUUsbUJBQW1CLEdBQUEsQ0FBQyxDQUFDO2dCQUN2RixLQUFLLE1BQU0sR0FBRyxJQUFJLDJCQUEyQixFQUFFO29CQUMzQyxNQUFNLEtBQUssR0FBSSxPQUFPLENBQUMsR0FBRyxDQUEwQixDQUFDLEtBQUssQ0FBQztvQkFFM0QsTUFBTSxtQkFBbUIsR0FBSSxPQUFPLENBQUMsR0FBRyxDQUEwQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztvQkFFL0YsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFckgsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxnQ0FDN0MsbUJBQW1CLEtBQ3RCLEtBQUssRUFBRSxTQUFTLEVBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLFlBQVksRUFBRSxPQUFPLEdBQ2pCLENBQUMsQ0FBQztvQkFFVCxHQUFHLENBQUMsR0FBRyxDQUFxQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQy9FO2dCQUVELE9BQU8sR0FBRyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFTSxlQUFlLENBQUMsT0FBYyxFQUFFLElBQVc7UUFDOUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN6QixNQUFNLE1BQU0scUJBQVEsR0FBRyxDQUFFLENBQUM7WUFDMUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM3QixNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDNUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtvQkFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDekQsSUFBSSxVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7d0JBQ2pELE9BQU87cUJBQ1Y7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBVyxFQUFFLFVBQWU7UUFDL0MseURBQXlEO1FBQ3pELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0RCxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUNuRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU3RCwyQ0FBMkM7UUFDM0MsSUFBSSxjQUFjLEtBQUssZUFBZSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVELGNBQWMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNGLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1RDtRQUVELHlEQUF5RDtRQUN6RCxJQUFJLGNBQWMsS0FBSyxlQUFlLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELGNBQWMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDbEQsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQVc7UUFDbEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxpQkFBaUI7O1FBQ3JCLE1BQU0sSUFBSSxTQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxtQ0FBSSxPQUFPLENBQUM7UUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUV4QixNQUFNLFFBQVEsU0FBRyxJQUFJLENBQUMsY0FBYyxtQ0FBSSxVQUFVLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEUsT0FBTyxHQUFHLFFBQVEsSUFBSSxhQUFhLElBQUksYUFBYSxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTSxxQkFBcUI7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRVksZ0JBQWdCOztZQUN6QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUV6QixJQUFJLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUUxQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFdkQsVUFBVSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUV0RSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztLQUFBO0NBQ0osQ0FBQTs7WUFyVm1DLGdCQUFnQjs0Q0FDM0MsTUFBTSxTQUFDLGdDQUFnQzs7QUEvQjVDO0lBREMsS0FBSyxFQUFFOzBEQUNxQjtBQUc3QjtJQURDLEtBQUssRUFBRTs0REFDdUI7QUFHL0I7SUFEQyxLQUFLLEVBQUU7bURBQ2E7QUFHckI7SUFEQyxLQUFLLEVBQUU7d0RBQ2lCO0FBR3pCO0lBREMsS0FBSyxFQUFFO3lFQUNrQztBQUcxQztJQURDLEtBQUssRUFBRTsyREFDOEI7QUFHdEM7SUFEQyxLQUFLLEVBQUU7NERBQ3FDO0FBRzdDO0lBREMsS0FBSyxFQUFFO29FQUNvQztBQUc1QztJQURDLEtBQUssRUFBRTtpRUFDaUM7QUFHekM7SUFEQyxNQUFNLEVBQUU7OERBQ3VCO0FBN0J2QixvQkFBb0I7SUFMaEMsU0FBUyxDQUFDO1FBQ1AsOGJBQTRDO1FBRTVDLFFBQVEsRUFBRSxnQkFBZ0I7O0tBQzdCLENBQUM7SUFrQ08sV0FBQSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtHQWpDcEMsb0JBQW9CLENBcVhoQztTQXJYWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gXCIuLi90YWJsZS1jb2x1bW4vbW9kZWxzL2NvbHVtbi5pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuLi8uLi8uLi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlXCI7XG5pbXBvcnQgeyBFeHBvcnRVdGlscywgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCB7IEN1c3RvbUFjdGlvbiB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tIFwiYmlnbnVtYmVyLmpzXCI7XG5cbnR5cGUgUm93VmFsdWVGb3JtYXRPcHRpb24gPSB7XG4gICAgdmFsdWU/OiBudW1iZXI7XG4gICAgb3B0aW9ucz86IHtcbiAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucz86IEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucztcbiAgICB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi90YWJsZS1wYWdpbmcuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgc2VsZWN0b3I6IFwicy10YWJsZS1wYWdpbmdcIixcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVQYWdpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFibGUhOiBUYWJsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydGFibGUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUFjdGlvbnM/OiBDdXN0b21BY3Rpb25bXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRBbGxSZWNvcmRzPzogKCkgPT4gUHJvbWlzZTxhbnlbXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkQ3VycmVudFBhZ2VSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkU2VsZWN0ZWRSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzVGV4dDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGhvc3RQcm9qZWN0Q29uZmlnczogSG9zdFByb2plY3RDb25maWdzXG4gICAgKSB7IH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudG90YWxSZWNvcmRzPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzVGV4dCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX10b3RhbF9yZWNvcmRzYCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBjaGFuZ2VzLnRvdGFsUmVjb3Jkcy5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRlUHJlZml4KCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3MuZG9tYWlufS4ke3RoaXMuaG9zdFByb2plY3RDb25maWdzLnNlcnZpY2V9LmA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvb2x0aXBUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF90b19jc3ZgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWN0aW9ucygpOiBNZW51SXRlbVtdIHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogTWVudUl0ZW1bXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogXCJleHBvcnRDdXJyZW50UGFnZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X2N1cnJlbnRfcGFnZWApLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhwb3J0Q3VycmVudFBhZ2UoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBcImV4cG9ydFNlbGVjdGVkXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfc2VsZWN0ZWRfcmVjb3Jkc2ApLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhwb3J0U2VsZWN0ZWRSZWNvcmRzKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvYWRBbGxSZWNvcmRzKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBcImV4cG9ydEFsbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X2FsbF9yZWNvcmRzYCksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5leHBvcnRBbGxSZWNvcmRzKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTWVudXMgPSB0aGlzLmN1c3RvbUFjdGlvbnMubWFwKChwLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogXCJjdXN0b21BY3Rpb25fXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcC5sYWJlbCxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBwLmNvbW1hbmQsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goLi4uY3VzdG9tTWVudXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBjb21wb25lbnQgbm90IGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sdW1uc1RvRXhwb3J0KCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudGFibGUuY29sdW1uc10ubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydENvbHVtbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgICAgICAgICAgIGV4cG9ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3I6IGNvbHVtbi5zZXBhcmF0b3IgPz8gXCIgLSBcIixcbiAgICAgICAgICAgICAgICBlbnVtUHJlZml4OiBjb2x1bW4uZW51bVByZWZpeCxcbiAgICAgICAgICAgICAgICBjdXN0b21FeHBvcnQ6IGNvbHVtbi5jdXN0b21FeHBvcnQsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmV4cG9ydGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZXhwb3J0Q29sdW1uLmV4cG9ydGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGVzICYmIGNvbHVtbi5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uYXR0cmlidXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0Q29sdW1uLmZpZWxkID0gY29sdW1uLmF0dHJpYnV0ZXNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0Q29sdW1uLmZpZWxkID0gY29sdW1uLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0Q29sdW1uO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRQYWdlUm93c1RvRXhwb3J0KGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGxldCB0YWJsZURhdGEgPSB0aGlzLnRhYmxlLnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5sb2FkQ3VycmVudFBhZ2VSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRDdXJyZW50UGFnZVJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzVG9FeHBvcnQoY29sdW1uczogYW55W10pIHtcbiAgICAgICAgbGV0IHRhYmxlRGF0YSA9IHRoaXMudGFibGUuc2VsZWN0aW9uO1xuICAgICAgICBpZiAodGhpcy5sb2FkU2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRTZWxlY3RlZFJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKHJlc3VsdDogYW55LCBwcm9wOiBhbnkpID0+IChyZXN1bHRbcHJvcF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlc3VsdFtwcm9wXSksIG9iaik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yZWN1cnNpb25TZXRWYWx1ZShvYmosIHBhdGguc3BsaXQoXCIuXCIpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWN1cnNpb25TZXRWYWx1ZShvYmo6IGFueSwga2V5c0xpc3Q6IHN0cmluZ1tdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0xpc3RbMF07XG4gICAgICAgIGlmIChrZXlzTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICAgIG9ialtrZXldID0gdGhpcy5yZWN1cnNpb25TZXRWYWx1ZShvYmo/LltrZXldIHx8IHt9LCBrZXlzTGlzdC5zbGljZSgxKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnM6IGFueVtdLCByb3dzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBlbnVtQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmVudW1QcmVmaXgpO1xuICAgICAgICBpZiAoIWVudW1Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnJvd3NdLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgICAgZW51bUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudHJhbnNsYXRlVmFsdWUoY29sdW1uLCBjb2x1bW5EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKG5ld1JvdywgZmllbGROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBtYXAgdmFsdWVzXG4gICAgICogZnJvbSB0aGUgVGFibGVDb2x1bW5zQ29tcG9uZW50LCB3aGljaCB1c2VzIHRoZSBudW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICogZmllbGQsIGFsb25nIHdpdGggcm93cyB0aGF0IGhhdmUgYSBjdXN0b20gbnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgKiB0byBlbnN1cmUgdGhlIGNvcnJlY3QgdmFsdWVzIGFyZSBleHBvcnRlZCBieSB0aGUgVGFibGVQYWdpbmdDb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb3JyZWN0bHkgbWFwcGVkIHRhYmxlRGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFwTnVtYmVyRm9ybWF0T3B0aW9uc0V4cG9ydChcbiAgICAgICAgY29sdW1uczogUGFydGlhbDxDb2x1bW4+W10sXG4gICAgICAgIHRhYmxlRGF0YToge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTpcbiAgICAgICAgICAgIHwgUm93VmFsdWVGb3JtYXRPcHRpb25cbiAgICAgICAgICAgIHwgbnVtYmVyXG4gICAgICAgICAgICB8IHN0cmluZ1xuICAgICAgICAgICAgfCBudWxsXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVtdXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGhhc051bWJlckZvcm1hdE9wdGlvbnNDb2x1bW5zID0gY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKTtcbiAgICAgICAgY29uc3QgaGFzTnVtYmVyRm9ybWF0T3B0aW9uc1Jvd3MgPSB0YWJsZURhdGEuc29tZSgocm93RGF0YSkgPT4gT2JqZWN0LmtleXMocm93RGF0YSkuc29tZSgoa2V5KSA9PiAocm93RGF0YVtrZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9ucykpO1xuXG4gICAgICAgIGlmICghaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMgJiYgIWhhc051bWJlckZvcm1hdE9wdGlvbnNSb3dzKSByZXR1cm4gdGFibGVEYXRhO1xuXG4gICAgICAgIGxldCBtYXBwZWRUYWJsZURhdGEgPSBbLi4udGFibGVEYXRhXTtcblxuICAgICAgICBpZiAoaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMpIHtcbiAgICAgICAgICAgIG1hcHBlZFRhYmxlRGF0YSA9IG1hcHBlZFRhYmxlRGF0YS5tYXAoKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB7IC4uLnJvd0RhdGEgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyBhdHRyaWJ1dGVzLCBudW1iZXJGb3JtYXRPcHRpb25zIH0gb2YgY29sdW1uc1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZChyb3dbYXR0cmlidXRlXSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJvd1thdHRyaWJ1dGVdIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcm93W2F0dHJpYnV0ZV0gYXMgc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucy5zdHlsZSA9PT0gXCJwZXJjZW50XCIgPyBuZXcgQmlnTnVtYmVyKHZhbHVlKS50aW1lcygxMDApIDogbmV3IEJpZ051bWJlcih2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVuLVVTXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5udW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBcImRlY2ltYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdNb2RlOiBcInRydW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2F0dHJpYnV0ZV0gPSBudW1iZXJGb3JtYXQuZm9ybWF0KG1hcHBlZFZhbHVlLnRvTnVtYmVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc051bWJlckZvcm1hdE9wdGlvbnNSb3dzKSB7XG4gICAgICAgICAgICBtYXBwZWRUYWJsZURhdGEgPSB0YWJsZURhdGEubWFwKChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0geyAuLi5yb3dEYXRhIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzV2l0aE51bWJlckZvcm1hdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhyb3cpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gKHJvd1trZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHJvd0RhdGFba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbikudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLm9wdGlvbnMubnVtYmVyRm9ybWF0T3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IG51bWJlckZvcm1hdE9wdGlvbnMuc3R5bGUgPT09IFwicGVyY2VudFwiID8gbmV3IEJpZ051bWJlcih2YWx1ZSkudGltZXMoMTAwKSA6IG5ldyBCaWdOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVuLVVTXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3VuZGluZ01vZGU6IFwidHJ1bmNcIlxuICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgKHJvd1trZXldIGFzIHN0cmluZyB8IG51bWJlcikgPSBudW1iZXJGb3JtYXQuZm9ybWF0KG1hcHBlZFZhbHVlLnRvTnVtYmVyKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXBwZWRUYWJsZURhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcEN1c3RvbUV4cG9ydChjb2x1bW5zOiBhbnlbXSwgcm93czogYW55W10pIHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmN1c3RvbUV4cG9ydCk7XG4gICAgICAgIGlmICghY3VzdG9tQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFsuLi5yb3dzXS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICAgIGN1c3RvbUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2x1bW4uY3VzdG9tRXhwb3J0KGNvbHVtbkRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUobmV3Um93LCBmaWVsZE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zbGF0ZVZhbHVlKGNvbHVtbjogYW55LCBjb2x1bW5EYXRhOiBhbnkpIHtcbiAgICAgICAgLy8gRGVmYXVsdCB1c2FnZTogRU5VTV9WQUxVRSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZSA9IGNvbHVtbkRhdGEudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdHJhbnNsYXRpb25LZXkgPSBjb2x1bW4uZW51bVByZWZpeCArIGVudW1WYWx1ZTtcbiAgICAgICAgbGV0IHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuXG4gICAgICAgIC8vIEN1c3RvbSB1c2FnZSAxOiBWOSAtPiBkb21haW4uc2VydmljZS52XzlcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uS2V5ID09PSB0cmFuc2xhdGVkVmFsdWUgJiYgZW51bVZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtVmFsdWUuc3Vic3RyaW5nKDAsIDEpfV8ke2VudW1WYWx1ZS5zdWJzdHIoMSl9YDtcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3VzdG9tIHVzYWdlIDI6IEVudW1WYWx1ZSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGlmICh0cmFuc2xhdGlvbktleSA9PT0gdHJhbnNsYXRlZFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtS2V5ID0gdGhpcy5jb252ZXJ0VG9TbmFrZUNhc2UoY29sdW1uRGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtS2V5fWA7XG4gICAgICAgICAgICB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9TbmFrZUNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIChtYXRjaCwgZ3JvdXApID0+IGBfJHtncm91cC50b0xvd2VyQ2FzZSgpfWApLnJlcGxhY2UoL15fLywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRGaWxlTmFtZSgpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nID8/IFwicHQtQlJcIjtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4cG9ydEZpbGVOYW1lID8/IFwiZG93bmxvYWRcIjtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxhbmcpLnJlcGxhY2UoXCJfXCIsIFwiLVwiKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxhbmcpLnJlcGxhY2UoXCIgXCIsIFwiLVwiKTtcblxuICAgICAgICByZXR1cm4gYCR7ZmlsZU5hbWV9XyR7Zm9ybWF0dGVkRGF0ZX1fJHtmb3JtYXR0ZWRUaW1lfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydEN1cnJlbnRQYWdlKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNUb0V4cG9ydCgpO1xuICAgICAgICBjb25zdCBkYXRhVG9FeHBvcnQgPSB0aGlzLmdldEN1cnJlbnRQYWdlUm93c1RvRXhwb3J0KGNvbHVtbnMpO1xuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydFNlbGVjdGVkUmVjb3JkcygpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zVG9FeHBvcnQoKTtcbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NUb0V4cG9ydChjb2x1bW5zKTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleHBvcnRBbGxSZWNvcmRzKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG5cbiAgICAgICAgbGV0IHNlcnZlckRhdGEgPSBhd2FpdCB0aGlzLmxvYWRBbGxSZWNvcmRzKCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG5cbiAgICAgICAgc2VydmVyRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIHNlcnZlckRhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgc2VydmVyRGF0YSk7XG5cbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENTVihjb2x1bW5zLCBkYXRhVG9FeHBvcnQsIHVuZGVmaW5lZCwgdGhpcy5nZXRFeHBvcnRGaWxlTmFtZSgpKTtcbiAgICB9XG59XG4iXX0=
@@ -2,7 +2,7 @@ import { __assign, __awaiter, __decorate, __generator, __param, __read, __spread
2
2
  import { Component, Inject, Input, Output } from "@angular/core";
3
3
  import { TranslateService } from "@ngx-translate/core";
4
4
  import { HostProjectConfigsInjectionToken } from "../../../angular-components.module";
5
- import { ExportUtils } from "../../utils";
5
+ import { ExportUtils, isNullOrUndefined } from "../../utils";
6
6
  import BigNumber from "bignumber.js";
7
7
  var TablePagingComponent = /** @class */ (function () {
8
8
  function TablePagingComponent(translate, hostProjectConfigs) {
@@ -163,6 +163,8 @@ var TablePagingComponent = /** @class */ (function () {
163
163
  try {
164
164
  for (var attributes_1 = (e_2 = void 0, __values(attributes)), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) {
165
165
  var attribute = attributes_1_1.value;
166
+ if (isNullOrUndefined(row[attribute]))
167
+ continue;
166
168
  if ((_c = row[attribute].options) === null || _c === void 0 ? void 0 : _c.numberFormatOptions) {
167
169
  continue;
168
170
  }
@@ -348,4 +350,4 @@ var TablePagingComponent = /** @class */ (function () {
348
350
  return TablePagingComponent;
349
351
  }());
350
352
  export { TablePagingComponent };
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RCxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFjckM7SUErQkksOEJBQ3FCLFNBQTJCLEVBQ2Usa0JBQXNDO1FBRGhGLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ2UsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXRCOUYsZUFBVSxHQUFHLElBQUksQ0FBQztRQUdsQixnQ0FBMkIsR0FBRyxJQUFJLENBQUM7SUFvQnRDLENBQUM7SUFFTCwwQ0FBVyxHQUFYLFVBQVksT0FBc0I7O1FBQzlCLFVBQUksT0FBTyxDQUFDLFlBQVksMENBQUUsWUFBWSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsa0JBQWUsRUFBRTtnQkFDeEYsS0FBSyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWTthQUMzQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFTyxpREFBa0IsR0FBMUI7UUFDSSxPQUFVLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLFNBQUksSUFBSSxDQUFDLGtC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QUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQzs7Ozs7S0FDckY7O2dCQWhWK0IsZ0JBQWdCO2dEQUMzQyxNQUFNLFNBQUMsZ0NBQWdDOztJQS9CNUM7UUFEQyxLQUFLLEVBQUU7OERBQ3FCO0lBRzdCO1FBREMsS0FBSyxFQUFFO2dFQUN1QjtJQUcvQjtRQURDLEtBQUssRUFBRTt1REFDYTtJQUdyQjtRQURDLEtBQUssRUFBRTs0REFDaUI7SUFHekI7UUFEQyxLQUFLLEVBQUU7NkVBQ2tDO0lBRzFDO1FBREMsS0FBSyxFQUFFOytEQUM4QjtJQUd0QztRQURDLEtBQUssRUFBRTtnRUFDcUM7SUFHN0M7UUFEQyxLQUFLLEVBQUU7d0VBQ29DO0lBRzVDO1FBREMsS0FBSyxFQUFFO3FFQUNpQztJQUd6QztRQURDLE1BQU0sRUFBRTtrRUFDdUI7SUE3QnZCLG9CQUFvQjtRQUxoQyxTQUFTLENBQUM7WUFDUCw4YkFBNEM7WUFFNUMsUUFBUSxFQUFFLGdCQUFnQjs7U0FDN0IsQ0FBQztRQWtDTyxXQUFBLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO09BakNwQyxvQkFBb0IsQ0FpWGhDO0lBQUQsMkJBQUM7Q0FBQSxBQWpYRCxJQWlYQztTQWpYWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gXCIuLi90YWJsZS1jb2x1bW4vbW9kZWxzL2NvbHVtbi5pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuLi8uLi8uLi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlXCI7XG5pbXBvcnQgeyBFeHBvcnRVdGlscyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gXCJiaWdudW1iZXIuanNcIjtcblxudHlwZSBSb3dWYWx1ZUZvcm1hdE9wdGlvbiA9IHtcbiAgICB2YWx1ZT86IG51bWJlcjtcbiAgICBvcHRpb25zPzoge1xuICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zPzogSW50bC5OdW1iZXJGb3JtYXRPcHRpb25zO1xuICAgIH07XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiBcIi4vdGFibGUtcGFnaW5nLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBzZWxlY3RvcjogXCJzLXRhYmxlLXBhZ2luZ1wiLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVBhZ2luZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzITogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwb3J0RmlsZU5hbWU/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0YWJsZSE6IFRhYmxlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwb3J0YWJsZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbmFibGVFeHBvcnRTZWxlY3RlZFJlY29yZHMgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tQWN0aW9ucz86IEN1c3RvbUFjdGlvbltdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZEFsbFJlY29yZHM/OiAoKSA9PiBQcm9taXNlPGFueVtdPjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRDdXJyZW50UGFnZVJlY29yZHM/OiAoKSA9PiBhbnlbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRTZWxlY3RlZFJlY29yZHM/OiAoKSA9PiBhbnlbXTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB0b3RhbFJlY29yZHNUZXh0OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgaG9zdFByb2plY3RDb25maWdzOiBIb3N0UHJvamVjdENvbmZpZ3NcbiAgICApIHsgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy50b3RhbFJlY29yZHM/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNUZXh0ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfXRvdGFsX3JlY29yZHNgLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGNoYW5nZXMudG90YWxSZWNvcmRzLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGVQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5kb21haW59LiR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3Muc2VydmljZX0uYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG9vbHRpcFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X3RvX2NzdmApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY3Rpb25zKCk6IE1lbnVJdGVtW10ge1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBNZW51SXRlbVtdID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBcImV4cG9ydEN1cnJlbnRQYWdlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfY3VycmVudF9wYWdlYCksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5leHBvcnRDdXJyZW50UGFnZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5lbmFibGVFeHBvcnRTZWxlY3RlZFJlY29yZHMpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IFwiZXhwb3J0U2VsZWN0ZWRcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9zZWxlY3RlZF9yZWNvcmRzYCksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5leHBvcnRTZWxlY3RlZFJlY29yZHMoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZEFsbFJlY29yZHMpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IFwiZXhwb3J0QWxsXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfYWxsX3JlY29yZHNgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydEFsbFJlY29yZHMoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tQWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21NZW51cyA9IHRoaXMuY3VzdG9tQWN0aW9ucy5tYXAoKHAsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgIGlkOiBcImN1c3RvbUFjdGlvbl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwLmxhYmVsLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHAuY29tbWFuZCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaCguLi5jdXN0b21NZW51cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQ29tcG9uZW50KCkge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIGNvbXBvbmVudCBub3QgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5zVG9FeHBvcnQoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy50YWJsZS5jb2x1bW5zXS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0Q29sdW1uID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICAgICAgICAgICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgIHNlcGFyYXRvcjogY29sdW1uLnNlcGFyYXRvciA/PyBcIiAtIFwiLFxuICAgICAgICAgICAgICAgIGVudW1QcmVmaXg6IGNvbHVtbi5lbnVtUHJlZml4LFxuICAgICAgICAgICAgICAgIGN1c3RvbUV4cG9ydDogY29sdW1uLmN1c3RvbUV4cG9ydCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZXhwb3J0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBleHBvcnRDb2x1bW4uZXhwb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZXMgJiYgY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRDb2x1bW4uZmllbGQgPSBjb2x1bW4uYXR0cmlidXRlc1swXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRDb2x1bW4uZmllbGQgPSBjb2x1bW4uYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBleHBvcnRDb2x1bW47XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFBhZ2VSb3dzVG9FeHBvcnQoY29sdW1uczogYW55W10pIHtcbiAgICAgICAgbGV0IHRhYmxlRGF0YSA9IHRoaXMudGFibGUudmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmxvYWRDdXJyZW50UGFnZVJlY29yZHMpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubG9hZEN1cnJlbnRQYWdlUmVjb3JkcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBDdXN0b21FeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICB0YWJsZURhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFJvd3NUb0V4cG9ydChjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBsZXQgdGFibGVEYXRhID0gdGhpcy50YWJsZS5zZWxlY3Rpb247XG4gICAgICAgIGlmICh0aGlzLmxvYWRTZWxlY3RlZFJlY29yZHMpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubG9hZFNlbGVjdGVkUmVjb3JkcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBDdXN0b21FeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICB0YWJsZURhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgdGFibGVEYXRhKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT4gKHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByb3BlcnR5VmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnJlY3Vyc2lvblNldFZhbHVlKG9iaiwgcGF0aC5zcGxpdChcIi5cIiksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY3Vyc2lvblNldFZhbHVlKG9iajogYW55LCBrZXlzTGlzdDogc3RyaW5nW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzTGlzdFswXTtcbiAgICAgICAgaWYgKGtleXNMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgb2JqW2tleV0gPSB0aGlzLnJlY3Vyc2lvblNldFZhbHVlKG9iaj8uW2tleV0gfHwge30sIGtleXNMaXN0LnNsaWNlKDEpLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcENvbHVtbnNUcmFuc2xhdGlvbnMoY29sdW1uczogYW55W10sIHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGVudW1Db2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKHApID0+IHAuZW51bVByZWZpeCk7XG4gICAgICAgIGlmICghZW51bUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbLi4ucm93c10ubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgICBlbnVtQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSAhQXJyYXkuaXNBcnJheShjb2x1bW4uZmllbGQpID8gW2NvbHVtbi5maWVsZF0gOiBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUocm93LCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSA9PT0gbnVsbCB8fCBjb2x1bW5EYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy50cmFuc2xhdGVWYWx1ZShjb2x1bW4sIGNvbHVtbkRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUobmV3Um93LCBmaWVsZE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIG1hcCB2YWx1ZXNcbiAgICAgKiBmcm9tIHRoZSBUYWJsZUNvbHVtbnNDb21wb25lbnQsIHdoaWNoIHVzZXMgdGhlIG51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgKiBmaWVsZCwgYWxvbmcgd2l0aCByb3dzIHRoYXQgaGF2ZSBhIGN1c3RvbSBudW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAqIHRvIGVuc3VyZSB0aGUgY29ycmVjdCB2YWx1ZXMgYXJlIGV4cG9ydGVkIGJ5IHRoZSBUYWJsZVBhZ2luZ0NvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvcnJlY3RseSBtYXBwZWQgdGFibGVEYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KFxuICAgICAgICBjb2x1bW5zOiBQYXJ0aWFsPENvbHVtbj5bXSxcbiAgICAgICAgdGFibGVEYXRhOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOlxuICAgICAgICAgICAgfCBSb3dWYWx1ZUZvcm1hdE9wdGlvblxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgIHwgc3RyaW5nO1xuICAgICAgICB9W11cbiAgICApIHtcbiAgICAgICAgY29uc3QgaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMgPSBjb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBoYXNOdW1iZXJGb3JtYXRPcHRpb25zUm93cyA9IHRhYmxlRGF0YS5zb21lKChyb3dEYXRhKSA9PiBPYmplY3Qua2V5cyhyb3dEYXRhKS5zb21lKChrZXkpID0+IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKSk7XG5cbiAgICAgICAgaWYgKCFoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucyAmJiAhaGFzTnVtYmVyRm9ybWF0T3B0aW9uc1Jvd3MpIHJldHVybiB0YWJsZURhdGE7XG5cbiAgICAgICAgbGV0IG1hcHBlZFRhYmxlRGF0YSA9IFsuLi50YWJsZURhdGFdO1xuXG4gICAgICAgIGlmIChoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucykge1xuICAgICAgICAgICAgbWFwcGVkVGFibGVEYXRhID0gbWFwcGVkVGFibGVEYXRhLm1hcCgocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHsgLi4ucm93RGF0YSB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zID0gY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IGF0dHJpYnV0ZXMsIG51bWJlckZvcm1hdE9wdGlvbnMgfSBvZiBjb2x1bW5zV2l0aE51bWJlckZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3dbYXR0cmlidXRlXSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbikub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1thdHRyaWJ1dGVdIGFzIHN0cmluZyB8IG51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnMuc3R5bGUgPT09IFwicGVyY2VudFwiID8gbmV3IEJpZ051bWJlcih2YWx1ZSkudGltZXMoMTAwKSA6IG5ldyBCaWdOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nTW9kZTogXCJ0cnVuY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1thdHRyaWJ1dGVdID0gbnVtYmVyRm9ybWF0LmZvcm1hdChtYXBwZWRWYWx1ZS50b051bWJlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNOdW1iZXJGb3JtYXRPcHRpb25zUm93cykge1xuICAgICAgICAgICAgbWFwcGVkVGFibGVEYXRhID0gdGFibGVEYXRhLm1hcCgocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHsgLi4ucm93RGF0YSB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5c1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zID0gT2JqZWN0LmtleXMocm93KVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IChyb3dba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbik/Lm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPSAocm93RGF0YVtrZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zLm51bWJlckZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBudW1iZXJGb3JtYXRPcHRpb25zLnN0eWxlID09PSBcInBlcmNlbnRcIiA/IG5ldyBCaWdOdW1iZXIodmFsdWUpLnRpbWVzKDEwMCkgOiBuZXcgQmlnTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlbi1VU1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5udW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdNb2RlOiBcInRydW5jXCJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgICAgICAgICAgIChyb3dba2V5XSBhcyBzdHJpbmcgfCBudW1iZXIpID0gbnVtYmVyRm9ybWF0LmZvcm1hdChtYXBwZWRWYWx1ZS50b051bWJlcigpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWFwcGVkVGFibGVEYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBDdXN0b21FeHBvcnQoY29sdW1uczogYW55W10sIHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigocCkgPT4gcC5jdXN0b21FeHBvcnQpO1xuICAgICAgICBpZiAoIWN1c3RvbUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbLi4ucm93c10ubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgICBjdXN0b21Db2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9ICFBcnJheS5pc0FycmF5KGNvbHVtbi5maWVsZCkgPyBbY29sdW1uLmZpZWxkXSA6IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShyb3csIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5EYXRhID09PSBudWxsIHx8IGNvbHVtbkRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29sdW1uLmN1c3RvbUV4cG9ydChjb2x1bW5EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKG5ld1JvdywgZmllbGROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVWYWx1ZShjb2x1bW46IGFueSwgY29sdW1uRGF0YTogYW55KSB7XG4gICAgICAgIC8vIERlZmF1bHQgdXNhZ2U6IEVOVU1fVkFMVUUgLT4gZG9tYWluLnNlcnZpY2UuZW51bV92YWx1ZVxuICAgICAgICBjb25zdCBlbnVtVmFsdWUgPSBjb2x1bW5EYXRhLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uS2V5ID0gY29sdW1uLmVudW1QcmVmaXggKyBlbnVtVmFsdWU7XG4gICAgICAgIGxldCB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcblxuICAgICAgICAvLyBDdXN0b20gdXNhZ2UgMTogVjkgLT4gZG9tYWluLnNlcnZpY2Uudl85XG4gICAgICAgIGlmICh0cmFuc2xhdGlvbktleSA9PT0gdHJhbnNsYXRlZFZhbHVlICYmIGVudW1WYWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbktleSA9IGAke2NvbHVtbi5lbnVtUHJlZml4fSR7ZW51bVZhbHVlLnN1YnN0cmluZygwLCAxKX1fJHtlbnVtVmFsdWUuc3Vic3RyKDEpfWA7XG4gICAgICAgICAgICB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1c3RvbSB1c2FnZSAyOiBFbnVtVmFsdWUgLT4gZG9tYWluLnNlcnZpY2UuZW51bV92YWx1ZVxuICAgICAgICBpZiAodHJhbnNsYXRpb25LZXkgPT09IHRyYW5zbGF0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZW51bUtleSA9IHRoaXMuY29udmVydFRvU25ha2VDYXNlKGNvbHVtbkRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbktleSA9IGAke2NvbHVtbi5lbnVtUHJlZml4fSR7ZW51bUtleX1gO1xuICAgICAgICAgICAgdHJhbnNsYXRlZFZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRvU25ha2VDYXNlKHN0cjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFtBLVpdKS9nLCAobWF0Y2gsIGdyb3VwKSA9PiBgXyR7Z3JvdXAudG9Mb3dlckNhc2UoKX1gKS5yZXBsYWNlKC9eXy8sIFwiXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0RmlsZU5hbWUoKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyA/PyBcInB0LUJSXCI7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHBvcnRGaWxlTmFtZSA/PyBcImRvd25sb2FkXCI7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhsYW5nKS5yZXBsYWNlKFwiX1wiLCBcIi1cIik7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBkYXRlLnRvTG9jYWxlVGltZVN0cmluZyhsYW5nKS5yZXBsYWNlKFwiIFwiLCBcIi1cIik7XG5cbiAgICAgICAgcmV0dXJuIGAke2ZpbGVOYW1lfV8ke2Zvcm1hdHRlZERhdGV9XyR7Zm9ybWF0dGVkVGltZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRDdXJyZW50UGFnZSgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zVG9FeHBvcnQoKTtcbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5nZXRDdXJyZW50UGFnZVJvd3NUb0V4cG9ydChjb2x1bW5zKTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRTZWxlY3RlZFJlY29yZHMoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnQoKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzVG9FeHBvcnQoY29sdW1ucyk7XG4gICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENTVihjb2x1bW5zLCBkYXRhVG9FeHBvcnQsIHVuZGVmaW5lZCwgdGhpcy5nZXRFeHBvcnRGaWxlTmFtZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhwb3J0QWxsUmVjb3JkcygpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuXG4gICAgICAgIGxldCBzZXJ2ZXJEYXRhID0gYXdhaXQgdGhpcy5sb2FkQWxsUmVjb3JkcygpO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNUb0V4cG9ydCgpO1xuXG4gICAgICAgIHNlcnZlckRhdGEgPSB0aGlzLm1hcEN1c3RvbUV4cG9ydChjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBzZXJ2ZXJEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxufVxuIl19
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RCxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFjckM7SUErQkksOEJBQ3FCLFNBQTJCLEVBQ2Usa0JBQXNDO1FBRGhGLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ2UsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXRCOUYsZUFBVSxHQUFHLElBQUksQ0FBQztRQUdsQixnQ0FBMkIsR0FBRyxJQUFJLENBQUM7SUFvQnRDLENBQUM7SUFFTCwwQ0FBVyxHQUFYLFVBQVksT0FBc0I7O1FBQzlCLFVBQUksT0FBTyxDQUFDLFlBQVksMENBQUUsWUFBWSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsa0JBQWUsRUFBRTtnQkFDeEYsS0FBSyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWTthQUMzQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFTyxpREFBa0IsR0FBMUI7UUFDSSxPQUFVLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLFNBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sTUFBRyxDQUFDO0lBQ25GLENBQUM7SUFFTSw2Q0FBYyxHQUFyQjtRQUNJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLGtCQUFlLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU0seUNBQVUsR0FBakI7UUFBQSxpQkFtQ0M7O1FBbENHLElBQU0sT0FBTyxHQUFlO1lBQ3hCO2dCQUNJLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsd0JBQXFCLENBQUM7Z0JBQ2hGLE9BQU8sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFDLGlCQUFpQixFQUFFLEVBQXhCLENBQXdCO2FBQzFDO1NBQ0osQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsRUFBRSxFQUFFLGdCQUFnQjtnQkFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSw0QkFBeUIsQ0FBQztnQkFDcEYsT0FBTyxFQUFFLGNBQU0sT0FBQSxLQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBNUIsQ0FBNEI7YUFDOUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDVCxFQUFFLEVBQUUsV0FBVztnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLHVCQUFvQixDQUFDO2dCQUMvRSxPQUFPLEVBQUUsY0FBTSxPQUFBLEtBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUF2QixDQUF1QjthQUN6QyxDQUFDLENBQUM7U0FDTjtRQUVELFVBQUksSUFBSSxDQUFDLGFBQWEsMENBQUUsTUFBTSxFQUFFO1lBQzVCLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSyxPQUFBLENBQUM7Z0JBQ3RELEVBQUUsRUFBRSxlQUFlLEdBQUcsS0FBSztnQkFDM0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dCQUNkLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzthQUNyQixDQUFDLEVBSnVELENBSXZELENBQUMsQ0FBQztZQUNKLE9BQU8sQ0FBQyxJQUFJLE9BQVosT0FBTyxXQUFTLFdBQVcsR0FBRTtTQUNoQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTyxnREFBaUIsR0FBekI7UUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFTSxpREFBa0IsR0FBekI7UUFDSSxPQUFPLFNBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFVBQUMsTUFBTTs7WUFDdEMsSUFBTSxZQUFZLHlCQUNYLE1BQU0sS0FDVCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFDckIsVUFBVSxFQUFFLElBQUksRUFDaEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQ25CLFNBQVMsUUFBRSxNQUFNLENBQUMsU0FBUyxtQ0FBSSxLQUFLLEVBQ3BDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUM3QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksR0FDcEMsQ0FBQztZQUVGLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7Z0JBQzdCLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ25DO1lBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDaEMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM3QztxQkFBTTtvQkFDSCxZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7aUJBQzFDO2FBQ0o7WUFFRCxPQUFPLFlBQVksQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5REFBMEIsR0FBbEMsVUFBbUMsT0FBYztRQUM3QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM3QixTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDN0M7UUFFRCxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFckQsU0FBUyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxzREFBdUIsR0FBL0IsVUFBZ0MsT0FBYztRQUMxQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDMUM7UUFFRCxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFckQsU0FBUyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTywrQ0FBZ0IsR0FBeEIsVUFBeUIsR0FBUSxFQUFFLElBQVk7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLE1BQVcsRUFBRSxJQUFTLElBQUssT0FBQSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQXZELENBQXVELEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVPLCtDQUFnQixHQUF4QixVQUF5QixHQUFRLEVBQUUsSUFBWSxFQUFFLEtBQVU7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxnREFBaUIsR0FBekIsVUFBMEIsR0FBUSxFQUFFLFFBQWtCLEVBQUUsS0FBVTtRQUM5RCxJQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFHLEdBQUcsTUFBSyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTSxxREFBc0IsR0FBN0IsVUFBOEIsT0FBYyxFQUFFLElBQVc7UUFBekQsaUJBdUJDO1FBdEJHLElBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsVUFBVSxFQUFaLENBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLFNBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxVQUFDLEdBQUc7WUFDckIsSUFBTSxNQUFNLGdCQUFRLEdBQUcsQ0FBRSxDQUFDO1lBQzFCLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQyxNQUFNO2dCQUN2QixJQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDNUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFNBQWlCO29CQUM3QixJQUFNLFVBQVUsR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTt3QkFDakQsT0FBTztxQkFDVjtvQkFFRCxJQUFNLFFBQVEsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDekQsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHRDs7Ozs7OztPQU9HO0lBQ0ksMkRBQTRCLEdBQW5DLFVBQ0ksT0FBMEIsRUFDMUIsU0FPRztRQUVILElBQU0sNkJBQTZCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQU0sSUFBSyxPQUFBLE1BQU0sQ0FBQyxtQkFBbUIsRUFBMUIsQ0FBMEIsQ0FBQyxDQUFDO1FBQzNGLElBQU0sMEJBQTBCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFDLE9BQU8sSUFBSyxPQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRyxtQ0FBTSxPQUFPLENBQUMsR0FBRyxDQUEwQiwwQ0FBRSxPQUFPLDBDQUFFLG1CQUFtQixHQUFBLENBQUMsRUFBeEcsQ0FBd0csQ0FBQyxDQUFDO1FBRXpLLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLDBCQUEwQjtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRXBGLElBQUksZUFBZSxZQUFPLFNBQVMsQ0FBQyxDQUFDO1FBRXJDLElBQUksNkJBQTZCLEVBQUU7WUFDL0IsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBQyxPQUFPOzs7Z0JBQzFDLElBQU0sR0FBRyxnQkFBUSxPQUFPLENBQUUsQ0FBQztnQkFFM0IsSUFBTSw4QkFBOEIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQUMsTUFBTSxJQUFLLE9BQUEsTUFBTSxDQUFDLG1CQUFtQixFQUExQixDQUEwQixDQUFDLENBQUM7O29CQUU5RixLQUFrRCxJQUFBLG1DQUFBLFNBQUEsOEJBQThCLENBQUEsOEVBQUEsMEhBQUU7d0JBQXZFLElBQUEsNkNBQW1DLEVBQWpDLDBCQUFVLEVBQUUsNENBQW1COzs0QkFDeEMsS0FBd0IsSUFBQSw4QkFBQSxTQUFBLFVBQVUsQ0FBQSxDQUFBLHNDQUFBLDhEQUFFO2dDQUEvQixJQUFNLFNBQVMsdUJBQUE7Z0NBQ2hCLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29DQUFFLFNBQVM7Z0NBRWhELFVBQUssR0FBRyxDQUFDLFNBQVMsQ0FBMEIsQ0FBQyxPQUFPLDBDQUFFLG1CQUFtQixFQUFFO29DQUN2RSxTQUFTO2lDQUNaO2dDQUVELElBQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQW9CLENBQUM7Z0NBRWhELElBQU0sV0FBVyxHQUNiLG1CQUFtQixDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBRXJHLElBQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsc0JBQzdDLG1CQUFtQixLQUN0QixLQUFLLEVBQUUsU0FBUyxFQUNoQixXQUFXLEVBQUUsS0FBSyxFQUNsQixZQUFZLEVBQUUsT0FBTyxHQUNqQixDQUFDLENBQUM7Z0NBRVYsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7NkJBQ2hFOzs7Ozs7Ozs7cUJBQ0o7Ozs7Ozs7OztnQkFFRCxPQUFPLEdBQUcsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLDBCQUEwQixFQUFFO1lBQzVCLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQUMsT0FBTzs7Z0JBQ3BDLElBQU0sR0FBRyxnQkFBUSxPQUFPLENBQUUsQ0FBQztnQkFFM0IsSUFBTSwyQkFBMkIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDL0MsTUFBTSxDQUFDLFVBQUMsR0FBRyxtQ0FBTSxHQUFHLENBQUMsR0FBRyxDQUEwQiwwQ0FBRSxPQUFPLDBDQUFFLG1CQUFtQixHQUFBLENBQUMsQ0FBQzs7b0JBQ3ZGLEtBQWtCLElBQUEsZ0NBQUEsU0FBQSwyQkFBMkIsQ0FBQSx3RUFBQSxpSEFBRTt3QkFBMUMsSUFBTSxHQUFHLHdDQUFBO3dCQUNWLElBQU0sS0FBSyxHQUFJLE9BQU8sQ0FBQyxHQUFHLENBQTBCLENBQUMsS0FBSyxDQUFDO3dCQUUzRCxJQUFNLG1CQUFtQixHQUFJLE9BQU8sQ0FBQyxHQUFHLENBQTBCLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO3dCQUUvRixJQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUVySCxJQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLHNCQUM3QyxtQkFBbUIsS0FDdEIsS0FBSyxFQUFFLFNBQVMsRUFDaEIsV0FBVyxFQUFFLEtBQUssRUFDbEIsWUFBWSxFQUFFLE9BQU8sR0FDakIsQ0FBQyxDQUFDO3dCQUVULEdBQUcsQ0FBQyxHQUFHLENBQXFCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztxQkFDL0U7Ozs7Ozs7OztnQkFFRCxPQUFPLEdBQUcsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0lBRU0sOENBQWUsR0FBdEIsVUFBdUIsT0FBYyxFQUFFLElBQVc7UUFBbEQsaUJBc0JDO1FBckJHLElBQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsWUFBWSxFQUFkLENBQWMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLFNBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxVQUFDLEdBQUc7WUFDckIsSUFBTSxNQUFNLGdCQUFRLEdBQUcsQ0FBRSxDQUFDO1lBQzFCLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBQyxNQUFNO2dCQUN6QixJQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDNUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFNBQWlCO29CQUM3QixJQUFNLFVBQVUsR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTt3QkFDakQsT0FBTztxQkFDVjtvQkFDRCxJQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNqRCxLQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDZDQUFjLEdBQXRCLFVBQXVCLE1BQVcsRUFBRSxVQUFlO1FBQy9DLHlEQUF5RDtRQUN6RCxJQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEQsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDbkQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFN0QsMkNBQTJDO1FBQzNDLElBQUksY0FBYyxLQUFLLGVBQWUsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1RCxjQUFjLEdBQUcsS0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFHLENBQUM7WUFDM0YsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQseURBQXlEO1FBQ3pELElBQUksY0FBYyxLQUFLLGVBQWUsRUFBRTtZQUNwQyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDL0QsY0FBYyxHQUFHLEtBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxPQUFTLENBQUM7WUFDbEQsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlEQUFrQixHQUExQixVQUEyQixHQUFXO1FBQ2xDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBQyxLQUFLLEVBQUUsS0FBSyxJQUFLLE9BQUEsTUFBSSxLQUFLLENBQUMsV0FBVyxFQUFJLEVBQXpCLENBQXlCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxnREFBaUIsR0FBekI7O1FBQ0ksSUFBTSxJQUFJLFNBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLG1DQUFJLE9BQU8sQ0FBQztRQUNuRCxJQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXhCLElBQU0sUUFBUSxTQUFHLElBQUksQ0FBQyxjQUFjLG1DQUFJLFVBQVUsQ0FBQztRQUNuRCxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RSxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0RSxPQUFVLFFBQVEsU0FBSSxhQUFhLFNBQUksYUFBZSxDQUFDO0lBQzNELENBQUM7SUFFTSxnREFBaUIsR0FBeEI7UUFDSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTSxvREFBcUIsR0FBNUI7UUFDSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0QsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFWSwrQ0FBZ0IsR0FBN0I7Ozs7Ozt3QkFDSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzt3QkFFUixxQkFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUE7O3dCQUF4QyxVQUFVLEdBQUcsU0FBMkI7d0JBRXRDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFFMUMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO3dCQUV2RCxVQUFVLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFFOUQsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBRXRFLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQzs7Ozs7S0FDckY7O2dCQXBWK0IsZ0JBQWdCO2dEQUMzQyxNQUFNLFNBQUMsZ0NBQWdDOztJQS9CNUM7UUFEQyxLQUFLLEVBQUU7OERBQ3FCO0lBRzdCO1FBREMsS0FBSyxFQUFFO2dFQUN1QjtJQUcvQjtRQURDLEtBQUssRUFBRTt1REFDYTtJQUdyQjtRQURDLEtBQUssRUFBRTs0REFDaUI7SUFHekI7UUFEQyxLQUFLLEVBQUU7NkVBQ2tDO0lBRzFDO1FBREMsS0FBSyxFQUFFOytEQUM4QjtJQUd0QztRQURDLEtBQUssRUFBRTtnRUFDcUM7SUFHN0M7UUFEQyxLQUFLLEVBQUU7d0VBQ29DO0lBRzVDO1FBREMsS0FBSyxFQUFFO3FFQUNpQztJQUd6QztRQURDLE1BQU0sRUFBRTtrRUFDdUI7SUE3QnZCLG9CQUFvQjtRQUxoQyxTQUFTLENBQUM7WUFDUCw4YkFBNEM7WUFFNUMsUUFBUSxFQUFFLGdCQUFnQjs7U0FDN0IsQ0FBQztRQWtDTyxXQUFBLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO09BakNwQyxvQkFBb0IsQ0FxWGhDO0lBQUQsMkJBQUM7Q0FBQSxBQXJYRCxJQXFYQztTQXJYWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gXCIuLi90YWJsZS1jb2x1bW4vbW9kZWxzL2NvbHVtbi5pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuLi8uLi8uLi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlXCI7XG5pbXBvcnQgeyBFeHBvcnRVdGlscywgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCB7IEN1c3RvbUFjdGlvbiB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tIFwiYmlnbnVtYmVyLmpzXCI7XG5cbnR5cGUgUm93VmFsdWVGb3JtYXRPcHRpb24gPSB7XG4gICAgdmFsdWU/OiBudW1iZXI7XG4gICAgb3B0aW9ucz86IHtcbiAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucz86IEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucztcbiAgICB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi90YWJsZS1wYWdpbmcuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgc2VsZWN0b3I6IFwicy10YWJsZS1wYWdpbmdcIixcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVQYWdpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFibGUhOiBUYWJsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydGFibGUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUFjdGlvbnM/OiBDdXN0b21BY3Rpb25bXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRBbGxSZWNvcmRzPzogKCkgPT4gUHJvbWlzZTxhbnlbXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkQ3VycmVudFBhZ2VSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkU2VsZWN0ZWRSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzVGV4dDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGhvc3RQcm9qZWN0Q29uZmlnczogSG9zdFByb2plY3RDb25maWdzXG4gICAgKSB7IH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudG90YWxSZWNvcmRzPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzVGV4dCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX10b3RhbF9yZWNvcmRzYCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBjaGFuZ2VzLnRvdGFsUmVjb3Jkcy5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRlUHJlZml4KCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3MuZG9tYWlufS4ke3RoaXMuaG9zdFByb2plY3RDb25maWdzLnNlcnZpY2V9LmA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvb2x0aXBUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF90b19jc3ZgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWN0aW9ucygpOiBNZW51SXRlbVtdIHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogTWVudUl0ZW1bXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogXCJleHBvcnRDdXJyZW50UGFnZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X2N1cnJlbnRfcGFnZWApLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhwb3J0Q3VycmVudFBhZ2UoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBcImV4cG9ydFNlbGVjdGVkXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfc2VsZWN0ZWRfcmVjb3Jkc2ApLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhwb3J0U2VsZWN0ZWRSZWNvcmRzKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvYWRBbGxSZWNvcmRzKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBcImV4cG9ydEFsbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X2FsbF9yZWNvcmRzYCksXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5leHBvcnRBbGxSZWNvcmRzKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTWVudXMgPSB0aGlzLmN1c3RvbUFjdGlvbnMubWFwKChwLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogXCJjdXN0b21BY3Rpb25fXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcC5sYWJlbCxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBwLmNvbW1hbmQsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goLi4uY3VzdG9tTWVudXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBjb21wb25lbnQgbm90IGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sdW1uc1RvRXhwb3J0KCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudGFibGUuY29sdW1uc10ubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydENvbHVtbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgICAgICAgICAgIGV4cG9ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3I6IGNvbHVtbi5zZXBhcmF0b3IgPz8gXCIgLSBcIixcbiAgICAgICAgICAgICAgICBlbnVtUHJlZml4OiBjb2x1bW4uZW51bVByZWZpeCxcbiAgICAgICAgICAgICAgICBjdXN0b21FeHBvcnQ6IGNvbHVtbi5jdXN0b21FeHBvcnQsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmV4cG9ydGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZXhwb3J0Q29sdW1uLmV4cG9ydGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGVzICYmIGNvbHVtbi5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uYXR0cmlidXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0Q29sdW1uLmZpZWxkID0gY29sdW1uLmF0dHJpYnV0ZXNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0Q29sdW1uLmZpZWxkID0gY29sdW1uLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0Q29sdW1uO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRQYWdlUm93c1RvRXhwb3J0KGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGxldCB0YWJsZURhdGEgPSB0aGlzLnRhYmxlLnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5sb2FkQ3VycmVudFBhZ2VSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRDdXJyZW50UGFnZVJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzVG9FeHBvcnQoY29sdW1uczogYW55W10pIHtcbiAgICAgICAgbGV0IHRhYmxlRGF0YSA9IHRoaXMudGFibGUuc2VsZWN0aW9uO1xuICAgICAgICBpZiAodGhpcy5sb2FkU2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRTZWxlY3RlZFJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKHJlc3VsdDogYW55LCBwcm9wOiBhbnkpID0+IChyZXN1bHRbcHJvcF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlc3VsdFtwcm9wXSksIG9iaik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yZWN1cnNpb25TZXRWYWx1ZShvYmosIHBhdGguc3BsaXQoXCIuXCIpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWN1cnNpb25TZXRWYWx1ZShvYmo6IGFueSwga2V5c0xpc3Q6IHN0cmluZ1tdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0xpc3RbMF07XG4gICAgICAgIGlmIChrZXlzTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICAgIG9ialtrZXldID0gdGhpcy5yZWN1cnNpb25TZXRWYWx1ZShvYmo/LltrZXldIHx8IHt9LCBrZXlzTGlzdC5zbGljZSgxKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnM6IGFueVtdLCByb3dzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBlbnVtQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmVudW1QcmVmaXgpO1xuICAgICAgICBpZiAoIWVudW1Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnJvd3NdLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgICAgZW51bUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudHJhbnNsYXRlVmFsdWUoY29sdW1uLCBjb2x1bW5EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKG5ld1JvdywgZmllbGROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBtYXAgdmFsdWVzXG4gICAgICogZnJvbSB0aGUgVGFibGVDb2x1bW5zQ29tcG9uZW50LCB3aGljaCB1c2VzIHRoZSBudW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICogZmllbGQsIGFsb25nIHdpdGggcm93cyB0aGF0IGhhdmUgYSBjdXN0b20gbnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgKiB0byBlbnN1cmUgdGhlIGNvcnJlY3QgdmFsdWVzIGFyZSBleHBvcnRlZCBieSB0aGUgVGFibGVQYWdpbmdDb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb3JyZWN0bHkgbWFwcGVkIHRhYmxlRGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFwTnVtYmVyRm9ybWF0T3B0aW9uc0V4cG9ydChcbiAgICAgICAgY29sdW1uczogUGFydGlhbDxDb2x1bW4+W10sXG4gICAgICAgIHRhYmxlRGF0YToge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTpcbiAgICAgICAgICAgIHwgUm93VmFsdWVGb3JtYXRPcHRpb25cbiAgICAgICAgICAgIHwgbnVtYmVyXG4gICAgICAgICAgICB8IHN0cmluZ1xuICAgICAgICAgICAgfCBudWxsXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVtdXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGhhc051bWJlckZvcm1hdE9wdGlvbnNDb2x1bW5zID0gY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKTtcbiAgICAgICAgY29uc3QgaGFzTnVtYmVyRm9ybWF0T3B0aW9uc1Jvd3MgPSB0YWJsZURhdGEuc29tZSgocm93RGF0YSkgPT4gT2JqZWN0LmtleXMocm93RGF0YSkuc29tZSgoa2V5KSA9PiAocm93RGF0YVtrZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9ucykpO1xuXG4gICAgICAgIGlmICghaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMgJiYgIWhhc051bWJlckZvcm1hdE9wdGlvbnNSb3dzKSByZXR1cm4gdGFibGVEYXRhO1xuXG4gICAgICAgIGxldCBtYXBwZWRUYWJsZURhdGEgPSBbLi4udGFibGVEYXRhXTtcblxuICAgICAgICBpZiAoaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMpIHtcbiAgICAgICAgICAgIG1hcHBlZFRhYmxlRGF0YSA9IG1hcHBlZFRhYmxlRGF0YS5tYXAoKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB7IC4uLnJvd0RhdGEgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyBhdHRyaWJ1dGVzLCBudW1iZXJGb3JtYXRPcHRpb25zIH0gb2YgY29sdW1uc1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZChyb3dbYXR0cmlidXRlXSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJvd1thdHRyaWJ1dGVdIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcm93W2F0dHJpYnV0ZV0gYXMgc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucy5zdHlsZSA9PT0gXCJwZXJjZW50XCIgPyBuZXcgQmlnTnVtYmVyKHZhbHVlKS50aW1lcygxMDApIDogbmV3IEJpZ051bWJlcih2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVuLVVTXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5udW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBcImRlY2ltYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdNb2RlOiBcInRydW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2F0dHJpYnV0ZV0gPSBudW1iZXJGb3JtYXQuZm9ybWF0KG1hcHBlZFZhbHVlLnRvTnVtYmVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc051bWJlckZvcm1hdE9wdGlvbnNSb3dzKSB7XG4gICAgICAgICAgICBtYXBwZWRUYWJsZURhdGEgPSB0YWJsZURhdGEubWFwKChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0geyAuLi5yb3dEYXRhIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzV2l0aE51bWJlckZvcm1hdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhyb3cpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gKHJvd1trZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1dpdGhOdW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHJvd0RhdGFba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbikudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLm9wdGlvbnMubnVtYmVyRm9ybWF0T3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IG51bWJlckZvcm1hdE9wdGlvbnMuc3R5bGUgPT09IFwicGVyY2VudFwiID8gbmV3IEJpZ051bWJlcih2YWx1ZSkudGltZXMoMTAwKSA6IG5ldyBCaWdOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVuLVVTXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3VuZGluZ01vZGU6IFwidHJ1bmNcIlxuICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgKHJvd1trZXldIGFzIHN0cmluZyB8IG51bWJlcikgPSBudW1iZXJGb3JtYXQuZm9ybWF0KG1hcHBlZFZhbHVlLnRvTnVtYmVyKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXBwZWRUYWJsZURhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcEN1c3RvbUV4cG9ydChjb2x1bW5zOiBhbnlbXSwgcm93czogYW55W10pIHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmN1c3RvbUV4cG9ydCk7XG4gICAgICAgIGlmICghY3VzdG9tQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFsuLi5yb3dzXS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICAgIGN1c3RvbUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2x1bW4uY3VzdG9tRXhwb3J0KGNvbHVtbkRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUobmV3Um93LCBmaWVsZE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zbGF0ZVZhbHVlKGNvbHVtbjogYW55LCBjb2x1bW5EYXRhOiBhbnkpIHtcbiAgICAgICAgLy8gRGVmYXVsdCB1c2FnZTogRU5VTV9WQUxVRSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZSA9IGNvbHVtbkRhdGEudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdHJhbnNsYXRpb25LZXkgPSBjb2x1bW4uZW51bVByZWZpeCArIGVudW1WYWx1ZTtcbiAgICAgICAgbGV0IHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuXG4gICAgICAgIC8vIEN1c3RvbSB1c2FnZSAxOiBWOSAtPiBkb21haW4uc2VydmljZS52XzlcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uS2V5ID09PSB0cmFuc2xhdGVkVmFsdWUgJiYgZW51bVZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtVmFsdWUuc3Vic3RyaW5nKDAsIDEpfV8ke2VudW1WYWx1ZS5zdWJzdHIoMSl9YDtcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3VzdG9tIHVzYWdlIDI6IEVudW1WYWx1ZSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGlmICh0cmFuc2xhdGlvbktleSA9PT0gdHJhbnNsYXRlZFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtS2V5ID0gdGhpcy5jb252ZXJ0VG9TbmFrZUNhc2UoY29sdW1uRGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtS2V5fWA7XG4gICAgICAgICAgICB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9TbmFrZUNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIChtYXRjaCwgZ3JvdXApID0+IGBfJHtncm91cC50b0xvd2VyQ2FzZSgpfWApLnJlcGxhY2UoL15fLywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRGaWxlTmFtZSgpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nID8/IFwicHQtQlJcIjtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4cG9ydEZpbGVOYW1lID8/IFwiZG93bmxvYWRcIjtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxhbmcpLnJlcGxhY2UoXCJfXCIsIFwiLVwiKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxhbmcpLnJlcGxhY2UoXCIgXCIsIFwiLVwiKTtcblxuICAgICAgICByZXR1cm4gYCR7ZmlsZU5hbWV9XyR7Zm9ybWF0dGVkRGF0ZX1fJHtmb3JtYXR0ZWRUaW1lfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydEN1cnJlbnRQYWdlKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNUb0V4cG9ydCgpO1xuICAgICAgICBjb25zdCBkYXRhVG9FeHBvcnQgPSB0aGlzLmdldEN1cnJlbnRQYWdlUm93c1RvRXhwb3J0KGNvbHVtbnMpO1xuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydFNlbGVjdGVkUmVjb3JkcygpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zVG9FeHBvcnQoKTtcbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NUb0V4cG9ydChjb2x1bW5zKTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleHBvcnRBbGxSZWNvcmRzKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG5cbiAgICAgICAgbGV0IHNlcnZlckRhdGEgPSBhd2FpdCB0aGlzLmxvYWRBbGxSZWNvcmRzKCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG5cbiAgICAgICAgc2VydmVyRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIHNlcnZlckRhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoY29sdW1ucywgc2VydmVyRGF0YSk7XG5cbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENTVihjb2x1bW5zLCBkYXRhVG9FeHBvcnQsIHVuZGVmaW5lZCwgdGhpcy5nZXRFeHBvcnRGaWxlTmFtZSgpKTtcbiAgICB9XG59XG4iXX0=
@@ -9623,6 +9623,8 @@ let TablePagingComponent = class TablePagingComponent {
9623
9623
  const columnsWithNumberFormatOptions = columns.filter((column) => column.numberFormatOptions);
9624
9624
  for (const { attributes, numberFormatOptions } of columnsWithNumberFormatOptions) {
9625
9625
  for (const attribute of attributes) {
9626
+ if (isNullOrUndefined(row[attribute]))
9627
+ continue;
9626
9628
  if ((_a = row[attribute].options) === null || _a === void 0 ? void 0 : _a.numberFormatOptions) {
9627
9629
  continue;
9628
9630
  }