ctt-babylon 0.25.7 → 0.25.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -66,32 +66,33 @@ export class BabylonBlogListComponent {
66
66
  categoriesMap.set(key, {
67
67
  ...category,
68
68
  title: title,
69
+ // El contador se recalcula con los posts activos.
70
+ posts: 0,
69
71
  });
70
72
  });
71
73
  }
72
- else {
73
- // Si no hay categories, calcular desde posts
74
- (this.posts || [])
75
- .filter((post) => post.active)
76
- .forEach((post) => {
77
- const title = this.getPostCategoryTitle(post.category);
78
- if (!title)
79
- return;
80
- const key = title?.trim().toLowerCase();
81
- if (!key)
82
- return;
83
- const existing = categoriesMap.get(key);
84
- if (existing) {
85
- existing.posts = (existing.posts ?? 0) + 1;
86
- }
87
- else {
88
- categoriesMap.set(key, {
89
- title: title?.trim(),
90
- posts: 1,
91
- });
92
- }
93
- });
94
- }
74
+ // Calcular siempre el contador desde los posts activos. Esto evita
75
+ // que totalPosts incluya posts desactivados.
76
+ (this.posts || [])
77
+ .filter((post) => post.active)
78
+ .forEach((post) => {
79
+ const title = this.getPostCategoryTitle(post.category);
80
+ if (!title)
81
+ return;
82
+ const key = title.trim().toLowerCase();
83
+ if (!key)
84
+ return;
85
+ const existing = categoriesMap.get(key);
86
+ if (existing) {
87
+ existing.posts = (existing.posts ?? 0) + 1;
88
+ }
89
+ else {
90
+ categoriesMap.set(key, {
91
+ title: title.trim(),
92
+ posts: 1,
93
+ });
94
+ }
95
+ });
95
96
  this.categoriesToRender = Array.from(categoriesMap.values());
96
97
  }
97
98
  getPostCategoryTitle(category) {
@@ -156,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
156
157
  }], pageSize: [{
157
158
  type: Input
158
159
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ibG9nLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWJsb2ctbGlzdC9iYWJ5bG9uLWJsb2ctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYmxvZy1saXN0L2JhYnlsb24tYmxvZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxHQUlSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBSzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBZ0JyRSxNQUFNLE9BQU8sd0JBQXdCO0lBd0JqQyxZQUFvQixLQUFxQjtRQUFyQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXZCeEIsWUFBTyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRTtZQUN6RCxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFJTSxVQUFLLEdBQXVCLEVBQUUs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QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmFieWxvblBhZ2luYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2JhYnlsb24tcGFnaW5hdGlvbi9iYWJ5bG9uLXBhZ2luYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhYnlsb25MaW5rVHlwZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvbGluay10eXBlL2xpbmstdHlwZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQmFieWxvbkJ1dHRvbkkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24tYnV0dG9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYWJ5bG9uSW1hZ2VJIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9iYWJ5bG9uLWltYWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYWJ5bG9uVGFnc0kgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24tdGFncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFieWxvblRleHRzQ29sb3JzSSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi10ZXh0cy1jb2xvcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNJVEVfQ09ORklHX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYXBwZXIvbWFwcGVyLnNlcnZpY2UudG9rZW4nO1xuaW1wb3J0IHsgZm9ybWF0TWVkaXVtRGF0ZUJ5TG9jYWxlLCBub3JtYWxpemVEYXRlTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZGF0ZS51dGlscyc7XG5pbXBvcnQgeyBCYWJ5bG9uRHluYW1pY0hlYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYmFieWxvbi1keW5hbWljLWhlYWRpbmcvYmFieWxvbi1keW5hbWljLWhlYWRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IEJhYnlsb25TZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYmFieWxvbi1zZWFyY2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1iYWJ5bG9uLWJsb2ctbGlzdCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQmFieWxvbkR5bmFtaWNIZWFkaW5nQ29tcG9uZW50LFxuICAgICAgICBCYWJ5bG9uTGlua1R5cGVEaXJlY3RpdmUsXG4gICAgICAgIEJhYnlsb25TZWFyY2hDb21wb25lbnQsXG4gICAgICAgIEJhYnlsb25QYWdpbmF0aW9uRGlyZWN0aXZlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhYnlsb24tYmxvZy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vYmFieWxvbi1ibG9nLWxpc3QuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uQmxvZ0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzaXRlU3ZjID0gaW5qZWN0KFNJVEVfQ09ORklHX1NFUlZJQ0VfVE9LRU4sIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICBASW5wdXQoKSBwcmV0aXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoKSB0aXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBwb3N0czogQmFieWxvbkJsb2dQb3N0SVtdID0gW107XG4gICAgQElucHV0KCkgdGFncz86IEJhYnlsb25UYWdzSTtcbiAgICBASW5wdXQoKSB0ZXh0Q29sb3JzPzogQmFieWxvblRleHRzQ29sb3JzSTtcbiAgICBASW5wdXQoKSBjYXRlZ29yaWVzVGl0bGU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgY2F0ZWdvcmllcz86IEJhYnlsb25CbG9nQ2F0ZWdvcnlJW107XG4gICAgQElucHV0KCkgbGF0ZXN0UG9zdHNUaXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBsYXRlc3RQb3N0cz86IEJhYnlsb25CbG9nUG9zdElbXTtcbiAgICBASW5wdXQoKSBzZWFyY2hQbGFjZUhvbGRlcj86IHN0cmluZztcbiAgICBASW5wdXQoKSBub3Rmb3VuZFRleHQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgYW50ZXJpb3I/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2lndWllbnRlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAzO1xuXG4gICAgcHVibGljIGZpbHRlcmVkUG9zdHM6IEJhYnlsb25CbG9nUG9zdElbXSA9IFtdO1xuICAgIHB1YmxpYyBjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgY2F0ZWdvcmllc1RvUmVuZGVyOiBCYWJ5bG9uQmxvZ0NhdGVnb3J5SVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2F0ZWdvcnlGaWx0ZXIocGFyYW1zPy5nZXQoJ2NhdGVnb3J5JykgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2F0ZWdvcmllc0Zyb21Qb3N0cygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3Bvc3RzJ10gfHwgY2hhbmdlc1snY2F0ZWdvcmllcyddKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhdGVnb3JpZXNGcm9tUG9zdHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENhdGVnb3J5RmlsdGVyKF9jYXRlZ29yeT86IHN0cmluZykge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IF9jYXRlZ29yeT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRQb3N0cyA9XG4gICAgICAgICAgICB0aGlzLnBvc3RzPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHBvc3QpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UG9zdENhdGVnb3J5VGl0bGUocG9zdC5jYXRlZ29yeSk/LnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSAmJiBwb3N0LmFjdGl2ZVxuICAgICAgICAgICAgKSA/P1xuICAgICAgICAgICAgdGhpcy5wb3N0cyA/P1xuICAgICAgICAgICAgW107XG5cbiAgICAgICAgaWYgKCFfY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRQb3N0cyA9XG4gICAgICAgICAgICAgICAgdGhpcy5wb3N0cz8uZmlsdGVyKChwb3N0KSA9PiBwb3N0LmFjdGl2ZSkgPz8gdGhpcy5wb3N0cyA/PyBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlYXJjaCgkZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoJGV2ZW50Py5mbGFnICE9PSAxKSByZXR1cm47XG4gICAgICAgIHRoaXMuc2V0Q2F0ZWdvcnlGaWx0ZXIoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFBvc3RzID0gJGV2ZW50Lml0ZW1zO1xuICAgIH1cblxuICAgIGZvcm1hdE1lZGl1bURhdGUoZGF0ZT86IERhdGUgfCBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZm9ybWF0TWVkaXVtRGF0ZUJ5TG9jYWxlKGRhdGUsIHRoaXMuY3VycmVudERhdGVMb2NhbGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2F0ZWdvcmllc0Zyb21Qb3N0cygpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBCYWJ5bG9uQmxvZ0NhdGVnb3J5ST4oKTtcblxuICAgICAgICAvLyBTaSBoYXkgY2F0ZWdvcmllcyBkZSBpbnB1dCwgYWdyZWdhcmxvcyBwcmltZXJvIChkZWR1cGxpY2FuZG8pXG4gICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBjYXRlZ29yeS50aXRsZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmICghdGl0bGUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRpdGxlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllc01hcC5zZXQoa2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNpIG5vIGhheSBjYXRlZ29yaWVzLCBjYWxjdWxhciBkZXNkZSBwb3N0c1xuICAgICAgICAgICAgKHRoaXMucG9zdHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocG9zdCkgPT4gcG9zdC5hY3RpdmUpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHBvc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFBvc3RDYXRlZ29yeVRpdGxlKHBvc3QuY2F0ZWdvcnkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRpdGxlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdGl0bGU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gY2F0ZWdvcmllc01hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5wb3N0cyA9IChleGlzdGluZy5wb3N0cyA/PyAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzTWFwLnNldChrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGU/LnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0czogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNUb1JlbmRlciA9IEFycmF5LmZyb20oY2F0ZWdvcmllc01hcC52YWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQb3N0Q2F0ZWdvcnlUaXRsZShcbiAgICAgICAgY2F0ZWdvcnk/OiBzdHJpbmcgfCB7IG5hbWVfaWRlbnRpZmllcj86IHN0cmluZzsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBjYXRlZ29yeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjYXRlZ29yeS5uYW1lX2lkZW50aWZpZXI/LnRvU3RyaW5nKCk/LnRyaW0oKSB8fFxuICAgICAgICAgICAgY2F0ZWdvcnlbJ25hbWUnXT8udG9TdHJpbmcoKT8udHJpbSgpIHx8XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjdXJyZW50RGF0ZUxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplRGF0ZUxvY2FsZShcbiAgICAgICAgICAgIHRoaXMuc2l0ZVN2Yz8uc2VsZWN0ZWRMYW5ndWFnZUluc3RhbnQ/LmxvY2F0ZSA/P1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Um91dGVMb2NhbGUoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um91dGVMb2NhbGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGUuc25hcHNob3QucGF0aEZyb21Sb290XG4gICAgICAgICAgICAuZmxhdE1hcCgoc25hcHNob3QpID0+IHNuYXBzaG90LnVybClcbiAgICAgICAgICAgIC5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQucGF0aClcbiAgICAgICAgICAgIC5maW5kKChwYXRoKSA9PiBwYXRoLmxlbmd0aCA9PT0gMik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhYnlsb25CbG9nUG9zdEkge1xuICAgIGlkPzogbnVtYmVyO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHN1YnRpdGxlPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGltZz86IEJhYnlsb25JbWFnZUk7XG4gICAgYnV0dG9ucz86IEJhYnlsb25CdXR0b25JW107XG4gICAgcG9zdFVybD86IEJhYnlsb25CdXR0b25JO1xuICAgIGNhdGVnb3J5Pzogc3RyaW5nIHwgeyBuYW1lX2lkZW50aWZpZXI/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIGRhdGU/OiBEYXRlO1xuICAgIGFkZGl0aW9uYWwxPzogc3RyaW5nO1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWJ5bG9uQmxvZ0NhdGVnb3J5SSB7XG4gICAgaWQ/OiBudW1iZXI7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgcG9zdHM/OiBudW1iZXI7XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImJhYnlsb25fX2Jsb2ctbGlzdCBtYXJnaW4tbWFpblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludHJvX2luZm8gYWxpZ24tLWNlbnRlclwiPlxuICAgICAgICAgICAgQGlmIChwcmV0aXRsZSkge1xuICAgICAgICAgICAgICAgIDxsaWItYmFieWxvbi1keW5hbWljLWhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgW3RhZ109XCJ0YWdzPy5wcmV0aXRsZSB8fCAnaDMnXCJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJwcmV0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJ0ZXh0Q29sb3JzPy5wcmV0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cInByZXRpdGxlXCJcbiAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1keW5hbWljLWhlYWRpbmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGxpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICBbdGFnXT1cInRhZ3M/LnRpdGxlIHx8ICdoMSdcIlxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRleHRDb2xvcnM/LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgID48L2xpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBjc19wbHJfMTAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY3NfZ2FwX3lfbGdfODBcIj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyZWRQb3N0cykge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbGctOFwiXG4gICAgICAgICAgICAgICAgICAgICpsaWJQYWdpbmF0ZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRQb3N0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYWdlZCA9IHBhZ2VkSXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFnZSA9IGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gdG90YWxQYWdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gcHJldlxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAocG9zdCBvZiBwYWdlZDsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cImNzX3Bvc3QgY3Nfc3R5bGVfMSBjc19zaXplXzVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInBvc3QucG9zdFVybD8ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJwb3N0LnBvc3RVcmw/LnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJwb3N0LnBvc3RVcmw/LmxpbmtUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjc19wb3N0X3RodW1iIGNzLS1yYWRpdXMgb3ZlcmZsb3ctaGlkZGVuIGQtYmxvY2sgY3NfbWJfMzAgcG9zaXRpb24tcmVsYXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwb3N0LmltZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicG9zdC5pbWcuc3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cInBvc3QuaW1nLmFsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjc19ob3Zlcl9pY29uIGNzX2NlbnRlciBwb3NpdGlvbi1hYnNvbHV0ZSBjc193aGl0ZV9jb2xvciBjc196aW5kZXhfMiBjcy0tcmFkaXVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWJ5bG9uLWFycm93X2J0blwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3NfcG9zdF9pbmZvIGludHJvX2luZm8gbm8tYWxpZ25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNzX3Bvc3RfbWV0YV80IGNzX21iXzEzIHByZXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHBvc3QuY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBwb3N0LmNhdGVnb3J5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwb3N0LmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LmRhdGUgfCBkYXRlOiAnZGQvTU0veXl5eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocG9zdC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiY3NfcG9zdF90aXRsZSB0aXRsZTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdC5wb3N0VXJsPy5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJwb3N0LnBvc3RVcmw/LnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJwb3N0LnBvc3RVcmw/LmxpbmtUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aXRsZS0tc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcG9zdC50aXRsZSB9fTwvYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwb3N0LmFkZGl0aW9uYWwxIHx8IHBvc3QuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNzX3N1YnRpdGxlIHRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3QuYWRkaXRpb25hbDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcG9zdC5hZGRpdGlvbmFsMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwb3N0LmRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHBvc3QuYnV0dG9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuc19fYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiBvZiBwb3N0LmJ1dHRvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9kZCA9ICRvZGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYnV0dG9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImJ1dHRvbi51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cImJ1dHRvbi5saW5rVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuX3ByaW1hcnk6ICFvZGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuX2NhbGw6IG9kZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj57eyBidXR0b24ubGFiZWwgfX08L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFieWxvbi1hcnJvdy1yaWdodC1iaWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FydGljbGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0b3RhbCA+IDEgJiYgYW50ZXJpb3IgJiYgc2lndWllbnRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmF2IGNsYXNzPVwicGFnaW5hdGlvbl9fY29udHJvbHMgYWxpZ24tLWNlbnRlciBtdC0tMjBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuc19fYm94IGFsaWduLS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuX3ByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXYoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFudGVyaW9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+e3sgYW50ZXJpb3IgfX08L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LS0xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcGFnZSB9fSAvIHt7IHRvdGFsIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuX3NlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA9PT0gdG90YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNpZ3VpZW50ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnt7IHNpZ3VpZW50ZSB9fTwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghZmlsdGVyZWRQb3N0cyB8fCBmaWx0ZXJlZFBvc3RzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy04XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjc19ub19yZXN1bHRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhZ109XCInaDMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cInRpdGxlLS1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwibm90Zm91bmRUZXh0IHx8ICdObyByZXN1bHRzIGZvdW5kJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1keW5hbWljLWhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGFzaWRlIGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICA8bmF2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Nfc2lkZWJhciBjc19yaWdodF9zaWRlYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWFyY2hQbGFjZUhvbGRlciA/PyAnc2VhcmNoJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWJhYnlsb24tc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoUGxhY2VIb2xkZXJdPVwic2VhcmNoUGxhY2VIb2xkZXIgPz8gJ3NlYXJjaC4uLidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRzXT1cInBvc3RzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZHNdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1YnRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0cyk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1iYWJ5bG9uLXNlYXJjaD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNzX3NpZGViYXJfaXRlbSB3aWRnZXRfY2F0ZWdvcmllc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjYXRlZ29yaWVzVGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWddPVwidGFncz8uY2F0ZWdvcmllc1RpdGxlIHx8ICdoNCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cInRpdGxlLS1zbWFsbCBtYi0tMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGV4dENvbG9ycz8uY2F0ZWdvcmllc1RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY2F0ZWdvcmllc1RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1keW5hbWljLWhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNhdGVnb3JpZXNUb1JlbmRlcj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5IG9mIGNhdGVnb3JpZXNUb1JlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImNhdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2F0ZWdvcnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgY2F0ZWdvcnkudGl0bGUgfX0gKHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeS5wb3N0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhdGVnb3J5ID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeS50aXRsZT8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWNhdGVnb3J5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFbGltaW5hciBmaWx0cm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVtb3ZlLWNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhdGVnb3J5RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhYnlsb24tY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Nfc2lkZWJhcl9pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxhdGVzdFBvc3RzVGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWddPVwidGFncz8ubGF0ZXN0UG9zdHNUaXRsZSB8fCAnaDQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJ0aXRsZS0tc21hbGwgbWItLTIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRleHRDb2xvcnM/LmxhdGVzdFBvc3RzVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJsYXRlc3RQb3N0c1RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1keW5hbWljLWhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGxhdGVzdFBvc3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjc19yZWNlbnRfcG9zdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAocG9zdCBvZiBsYXRlc3RQb3N0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNzX3JlY2VudF9wb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRpdGxlLS1zbWFsbGVyIG1iLS0xMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LnBvc3RVcmw/LmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJwb3N0LnBvc3RVcmw/LnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LnBvc3RVcmw/LmxpbmtUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcG9zdC50aXRsZSB9fTwvYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHBvc3QuZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPVwidGV4dC0tc21hbGxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdE1lZGl1bURhdGUocG9zdC5kYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ibG9nLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWJsb2ctbGlzdC9iYWJ5bG9uLWJsb2ctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYmxvZy1saXN0L2JhYnlsb24tYmxvZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxHQUlSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBSzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBZ0JyRSxNQUFNLE9BQU8sd0JBQXdCO0lBd0JqQyxZQUFvQixLQUFxQjtRQUFyQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXZCeEIsWUFBTyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRTtZQUN6RCxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFJTSxVQUFLLEdBQXVCLEVBQUUs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c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJhYnlsb25QYWdpbmF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9iYWJ5bG9uLXBhZ2luYXRpb24vYmFieWxvbi1wYWdpbmF0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYWJ5bG9uTGlua1R5cGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2xpbmstdHlwZS9saW5rLXR5cGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhYnlsb25CdXR0b25JIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9iYWJ5bG9uLWJ1dHRvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFieWxvbkltYWdlSSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi1pbWFnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFieWxvblRhZ3NJIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9iYWJ5bG9uLXRhZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25UZXh0c0NvbG9yc0kgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24tdGV4dHMtY29sb3JzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTSVRFX0NPTkZJR19TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFwcGVyL21hcHBlci5zZXJ2aWNlLnRva2VuJztcbmltcG9ydCB7IGZvcm1hdE1lZGl1bURhdGVCeUxvY2FsZSwgbm9ybWFsaXplRGF0ZUxvY2FsZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2RhdGUudXRpbHMnO1xuaW1wb3J0IHsgQmFieWxvbkR5bmFtaWNIZWFkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2JhYnlsb24tZHluYW1pYy1oZWFkaW5nL2JhYnlsb24tZHluYW1pYy1oZWFkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYWJ5bG9uU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2JhYnlsb24tc2VhcmNoJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItYmFieWxvbi1ibG9nLWxpc3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEJhYnlsb25EeW5hbWljSGVhZGluZ0NvbXBvbmVudCxcbiAgICAgICAgQmFieWxvbkxpbmtUeXBlRGlyZWN0aXZlLFxuICAgICAgICBCYWJ5bG9uU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBCYWJ5bG9uUGFnaW5hdGlvbkRpcmVjdGl2ZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYWJ5bG9uLWJsb2ctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2JhYnlsb24tYmxvZy1saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkJsb2dMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2l0ZVN2YyA9IGluamVjdChTSVRFX0NPTkZJR19TRVJWSUNFX1RPS0VOLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgQElucHV0KCkgcHJldGl0bGU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGl0bGU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcG9zdHM6IEJhYnlsb25CbG9nUG9zdElbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHRhZ3M/OiBCYWJ5bG9uVGFnc0k7XG4gICAgQElucHV0KCkgdGV4dENvbG9ycz86IEJhYnlsb25UZXh0c0NvbG9yc0k7XG4gICAgQElucHV0KCkgY2F0ZWdvcmllc1RpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNhdGVnb3JpZXM/OiBCYWJ5bG9uQmxvZ0NhdGVnb3J5SVtdO1xuICAgIEBJbnB1dCgpIGxhdGVzdFBvc3RzVGl0bGU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbGF0ZXN0UG9zdHM/OiBCYWJ5bG9uQmxvZ1Bvc3RJW107XG4gICAgQElucHV0KCkgc2VhcmNoUGxhY2VIb2xkZXI/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbm90Zm91bmRUZXh0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFudGVyaW9yPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNpZ3VpZW50ZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gMztcblxuICAgIHB1YmxpYyBmaWx0ZXJlZFBvc3RzOiBCYWJ5bG9uQmxvZ1Bvc3RJW10gPSBbXTtcbiAgICBwdWJsaWMgY3VycmVudENhdGVnb3J5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgcHVibGljIGNhdGVnb3JpZXNUb1JlbmRlcjogQmFieWxvbkJsb2dDYXRlZ29yeUlbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhdGVnb3J5RmlsdGVyKHBhcmFtcz8uZ2V0KCdjYXRlZ29yeScpID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhdGVnb3JpZXNGcm9tUG9zdHMoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydwb3N0cyddIHx8IGNoYW5nZXNbJ2NhdGVnb3JpZXMnXSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXRlZ29yaWVzRnJvbVBvc3RzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDYXRlZ29yeUZpbHRlcihfY2F0ZWdvcnk/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBfY2F0ZWdvcnk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnkgPz8gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZpbHRlcmVkUG9zdHMgPVxuICAgICAgICAgICAgdGhpcy5wb3N0cz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChwb3N0KSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFBvc3RDYXRlZ29yeVRpdGxlKHBvc3QuY2F0ZWdvcnkpPy50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgJiYgcG9zdC5hY3RpdmVcbiAgICAgICAgICAgICkgPz9cbiAgICAgICAgICAgIHRoaXMucG9zdHMgPz9cbiAgICAgICAgICAgIFtdO1xuXG4gICAgICAgIGlmICghX2NhdGVnb3J5KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkUG9zdHMgPVxuICAgICAgICAgICAgICAgIHRoaXMucG9zdHM/LmZpbHRlcigocG9zdCkgPT4gcG9zdC5hY3RpdmUpID8/IHRoaXMucG9zdHMgPz8gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWFyY2goJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCRldmVudD8uZmxhZyAhPT0gMSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldENhdGVnb3J5RmlsdGVyKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRQb3N0cyA9ICRldmVudC5pdGVtcztcbiAgICB9XG5cbiAgICBmb3JtYXRNZWRpdW1EYXRlKGRhdGU/OiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1lZGl1bURhdGVCeUxvY2FsZShkYXRlLCB0aGlzLmN1cnJlbnREYXRlTG9jYWxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhdGVnb3JpZXNGcm9tUG9zdHMoKSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXNNYXAgPSBuZXcgTWFwPHN0cmluZywgQmFieWxvbkJsb2dDYXRlZ29yeUk+KCk7XG5cbiAgICAgICAgLy8gU2kgaGF5IGNhdGVnb3JpZXMgZGUgaW5wdXQsIGFncmVnYXJsb3MgcHJpbWVybyAoZGVkdXBsaWNhbmRvKVxuICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gY2F0ZWdvcnkudGl0bGU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRpdGxlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aXRsZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXNNYXAuc2V0KGtleSwge1xuICAgICAgICAgICAgICAgICAgICAuLi5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAvLyBFbCBjb250YWRvciBzZSByZWNhbGN1bGEgY29uIGxvcyBwb3N0cyBhY3Rpdm9zLlxuICAgICAgICAgICAgICAgICAgICBwb3N0czogMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsY3VsYXIgc2llbXByZSBlbCBjb250YWRvciBkZXNkZSBsb3MgcG9zdHMgYWN0aXZvcy4gRXN0byBldml0YVxuICAgICAgICAvLyBxdWUgdG90YWxQb3N0cyBpbmNsdXlhIHBvc3RzIGRlc2FjdGl2YWRvcy5cbiAgICAgICAgKHRoaXMucG9zdHMgfHwgW10pXG4gICAgICAgICAgICAuZmlsdGVyKChwb3N0KSA9PiBwb3N0LmFjdGl2ZSlcbiAgICAgICAgICAgIC5mb3JFYWNoKChwb3N0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFBvc3RDYXRlZ29yeVRpdGxlKHBvc3QuY2F0ZWdvcnkpO1xuICAgICAgICAgICAgICAgIGlmICghdGl0bGUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRpdGxlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGNhdGVnb3JpZXNNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnBvc3RzID0gKGV4aXN0aW5nLnBvc3RzID8/IDApICsgMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzTWFwLnNldChrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZS50cmltKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0czogMSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzVG9SZW5kZXIgPSBBcnJheS5mcm9tKGNhdGVnb3JpZXNNYXAudmFsdWVzKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zdENhdGVnb3J5VGl0bGUoXG4gICAgICAgIGNhdGVnb3J5Pzogc3RyaW5nIHwgeyBuYW1lX2lkZW50aWZpZXI/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2F0ZWdvcnkubmFtZV9pZGVudGlmaWVyPy50b1N0cmluZygpPy50cmltKCkgfHxcbiAgICAgICAgICAgIGNhdGVnb3J5WyduYW1lJ10/LnRvU3RyaW5nKCk/LnRyaW0oKSB8fFxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY3VycmVudERhdGVMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGVMb2NhbGUoXG4gICAgICAgICAgICB0aGlzLnNpdGVTdmM/LnNlbGVjdGVkTGFuZ3VhZ2VJbnN0YW50Py5sb2NhdGUgPz9cbiAgICAgICAgICAgICAgICB0aGlzLmdldFJvdXRlTG9jYWxlKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvdXRlTG9jYWxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhdGhGcm9tUm9vdFxuICAgICAgICAgICAgLmZsYXRNYXAoKHNuYXBzaG90KSA9PiBzbmFwc2hvdC51cmwpXG4gICAgICAgICAgICAubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG4gICAgICAgICAgICAuZmluZCgocGF0aCkgPT4gcGF0aC5sZW5ndGggPT09IDIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWJ5bG9uQmxvZ1Bvc3RJIHtcbiAgICBpZD86IG51bWJlcjtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzdWJ0aXRsZT86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBpbWc/OiBCYWJ5bG9uSW1hZ2VJO1xuICAgIGJ1dHRvbnM/OiBCYWJ5bG9uQnV0dG9uSVtdO1xuICAgIHBvc3RVcmw/OiBCYWJ5bG9uQnV0dG9uSTtcbiAgICBjYXRlZ29yeT86IHN0cmluZyB8IHsgbmFtZV9pZGVudGlmaWVyPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBkYXRlPzogRGF0ZTtcbiAgICBhZGRpdGlvbmFsMT86IHN0cmluZztcbiAgICBhY3RpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFieWxvbkJsb2dDYXRlZ29yeUkge1xuICAgIGlkPzogbnVtYmVyO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHBvc3RzPzogbnVtYmVyO1xufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJiYWJ5bG9uX19ibG9nLWxpc3QgbWFyZ2luLW1haW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnRyb19pbmZvIGFsaWduLS1jZW50ZXJcIj5cbiAgICAgICAgICAgIEBpZiAocHJldGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8bGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgIFt0YWddPVwidGFncz8ucHJldGl0bGUgfHwgJ2gzJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwicHJldGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGV4dENvbG9ycz8ucHJldGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJwcmV0aXRsZVwiXG4gICAgICAgICAgICAgICAgPjwvbGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICh0aXRsZSkge1xuICAgICAgICAgICAgICAgIDxsaWItYmFieWxvbi1keW5hbWljLWhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgW3RhZ109XCJ0YWdzPy50aXRsZSB8fCAnaDEnXCJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJ0ZXh0Q29sb3JzPy50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1keW5hbWljLWhlYWRpbmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgY3NfcGxyXzEwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNzX2dhcF95X2xnXzgwXCI+XG4gICAgICAgICAgICBAaWYgKGZpbHRlcmVkUG9zdHMpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWxnLThcIlxuICAgICAgICAgICAgICAgICAgICAqbGliUGFnaW5hdGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkUG9zdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogcGFnZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFnZWQgPSBwYWdlZEl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IHRvdGFsUGFnZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IHByZXZcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHBvc3Qgb2YgcGFnZWQ7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9XCJjc19wb3N0IGNzX3N0eWxlXzEgY3Nfc2l6ZV81XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwb3N0LnBvc3RVcmw/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicG9zdC5wb3N0VXJsPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlua1R5cGVdPVwicG9zdC5wb3N0VXJsPy5saW5rVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3NfcG9zdF90aHVtYiBjcy0tcmFkaXVzIG92ZXJmbG93LWhpZGRlbiBkLWJsb2NrIGNzX21iXzMwIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocG9zdC5pbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInBvc3QuaW1nLnNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJwb3N0LmltZy5hbHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3NfaG92ZXJfaWNvbiBjc19jZW50ZXIgcG9zaXRpb24tYWJzb2x1dGUgY3Nfd2hpdGVfY29sb3IgY3NfemluZGV4XzIgY3MtLXJhZGl1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFieWxvbi1hcnJvd19idG5cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNzX3Bvc3RfaW5mbyBpbnRyb19pbmZvIG5vLWFsaWduXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjc19wb3N0X21ldGFfNCBjc19tYl8xMyBwcmV0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwb3N0LmNhdGVnb3J5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcG9zdC5jYXRlZ29yeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocG9zdC5kYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdC5kYXRlIHwgZGF0ZTogJ2RkL01NL3l5eXknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHBvc3QudGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImNzX3Bvc3RfdGl0bGUgdGl0bGUxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3QucG9zdFVybD8ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicG9zdC5wb3N0VXJsPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlua1R5cGVdPVwicG9zdC5wb3N0VXJsPy5saW5rVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGl0bGUtLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHBvc3QudGl0bGUgfX08L2FcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocG9zdC5hZGRpdGlvbmFsMSB8fCBwb3N0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjc19zdWJ0aXRsZSB0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LmFkZGl0aW9uYWwxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBvc3QuYWRkaXRpb25hbDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcG9zdC5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwb3N0LmJ1dHRvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bnNfX2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24gb2YgcG9zdC5idXR0b25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvZGQgPSAkb2RkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJidXR0b24udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJidXR0b24ubGlua1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bl9wcmltYXJ5OiAhb2RkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bl9jYWxsOiBvZGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+e3sgYnV0dG9uLmxhYmVsIH19PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhYnlsb24tYXJyb3ctcmlnaHQtYmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodG90YWwgPiAxICYmIGFudGVyaW9yICYmIHNpZ3VpZW50ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5hdiBjbGFzcz1cInBhZ2luYXRpb25fX2NvbnRyb2xzIGFsaWduLS1jZW50ZXIgbXQtLTIwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bnNfX2JveCBhbGlnbi0tY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bl9wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdlID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhbnRlcmlvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnt7IGFudGVyaW9yIH19PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0tMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHBhZ2UgfX0gLyB7eyB0b3RhbCB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bl9zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPT09IHRvdGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzaWd1aWVudGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj57eyBzaWd1aWVudGUgfX08L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIWZpbHRlcmVkUG9zdHMgfHwgZmlsdGVyZWRQb3N0cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Nfbm9fcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWddPVwiJ2gzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJ0aXRsZS0tc21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIm5vdGZvdW5kVGV4dCB8fCAnTm8gcmVzdWx0cyBmb3VuZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxhc2lkZSBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgPG5hdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNzX3NpZGViYXIgY3NfcmlnaHRfc2lkZWJhclwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2VhcmNoUGxhY2VIb2xkZXIgPz8gJ3NlYXJjaCdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1iYWJ5bG9uLXNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFBsYWNlSG9sZGVyXT1cInNlYXJjaFBsYWNlSG9sZGVyID8/ICdzZWFyY2guLi4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50c109XCJwb3N0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdWJ0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0ZWdvcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdHMpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1zZWFyY2g+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjc19zaWRlYmFyX2l0ZW0gd2lkZ2V0X2NhdGVnb3JpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2F0ZWdvcmllc1RpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFnXT1cInRhZ3M/LmNhdGVnb3JpZXNUaXRsZSB8fCAnaDQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJ0aXRsZS0tc21hbGwgbWItLTIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRleHRDb2xvcnM/LmNhdGVnb3JpZXNUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cImNhdGVnb3JpZXNUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjYXRlZ29yaWVzVG9SZW5kZXI/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzVG9SZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJjYXQtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhdGVnb3J5RmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNhdGVnb3J5LnRpdGxlIH19ICh7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkucG9zdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkudGl0bGU/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jYXRlZ29yeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRWxpbWluYXIgZmlsdHJvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbW92ZS1jYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYXRlZ29yeUZpbHRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiYWJ5bG9uLWNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNzX3NpZGViYXJfaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsYXRlc3RQb3N0c1RpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFnXT1cInRhZ3M/LmxhdGVzdFBvc3RzVGl0bGUgfHwgJ2g0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwidGl0bGUtLXNtYWxsIG1iLS0yMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJ0ZXh0Q29sb3JzPy5sYXRlc3RQb3N0c1RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwibGF0ZXN0UG9zdHNUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsYXRlc3RQb3N0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY3NfcmVjZW50X3Bvc3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHBvc3Qgb2YgbGF0ZXN0UG9zdHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjc19yZWNlbnRfcG9zdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0aXRsZS0tc21hbGxlciBtYi0tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdC5wb3N0VXJsPy5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicG9zdC5wb3N0VXJsPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdC5wb3N0VXJsPy5saW5rVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHBvc3QudGl0bGUgfX08L2FcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwb3N0LmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cInRleHQtLXNtYWxsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRNZWRpdW1EYXRlKHBvc3QuZGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9lbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
@@ -76,6 +76,9 @@ export class BabylonBookingWidgetComponent {
76
76
  new window.WidgetSearch(el, {});
77
77
  }
78
78
  this.injectMarketingParams(el);
79
+ el.addEventListener('click', () => {
80
+ this.injectMarketingParams(el);
81
+ }, true);
79
82
  }
80
83
  injectMarketingParams(element) {
81
84
  if (typeof window === 'undefined' ||
@@ -456,4 +459,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
456
459
  }], monthsToDisplay: [{
457
460
  type: Input
458
461
  }] } });
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYm9va2luZy13aWRnZXQvYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDOzs7QUFXdkIsSUFBSSxtQkFBbUIsR0FBeUIsSUFBSSxDQUFDO0FBRXJELFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDekIsSUFBSSxtQkFBbUI7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBRXBELG1CQUFtQixHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hELDJCQUEyQjtRQUMzQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFO1lBQ3RELE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUNiLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENB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aUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdyQyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUExBVEZPUk1fSUQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFieWxvbldpZGdldFNlYXJjaExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYWJ5bG9uLXdpZGdldC1zZWFyY2gtbG9hZGVyLnNlcnZpY2UnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIFdpZGdldFNlYXJjaDogYW55O1xuICAgICAgICBpbml0aWFsaXplV2lkZ2V0U2VhcmNoPzogKCkgPT4gdm9pZDtcbiAgICAgICAgZ2V0V2lkZ2V0SW5zdGFuY2U/OiAoaWQ6IHN0cmluZykgPT4gYW55O1xuICAgIH1cbn1cblxubGV0IHdpZGdldFNjcmlwdFByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gbG9hZE9uY2Uoc3JjOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAod2lkZ2V0U2NyaXB0UHJvbWlzZSkgcmV0dXJuIHdpZGdldFNjcmlwdFByb21pc2U7XG5cbiAgICB3aWRnZXRTY3JpcHRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBTaSB5YSBleGlzdGUsIHJlc29sdmVtb3NcbiAgICAgICAgaWYgKHdpbmRvdy5XaWRnZXRTZWFyY2ggfHwgd2luZG93LmluaXRpYWxpemVXaWRnZXRTZWFyY2gpIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgcy5zcmMgPSBzcmM7XG4gICAgICAgIHMuYXN5bmMgPSB0cnVlO1xuICAgICAgICBzLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgICAgcy5vbmVycm9yID0gKCkgPT5cbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ05vIHNlIHB1ZG8gY2FyZ2FyIGVsIHNjcmlwdCBkZWwgd2lkZ2V0JykpO1xuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdpZGdldFNjcmlwdFByb21pc2U7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWJhYnlsb24tYm9va2luZy13aWRnZXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgI3dpZGdldENvbnRhaW5lclxuICAgICAgICAgICAgW2lkXT1cIndpZGdldElkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYm9vay1pZF09XCJob3RlbElkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaG90ZWxdPVwidGlja2VyXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZW5naW5lXT1cImVuZ2luZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY3VycmVuY3ldPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1sb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbGF5b3V0XT1cImxheW91dFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWxheW91dC1jb2x1bW5dPVwibGF5b3V0Q29sdW1uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZGVmYXVsdC1hZHVsdHNdPVwiZGVmYXVsdEFkdWx0c1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlZmF1bHQtanVuaW9yXT1cImRlZmF1bHRKdW5pb3JcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWZhdWx0LWNoaWxkcmVuXT1cImRlZmF1bHRDaGlsZHJlblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJpY2VdPVwic2hvd1ByaWNlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1ob3RlbC1zZWxlY3Rvcl09XCJzaG93SG90ZWxTZWxlY3RvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJvbW8tY29kZV09XCJzaG93UHJvbW9Db2RlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1jaGlsZC1hZ2VzXT1cInNob3dDaGlsZEFnZXNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1tYXgtY2hpbGRyZW5dPVwibWF4Q2hpbGRyZW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1tYXgtanVuaW9yXT1cIm1heEp1bmlvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJhc2UtdXJsXT1cImJhc2VVcmxcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS11cmwtY2hhaW5dPVwidXJsQ2hhaW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS11cmwtaG90ZWxdPVwidXJsSG90ZWxcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1idXR0b24tdGV4dF09XCJidXR0b25UZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LXJvb21zXT1cIm1heFJvb21zXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1hbGwtaG90ZWxzLW9wdGlvbl09XCJzaG93QWxsSG90ZWxzT3B0aW9uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGFyZ2V0LWJsYW5rXT1cInRhcmdldEJsYW5rXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaG90ZWwtdGV4dF09XCJob3RlbFRleHRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1taW4tZGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LWRhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRpc3BsYXktbW9udGhzXT1cIm1vbnRoc1RvRGlzcGxheVwiXG4gICAgICAgID48L2Rpdj5cbiAgICBgLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uQm9va2luZ1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnd2lkZ2V0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICB3aWRnZXRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBJbnB1dCgpIHdpZGdldElkID0gJ3dpZGdldC1zZWFyY2gnO1xuICAgIEBJbnB1dCgpIGhvdGVsSWQgPSAnYWxlY2FkJztcbiAgICBASW5wdXQoKSB0aWNrZXIgPSAnaG90ZWxtYXJpc3RlbC5jb20nO1xuICAgIEBJbnB1dCgpIHR5cGU6ICdjaGFpbicgfCAnaG90ZWwnIHwgc3RyaW5nID0gJ2NoYWluJztcbiAgICBASW5wdXQoKSBlbmdpbmU6ICd3aXRib29raW5nJyB8ICdyb2liYWNrJyB8IHN0cmluZyA9ICd3aXRib29raW5nJztcbiAgICBASW5wdXQoKSB0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyB8IHN0cmluZyA9ICdsaWdodCc7XG4gICAgQElucHV0KCkgY3VycmVuY3kgPSAnRVVSJztcbiAgICBASW5wdXQoKSBsb2NhbGU/OiBzdHJpbmcgPSAnZXMtRVMnO1xuICAgIEBJbnB1dCgpIGxheW91dDogJ2lubGluZScgfCAnY29sdW1uJyB8IHN0cmluZyA9ICdpbmxpbmUnO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRBZHVsdHMgPSAyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRDaGlsZHJlbiA9IDA7XG4gICAgQElucHV0KCkgZGVmYXVsdEp1bmlvciA9IDA7XG4gICAgQElucHV0KCkgc2hvd1ByaWNlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0hvdGVsU2VsZWN0b3IgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dQcm9tb0NvZGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dDaGlsZEFnZXMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIG1heENoaWxkcmVuPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heEp1bmlvcj86IG51bWJlcjtcbiAgICBASW5wdXQoKSBiYXNlVXJsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybENoYWluPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybEhvdGVsID0gJ2hvdGVsJztcbiAgICBASW5wdXQoKSBidXR0b25UZXh0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxheW91dENvbHVtbj86IHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhSb29tcz86IHN0cmluZztcbiAgICBASW5wdXQoKSBzaG93QWxsSG90ZWxzT3B0aW9uPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRhcmdldEJsYW5rPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3RlbFRleHQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4RGF0ZT86IHN0cmluZzsgLyogMjAyOC0wMS0wMSAqL1xuICAgIEBJbnB1dCgpIG1pbkRhdGU/OiBzdHJpbmc7IC8qIDIwMjgtMDEtMDEgKi9cblxuICAgIEBJbnB1dCgpIGZsYWdUaW1lPzogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgbW9udGhzVG9EaXNwbGF5PzogbnVtYmVyID0gMTtcblxuICAgIHByaXZhdGUgbW91bnRlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBwZW5kaW5nVGlja2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHJldHJ5VGltZW91dDogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0LFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBsb2FkZXI6IEJhYnlsb25XaWRnZXRTZWFyY2hMb2FkZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vV2FpdCBmb3IgaW5wdXRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3VudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKsh++4jyBQT04gQVFVw40gbGEgVVJMIHJlYWwgZGVsIHNjcmlwdCBkZSBXaXRib29raW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRlci5sb2FkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW91bnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLmZsYWdUaW1lID8gMzAwIDogMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW91bnRlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy53aWRnZXRDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBPcGNpw7NuIEEgKHNpIGV4aXN0ZSk6IGluaXQgZ2xvYmFsIG1hbnVhbFxuICAgICAgICBpZiAod2luZG93LmluaXRpYWxpemVXaWRnZXRTZWFyY2gpIHtcbiAgICAgICAgICAgIHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3BjacOzbiBCOiBjb25zdHJ1Y3RvciAoU29sbyBlbnRyYSBzaSBubyBleGlzdGUgbGEgQSlcbiAgICAgICAgZWxzZSBpZiAod2luZG93LldpZGdldFNlYXJjaCkge1xuICAgICAgICAgICAgbmV3IHdpbmRvdy5XaWRnZXRTZWFyY2goZWwsIHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5qZWN0TWFya2V0aW5nUGFyYW1zKGVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluamVjdE1hcmtldGluZ1BhcmFtcyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAgICAgdHlwZW9mIHNlc3Npb25TdG9yYWdlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gRGljY2lvbmFyaW9zIGVzdMOhbmRhcltjaXRlOiAyM11cbiAgICAgICAgY29uc3QgQ0xJQ0tfSURTID0gW1xuICAgICAgICAgICAgJ2djbGlkJyxcbiAgICAgICAgICAgICdnYnJhaWQnLFxuICAgICAgICAgICAgJ3dicmFpZCcsXG4gICAgICAgICAgICAnZGNsaWQnLFxuICAgICAgICAgICAgJ21zY2xraWQnLFxuICAgICAgICAgICAgJ3ZtY2lkJyxcbiAgICAgICAgICAgICd5Y2xpZCcsXG4gICAgICAgICAgICAneW1jbGlkJyxcbiAgICAgICAgICAgICdmYmNsaWQnLFxuICAgICAgICAgICAgJ3R0Y2xpZCcsXG4gICAgICAgICAgICAnbGlfZmF0X2lkJyxcbiAgICAgICAgICAgICd0d2NsaWQnLFxuICAgICAgICAgICAgJ2VwaWsnLFxuICAgICAgICAgICAgJ3JkdF9jaWQnLFxuICAgICAgICAgICAgJ1NjQ2lkJyxcbiAgICAgICAgICAgICdxY2xpZCcsXG4gICAgICAgICAgICAnc2knLFxuICAgICAgICAgICAgJ2F3Y2xpZCcsXG4gICAgICAgICAgICAndGJsY2knLFxuICAgICAgICAgICAgJ2RpY2JvJyxcbiAgICAgICAgICAgICdhZF9pZCcsXG4gICAgICAgICAgICAnaXJjbGlja2lkJyxcbiAgICAgICAgICAgICdjamV2ZW50JyxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgVVRNUyA9IFtcbiAgICAgICAgICAgICd1dG1fc291cmNlJyxcbiAgICAgICAgICAgICd1dG1fbWVkaXVtJyxcbiAgICAgICAgICAgICd1dG1fY2FtcGFpZ24nLFxuICAgICAgICAgICAgJ3V0bV90ZXJtJyxcbiAgICAgICAgICAgICd1dG1fY29udGVudCcsXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgbWFya2V0aW5nRGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgICAgIC8vIC0tLSBDQVBBIDE6IFVSTCAtLS1cbiAgICAgICAgWy4uLkNMSUNLX0lEUywgLi4uVVRNUywgJ29yaWdpbiddLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyYW1zLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHZhbCkgbWFya2V0aW5nRGF0YVtrZXldID0gdmFsO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAtLS0gQ0FQQSAyOiBDT09LSUVTIC0tLVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRDb29raWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2goXG4gICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoJyhefCApJyArIG5hbWUgKyAnPShbXjtdKyknKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzJdKSA6IG51bGw7IC8vIGRlY29kZVVSSUNvbXBvbmVudCBwb3Igc2kgdmllbmUgY29uIGNhcmFjdGVyZXMgcmFyb3NcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIDEuIEdvb2dsZSBBZHMgbmF0aXZvIChfZ2NsX2F3KVxuICAgICAgICAgICAgY29uc3QgZ2NsQXcgPSBnZXRDb29raWUoJ19nY2xfYXcnKTtcbiAgICAgICAgICAgIGlmIChnY2xBdyAmJiBnY2xBdy5zcGxpdCgnLicpLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZ2NsaWQnXSA9IGdjbEF3LnNwbGl0KCcuJylbMl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDIuIFNhbHZhdmlkYXM6IENvb2tpZSBwZXJzb25hbGl6YWRhIGRlIHZ1ZXN0cm8gZW50b3JubyAoZ2NsaWRfaW5mbylcbiAgICAgICAgICAgIGlmICghbWFya2V0aW5nRGF0YVsnZ2NsaWQnXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdjbGlkSW5mbyA9IGdldENvb2tpZSgnZ2NsaWRfaW5mbycpO1xuICAgICAgICAgICAgICAgIGlmIChnY2xpZEluZm8pIG1hcmtldGluZ0RhdGFbJ2djbGlkJ10gPSBnY2xpZEluZm87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDMuIERvdWJsZUNsaWNrIC8gR29vZ2xlIERpc3BsYXkgbmF0aXZvIChfZ2NsX2RjKVxuICAgICAgICAgICAgY29uc3QgZ2NsRGMgPSBnZXRDb29raWUoJ19nY2xfZGMnKTtcbiAgICAgICAgICAgIGlmIChnY2xEYyAmJiBnY2xEYy5zcGxpdCgnLicpLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZGNsaWQnXSA9IGdjbERjLnNwbGl0KCcuJylbMl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDQuIE1ldGEgQWRzIChfZmJwKVxuICAgICAgICAgICAgY29uc3QgZmJwID0gZ2V0Q29va2llKCdfZmJwJyk7XG4gICAgICAgICAgICBpZiAoZmJwKSBtYXJrZXRpbmdEYXRhWydmYmNsaWQnXSA9IGZicDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSBDQVBBIDM6IERBVEFMQVlFUiAtLS1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAod2luZG93IGFzIGFueSkuZGF0YUxheWVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZGwgPSAod2luZG93IGFzIGFueSkuZGF0YUxheWVyIGFzIGFueVtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGRsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRsW2ldO1xuICAgICAgICAgICAgICAgIFsuLi5DTElDS19JRFMsIC4uLlVUTVMsICd0cmFmZmljX3NvdXJjZScsICdvcmlnaW4nXS5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVtrZXldICYmICFtYXJrZXRpbmdEYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbEtleSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PT0gJ3RyYWZmaWNfc291cmNlJyA/ICdvcmlnaW4nIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbZmluYWxLZXldID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID4gMCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gQ0FQQSA0OiBSRUZFUkVOVEUgRVhURVJOTyAoVFLDgUZJQ08gT1JHw4FOSUNPIE5VRVZPKSAtLS1cbiAgICAgICAgLy8gU29sbyBldmFsdWFtb3MgZWwgcmVmZXJyZXIgc2kgbGEgVVJMLCBDb29raWVzIHkgR1RNIHZlbsOtYW4gbGltcGlvc1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCByZWZlcnJlciA9IGRvY3VtZW50LnJlZmVycmVyXG4gICAgICAgICAgICAgICAgPyBkb2N1bWVudC5yZWZlcnJlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFNpIGhheSByZWZlcmVudGUgeSBOTyBpbmNsdXllIG51ZXN0cm8gcHJvcGlvIGRvbWluaW8sIGVzIHVuYSBWSVNJVEEgTlVFVkEgRVhURVJOQVxuICAgICAgICAgICAgaWYgKHJlZmVycmVyICYmICFyZWZlcnJlci5pbmNsdWRlcyhjdXJyZW50SG9zdCkpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2dvb2dsZS4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnZ29vZ2xlX29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVycmVyLmluY2x1ZGVzKCdiaW5nLicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdiaW5nX29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVycmVyLmluY2x1ZGVzKCd5YWhvby4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAneWFob29fb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2R1Y2tkdWNrZ28uJykpXG4gICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ2R1Y2tkdWNrZ29fb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ3lhbmRleC4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAneWFuZGV4X29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVycmVyLmluY2x1ZGVzKCdiYWlkdS4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnYmFpZHVfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2Vjb3NpYS4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnZWNvc2lhX29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVycmVyLmluY2x1ZGVzKCdxd2FudC4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAncXdhbnRfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2Fzay4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnYXNrX29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVycmVyLmluY2x1ZGVzKCduYXZlci4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnbmF2ZXJfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdyZWZlcnJhbF9vdGhlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gQ0FQQSA1OiBSRUNVUEVSQVIgREUgU0VTScOTTiAoTmF2ZWdhY2nDs24gaW50ZXJuYSBlbiB0dSB3ZWIpIC0tLVxuICAgICAgICAvLyBTaSBzZWd1aW1vcyBzaW4gZGF0b3MgKFVSTCBsaW1waWEgeSBlbCByZWZlcmVudGUgZXMgaW50ZXJubyBvIHZhY8OtbyksIHJlY3Vycmltb3MgYSBsYSBzZXNpw7NuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhtYXJrZXRpbmdEYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZEtleXMgPSBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSkuZmlsdGVyKChrKSA9PlxuICAgICAgICAgICAgICAgIGsuc3RhcnRzV2l0aCgnbWt0XycpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3RvcmVkS2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxLZXkgPSBrLnJlcGxhY2UoJ21rdF8nLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsKSBtYXJrZXRpbmdEYXRhW29yaWdpbmFsS2V5XSA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIDYuIE1BUEVPIEZJTkFMIFkgVkFMT1IgUE9SIERFRkVDVE8gLS0tXG4gICAgICAgIGlmICghbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10pIHtcbiAgICAgICAgICAgIGlmIChtYXJrZXRpbmdEYXRhWyd1dG1fc291cmNlJ10pIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9XG4gICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ3V0bV9zb3VyY2UnXSArXG4gICAgICAgICAgICAgICAgICAgIChtYXJrZXRpbmdEYXRhWyd1dG1fbWVkaXVtJ11cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYF8ke21hcmtldGluZ0RhdGFbJ3V0bV9tZWRpdW0nXX1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZ2NsaWQnXSB8fFxuICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ3dicmFpZCddIHx8XG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZ2JyYWlkJ10gfHxcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydkY2xpZCddXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdnb29nbGVfY3BjJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFya2V0aW5nRGF0YVsnZmJjbGlkJ10pIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdtZXRhX2Fkcyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtldGluZ0RhdGFbJ3R0Y2xpZCddKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAndGlrdG9rX2Fkcyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRyw6FmaWNvIGRpcmVjdG8gcHVybzogU2luIFVSTCwgc2luIHJlZmVycmVyIGV4dGVybm8sIHNpbiBzZXNpw7NuIHByZXZpYVxuICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ3dlYic7IC8vIFZhbG9yIHBvciBkZWZlY3RvIHBhcmEgV2l0Ym9va2luZ1tjaXRlOiAyMF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSA3LiBQVVJHQVIgWSBHVUFSREFSIEVOIFNFU0nDk04gUEFSQSBGVVRVUkEgTkFWRUdBQ0nDk04gLS0tXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBCb3JyYW1vcyBsYSBzZXNpw7NuIGFudGVyaW9yIHBhcmEgZXZpdGFyIG1lemNsYXIgZGF0b3Mgc2kgZWwgdXN1YXJpbyBlbnRyYSBwb3IgdW5hIGNhbXBhw7FhIGRpZmVyZW50ZVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc2Vzc2lvblN0b3JhZ2UpLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoay5zdGFydHNXaXRoKCdta3RfJykpIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEd1YXJkYW1vcyBsYSBzZXNpw7NuIGxpbXBpYSB5IGZyZXNjYVxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMobWFya2V0aW5nRGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgbWt0XyR7a2V5fWAsIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgICAgICAvLyAtLS0gRU5Ww41PIEFMIFdJREdFVCAtLS1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnd2lkZ2V0VXBkYXRlUGFyYW1zJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogbWFya2V0aW5nRGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfinIUgTWFya2V0aW5nIEVudmlhZG86JywgbWFya2V0aW5nRGF0YSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1sndGlja2VyJ10pIHtcbiAgICAgICAgICAgIC8vIEd1YXJkYW1vcyBzaWVtcHJlIGVsIMOaTFRJTU8gdmFsb3IgcXVlIEFuZ3VsYXIgbm9zIG1hbmRlXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdUaWNrZXIgPSBjaGFuZ2VzWyd0aWNrZXInXS5jdXJyZW50VmFsdWUgfHwgJ2FsbC1ob3RlbHMnO1xuXG4gICAgICAgICAgICAvLyBEaXNwYXJhbW9zIGxhIGFjdHVhbGl6YWNpw7NuXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJXaWRnZXRVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZXRyeVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJXaWRnZXRVcGRhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yZXRyeVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLndpZGdldENvbnRhaW5lclxuICAgICAgICAgICAgICAgID8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyRWwpIHJldHVybjtcblxuICAgICAgICAgICAgLy8gMS4gRXNwZXJhbW9zIGEgcXVlIGVsIHdpZGdldCBoYXlhIGRlc2NhcmdhZG8geSBkaWJ1amFkbyBsb3MgaG90ZWxlcyBlbiBlbCBET01cbiAgICAgICAgICAgIGNvbnN0IGhvdGVsT3B0aW9ucyA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ob3RlbC1vcHRpb24nKTtcblxuICAgICAgICAgICAgaWYgKGhvdGVsT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VGlja2VyID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGlja2VyICYmIHRoaXMucGVuZGluZ1RpY2tlcj8udHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnBlbmRpbmdUaWNrZXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYWxsLWhvdGVscyc7XG5cbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uVG9DbGljazogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIDIuIEJ1c2NhbW9zIGxhIG9wY2nDs24gZGUgaG90ZWwgcmVhbCBxdWUgY29pbmNpZGEgY29uIGVsIHRpY2tlclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG90ZWxPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IGhvdGVsT3B0aW9uc1tpXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0SWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmdldEF0dHJpYnV0ZSgnZGF0YS1ob3RlbC1pZCcpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENvaW5jaWRlbmNpYSBleGFjdGEgbyBwYXJjaWFsIChwb3Igc2kgZWwgd2lkZ2V0IGxlIGHDsWFkZSBzdWZpam9zIGFsIElEKVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRJZCA9PT0gdGFyZ2V0VGlja2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRJZC5pbmNsdWRlcyh0YXJnZXRUaWNrZXIpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVG9DbGljayA9IG9wdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvblRvQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uVG9DbGljay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQcO6biBubyBzZSBoYW4gZGlidWphZG8gbGFzIG9wY2lvbmVzLCBlbCBtb3RvciBzaWd1ZSBjYXJnYW5kby4uLlxuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy50cmlnZ2VyV2lkZ2V0VXBkYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIDMwMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYm9va2luZy13aWRnZXQvYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDOzs7QUFXdkIsSUFBSSxtQkFBbUIsR0FBeUIsSUFBSSxDQUFDO0FBRXJELFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDekIsSUFBSSxtQkFBbUI7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBRXBELG1CQUFtQixHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hELDJCQUEyQjtRQUMzQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFO1lBQ3RELE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUNiLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENB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Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUExBVEZPUk1fSUQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFieWxvbldpZGdldFNlYXJjaExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYWJ5bG9uLXdpZGdldC1zZWFyY2gtbG9hZGVyLnNlcnZpY2UnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIFdpZGdldFNlYXJjaDogYW55O1xuICAgICAgICBpbml0aWFsaXplV2lkZ2V0U2VhcmNoPzogKCkgPT4gdm9pZDtcbiAgICAgICAgZ2V0V2lkZ2V0SW5zdGFuY2U/OiAoaWQ6IHN0cmluZykgPT4gYW55O1xuICAgIH1cbn1cblxubGV0IHdpZGdldFNjcmlwdFByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gbG9hZE9uY2Uoc3JjOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAod2lkZ2V0U2NyaXB0UHJvbWlzZSkgcmV0dXJuIHdpZGdldFNjcmlwdFByb21pc2U7XG5cbiAgICB3aWRnZXRTY3JpcHRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBTaSB5YSBleGlzdGUsIHJlc29sdmVtb3NcbiAgICAgICAgaWYgKHdpbmRvdy5XaWRnZXRTZWFyY2ggfHwgd2luZG93LmluaXRpYWxpemVXaWRnZXRTZWFyY2gpIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgcy5zcmMgPSBzcmM7XG4gICAgICAgIHMuYXN5bmMgPSB0cnVlO1xuICAgICAgICBzLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgICAgcy5vbmVycm9yID0gKCkgPT5cbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ05vIHNlIHB1ZG8gY2FyZ2FyIGVsIHNjcmlwdCBkZWwgd2lkZ2V0JykpO1xuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdpZGdldFNjcmlwdFByb21pc2U7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWJhYnlsb24tYm9va2luZy13aWRnZXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgI3dpZGdldENvbnRhaW5lclxuICAgICAgICAgICAgW2lkXT1cIndpZGdldElkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYm9vay1pZF09XCJob3RlbElkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaG90ZWxdPVwidGlja2VyXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZW5naW5lXT1cImVuZ2luZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY3VycmVuY3ldPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1sb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbGF5b3V0XT1cImxheW91dFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWxheW91dC1jb2x1bW5dPVwibGF5b3V0Q29sdW1uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZGVmYXVsdC1hZHVsdHNdPVwiZGVmYXVsdEFkdWx0c1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlZmF1bHQtanVuaW9yXT1cImRlZmF1bHRKdW5pb3JcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWZhdWx0LWNoaWxkcmVuXT1cImRlZmF1bHRDaGlsZHJlblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJpY2VdPVwic2hvd1ByaWNlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1ob3RlbC1zZWxlY3Rvcl09XCJzaG93SG90ZWxTZWxlY3RvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctcHJvbW8tY29kZV09XCJzaG93UHJvbW9Db2RlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1jaGlsZC1hZ2VzXT1cInNob3dDaGlsZEFnZXNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1tYXgtY2hpbGRyZW5dPVwibWF4Q2hpbGRyZW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1tYXgtanVuaW9yXT1cIm1heEp1bmlvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJhc2UtdXJsXT1cImJhc2VVcmxcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS11cmwtY2hhaW5dPVwidXJsQ2hhaW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS11cmwtaG90ZWxdPVwidXJsSG90ZWxcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1idXR0b24tdGV4dF09XCJidXR0b25UZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LXJvb21zXT1cIm1heFJvb21zXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtc2hvdy1hbGwtaG90ZWxzLW9wdGlvbl09XCJzaG93QWxsSG90ZWxzT3B0aW9uXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGFyZ2V0LWJsYW5rXT1cInRhcmdldEJsYW5rXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaG90ZWwtdGV4dF09XCJob3RlbFRleHRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1taW4tZGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LWRhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRpc3BsYXktbW9udGhzXT1cIm1vbnRoc1RvRGlzcGxheVwiXG4gICAgICAgID48L2Rpdj5cbiAgICBgLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uQm9va2luZ1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnd2lkZ2V0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICB3aWRnZXRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBJbnB1dCgpIHdpZGdldElkID0gJ3dpZGdldC1zZWFyY2gnO1xuICAgIEBJbnB1dCgpIGhvdGVsSWQgPSAnYWxlY2FkJztcbiAgICBASW5wdXQoKSB0aWNrZXIgPSAnaG90ZWxtYXJpc3RlbC5jb20nO1xuICAgIEBJbnB1dCgpIHR5cGU6ICdjaGFpbicgfCAnaG90ZWwnIHwgc3RyaW5nID0gJ2NoYWluJztcbiAgICBASW5wdXQoKSBlbmdpbmU6ICd3aXRib29raW5nJyB8ICdyb2liYWNrJyB8IHN0cmluZyA9ICd3aXRib29raW5nJztcbiAgICBASW5wdXQoKSB0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyB8IHN0cmluZyA9ICdsaWdodCc7XG4gICAgQElucHV0KCkgY3VycmVuY3kgPSAnRVVSJztcbiAgICBASW5wdXQoKSBsb2NhbGU/OiBzdHJpbmcgPSAnZXMtRVMnO1xuICAgIEBJbnB1dCgpIGxheW91dDogJ2lubGluZScgfCAnY29sdW1uJyB8IHN0cmluZyA9ICdpbmxpbmUnO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRBZHVsdHMgPSAyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRDaGlsZHJlbiA9IDA7XG4gICAgQElucHV0KCkgZGVmYXVsdEp1bmlvciA9IDA7XG4gICAgQElucHV0KCkgc2hvd1ByaWNlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0hvdGVsU2VsZWN0b3IgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dQcm9tb0NvZGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dDaGlsZEFnZXMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIG1heENoaWxkcmVuPzogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heEp1bmlvcj86IG51bWJlcjtcbiAgICBASW5wdXQoKSBiYXNlVXJsPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybENoYWluPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHVybEhvdGVsID0gJ2hvdGVsJztcbiAgICBASW5wdXQoKSBidXR0b25UZXh0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxheW91dENvbHVtbj86IHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhSb29tcz86IHN0cmluZztcbiAgICBASW5wdXQoKSBzaG93QWxsSG90ZWxzT3B0aW9uPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRhcmdldEJsYW5rPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3RlbFRleHQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4RGF0ZT86IHN0cmluZzsgLyogMjAyOC0wMS0wMSAqL1xuICAgIEBJbnB1dCgpIG1pbkRhdGU/OiBzdHJpbmc7IC8qIDIwMjgtMDEtMDEgKi9cblxuICAgIEBJbnB1dCgpIGZsYWdUaW1lPzogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgbW9udGhzVG9EaXNwbGF5PzogbnVtYmVyID0gMTtcblxuICAgIHByaXZhdGUgbW91bnRlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBwZW5kaW5nVGlja2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHJldHJ5VGltZW91dDogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0LFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBsb2FkZXI6IEJhYnlsb25XaWRnZXRTZWFyY2hMb2FkZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vV2FpdCBmb3IgaW5wdXRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3VudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOKsh++4jyBQT04gQVFVw40gbGEgVVJMIHJlYWwgZGVsIHNjcmlwdCBkZSBXaXRib29raW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRlci5sb2FkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW91bnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLmZsYWdUaW1lID8gMzAwIDogMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW91bnRlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy53aWRnZXRDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBPcGNpw7NuIEEgKHNpIGV4aXN0ZSk6IGluaXQgZ2xvYmFsIG1hbnVhbFxuICAgICAgICBpZiAod2luZG93LmluaXRpYWxpemVXaWRnZXRTZWFyY2gpIHtcbiAgICAgICAgICAgIHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3BjacOzbiBCOiBjb25zdHJ1Y3RvciAoU29sbyBlbnRyYSBzaSBubyBleGlzdGUgbGEgQSlcbiAgICAgICAgZWxzZSBpZiAod2luZG93LldpZGdldFNlYXJjaCkge1xuICAgICAgICAgICAgbmV3IHdpbmRvdy5XaWRnZXRTZWFyY2goZWwsIHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5qZWN0TWFya2V0aW5nUGFyYW1zKGVsKTtcblxuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluamVjdE1hcmtldGluZ1BhcmFtcyhlbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5qZWN0TWFya2V0aW5nUGFyYW1zKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgICAgICB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgPT09ICd1bmRlZmluZWQnXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAvLyBEaWNjaW9uYXJpb3MgZXN0w6FuZGFyW2NpdGU6IDIzXVxuICAgICAgICBjb25zdCBDTElDS19JRFMgPSBbXG4gICAgICAgICAgICAnZ2NsaWQnLFxuICAgICAgICAgICAgJ2dicmFpZCcsXG4gICAgICAgICAgICAnd2JyYWlkJyxcbiAgICAgICAgICAgICdkY2xpZCcsXG4gICAgICAgICAgICAnbXNjbGtpZCcsXG4gICAgICAgICAgICAndm1jaWQnLFxuICAgICAgICAgICAgJ3ljbGlkJyxcbiAgICAgICAgICAgICd5bWNsaWQnLFxuICAgICAgICAgICAgJ2ZiY2xpZCcsXG4gICAgICAgICAgICAndHRjbGlkJyxcbiAgICAgICAgICAgICdsaV9mYXRfaWQnLFxuICAgICAgICAgICAgJ3R3Y2xpZCcsXG4gICAgICAgICAgICAnZXBpaycsXG4gICAgICAgICAgICAncmR0X2NpZCcsXG4gICAgICAgICAgICAnU2NDaWQnLFxuICAgICAgICAgICAgJ3FjbGlkJyxcbiAgICAgICAgICAgICdzaScsXG4gICAgICAgICAgICAnYXdjbGlkJyxcbiAgICAgICAgICAgICd0YmxjaScsXG4gICAgICAgICAgICAnZGljYm8nLFxuICAgICAgICAgICAgJ2FkX2lkJyxcbiAgICAgICAgICAgICdpcmNsaWNraWQnLFxuICAgICAgICAgICAgJ2NqZXZlbnQnLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBVVE1TID0gW1xuICAgICAgICAgICAgJ3V0bV9zb3VyY2UnLFxuICAgICAgICAgICAgJ3V0bV9tZWRpdW0nLFxuICAgICAgICAgICAgJ3V0bV9jYW1wYWlnbicsXG4gICAgICAgICAgICAndXRtX3Rlcm0nLFxuICAgICAgICAgICAgJ3V0bV9jb250ZW50JyxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBtYXJrZXRpbmdEYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cbiAgICAgICAgLy8gLS0tIENBUEEgMTogVVJMIC0tLVxuICAgICAgICBbLi4uQ0xJQ0tfSURTLCAuLi5VVE1TLCAnb3JpZ2luJ10uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwYXJhbXMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodmFsKSBtYXJrZXRpbmdEYXRhW2tleV0gPSB2YWw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIC0tLSBDQVBBIDI6IENPT0tJRVMgLS0tXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhtYXJrZXRpbmdEYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGdldENvb2tpZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCgnKF58ICknICsgbmFtZSArICc9KFteO10rKScpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMl0pIDogbnVsbDsgLy8gZGVjb2RlVVJJQ29tcG9uZW50IHBvciBzaSB2aWVuZSBjb24gY2FyYWN0ZXJlcyByYXJvc1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gMS4gR29vZ2xlIEFkcyBuYXRpdm8gKF9nY2xfYXcpXG4gICAgICAgICAgICBjb25zdCBnY2xBdyA9IGdldENvb2tpZSgnX2djbF9hdycpO1xuICAgICAgICAgICAgaWYgKGdjbEF3ICYmIGdjbEF3LnNwbGl0KCcuJykubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydnY2xpZCddID0gZ2NsQXcuc3BsaXQoJy4nKVsyXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gMi4gU2FsdmF2aWRhczogQ29va2llIHBlcnNvbmFsaXphZGEgZGUgdnVlc3RybyBlbnRvcm5vIChnY2xpZF9pbmZvKVxuICAgICAgICAgICAgaWYgKCFtYXJrZXRpbmdEYXRhWydnY2xpZCddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2NsaWRJbmZvID0gZ2V0Q29va2llKCdnY2xpZF9pbmZvJyk7XG4gICAgICAgICAgICAgICAgaWYgKGdjbGlkSW5mbykgbWFya2V0aW5nRGF0YVsnZ2NsaWQnXSA9IGdjbGlkSW5mbztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gMy4gRG91YmxlQ2xpY2sgLyBHb29nbGUgRGlzcGxheSBuYXRpdm8gKF9nY2xfZGMpXG4gICAgICAgICAgICBjb25zdCBnY2xEYyA9IGdldENvb2tpZSgnX2djbF9kYycpO1xuICAgICAgICAgICAgaWYgKGdjbERjICYmIGdjbERjLnNwbGl0KCcuJykubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydkY2xpZCddID0gZ2NsRGMuc3BsaXQoJy4nKVsyXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNC4gTWV0YSBBZHMgKF9mYnApXG4gICAgICAgICAgICBjb25zdCBmYnAgPSBnZXRDb29raWUoJ19mYnAnKTtcbiAgICAgICAgICAgIGlmIChmYnApIG1hcmtldGluZ0RhdGFbJ2ZiY2xpZCddID0gZmJwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIENBUEEgMzogREFUQUxBWUVSIC0tLVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtYXJrZXRpbmdEYXRhKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICh3aW5kb3cgYXMgYW55KS5kYXRhTGF5ZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBkbCA9ICh3aW5kb3cgYXMgYW55KS5kYXRhTGF5ZXIgYXMgYW55W107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGxbaV07XG4gICAgICAgICAgICAgICAgWy4uLkNMSUNLX0lEUywgLi4uVVRNUywgJ3RyYWZmaWNfc291cmNlJywgJ29yaWdpbiddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtW2tleV0gJiYgIW1hcmtldGluZ0RhdGFba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsS2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSAndHJhZmZpY19zb3VyY2UnID8gJ29yaWdpbicgOiBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVtmaW5hbEtleV0gPSBpdGVtW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhtYXJrZXRpbmdEYXRhKS5sZW5ndGggPiAwKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSBDQVBBIDQ6IFJFRkVSRU5URSBFWFRFUk5PIChUUsOBRklDTyBPUkfDgU5JQ08gTlVFVk8pIC0tLVxuICAgICAgICAvLyBTb2xvIGV2YWx1YW1vcyBlbCByZWZlcnJlciBzaSBsYSBVUkwsIENvb2tpZXMgeSBHVE0gdmVuw61hbiBsaW1waW9zXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhtYXJrZXRpbmdEYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVycmVyID0gZG9jdW1lbnQucmVmZXJyZXJcbiAgICAgICAgICAgICAgICA/IGRvY3VtZW50LnJlZmVycmVyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gU2kgaGF5IHJlZmVyZW50ZSB5IE5PIGluY2x1eWUgbnVlc3RybyBwcm9waW8gZG9taW5pbywgZXMgdW5hIFZJU0lUQSBOVUVWQSBFWFRFUk5BXG4gICAgICAgICAgICBpZiAocmVmZXJyZXIgJiYgIXJlZmVycmVyLmluY2x1ZGVzKGN1cnJlbnRIb3N0KSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWZlcnJlci5pbmNsdWRlcygnZ29vZ2xlLicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdnb29nbGVfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2JpbmcuJykpXG4gICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ2Jpbmdfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ3lhaG9vLicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICd5YWhvb19vcmdhbmljJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcnJlci5pbmNsdWRlcygnZHVja2R1Y2tnby4nKSlcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnZHVja2R1Y2tnb19vcmdhbmljJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcnJlci5pbmNsdWRlcygneWFuZGV4LicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICd5YW5kZXhfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2JhaWR1LicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdiYWlkdV9vcmdhbmljJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcnJlci5pbmNsdWRlcygnZWNvc2lhLicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdlY29zaWFfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ3F3YW50LicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdxd2FudF9vcmdhbmljJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcnJlci5pbmNsdWRlcygnYXNrLicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdhc2tfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ25hdmVyLicpKVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICduYXZlcl9vcmdhbmljJztcbiAgICAgICAgICAgICAgICBlbHNlIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ3JlZmVycmFsX290aGVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSBDQVBBIDU6IFJFQ1VQRVJBUiBERSBTRVNJw5NOIChOYXZlZ2FjacOzbiBpbnRlcm5hIGVuIHR1IHdlYikgLS0tXG4gICAgICAgIC8vIFNpIHNlZ3VpbW9zIHNpbiBkYXRvcyAoVVJMIGxpbXBpYSB5IGVsIHJlZmVyZW50ZSBlcyBpbnRlcm5vIG8gdmFjw61vKSwgcmVjdXJyaW1vcyBhIGxhIHNlc2nDs25cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcmtldGluZ0RhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVkS2V5cyA9IE9iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKS5maWx0ZXIoKGspID0+XG4gICAgICAgICAgICAgICAgay5zdGFydHNXaXRoKCdta3RfJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzdG9yZWRLZXlzLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbEtleSA9IGsucmVwbGFjZSgnbWt0XycsICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGspO1xuICAgICAgICAgICAgICAgIGlmICh2YWwpIG1hcmtldGluZ0RhdGFbb3JpZ2luYWxLZXldID0gdmFsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gNi4gTUFQRU8gRklOQUwgWSBWQUxPUiBQT1IgREVGRUNUTyAtLS1cbiAgICAgICAgaWYgKCFtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSkge1xuICAgICAgICAgICAgaWYgKG1hcmtldGluZ0RhdGFbJ3V0bV9zb3VyY2UnXSkge1xuICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID1cbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsndXRtX3NvdXJjZSddICtcbiAgICAgICAgICAgICAgICAgICAgKG1hcmtldGluZ0RhdGFbJ3V0bV9tZWRpdW0nXVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgXyR7bWFya2V0aW5nRGF0YVsndXRtX21lZGl1bSddfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydnY2xpZCddIHx8XG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnd2JyYWlkJ10gfHxcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydnYnJhaWQnXSB8fFxuICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ2RjbGlkJ11cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ2dvb2dsZV9jcGMnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXRpbmdEYXRhWydmYmNsaWQnXSkge1xuICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ21ldGFfYWRzJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFya2V0aW5nRGF0YVsndHRjbGlkJ10pIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICd0aWt0b2tfYWRzJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVHLDoWZpY28gZGlyZWN0byBwdXJvOiBTaW4gVVJMLCBzaW4gcmVmZXJyZXIgZXh0ZXJubywgc2luIHNlc2nDs24gcHJldmlhXG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnd2ViJzsgLy8gVmFsb3IgcG9yIGRlZmVjdG8gcGFyYSBXaXRib29raW5nW2NpdGU6IDIwXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0tIDcuIFBVUkdBUiBZIEdVQVJEQVIgRU4gU0VTScOTTiBQQVJBIEZVVFVSQSBOQVZFR0FDScOTTiAtLS1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEJvcnJhbW9zIGxhIHNlc2nDs24gYW50ZXJpb3IgcGFyYSBldml0YXIgbWV6Y2xhciBkYXRvcyBzaSBlbCB1c3VhcmlvIGVudHJhIHBvciB1bmEgY2FtcGHDsWEgZGlmZXJlbnRlXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSkuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ21rdF8nKSkgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gR3VhcmRhbW9zIGxhIHNlc2nDs24gbGltcGlhIHkgZnJlc2NhXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhtYXJrZXRpbmdEYXRhKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBta3RfJHtrZXl9YCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgICAgIC8vIC0tLSBFTlbDjU8gQUwgV0lER0VUIC0tLVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCd3aWRnZXRVcGRhdGVQYXJhbXMnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBtYXJrZXRpbmdEYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+KchSBNYXJrZXRpbmcgRW52aWFkbzonLCBtYXJrZXRpbmdEYXRhKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0aWNrZXInXSkge1xuICAgICAgICAgICAgLy8gR3VhcmRhbW9zIHNpZW1wcmUgZWwgw5pMVElNTyB2YWxvciBxdWUgQW5ndWxhciBub3MgbWFuZGVcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1RpY2tlciA9IGNoYW5nZXNbJ3RpY2tlciddLmN1cnJlbnRWYWx1ZSB8fCAnYWxsLWhvdGVscyc7XG5cbiAgICAgICAgICAgIC8vIERpc3BhcmFtb3MgbGEgYWN0dWFsaXphY2nDs25cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcldpZGdldFVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnJldHJ5VGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmV0cnlUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldpZGdldFVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnJldHJ5VGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmV0cnlUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMud2lkZ2V0Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXJFbCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyAxLiBFc3BlcmFtb3MgYSBxdWUgZWwgd2lkZ2V0IGhheWEgZGVzY2FyZ2FkbyB5IGRpYnVqYWRvIGxvcyBob3RlbGVzIGVuIGVsIERPTVxuICAgICAgICAgICAgY29uc3QgaG90ZWxPcHRpb25zID0gY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbCgnLmhvdGVsLW9wdGlvbicpO1xuXG4gICAgICAgICAgICBpZiAoaG90ZWxPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRUaWNrZXIgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdUaWNrZXIgJiYgdGhpcy5wZW5kaW5nVGlja2VyPy50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucGVuZGluZ1RpY2tlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdhbGwtaG90ZWxzJztcblxuICAgICAgICAgICAgICAgIGxldCBvcHRpb25Ub0NsaWNrOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgLy8gMi4gQnVzY2Ftb3MgbGEgb3BjacOzbiBkZSBob3RlbCByZWFsIHF1ZSBjb2luY2lkYSBjb24gZWwgdGlja2VyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBob3RlbE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0ID0gaG90ZWxPcHRpb25zW2ldIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHQuZ2V0QXR0cmlidXRlKCdkYXRhLWhvdGVsLWlkJyk/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ29pbmNpZGVuY2lhIGV4YWN0YSBvIHBhcmNpYWwgKHBvciBzaSBlbCB3aWRnZXQgbGUgYcOxYWRlIHN1Zmlqb3MgYWwgSUQpXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdElkID09PSB0YXJnZXRUaWNrZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdElkLmluY2x1ZGVzKHRhcmdldFRpY2tlcilcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ub0NsaWNrID0gb3B0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uVG9DbGljaykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25Ub0NsaWNrLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBw7puIG5vIHNlIGhhbiBkaWJ1amFkbyBsYXMgb3BjaW9uZXMsIGVsIG1vdG9yIHNpZ3VlIGNhcmdhbmRvLi4uXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnRyaWdnZXJXaWRnZXRVcGRhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgMzAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19