mis-crystal-design-system 18.1.4-test-4 → 18.1.4-test-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -403,6 +403,35 @@ export class TableComponent {
403
403
  if (this.rowCollapseConfigIndex() !== -1) {
404
404
  this.buildExpandedMap();
405
405
  }
406
+ // --- PAGINATION PAGE ARRAY LOGIC (MOVED/REPLACED initializePagination) ---
407
+ const len = config?.paginationConfig?.noOfPages;
408
+ const disablePageJumping = config?.paginationConfig?.disablePageJumping;
409
+ // Only run if pagination is configured and page jumping is enabled
410
+ if (len && len > 0 && !disablePageJumping) {
411
+ // Read the internal state of the selected page for calculating the pages array.
412
+ // Since this runs on every config change, we rely on the value set
413
+ // by updateSelectedPage().
414
+ const pageNumber = this.selectedPage();
415
+ if (len <= 7) {
416
+ const newPages = [];
417
+ for (let i = 1; i <= len; i++) {
418
+ newPages.push(i);
419
+ }
420
+ this.pages.set(newPages);
421
+ }
422
+ else {
423
+ if (pageNumber - 2 <= 1) {
424
+ this.pages.set([1, 2, 3, 4, 0, len]);
425
+ }
426
+ else if (pageNumber - 2 > 1 && pageNumber + 2 < len) {
427
+ this.pages.set([1, 0, pageNumber - 1, pageNumber, pageNumber + 1, 0, len]);
428
+ }
429
+ else if (pageNumber + 2 >= len) {
430
+ this.pages.set([1, 0, len - 3, len - 2, len - 1, len]);
431
+ }
432
+ }
433
+ }
434
+ // --- END PAGINATION PAGE ARRAY LOGIC ---
406
435
  if (config?.paginationConfig?.showPageSizeDropdown) {
407
436
  const options = this.pageSizeOptions();
408
437
  const rowsPerPage = this.tableConfig()?.paginationConfig?.rowsPerPage;
@@ -578,8 +607,8 @@ export class TableComponent {
578
607
  initializePagination() {
579
608
  if (this.tableConfig().paginationConfig) {
580
609
  // Initialize selectedPage from config if provided, otherwise default to 1
581
- const configSelectedPage = this.tableConfig().paginationConfig.selectedPage;
582
- this.selectedPage.set(configSelectedPage ?? 1);
610
+ // const configSelectedPage = this.tableConfig().paginationConfig.selectedPage;
611
+ // this.selectedPage.set(configSelectedPage ?? 1);
583
612
  let len = this.tableConfig().paginationConfig.noOfPages;
584
613
  if (len <= 7) {
585
614
  const newPages = [];
@@ -798,4 +827,4 @@ export class TableComponent {
798
827
  args: ["table"]
799
828
  }] }); })();
800
829
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TableComponent, { className: "TableComponent" }); })();
801
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFNVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFJVCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDWnJDLCtDQU1DO0lBSkMseU5BQWtCLG1DQUE0QixLQUFDO0lBSWhELGlCQUFtQjs7O0lBRGxCLEFBREEsZ0VBQTJDLG9DQUNmOzs7SUEwQnhCLDZCQUFrRztJQUNoRyxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSx5RkFDRjs7O0lBTUUsMkJBQXFGOzs7O0lBTHZGLGdDQUlDO0lBSEMsa05BQVMsMkNBQWlDLEVBQUUsc0NBQTRCLHdCQUFFLHdCQUF3QixLQUFDO0lBSW5HLCtFQUE4RTs7SUFDOUUsK0JBQStGO0lBQzdGLDJCQUtFO0lBRU4sQUFERSxpQkFBTSxFQUNEOzs7OztJQVRFLGNBQWtEO0lBQWxELG1IQUFrRDs7OztJQVUzRCxnQ0FJQztJQUhDLGdLQUFTLHVCQUFnQix3QkFBRSx3QkFBd0IsS0FBQztJQUlwRCxtQ0FBNkQ7SUFDL0QsaUJBQU87OztJQURTLGNBQStCO0lBQS9CLG9EQUErQjs7OztJQUUvQyxnQ0FNb0I7SUFEbEIsZ01BQWMsMkJBQW9CLEtBQUM7SUFFckMsaUJBQU87Ozs7SUFITCxBQURBLEFBREEsQUFEQSxxQ0FBb0Isb0NBQ1EseUNBQ0sseURBQ2dCOzs7O0lBSXJELHdGQUFz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QixDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLGdCQUFnQixJQUFJLGFBQWEsQ0FBQztJQUM1RSxDQUFDOytHQXhiVSxjQUFjO29FQUFkLGNBQWM7Ozs7Ozs7Ozs7WUM1QjNCLDhCQU9DO1lBQ0MseUZBTUM7WUFNQyxBQUxGLGlDQUlDLGFBSUU7WUFDQyxnRUFjQztZQW9DSCxpQkFBTTtZQUVOLDhCQUF5QjtZQUN2QixpRUFBOEY7WUFvR2xHLEFBREUsaUJBQU0sRUFDRjtZQUNOLCtCQUF1QztZQUNyQyx5RUFBNEI7WUFzRWhDLEFBREUsaUJBQU0sRUFDRjs7O1lBeFBKLG1LQUlFO1lBTUMsY0FBa0I7WUFBbEIsdUNBQWtCO1lBT25CLGNBQWtKO1lBQWxKLG1KQUFrSjtZQUdsSixlQUFvQztZQUFwQyxzREFBb0M7WUFNVixjQUFpQztZQUFqQyxnR0FBaUM7WUFrRGhCLGVBQWdCO1lBQWhCLHlDQUFnQjtZQXNHM0QsZUFvRUM7WUFwRUQscURBb0VDOzs7aUZEM05RLGNBQWM7Y0FMMUIsU0FBUzsyQkFDRSxXQUFXOzBDQXNCQSxNQUFNO2tCQUExQixTQUFTO21CQUFDLFFBQVE7WUFDVyxVQUFVO2tCQUF2QyxZQUFZO21CQUFDLGNBQWM7WUFpQ1IsS0FBSztrQkFBeEIsU0FBUzttQkFBQyxPQUFPOztrRkFwRFAsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBjb21wdXRlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICB1bnRyYWNrZWRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZpbHRlciwgVGFibGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU29ydFN0YXRlIH0gZnJvbSBcIi4vc29ydC1pY29ucy5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEcm9wZG93bkl0ZW0gfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS9kcm9wZG93blwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLXRhYmxlXCIsXG4gIHRlbXBsYXRlVXJsOiBcInRhYmxlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1widGFibGUuY29tcG9uZW50LmNzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gSW5pdGlhbGl6ZSB3aXRoIC0xIHRvIGluZGljYXRlIG5vIHJvdyBpcyBjb2xvcmVkIGF0IHRoZSBiZWdpbm5pbmdcbiAgYWN0aXZlUm93SW5kZXggPSBzaWduYWw8bnVtYmVyW10+KFtdKTtcbiAgaGFzQ2hlY2tib3hBY3Rpb25zID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VsZWN0QWxsQ2hlY2tib3ggPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEZpbHRlciByZWxhdGVkIHZhcmlhYmxlc1xuICBzaG93RmlsdGVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgZmlsdGVyTmFtZSA9IHNpZ25hbDxzdHJpbmc+KFwiXCIpO1xuICBmaWx0ZXJEYXRhID0gc2lnbmFsPEFycmF5PEZpbHRlcj4+KFtdKTtcbiAgZmlsdGVyQ29udGFpbmVyU3R5bGVzID0gc2lnbmFsPGFueT4oe30pO1xuICBhcHBsaWVkRmlsdGVycyA9IHNpZ25hbDx7IFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+IH0+KHt9KTtcbiAgXG4gIC8vIENvbnZlcnQgb3V0cHV0cyB0byBzaWduYWwtYmFzZWQgb3V0cHV0c1xuICBmaWx0ZXJzVXBkYXRlZCA9IG91dHB1dDx7XG4gICAgW2tleTogc3RyaW5nXTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XG4gIH0+KCk7XG5cbiAgQFZpZXdDaGlsZChcImZpbHRlclwiKSBmaWx0ZXI6IFRhYmxlRmlsdGVyQ29tcG9uZW50IHwgYW55O1xuICBAVmlld0NoaWxkcmVuKFwiY29sSGVhZGVyUmVmXCIpIGNvbEhlYWRlcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPiB8IGFueTtcblxuICAvLyBQYWdpbmF0aW9uIHJlbGF0ZWQgdmFyaWFibGVzXG4gIHBhZ2VzID0gc2lnbmFsPEFycmF5PG51bWJlcj4+KFtdKTtcbiAgdGFibGVMZW5ndGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgc2VsZWN0ZWRQYWdlID0gc2lnbmFsPG51bWJlcj4oMSk7IC8vIEludGVybmFsIHN0YXRlIGZvciBzZWxlY3RlZCBwYWdlXG4gIHBhZ2VTZWxlY3RlZCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHBhZ2VTaXplQ2hhbmdlZCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHBhZ2VTaXplT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWc7XG4gICAgaWYgKCFjb25maWc/LnBhZ2VTaXplcyB8fCAhQXJyYXkuaXNBcnJheShjb25maWcucGFnZVNpemVzKSB8fCAhY29uZmlnLnBhZ2VTaXplcz8ubGVuZ3RoKSByZXR1cm4gW107XG4gIFxuICAgIHJldHVybiBjb25maWcucGFnZVNpemVzPy5tYXAob3B0aW9uID0+ICh7XG4gICAgICBsYWJlbDogb3B0aW9uPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgdmFsdWU6IG9wdGlvbj8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICB9KSkgfHwgW107XG4gIH0pO1xuXG4gIHNob3dQYWdlU2l6ZURyb3Bkb3duID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAhIXRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZz8uc2hvd1BhZ2VTaXplRHJvcGRvd247XG4gIH0pO1xuXG4gIHNlbGVjdGVkUGFnZVNpemVPcHRpb24gPSBzaWduYWw8RHJvcGRvd25JdGVtPih7IGxhYmVsOiBcIlwiLCB2YWx1ZTogXCJcIiB9KTtcblxuICAvLyBDb252ZXJ0IGlucHV0cyB0byBzaWduYWwtYmFzZWQgaW5wdXRzXG4gIHRhYmxlQ29uZmlnID0gaW5wdXQ8VGFibGVDb25maWc+KCk7XG4gIHN1YlRhYmxlY29uZmlnID0gaW5wdXQ8VGFibGVDb25maWc+KCk7XG4gIHRhYmxlRGF0YUxvYWRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICBleHBhbmRlZEluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICB0YWJsZURhdGEgPSBpbnB1dDxBcnJheTxBcnJheTxhbnk+Pj4oW10pO1xuICBzdWJUYWJsZURhdGEgPSBpbnB1dDxBcnJheTxBcnJheTxhbnk+Pj4oW10pO1xuICBzdWJUYWJsZURhdGFMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgY3VycmVudFNvcnQgPSBpbnB1dDx7Y29sdW1uOiBzdHJpbmcsIGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQycgfCAnJ30gfCBudWxsPigpO1xuICBAVmlld0NoaWxkKFwidGFibGVcIikgdGFibGU6IEVsZW1lbnRSZWYgfCBhbnk7XG4gIGNvbGxhcHNlQ29sSW5kZXggPSBzaWduYWw8bnVtYmVyPigtMSk7XG4gIHByZXZpZXdMaW5lcyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByb3dDb2xsYXBzZUNvbmZpZ0luZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICBleHBhbmRlZE1hcCA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pO1xuXG5cbiAgLy8gU29ydGluZyByZWxhdGVkIHByb3BlcnRpZXNcbiAgbXVsdGlDb2x1bW5Tb3J0ID0gc2lnbmFsPFNvcnRTdGF0ZVtdPihbXSk7XG4gIHNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydFN0YXRlPigpO1xuICBoZWFkZXJBY3Rpb24gPSBvdXRwdXQ8eyB0eXBlOiBzdHJpbmc7IHBheWxvYWQ/OiBhbnkgfT4oKTtcblxuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJsZUxlbmd0aC5zZXQodGhpcy50YWJsZURhdGEoKT8ubGVuZ3RoID8/IDApO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWN0aXZlUm93SW5kZXggIT09IG51bGwgJiYgY29uZmlnLmFjdGl2ZVJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVJvd0luZGV4ID0gY29uZmlnLmFjdGl2ZVJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoQXJyYXkuaXNBcnJheShhY3RpdmVSb3dJbmRleCkgPyBhY3RpdmVSb3dJbmRleCA6IFthY3RpdmVSb3dJbmRleF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpICE9PSAtMSkge1xuICAgICAgICAgICAgIHRoaXMuYnVpbGRFeHBhbmRlZE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZihjb25maWc/LnBhZ2luYXRpb25Db25maWc/LnNob3dQYWdlU2l6ZURyb3Bkb3duKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucGFnZVNpemVPcHRpb25zKCk7XG4gICAgICAgICAgY29uc3Qgcm93c1BlclBhZ2UgPSB0aGlzLnRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWc/LnJvd3NQZXJQYWdlO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zKSB8fCAhcm93c1BlclBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbi5zZXQoeyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQ/LnZhbHVlID09PSByb3dzUGVyUGFnZS50b1N0cmluZygpKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbi5zZXQoc2VsZWN0ZWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBJZiBjb25maWd1cmVkIHJvd3NQZXJQYWdlIGlzIG5vdCBhbW9uZyBvcHRpb25zLCBwaWNrIHRoZSBmbG9vciB2YWx1ZSBhbmQgbm90aWZ5IHBhcmVudFxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gTnVtYmVyKHJvd3NQZXJQYWdlKTtcbiAgICAgICAgICAgIC8vU29ydCB0aGUgb3B0aW9uc1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkID0gb3B0aW9uc1xuICAgICAgICAgICAgICAubWFwKG9wdCA9PiAoeyBvcHQsIG51bTogTnVtYmVyKG9wdD8udmFsdWUpIH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKCh7IG51bSB9KSA9PiBOdW1iZXIuaXNGaW5pdGUobnVtKSlcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubnVtIC0gYi5udW0pO1xuXG4gICAgICAgICAgICBsZXQgZmxvb3JPcHRpb24gPSBzb3J0ZWRbMF0/Lm9wdDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzb3J0ZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgaWYgKHNvcnRlZFtpXS5udW0gPD0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgZmxvb3JPcHRpb24gPSBzb3J0ZWRbaV0ub3B0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGNvbmZpZ3VyZWQgcm93c1BlclBhZ2Ugd2FzIG5vdCBtYXRjaGVkIHRvIGFueSBvZiB0aGUgcGFnZVNpemVzIHNlbnQgaW4gdGhlIHBhZ2luYXRpb25Db25maWcuIFNlbGVjdGluZyB0aGUgbmVhcmVzdCBmbG9vciB2YWx1ZSBhbW9uZyB0aGUgYXZhaWxhYmxlIHBhZ2VTaXplcy5cIik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZVNpemVPcHRpb24uc2V0KGZsb29yT3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZShmbG9vck9wdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBwYWdlIHNpemUgb3B0aW9ucyBhdmFpbGFibGUuXCIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICAgIC8vIFJlYWN0aXZlIGhlaWdodCBjYWxjdWxhdGlvbjogbWFpbnRhaW5zIGV4YWN0IG9sZCBiZWhhdmlvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIC8vIE9sZCBjb2RlOiBoZWlnaHQgLSA1NiArIFwicHhcIiAoZmxhd2VkIGZvciBwZXJjZW50YWdlcywgYnV0IHdlIG1haW50YWluIGl0KVxuICAgIC8vIE5vdGU6IEVmZmVjdCBtdXN0IGJlIGluIGNvbnN0cnVjdG9yLCBub3QgbGlmZWN5Y2xlIGhvb2tzIChORzAyMDMgZXJyb3Igb3RoZXJ3aXNlKVxuICAgIC8vIGVmZmVjdCgoKSA9PiB7XG4gICAgLy8gICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk7XG4gICAgLy8gICBpZiAoIWNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZyB8fCAhdGhpcy50YWJsZT8ubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgIFxuICAgIC8vICAgY29uc3QgaGVpZ2h0ID0gY29uZmlnLmhlaWdodDtcbiAgICAvLyAgIC8vIE9sZCBiZWhhdmlvcjogaGVpZ2h0IC0gNTYgKyBcInB4XCIgKG1haW50YWlucyB0aGUgZmxhdyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICAvLyAgIGNvbnN0IHJlc3VsdCA9IChoZWlnaHQgYXMgYW55KSAtIDU2O1xuICAgIC8vICAgY29uc3QgZmluYWxIZWlnaHQgPSByZXN1bHQgKyBcInB4XCI7XG4gICAgLy8gICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCwgXCJoZWlnaHRcIiwgZmluYWxIZWlnaHQpO1xuICAgIC8vIH0pO1xuICB9XG5cblxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgcm93IGNsaWNrXG4gIHNlbGVjdFJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaGFzQ2hlY2tib3hBY3Rpb25zKCkpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChbaW5kZXhdKTsgLy8gU2V0IHRoZSBzZWxlY3RlZCBpbmRleCB0byB0aGUgY2xpY2tlZCByb3cncyBpbmRleFxuICAgICEhdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24gJiYgdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24oaW5kZXgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNDaGVja2JveEFjdGlvbnMuc2V0KHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWc/LnNvbWUoY29sID0+IGNvbC50eXBlID09PSBcImFjdGlvbnNcIiAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gXCJjaGVja2JveFwiKSk7XG4gICAgdGhpcy50YWJsZUxlbmd0aC5zZXQoISF0aGlzLnRhYmxlRGF0YSgpID8gdGhpcy50YWJsZURhdGEoKS5sZW5ndGggOiAwKTtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJzKCk7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcikge1xuICAgICAgICBsZXQgaXNDaGVja0JveENsaWNrZWQgPSB0cnVlO1xuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNsYXNzTmFtZSA9PT0gXCJjaGVja21hcmtcIikge1xuICAgICAgICAgIGlzQ2hlY2tCb3hDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0NsaWNrSW5zaWRlRWxlbWVudCA9IHRoaXMuZmlsdGVyLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNDbGlja0luc2lkZUVsZW1lbnQgJiYgIWlzQ2hlY2tCb3hDbGlja2VkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVGaWx0ZXIodGhpcy5maWx0ZXJOYW1lKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmZXRjaCBjb2xsYXBzZUNvbEluZGV4IGFuZCBwcmV2aWV3TGluZXMgaWYgcHJlc2VudFxuICAgIHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpPy5jb2xDb25maWc/LmZpbmRJbmRleChcbiAgICAgIGNvbCA9PiBjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJ1xuICAgICkpO1xuICAgIGlmICh0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VDb2xJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1t0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKV0uY29sbGFwc2VDb2x1bW5JbmRleCA/PyBudWxsKTtcbiAgICAgIHRoaXMucHJldmlld0xpbmVzLnNldCh0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW3RoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpXS5wcmV2aWV3TGluZXMgPz8gbnVsbCk7XG4gICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICB9XG4gIH1cblxuICBidWlsZEV4cGFuZGVkTWFwKCk6IHZvaWR7XG4gICAgY29uc3QgbmV3RXhwYW5kZWRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgY29uc3QgY29sbGFwc2VJbmRleCA9IHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpO1xuICAgIFxuICAgIHRoaXMudGFibGVEYXRhKCkuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICBuZXdFeHBhbmRlZE1hcFtgJHtyb3dJbmRleH1gXSA9IHJvd1tjb2xsYXBzZUluZGV4XTtcbiAgICB9KTtcbiAgICB0aGlzLmV4cGFuZGVkTWFwLnNldChuZXdFeHBhbmRlZE1hcCk7XG59XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFZpZXdDaGlsZCBpcyBub3cgYXZhaWxhYmxlIC0gbWFudWFsbHkgdHJpZ2dlciBoZWlnaHQgY2FsY3VsYXRpb24gb25jZVxuICAgIC8vIFRoZSBlZmZlY3QgaW4gY29uc3RydWN0b3Igd2lsbCBoYW5kbGUgc3Vic2VxdWVudCBjb25maWcgY2hhbmdlc1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICBpZiAoY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnICYmIHRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNvbmZpZy5oZWlnaHQ7XG4gICAgICBjb25zdCByZXN1bHQgPSAoaGVpZ2h0IGFzIGFueSkgLSA1NjtcbiAgICAgIGNvbnN0IGZpbmFsSGVpZ2h0ID0gcmVzdWx0ICsgXCJweFwiO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQsIFwiaGVpZ2h0XCIsIGZpbmFsSGVpZ2h0KTtcbiAgICB9XG4gIH1cbiAgXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMudGFibGVMZW5ndGguc2V0KHRoaXMudGFibGVEYXRhKCk/Lmxlbmd0aCA/PyAwKTtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLmFjdGl2ZVJvd0luZGV4ICE9PSBudWxsICYmIHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBhY3RpdmVSb3dJbmRleCA9IHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleDtcbiAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KEFycmF5LmlzQXJyYXkoYWN0aXZlUm93SW5kZXgpID8gYWN0aXZlUm93SW5kZXggOiBbYWN0aXZlUm93SW5kZXhdKVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbHRlciByZWxhdGVkIGZ1bmN0aW9uc1xuICBpbml0aWFsaXplRmlsdGVycygpIHtcbiAgICBjb25zdCBuZXdBcHBsaWVkRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XG4gICAgY29uc3QgYWxsRmlsdGVyczogQXJyYXk8RmlsdGVyPiA9IFtdO1xuICAgIFxuICAgIGZvciAobGV0IGNvbEhlYWRlciBvZiB0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZykge1xuICAgICAgaWYgKGNvbEhlYWRlci5maWx0ZXJzKSB7XG4gICAgICAgIGxldCBmaWx0ZXJzID0gW107XG4gICAgICAgIGZvciAobGV0IGZpbHRlciBvZiBjb2xIZWFkZXIuZmlsdGVycykge1xuICAgICAgICAgIGlmIChmaWx0ZXIuY2hlY2tlZCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogZmlsdGVyLm5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBZGQgYWxsIGZpbHRlcnMgdG8gdGhlIGZpbHRlckRhdGEgYXJyYXlcbiAgICAgICAgICBhbGxGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSBuZXdBcHBsaWVkRmlsdGVyc1tjb2xIZWFkZXIuZGF0YV0gPSBmaWx0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzLnNldChuZXdBcHBsaWVkRmlsdGVycyk7XG4gICAgdGhpcy5maWx0ZXJEYXRhLnNldChhbGxGaWx0ZXJzKTtcbiB9XG4gIHRvZ2dsZUZpbHRlcihmaWx0ZXJOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0ZpbHRlcigpKSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUuc2V0KGZpbHRlck5hbWUpO1xuICAgICAgdGhpcy5zaG93RmlsdGVyLnNldCh0cnVlKTtcblxuICAgICAgbGV0IG9mZlNldCA9IDA7XG4gICAgICBsZXQgY29sSGVhZGVyc1JldmVyc2VkID0gdGhpcy5jb2xIZWFkZXJzLnRvQXJyYXkoKS5yZXZlcnNlKCk7XG5cbiAgICAgIGZvciAobGV0IGhlYWRlciBvZiBjb2xIZWFkZXJzUmV2ZXJzZWQpIHtcbiAgICAgICAgaWYgKGhlYWRlci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCA9PT0gZmlsdGVyTmFtZSkgYnJlYWs7XG4gICAgICAgIG9mZlNldCArPSBoZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyQ29udGFpbmVyU3R5bGVzLnNldCh7XG4gICAgICAgIHRvcDogXCI0NHB4XCIsXG4gICAgICAgIHJpZ2h0OiBvZmZTZXQgPiAwID8gb2ZmU2V0IC0gMTE2ICsgXCJweFwiIDogXCIxMnB4XCJcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUuc2V0KFwiXCIpO1xuICAgICAgdGhpcy5maWx0ZXJEYXRhLnNldChbXSk7XG4gICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlQXBwbGllZEZpbHRlcnMoYXBwbGllZEZpbHRlcnM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KSB7XG4gICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSB0aGlzLmFwcGxpZWRGaWx0ZXJzKCk7XG4gICAgaWYgKGFwcGxpZWRGaWx0ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBkZWxldGUgY3VycmVudEZpbHRlcnNbdGhpcy5maWx0ZXJOYW1lKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50RmlsdGVyc1t0aGlzLmZpbHRlck5hbWUoKV0gPSBhcHBsaWVkRmlsdGVycztcbiAgICB9XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycy5zZXQoeyAuLi5jdXJyZW50RmlsdGVycyB9KTtcbiAgICB0aGlzLmZpbHRlcnNVcGRhdGVkLmVtaXQoeyAuLi50aGlzLmFwcGxpZWRGaWx0ZXJzKCkgfSk7XG4gICAgdGhpcy50b2dnbGVGaWx0ZXIodGhpcy5maWx0ZXJOYW1lKCkpO1xuICB9XG5cbiAgLy8gUGFnaW5hdGlvbiByZWxhdGVkIGZ1bmN0aW9uc1xuICBpbml0aWFsaXplUGFnaW5hdGlvbigpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgc2VsZWN0ZWRQYWdlIGZyb20gY29uZmlnIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgZGVmYXVsdCB0byAxXG4gICAgICBjb25zdCBjb25maWdTZWxlY3RlZFBhZ2UgPSB0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5zZWxlY3RlZFBhZ2U7XG4gICAgICB0aGlzLnNlbGVjdGVkUGFnZS5zZXQoY29uZmlnU2VsZWN0ZWRQYWdlID8/IDEpO1xuICAgICAgXG4gICAgICBsZXQgbGVuID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzO1xuICAgICAgaWYgKGxlbiA8PSA3KSB7XG4gICAgICAgIGNvbnN0IG5ld1BhZ2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxlbjsgaSsrKSB7XG4gICAgICAgICAgbmV3UGFnZXMucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2VzLnNldChuZXdQYWdlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwZGF0ZVNlbGVjdGVkUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICAvLyBHdWFyZCBjbGF1c2UgdG8gcHJldmVudCBvdXQtb2YtcmFuZ2UgdXBkYXRlc1xuICAgIGlmIChwYWdlTnVtYmVyIDwgMSB8fCBwYWdlTnVtYmVyID4gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzKSByZXR1cm47XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgc2VsZWN0ZWRQYWdlIHN0YXRlIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5zZWxlY3RlZFBhZ2Uuc2V0KHBhZ2VOdW1iZXIpO1xuXG4gICAgLy8gUmVzZXQgaGVhZGVyIGNoZWNrYm94IHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBwYWdlXG4gICAgdGhpcy5zZWxlY3RBbGxDaGVja2JveC5zZXQoZmFsc2UpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBwYWdlIG51bWJlcnMgZGlzcGxheSBmb3IgcGFnaW5hdGlvbiB3aXRoIG1hbnkgcGFnZXNcbiAgICBsZXQgbGVuID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzO1xuICAgIGlmIChsZW4gPiA3KSB7XG4gICAgICBpZiAocGFnZU51bWJlciAtIDIgPD0gMSkge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgLSAyID4gMSAmJiBwYWdlTnVtYmVyICsgMiA8IGxlbikge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgcGFnZU51bWJlciAtIDEsIHBhZ2VOdW1iZXIsIHBhZ2VOdW1iZXIgKyAxLCAwLCBsZW5dKTtcbiAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciArIDIgPj0gbGVuKSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAwLCBsZW4gLSAzLCBsZW4gLSAyLCBsZW4gLSAxLCBsZW5dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRW1pdCB0byBwYXJlbnQgc28gdGhleSBjYW4gdXBkYXRlIHRoZWlyIGNvbmZpZ1xuICAgIHRoaXMucGFnZVNlbGVjdGVkLmVtaXQocGFnZU51bWJlcik7XG4gIH1cblxuICAvLyBNYWluIGNvbnRhaW5lciByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb250YWluZXJIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKT8uaGVpZ2h0KSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLmhlaWdodDtcbiAgICBlbHNlIHJldHVybiBcIlwiO1xuICB9XG4gIGdldENvbnRhaW5lcldpZHRoKCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCk/LndpZHRoKSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLndpZHRoO1xuICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvLyBDb2x1bW4gSGVhZGVycyByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb2xIZWFkZXJzUm93U3R5bGVzKCkge1xuICAgIGNvbnN0IHsgY29sSGVhZGVyc1Jvd0NvbmZpZyB9ID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgIGNvbnN0IG1pbkhlaWdodCA9IGNvbEhlYWRlcnNSb3dDb25maWc/LmhlaWdodCB8fCBcIjQ0cHhcIjtcbiAgICBjb25zdCBib3JkZXJUb3AgPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uYm9yZGVyVG9wIHx8IFwiXCI7XG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJvcmRlckJvdHRvbSB8fCBcIjFweCBzb2xpZCAjRTBFMEUwXCI7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJhY2tncm91bmRDb2xvciB8fCBcIiNGRkZGRkZcIjtcbiAgICBjb25zdCBmb250U2l6ZSA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5mb250U2l6ZSB8fCBcIjE0cHhcIjtcbiAgICByZXR1cm4ge1xuICAgICAgXCJtaW4taGVpZ2h0XCI6IG1pbkhlaWdodCxcbiAgICAgIFwiYm9yZGVyLXRvcFwiOiBib3JkZXJUb3AsXG4gICAgICBcImJvcmRlci1ib3R0b21cIjogYm9yZGVyQm90dG9tLFxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIFwiZm9udC1zaXplXCI6IGZvbnRTaXplXG4gICAgfTtcbiAgfVxuXG4gIG9uU29ydENoYW5nZShzb3J0U3RhdGU6IFNvcnRTdGF0ZSkge1xuICAgIC8vIEVtaXQgdGhlIHNvcnQgY2hhbmdlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydFN0YXRlKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgbXVsdGktY29sdW1uIHNvcnQgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkubXVsdGlDb2x1bW5Tb3J0KSB7XG4gICAgICBjb25zdCBjdXJyZW50TXVsdGlTb3J0ID0gdGhpcy5tdWx0aUNvbHVtblNvcnQoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudE11bHRpU29ydC5maW5kSW5kZXgoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gc29ydFN0YXRlLmNvbHVtbik7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGlmIChzb3J0U3RhdGUuZGlyZWN0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgbmV3TXVsdGlTb3J0ID0gWy4uLmN1cnJlbnRNdWx0aVNvcnRdO1xuICAgICAgICAgIG5ld011bHRpU29ydC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ld011bHRpU29ydCA9IFsuLi5jdXJyZW50TXVsdGlTb3J0XTtcbiAgICAgICAgICBuZXdNdWx0aVNvcnRbaW5kZXhdID0gc29ydFN0YXRlO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRTdGF0ZS5kaXJlY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5tdWx0aUNvbHVtblNvcnQuc2V0KFsuLi5jdXJyZW50TXVsdGlTb3J0LCBzb3J0U3RhdGVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBY3Rpb25zQ2VsbFN0eWxlKHN0eWxlOiBhbnkpOiBhbnkge1xuICAgIGlmICghc3R5bGUpIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHdpZHRoLCAuLi5yZXN0U3R5bGUgfSA9IHN0eWxlO1xuICAgIHJldHVybiByZXN0U3R5bGU7XG4gIH1cblxuICBvbkFjdGlvbkNsaWNrKGV2ZW50OiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgY29uc3QgY3VycmVudEFjdGl2ZVJvd3MgPSB0aGlzLmFjdGl2ZVJvd0luZGV4KCk7XG4gICAgICBpZiAoZXZlbnQudmFsdWUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoWy4uLmN1cnJlbnRBY3RpdmVSb3dzLCByb3dJbmRleF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoY3VycmVudEFjdGl2ZVJvd3MuZmlsdGVyKGluZGV4ID0+IGluZGV4ICE9PSByb3dJbmRleCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb25JbmZvID0gdGhpcy5maW5kQWN0aW9uQ29uZmlnKCdjaGVja2JveCcpO1xuICAgICAgaWYgKGFjdGlvbkluZm8gJiYgdGhpcy50YWJsZURhdGEoKVtyb3dJbmRleF0pIHtcbiAgICAgICAgY29uc3QgeyBpbmRleCwgY29uZmlnIH0gPSBhY3Rpb25JbmZvO1xuICAgICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKHJvdyA9PiByb3dbaW5kZXhdID09PSB0cnVlKTtcbiAgICAgICAgY29uZmlnLmFjdGlvbj8uKGNoZWNrZWRJdGVtcyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZScpe1xuICAgICAgY29uc3Qgcm93Q29sbGFwc2UgPSB0aGlzLmZpbmRBY3Rpb25Db25maWcoJ3Jvdy1jb2xsYXBzZScpO1xuICAgICAgaWYgKHJvd0NvbGxhcHNlICYmIHRoaXMudGFibGVEYXRhKClbcm93SW5kZXhdKSB7XG4gICAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgcm93Q29sbGFwc2UuY29uZmlnLmFjdGlvbj8uKHRoaXMudGFibGVEYXRhKCkpO1xuICAgICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQWN0aW9uQ29uZmlnKGFjdGlvblR5cGU6IHN0cmluZyk6IHsgaW5kZXg6IG51bWJlciwgY29uZmlnOiBDb2xDb25maWcgfSB8IG51bGwge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXTtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XG4gICAgICAgIHJldHVybiB7IGluZGV4OiBpLCBjb25maWc6IGNvbCB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBcblxuICBpc1Jvd0Rpc2FibGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmRpc2FibGVSb3cgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuZGlzYWJsZVJvdyhyb3cpIDogZmFsc2U7XG4gIH1cblxuICB0b2dnbGVDaGVja2JveCgpIHtcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrYm94LnNldCghdGhpcy5zZWxlY3RBbGxDaGVja2JveCgpKTtcbiAgICBjb25zdCBjaGVja2JveENvbEluZGV4ID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5maW5kSW5kZXgoY29sID0+IGNvbC50eXBlID09PSAnYWN0aW9ucycgJiYgY29sLmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcpO1xuICAgIGlmIChjaGVja2JveENvbEluZGV4ICE9PSAtMSkge1xuICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgZGlyZWN0bHkgbW9kaWZ5IGlucHV0IHNpZ25hbHMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudFxuICAgICAgY29uc3QgdXBkYXRlZFRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhKCkubWFwKChyb3c6IGFueVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSBbLi4ucm93XTtcbiAgICAgICAgY29uc3QgY3VycmVudENoZWNrYm94ID0gdXBkYXRlZFJvd1tjaGVja2JveENvbEluZGV4XTtcbiAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuaXNSb3dEaXNhYmxlZChyb3cpO1xuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgICB1cGRhdGVkUm93W2NoZWNrYm94Q29sSW5kZXhdID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkUm93O1xuICAgICAgfSk7XG4gICAgICB0aGlzLmhlYWRlckFjdGlvbj8uZW1pdCh7XG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hUb2dnbGVcIixcbiAgICAgICAgcGF5bG9hZDogdXBkYXRlZFRhYmxlRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNlbGVjdGVkT3B0aW9uOiBEcm9wZG93bkl0ZW0pIHtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHBhcnNlSW50KHNlbGVjdGVkT3B0aW9uLnZhbHVlKSk7XG4gIH1cblxuICBzaG91bGRTaG93UGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZztcbiAgICAgIGlmICghY29uZmlnKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBoYXNNdWx0aXBsZVBhZ2VzID0gY29uZmlnLm5vT2ZQYWdlcyA+IDE7XG4gICAgICBjb25zdCBoYXNFbm91Z2hEYXRhID0gdGhpcy50YWJsZUxlbmd0aCgpID4gY29uZmlnLnJvd3NQZXJQYWdlO1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1BhZ2VTaXplRHJvcGRvd24oKSB8fCBoYXNNdWx0aXBsZVBhZ2VzIHx8IGhhc0Vub3VnaERhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbmZpZyB7XG4gIGhlaWdodDogc3RyaW5nIHwgXCIxMDAlXCI7XG4gIHdpZHRoOiBzdHJpbmcgfCBcIjEwMCVcIjtcbiAgcGFnaW5hdGlvbkNvbmZpZz86IFBhZ2luYXRpb25Db25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICBjb2xIZWFkZXJzUm93Q29uZmlnOiBSb3dDb25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICByb3dDb25maWc6IFJvd0NvbmZpZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIGNvbEhlYWRlckNvbmZpZzogQXJyYXk8Q29sSGVhZGVyQ29uZmlnPjtcbiAgY29sQ29uZmlnOiBBcnJheTxDb2xDb25maWc+O1xuICBjYW5FeHBhbmQ/OiBib29sZWFuO1xuICBjYW5TY3JvbGxIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBjZWxsSG92ZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dJbmRleD86IG51bWJlciB8IG51bWJlcltdO1xuICBtdWx0aUNvbHVtblNvcnQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ29uZmlnIHtcbiAgbm9PZlBhZ2VzOiBudW1iZXI7XG4gIHJvd3NQZXJQYWdlOiBudW1iZXI7XG4gIHRvdGFsTm9PZlJvd3M6IG51bWJlcjtcbiAgc2VsZWN0ZWRQYWdlPzogbnVtYmVyO1xuICBkaXNhYmxlUGFnZUp1bXBpbmc/OiBib29sZWFuO1xuICBzaG93UGFnZVNpemVEcm9wZG93bj86IGJvb2xlYW47IC8vIFdoZW4gdHJ1ZSwgcm93c1BlclBhZ2UgdmFsdWUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHBhZ2VTaXplcyBhcnJheVxuICBwYWdlU2l6ZXM/OiBudW1iZXJbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm93Q29uZmlnIHtcbiAgaGVpZ2h0Pzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBkaXNhYmxlUm93PzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sSGVhZGVyQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiY2hlY2tib3hcIjtcbiAgZGF0YTogYW55O1xuICBjb21wb25lbnRSZWY/OiBhbnk7XG4gIGZpbHRlcnM/OiBBcnJheTxGaWx0ZXI+IHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBpc1NvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydEFzY0ljb24/OiBzdHJpbmc7XG4gIHNvcnREZXNjSWNvbj86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiYWN0aW9uc1wiIHwgXCJodG1sXCI7XG4gIGNvbXBvbmVudFJlZj86IGFueTtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBhY3Rpb25JdGVtcz86IEFjdGlvbkl0ZW1bXTtcbiAgYWN0aW9uVHlwZT86IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImNoZWNrYm94XCIgfCBcInJvdy1jb2xsYXBzZVwiOyAvLyBpbmxpbmUgZm9yIGluZGl2aWR1YWwgaWNvbnMsIGRyb3Bkb3duIGZvciBtZW51XG4gIGRpc2FibGU/OiAocm93RGF0YTogYW55KSA9PiBib29sZWFuO1xuICBjb2xsYXBzZUNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBwcmV2aWV3TGluZXM/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBkaXNhYmxlPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgYWN0aW9uPzogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgY2hpbGRyZW4/OiBBY3Rpb25JdGVtW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQWN0aW9uSXRlbSBleHRlbmRzIEFjdGlvbkl0ZW0ge1xuICBzaG93U3VibWVudT86IGJvb2xlYW47XG59XG4iLCI8ZGl2XG4gIFtuZ1N0eWxlXT1cIntcbiAgICBoZWlnaHQ6IGdldENvbnRhaW5lckhlaWdodCgpLFxuICAgIHdpZHRoOiBnZXRDb250YWluZXJXaWR0aCgpLFxuICAgICdvdmVyZmxvdy14JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgPyAnYXV0bycgOiAndW5zZXQnXG4gIH1cIlxuICBpZD1cIm1haW4tY29udGFpbmVyXCJcbj5cbiAgPG1pcy10YWJsZS1maWx0ZXJcbiAgICAjZmlsdGVyXG4gICAgKGZpbHRlcnNBcHBsaWVkKT1cInVwZGF0ZUFwcGxpZWRGaWx0ZXJzKCRldmVudClcIlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlcigpXCJcbiAgICBbY29udGFpbmVyU3R5bGVzXT1cImZpbHRlckNvbnRhaW5lclN0eWxlcygpXCJcbiAgICBbZmlsdGVyc0RhdGFdPVwiZmlsdGVyRGF0YSgpXCJcbiAgPjwvbWlzLXRhYmxlLWZpbHRlcj5cbiAgPGRpdlxuICAgICN0YWJsZVxuICAgIGlkPVwidGFibGUtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7ICduby1zY3JvbGxiYXInOiBleHBhbmRlZEluZGV4KCkgPCAwLCBzY3JvbGxiYXI6ICEoZXhwYW5kZWRJbmRleCgpIDwgMCksICdzY3JvbGwtaG9yaXpvbnRhbGx5JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgfVwiXG4gID5cbiAgICA8ZGl2XG4gICAgW25nU3R5bGVdPVwiZ2V0Q29sSGVhZGVyc1Jvd1N0eWxlcygpXCJcbiAgICAgIGlkPVwiY29sLWhlYWRlcnMtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICNjb2xIZWFkZXJSZWZcbiAgICAgICAgKGNsaWNrKT1cImNvbEhlYWRlcj8uYWN0aW9uID8gY29sSGVhZGVyPy5hY3Rpb24oY29sSGVhZGVyKSA6IG51bGxcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sSGVhZGVyIG9mIHRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZ1wiXG4gICAgICAgIGNsYXNzPVwiY29sLWhlYWRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICB3aWR0aDogY29sSGVhZGVyPy5zdHlsZT8ud2lkdGggfHwgJycsXG4gICAgICAgICAgY3Vyc29yOiBjb2xIZWFkZXIuYWN0aW9uID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgPyBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgOiBjb2xIZWFkZXIudHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gJ2ZsZXgtZW5kJ1xuICAgICAgICAgICAgOiAnc3BhY2UtYmV0d2VlbidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxwICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlICE9PSAnY3VzdG9tJyAmJiBjb2xIZWFkZXI/LnR5cGUgIT09ICdjaGVja2JveCdcIiBjbGFzcz1cImNvbC1oZWFkZXItdGV4dFwiPlxuICAgICAgICAgIHt7IGNvbEhlYWRlcj8uZGF0YSB8fCBcIiBcIiB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cImZpbHRlckRhdGEuc2V0KGNvbEhlYWRlci5maWx0ZXJzKTsgdG9nZ2xlRmlsdGVyKGNvbEhlYWRlci5kYXRhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSAhPT0gJ2N1c3RvbScgJiYgY29sSGVhZGVyPy5maWx0ZXJzICYmIGNvbEhlYWRlcj8uZmlsdGVycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImFwcGxpZWRGaWx0ZXJzKClbY29sSGVhZGVyLmRhdGFdPy5sZW5ndGggPiAwXCIgaWQ9XCJmaWx0ZXItYWN0aXZlXCI+PC9zcGFuPlxuICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMTMgMTBcIiB3aWR0aD1cIjEzXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGQ9XCJNNC45NzU0NiAxMEg3LjY0MjEzVjhINC45NzU0NlYxMFpNMC4zMDg0NzIgMFYySDEyLjMwODVWMEgwLjMwODQ3MlpNMi4zMDg0NyA2SDEwLjMwODVWNEgyLjMwODQ3VjZaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2hlY2tib3goKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSA9PT0gJ2NoZWNrYm94J1wiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1pY29uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtaXMtY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tib3goKVwiPjwvbWlzLWNoZWNrYm94PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY29sSGVhZGVyPy5pc1NvcnRhYmxlICYmICFjb2xIZWFkZXI/LmZpbHRlcnNcIiBhcHBTb3J0SWNvbnNcbiAgICAgICAgICBbY29sdW1uXT1cImNvbEhlYWRlclwiXG4gICAgICAgICAgW2FjdGl2ZVNvcnRdPVwiY3VycmVudFNvcnQoKVwiXG4gICAgICAgICAgW2FjdGl2ZVNvcnRzXT1cIm11bHRpQ29sdW1uU29ydCgpXCJcbiAgICAgICAgICBbbXVsdGlDb2x1bW5Tb3J0XT1cInRhYmxlQ29uZmlnKCkubXVsdGlDb2x1bW5Tb3J0XCJcbiAgICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJzb3J0LWljb25cIj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlID09PSAnY3VzdG9tJ1wiIGN1c3RvbVRhYmxlQ2VsbCBbY3VzdG9tQ29tcG9uZW50XT1cImNvbEhlYWRlcj8uY29tcG9uZW50UmVmXCIgW2RhdGFdPVwiY29sSGVhZGVyLmRhdGFcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBpZD1cImRhdGEtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93LXdyYXBwZXJcIiAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlRGF0YSgpOyBsZXQgaSA9IGluZGV4OyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0LXJvd1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAndC1yb3ctaG92ZXInOiB0YWJsZUNvbmZpZygpLmNlbGxIb3ZlciwgJ2FjdGl2ZS1yb3cnOiBhY3RpdmVSb3dJbmRleCgpLmluY2x1ZGVzKGkpIH1cIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ21pbi1oZWlnaHQnOiB0YWJsZUNvbmZpZygpPy5yb3dDb25maWc/LmhlaWdodCA/IHRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmhlaWdodCA6ICc0NHB4JyB9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Um93KGkpXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtcm93XT1cImlzUm93RGlzYWJsZWQocm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb24gJiYgdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uVHlwZSAhPT0gJ2NoZWNrYm94JyA/IHRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvbihjb2wpIDogbnVsbFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHJvdzsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICB3aWR0aDogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LndpZHRoIHx8IHRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZ1tjb2xJbmRleF0/LnN0eWxlPy53aWR0aCB8fCAnJ1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cInQtY29sLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0LWNvbC1jb250YWluZXItaG92ZXInOiB0YWJsZUNvbmZpZygpLmNlbGxIb3ZlciB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidC1jb2xcIlxuICAgICAgICAgICAgICBbc3R5bGVdPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICA/IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICA6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgID8gJ2ZsZXgtZW5kJ1xuICAgICAgICAgICAgICAgICAgOiAnc3BhY2UtYmV0d2VlbidcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSAhPT0gJ2N1c3RvbScgJiYgdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlICE9PSAnYWN0aW9ucydcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBjb2xvcjogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LmNvbG9yIHx8ICcnLFxuICAgICAgICAgICAgICAnLS1jb2xsYXBzZWQtbGluZXMnOiBwcmV2aWV3TGluZXMoKSB8fCAzXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbGxhcHNlZC1jZWxsJzogY29sbGFwc2VDb2xJbmRleCgpID09IGNvbEluZGV4ICYmIGV4cGFuZGVkTWFwKClbcm93SW5kZXhdXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1jb2wtdGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBSZW5kZXIgYXMgSFRNTCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdodG1sJzsgZWxzZSBwbGFpblRleHRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjb2xcIj48L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gUmVuZGVyIGFzIHBsYWluIHRleHQgLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWluVGV4dD5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgY29sIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlID09PSAnY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNvbXBvbmVudF09XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0uY29tcG9uZW50UmVmXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgIGN1c3RvbVRhYmxlQ2VsbFxuICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bWlzLWFjdGlvbnMtY2VsbFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICBbY2VsbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgIFtjb25maWddPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtYWN0aW9ucyc6ICh0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcgfHwgdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJykgJiYgaXNSb3dEaXNhYmxlZChyb3cpXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+PC9taXMtYWN0aW9ucy1jZWxsPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0YWJsZUNvbmZpZygpPy5jYW5FeHBhbmQgJiYgZXhwYW5kZWRJbmRleCgpID09PSBpXCIgY2xhc3M9XCJzdWItcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YlRhYmxlRGF0YUxvYWRpbmcoKVwiPlxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcuLi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3ViVGFibGVEYXRhTG9hZGluZygpICYmIHN1YlRhYmxlRGF0YSgpLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIE5vIERhdGEgQXZhaWxhYmxlLi4uXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1YlRhYmxlRGF0YUxvYWRpbmcoKSAmJiBzdWJUYWJsZURhdGEoKS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8c3ViLXRhYmxlIFtjb25maWddPVwic3ViVGFibGVjb25maWcoKVwiIFt0YWJsZURhdGFdPVwic3ViVGFibGVEYXRhKClcIj48L3N1Yi10YWJsZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgaWQ9XCJwYWdpbmF0aW9uLWNvbnRlbnQtY29udGFpbmVyXCI+XG4gICAgQGlmKHNob3VsZFNob3dQYWdpbmF0aW9uKCkpe1xuICAgICAgPGRpdiBcbiAgICAgICAgaWQ9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDxwIGlkPVwicGFnaW5hdGlvbi10ZXh0XCI+XG4gICAgICAgICAgU2hvd2luZ1xuICAgICAgICAgIHt7IChzZWxlY3RlZFBhZ2UoKSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgMSB9fS17e1xuICAgICAgICAgICAgKHNlbGVjdGVkUGFnZSgpIC0gMSkgKiB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcucm93c1BlclBhZ2UgKyB0YWJsZUxlbmd0aCgpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvZiB7eyB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcudG90YWxOb09mUm93cyB9fSBpdGVtc1xuICAgICAgICA8L3A+XG4gICAgICAgIEBpZihzaG93UGFnZVNpemVEcm9wZG93bigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgICBbZGF0YV09XCJwYWdlU2l6ZU9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwic2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbigpXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJvcGRvd25MaXN0SGVpZ2h0XT1cIicxMDBweCdcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlLXNpemUtZHJvcGRvd25cIlxuICAgICAgICAgICAgPjwvbWlzLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgaWQ9XCJwYWdlcy1jb250YWluZXJcIj5cbiAgICAgICAgICA8c3BhbiAgIChjbGljayk9XCJzZWxlY3RlZFBhZ2UoKSA+IDEgJiYgdXBkYXRlU2VsZWN0ZWRQYWdlKHNlbGVjdGVkUGFnZSgpIC0gMSlcIiBjbGFzcz1cInBhZ2VcIiBbY2xhc3MucGFnZS1uYXYtaW5hY3RpdmVdPVwic2VsZWN0ZWRQYWdlKCkgPT09IDFcIj5cbiAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICBkPVwiTTAuODU3NDA1IDUuNTYyOTVDMC44NTU3OTQgNS41NjEzOSAwLjg1NDE4OCA1LjU1OTgyIDAuODUyNTg4IDUuNTU4MjRDMC42OTU5NTUgNS40MDQwOCAwLjYxNzY0MSA1LjIwMjAzIDAuNjE3NjQ3IDQuOTk5OThDMC42MTc2NDEgNC43OTc5MyAwLjY5NTk1NSA0LjU5NTg4IDAuODUyNTg4IDQuNDQxNzJDMC44NTQxODggNC40NDAxNCAwLjg1NTc5NCA0LjQzODU4IDAuODU3NDA0IDQuNDM3MDJMNS4xMzA2NiAwLjIzMTIzMUM1LjQ0MzkyIC0wLjA3NzA3NzEgNS45NTE4IC0wLjA3NzA3NzEgNi4yNjUwNiAwLjIzMTIzMUM2LjU3ODMxIDAuNTM5NTQgNi41NzgzMSAxLjAzOTQxIDYuMjY1MDYgMS4zNDc3MkwyLjU1NDIgNC45OTk5OEw2LjI2NTA2IDguNjUyMjVDNi41NzgzMSA4Ljk2MDU1IDYuNTc4MzEgOS40NjA0MiA2LjI2NTA2IDkuNzY4NzNDNS45NTE4IDEwLjA3NyA1LjQ0MzkyIDEwLjA3NyA1LjEzMDY2IDkuNzY4NzNMMC44NTc0MDUgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gUGFnZSBudW1iZXJzIChvbmx5IHNob3cgaWYgZGlzYWJsZVBhZ2VKdW1waW5nIGlzIGZhbHNlKSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5kaXNhYmxlUGFnZUp1bXBpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFnZU51bWJlciBvZiBwYWdlcygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3RlZFBhZ2UocGFnZU51bWJlcilcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlTnVtYmVyICE9IDBcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncGFnZS1hY3RpdmUnOiBwYWdlTnVtYmVyID09PSBzZWxlY3RlZFBhZ2UoKSB9XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFnZSBwYWdlLWp1bXBpbmctZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgPnt7IHBhZ2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWdlTnVtYmVyID09IDBcIiBjbGFzcz1cInBhZ2Utc2VwZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgZGlzcGxheTogJ2ZsZXgnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnNHB4JyB9XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgICAgPHNwYW4gW2NsYXNzLnBhZ2UtbmF2LWluYWN0aXZlXT1cInNlbGVjdGVkUGFnZSgpID09PSB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/Lm5vT2ZQYWdlc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkUGFnZSgpIDwgdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXMgJiYgdXBkYXRlU2VsZWN0ZWRQYWdlKHNlbGVjdGVkUGFnZSgpICsgMSlcIiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICBkPVwiTTYuMTQyNiA1LjU2Mjk1QzYuMTQ0MjEgNS41NjEzOSA2LjE0NTgxIDUuNTU5ODIgNi4xNDc0MSA1LjU1ODI0QzYuMzA0MDUgNS40MDQwOCA2LjM4MjM2IDUuMjAyMDMgNi4zODIzNiA0Ljk5OTk4QzYuMzgyMzYgNC43OTc5MyA2LjMwNDA1IDQuNTk1ODggNi4xNDc0MSA0LjQ0MTcyQzYuMTQ1ODEgNC40NDAxNCA2LjE0NDIxIDQuNDM4NTggNi4xNDI2IDQuNDM3MDJMMS44NjkzNCAwLjIzMTIzMUMxLjU1NjA4IC0wLjA3NzA3NzEgMS4wNDgyIC0wLjA3NzA3NzEgMC43MzQ5NDIgMC4yMzEyMzFDMC40MjE2ODggMC41Mzk1NCAwLjQyMTY4OCAxLjAzOTQxIDAuNzM0OTQyIDEuMzQ3NzJMNC40NDU4IDQuOTk5OThMMC43MzQ5NDEgOC42NTIyNUMwLjQyMTY4NiA4Ljk2MDU1IDAuNDIxNjg2IDkuNDYwNDIgMC43MzQ5NDEgOS43Njg3M0MxLjA0ODIgMTAuMDc3IDEuNTU2MDggMTAuMDc3IDEuODY5MzQgOS43Njg3M0w2LjE0MjYgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
830
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFNVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFJVCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDWnJDLCtDQU1DO0lBSkMseU5BQWtCLG1DQUE0QixLQUFDO0lBSWhELGlCQUFtQjs7O0lBRGxCLEFBREEsZ0VBQTJDLG9DQUNmOzs7SUEwQnhCLDZCQUFrRztJQUNoRyxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSx5RkFDRjs7O0lBTUUsMkJBQXFGOzs7O0lBTHZGLGdDQUlDO0lBSEMsa05BQVMsMkNBQWlDLEVBQUUsc0NBQTRCLHdCQUFFLHdCQUF3QixLQUFDO0lBSW5HLCtFQUE4RTs7SUFDOUUsK0JBQStGO0lBQzdGLDJCQUtFO0lBRU4sQUFERSxpQkFBTSxFQUNEOzs7OztJQVRFLGNBQWtEO0lBQWxELG1IQUFrRDs7OztJQVUzRCxnQ0FJQztJQUhDLGdLQUFTLHVCQUFnQix3QkFBRSx3QkFBd0IsS0FBQztJQUlwRCxtQ0FBNkQ7SUFDL0QsaUJBQU87OztJQURTLGNBQStCO0lBQS9CLG9EQUErQjs7OztJQUUvQyxnQ0FNb0I7SUFEbEIsZ01BQWMsMkJBQW9CLEtBQUM7SUFFckMsaUJBQU87Ozs7SUFITCxBQURBLEFBREEsQUFEQSxxQ0FBb0Isb0NBQ1EseUNBQ0sseURBQ2dCOzs7O0lBSXJELHdGQUFz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a0JBQXhCLFNBQVM7bUJBQUMsT0FBTzs7a0ZBcERQLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgdW50cmFja2VkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGaWx0ZXIsIFRhYmxlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZmlsdGVyL2ZpbHRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNvcnRTdGF0ZSB9IGZyb20gXCIuL3NvcnQtaWNvbnMuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vZHJvcGRvd25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10YWJsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCJ0YWJsZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcInRhYmxlLmNvbXBvbmVudC5jc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIC8vIEluaXRpYWxpemUgd2l0aCAtMSB0byBpbmRpY2F0ZSBubyByb3cgaXMgY29sb3JlZCBhdCB0aGUgYmVnaW5uaW5nXG4gIGFjdGl2ZVJvd0luZGV4ID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIGhhc0NoZWNrYm94QWN0aW9ucyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHNlbGVjdEFsbENoZWNrYm94ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBGaWx0ZXIgcmVsYXRlZCB2YXJpYWJsZXNcbiAgc2hvd0ZpbHRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIGZpbHRlck5hbWUgPSBzaWduYWw8c3RyaW5nPihcIlwiKTtcbiAgZmlsdGVyRGF0YSA9IHNpZ25hbDxBcnJheTxGaWx0ZXI+PihbXSk7XG4gIGZpbHRlckNvbnRhaW5lclN0eWxlcyA9IHNpZ25hbDxhbnk+KHt9KTtcbiAgYXBwbGllZEZpbHRlcnMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9Pih7fSk7XG4gIFxuICAvLyBDb252ZXJ0IG91dHB1dHMgdG8gc2lnbmFsLWJhc2VkIG91dHB1dHNcbiAgZmlsdGVyc1VwZGF0ZWQgPSBvdXRwdXQ8e1xuICAgIFtrZXk6IHN0cmluZ106IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xuICB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoXCJmaWx0ZXJcIikgZmlsdGVyOiBUYWJsZUZpbHRlckNvbXBvbmVudCB8IGFueTtcbiAgQFZpZXdDaGlsZHJlbihcImNvbEhlYWRlclJlZlwiKSBjb2xIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4gfCBhbnk7XG5cbiAgLy8gUGFnaW5hdGlvbiByZWxhdGVkIHZhcmlhYmxlc1xuICBwYWdlcyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG4gIHRhYmxlTGVuZ3RoID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHNlbGVjdGVkUGFnZSA9IHNpZ25hbDxudW1iZXI+KDEpOyAvLyBJbnRlcm5hbCBzdGF0ZSBmb3Igc2VsZWN0ZWQgcGFnZVxuICBwYWdlU2VsZWN0ZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBwYWdlU2l6ZUNoYW5nZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBwYWdlU2l6ZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpPy5wYWdpbmF0aW9uQ29uZmlnO1xuICAgIGlmICghY29uZmlnPy5wYWdlU2l6ZXMgfHwgIUFycmF5LmlzQXJyYXkoY29uZmlnLnBhZ2VTaXplcykgfHwgIWNvbmZpZy5wYWdlU2l6ZXM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuICBcbiAgICByZXR1cm4gY29uZmlnLnBhZ2VTaXplcz8ubWFwKG9wdGlvbiA9PiAoe1xuICAgICAgbGFiZWw6IG9wdGlvbj8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgIHZhbHVlOiBvcHRpb24/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgfSkpIHx8IFtdO1xuICB9KTtcblxuICBzaG93UGFnZVNpemVEcm9wZG93biA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gISF0aGlzLnRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWc/LnNob3dQYWdlU2l6ZURyb3Bkb3duO1xuICB9KTtcblxuICBzZWxlY3RlZFBhZ2VTaXplT3B0aW9uID0gc2lnbmFsPERyb3Bkb3duSXRlbT4oeyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfSk7XG5cbiAgLy8gQ29udmVydCBpbnB1dHMgdG8gc2lnbmFsLWJhc2VkIGlucHV0c1xuICB0YWJsZUNvbmZpZyA9IGlucHV0PFRhYmxlQ29uZmlnPigpO1xuICBzdWJUYWJsZWNvbmZpZyA9IGlucHV0PFRhYmxlQ29uZmlnPigpO1xuICB0YWJsZURhdGFMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZXhwYW5kZWRJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgdGFibGVEYXRhID0gaW5wdXQ8QXJyYXk8QXJyYXk8YW55Pj4+KFtdKTtcbiAgc3ViVGFibGVEYXRhID0gaW5wdXQ8QXJyYXk8QXJyYXk8YW55Pj4+KFtdKTtcbiAgc3ViVGFibGVEYXRhTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGN1cnJlbnRTb3J0ID0gaW5wdXQ8e2NvbHVtbjogc3RyaW5nLCBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnIHwgJyd9IHwgbnVsbD4oKTtcbiAgQFZpZXdDaGlsZChcInRhYmxlXCIpIHRhYmxlOiBFbGVtZW50UmVmIHwgYW55O1xuICBjb2xsYXBzZUNvbEluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuICBwcmV2aWV3TGluZXMgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcm93Q29sbGFwc2VDb25maWdJbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcbiAgZXhwYW5kZWRNYXAgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KTtcblxuXG4gIC8vIFNvcnRpbmcgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIG11bHRpQ29sdW1uU29ydCA9IHNpZ25hbDxTb3J0U3RhdGVbXT4oW10pO1xuICBzb3J0Q2hhbmdlID0gb3V0cHV0PFNvcnRTdGF0ZT4oKTtcbiAgaGVhZGVyQWN0aW9uID0gb3V0cHV0PHsgdHlwZTogc3RyaW5nOyBwYXlsb2FkPzogYW55IH0+KCk7XG5cbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGVMZW5ndGguc2V0KHRoaXMudGFibGVEYXRhKCk/Lmxlbmd0aCA/PyAwKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFjdGl2ZVJvd0luZGV4ICE9PSBudWxsICYmIGNvbmZpZy5hY3RpdmVSb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVSb3dJbmRleCA9IGNvbmZpZy5hY3RpdmVSb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KEFycmF5LmlzQXJyYXkoYWN0aXZlUm93SW5kZXgpID8gYWN0aXZlUm93SW5kZXggOiBbYWN0aXZlUm93SW5kZXhdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSBQQUdJTkFUSU9OIFBBR0UgQVJSQVkgTE9HSUMgKE1PVkVEL1JFUExBQ0VEIGluaXRpYWxpemVQYWdpbmF0aW9uKSAtLS1cbiAgICAgICAgY29uc3QgbGVuID0gY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXM7XG4gICAgICAgIGNvbnN0IGRpc2FibGVQYWdlSnVtcGluZyA9IGNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZz8uZGlzYWJsZVBhZ2VKdW1waW5nO1xuICAgICAgICBcbiAgICAgICAgLy8gT25seSBydW4gaWYgcGFnaW5hdGlvbiBpcyBjb25maWd1cmVkIGFuZCBwYWdlIGp1bXBpbmcgaXMgZW5hYmxlZFxuICAgICAgICBpZiAobGVuICYmIGxlbiA+IDAgJiYgIWRpc2FibGVQYWdlSnVtcGluZykge1xuICAgICAgICAgICAgLy8gUmVhZCB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBwYWdlcyBhcnJheS5cbiAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgcnVucyBvbiBldmVyeSBjb25maWcgY2hhbmdlLCB3ZSByZWx5IG9uIHRoZSB2YWx1ZSBzZXQgXG4gICAgICAgICAgICAvLyBieSB1cGRhdGVTZWxlY3RlZFBhZ2UoKS5cbiAgICAgICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSB0aGlzLnNlbGVjdGVkUGFnZSgpOyBcblxuICAgICAgICAgICAgaWYgKGxlbiA8PSA3KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGFnZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYWdlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzLnNldChuZXdQYWdlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYWdlTnVtYmVyIC0gMiA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAyLCAzLCA0LCAwLCBsZW5dKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgLSAyID4gMSAmJiBwYWdlTnVtYmVyICsgMiA8IGxlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgcGFnZU51bWJlciAtIDEsIHBhZ2VOdW1iZXIsIHBhZ2VOdW1iZXIgKyAxLCAwLCBsZW5dKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgKyAyID49IGxlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgbGVuIC0gMywgbGVuIC0gMiwgbGVuIC0gMSwgbGVuXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIC0tLSBFTkQgUEFHSU5BVElPTiBQQUdFIEFSUkFZIExPR0lDIC0tLVxuXG4gICAgICAgIFxuICAgICAgICBpZihjb25maWc/LnBhZ2luYXRpb25Db25maWc/LnNob3dQYWdlU2l6ZURyb3Bkb3duKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucGFnZVNpemVPcHRpb25zKCk7XG4gICAgICAgICAgY29uc3Qgcm93c1BlclBhZ2UgPSB0aGlzLnRhYmxlQ29uZmlnKCk/LnBhZ2luYXRpb25Db25maWc/LnJvd3NQZXJQYWdlO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zKSB8fCAhcm93c1BlclBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbi5zZXQoeyBsYWJlbDogXCJcIiwgdmFsdWU6IFwiXCIgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQ/LnZhbHVlID09PSByb3dzUGVyUGFnZS50b1N0cmluZygpKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbi5zZXQoc2VsZWN0ZWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBJZiBjb25maWd1cmVkIHJvd3NQZXJQYWdlIGlzIG5vdCBhbW9uZyBvcHRpb25zLCBwaWNrIHRoZSBmbG9vciB2YWx1ZSBhbmQgbm90aWZ5IHBhcmVudFxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gTnVtYmVyKHJvd3NQZXJQYWdlKTtcbiAgICAgICAgICAgIC8vU29ydCB0aGUgb3B0aW9uc1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkID0gb3B0aW9uc1xuICAgICAgICAgICAgICAubWFwKG9wdCA9PiAoeyBvcHQsIG51bTogTnVtYmVyKG9wdD8udmFsdWUpIH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKCh7IG51bSB9KSA9PiBOdW1iZXIuaXNGaW5pdGUobnVtKSlcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubnVtIC0gYi5udW0pO1xuXG4gICAgICAgICAgICBsZXQgZmxvb3JPcHRpb24gPSBzb3J0ZWRbMF0/Lm9wdDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzb3J0ZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgaWYgKHNvcnRlZFtpXS5udW0gPD0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgZmxvb3JPcHRpb24gPSBzb3J0ZWRbaV0ub3B0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGNvbmZpZ3VyZWQgcm93c1BlclBhZ2Ugd2FzIG5vdCBtYXRjaGVkIHRvIGFueSBvZiB0aGUgcGFnZVNpemVzIHNlbnQgaW4gdGhlIHBhZ2luYXRpb25Db25maWcuIFNlbGVjdGluZyB0aGUgbmVhcmVzdCBmbG9vciB2YWx1ZSBhbW9uZyB0aGUgYXZhaWxhYmxlIHBhZ2VTaXplcy5cIik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFnZVNpemVPcHRpb24uc2V0KGZsb29yT3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZShmbG9vck9wdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBwYWdlIHNpemUgb3B0aW9ucyBhdmFpbGFibGUuXCIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICAgIC8vIFJlYWN0aXZlIGhlaWdodCBjYWxjdWxhdGlvbjogbWFpbnRhaW5zIGV4YWN0IG9sZCBiZWhhdmlvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIC8vIE9sZCBjb2RlOiBoZWlnaHQgLSA1NiArIFwicHhcIiAoZmxhd2VkIGZvciBwZXJjZW50YWdlcywgYnV0IHdlIG1haW50YWluIGl0KVxuICAgIC8vIE5vdGU6IEVmZmVjdCBtdXN0IGJlIGluIGNvbnN0cnVjdG9yLCBub3QgbGlmZWN5Y2xlIGhvb2tzIChORzAyMDMgZXJyb3Igb3RoZXJ3aXNlKVxuICAgIC8vIGVmZmVjdCgoKSA9PiB7XG4gICAgLy8gICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnKCk7XG4gICAgLy8gICBpZiAoIWNvbmZpZz8ucGFnaW5hdGlvbkNvbmZpZyB8fCAhdGhpcy50YWJsZT8ubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgIFxuICAgIC8vICAgY29uc3QgaGVpZ2h0ID0gY29uZmlnLmhlaWdodDtcbiAgICAvLyAgIC8vIE9sZCBiZWhhdmlvcjogaGVpZ2h0IC0gNTYgKyBcInB4XCIgKG1haW50YWlucyB0aGUgZmxhdyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICAvLyAgIGNvbnN0IHJlc3VsdCA9IChoZWlnaHQgYXMgYW55KSAtIDU2O1xuICAgIC8vICAgY29uc3QgZmluYWxIZWlnaHQgPSByZXN1bHQgKyBcInB4XCI7XG4gICAgLy8gICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCwgXCJoZWlnaHRcIiwgZmluYWxIZWlnaHQpO1xuICAgIC8vIH0pO1xuICB9XG5cblxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgcm93IGNsaWNrXG4gIHNlbGVjdFJvdyhpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaGFzQ2hlY2tib3hBY3Rpb25zKCkpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZVJvd0luZGV4LnNldChbaW5kZXhdKTsgLy8gU2V0IHRoZSBzZWxlY3RlZCBpbmRleCB0byB0aGUgY2xpY2tlZCByb3cncyBpbmRleFxuICAgICEhdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24gJiYgdGhpcy50YWJsZUNvbmZpZygpLnJvd0NvbmZpZy5hY3Rpb24oaW5kZXgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNDaGVja2JveEFjdGlvbnMuc2V0KHRoaXMudGFibGVDb25maWcoKS5jb2xDb25maWc/LnNvbWUoY29sID0+IGNvbC50eXBlID09PSBcImFjdGlvbnNcIiAmJiBjb2wuYWN0aW9uVHlwZSA9PT0gXCJjaGVja2JveFwiKSk7XG4gICAgdGhpcy50YWJsZUxlbmd0aC5zZXQoISF0aGlzLnRhYmxlRGF0YSgpID8gdGhpcy50YWJsZURhdGEoKS5sZW5ndGggOiAwKTtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJzKCk7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcikge1xuICAgICAgICBsZXQgaXNDaGVja0JveENsaWNrZWQgPSB0cnVlO1xuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU3BhbkVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNsYXNzTmFtZSA9PT0gXCJjaGVja21hcmtcIikge1xuICAgICAgICAgIGlzQ2hlY2tCb3hDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0NsaWNrSW5zaWRlRWxlbWVudCA9IHRoaXMuZmlsdGVyLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNDbGlja0luc2lkZUVsZW1lbnQgJiYgIWlzQ2hlY2tCb3hDbGlja2VkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVGaWx0ZXIodGhpcy5maWx0ZXJOYW1lKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmZXRjaCBjb2xsYXBzZUNvbEluZGV4IGFuZCBwcmV2aWV3TGluZXMgaWYgcHJlc2VudFxuICAgIHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpPy5jb2xDb25maWc/LmZpbmRJbmRleChcbiAgICAgIGNvbCA9PiBjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJ1xuICAgICkpO1xuICAgIGlmICh0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VDb2xJbmRleC5zZXQodGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1t0aGlzLnJvd0NvbGxhcHNlQ29uZmlnSW5kZXgoKV0uY29sbGFwc2VDb2x1bW5JbmRleCA/PyBudWxsKTtcbiAgICAgIHRoaXMucHJldmlld0xpbmVzLnNldCh0aGlzLnRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW3RoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpXS5wcmV2aWV3TGluZXMgPz8gbnVsbCk7XG4gICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICB9XG4gIH1cblxuICBidWlsZEV4cGFuZGVkTWFwKCk6IHZvaWR7XG4gICAgY29uc3QgbmV3RXhwYW5kZWRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgY29uc3QgY29sbGFwc2VJbmRleCA9IHRoaXMucm93Q29sbGFwc2VDb25maWdJbmRleCgpO1xuICAgIFxuICAgIHRoaXMudGFibGVEYXRhKCkuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICBuZXdFeHBhbmRlZE1hcFtgJHtyb3dJbmRleH1gXSA9IHJvd1tjb2xsYXBzZUluZGV4XTtcbiAgICB9KTtcbiAgICB0aGlzLmV4cGFuZGVkTWFwLnNldChuZXdFeHBhbmRlZE1hcCk7XG59XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFZpZXdDaGlsZCBpcyBub3cgYXZhaWxhYmxlIC0gbWFudWFsbHkgdHJpZ2dlciBoZWlnaHQgY2FsY3VsYXRpb24gb25jZVxuICAgIC8vIFRoZSBlZmZlY3QgaW4gY29uc3RydWN0b3Igd2lsbCBoYW5kbGUgc3Vic2VxdWVudCBjb25maWcgY2hhbmdlc1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKTtcbiAgICBpZiAoY29uZmlnPy5wYWdpbmF0aW9uQ29uZmlnICYmIHRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNvbmZpZy5oZWlnaHQ7XG4gICAgICBjb25zdCByZXN1bHQgPSAoaGVpZ2h0IGFzIGFueSkgLSA1NjtcbiAgICAgIGNvbnN0IGZpbmFsSGVpZ2h0ID0gcmVzdWx0ICsgXCJweFwiO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQsIFwiaGVpZ2h0XCIsIGZpbmFsSGVpZ2h0KTtcbiAgICB9XG4gIH1cbiAgXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMudGFibGVMZW5ndGguc2V0KHRoaXMudGFibGVEYXRhKCk/Lmxlbmd0aCA/PyAwKTtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLmFjdGl2ZVJvd0luZGV4ICE9PSBudWxsICYmIHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBhY3RpdmVSb3dJbmRleCA9IHRoaXMudGFibGVDb25maWcoKS5hY3RpdmVSb3dJbmRleDtcbiAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXguc2V0KEFycmF5LmlzQXJyYXkoYWN0aXZlUm93SW5kZXgpID8gYWN0aXZlUm93SW5kZXggOiBbYWN0aXZlUm93SW5kZXhdKVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbHRlciByZWxhdGVkIGZ1bmN0aW9uc1xuICBpbml0aWFsaXplRmlsdGVycygpIHtcbiAgICBjb25zdCBuZXdBcHBsaWVkRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XG4gICAgY29uc3QgYWxsRmlsdGVyczogQXJyYXk8RmlsdGVyPiA9IFtdO1xuICAgIFxuICAgIGZvciAobGV0IGNvbEhlYWRlciBvZiB0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZykge1xuICAgICAgaWYgKGNvbEhlYWRlci5maWx0ZXJzKSB7XG4gICAgICAgIGxldCBmaWx0ZXJzID0gW107XG4gICAgICAgIGZvciAobGV0IGZpbHRlciBvZiBjb2xIZWFkZXIuZmlsdGVycykge1xuICAgICAgICAgIGlmIChmaWx0ZXIuY2hlY2tlZCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogZmlsdGVyLm5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBZGQgYWxsIGZpbHRlcnMgdG8gdGhlIGZpbHRlckRhdGEgYXJyYXlcbiAgICAgICAgICBhbGxGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSBuZXdBcHBsaWVkRmlsdGVyc1tjb2xIZWFkZXIuZGF0YV0gPSBmaWx0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzLnNldChuZXdBcHBsaWVkRmlsdGVycyk7XG4gICAgdGhpcy5maWx0ZXJEYXRhLnNldChhbGxGaWx0ZXJzKTtcbiB9XG4gIHRvZ2dsZUZpbHRlcihmaWx0ZXJOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0ZpbHRlcigpKSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUuc2V0KGZpbHRlck5hbWUpO1xuICAgICAgdGhpcy5zaG93RmlsdGVyLnNldCh0cnVlKTtcblxuICAgICAgbGV0IG9mZlNldCA9IDA7XG4gICAgICBsZXQgY29sSGVhZGVyc1JldmVyc2VkID0gdGhpcy5jb2xIZWFkZXJzLnRvQXJyYXkoKS5yZXZlcnNlKCk7XG5cbiAgICAgIGZvciAobGV0IGhlYWRlciBvZiBjb2xIZWFkZXJzUmV2ZXJzZWQpIHtcbiAgICAgICAgaWYgKGhlYWRlci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCA9PT0gZmlsdGVyTmFtZSkgYnJlYWs7XG4gICAgICAgIG9mZlNldCArPSBoZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyQ29udGFpbmVyU3R5bGVzLnNldCh7XG4gICAgICAgIHRvcDogXCI0NHB4XCIsXG4gICAgICAgIHJpZ2h0OiBvZmZTZXQgPiAwID8gb2ZmU2V0IC0gMTE2ICsgXCJweFwiIDogXCIxMnB4XCJcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlck5hbWUuc2V0KFwiXCIpO1xuICAgICAgdGhpcy5maWx0ZXJEYXRhLnNldChbXSk7XG4gICAgICB0aGlzLnNob3dGaWx0ZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlQXBwbGllZEZpbHRlcnMoYXBwbGllZEZpbHRlcnM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KSB7XG4gICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSB0aGlzLmFwcGxpZWRGaWx0ZXJzKCk7XG4gICAgaWYgKGFwcGxpZWRGaWx0ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBkZWxldGUgY3VycmVudEZpbHRlcnNbdGhpcy5maWx0ZXJOYW1lKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50RmlsdGVyc1t0aGlzLmZpbHRlck5hbWUoKV0gPSBhcHBsaWVkRmlsdGVycztcbiAgICB9XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycy5zZXQoeyAuLi5jdXJyZW50RmlsdGVycyB9KTtcbiAgICB0aGlzLmZpbHRlcnNVcGRhdGVkLmVtaXQoeyAuLi50aGlzLmFwcGxpZWRGaWx0ZXJzKCkgfSk7XG4gICAgdGhpcy50b2dnbGVGaWx0ZXIodGhpcy5maWx0ZXJOYW1lKCkpO1xuICB9XG5cbiAgLy8gUGFnaW5hdGlvbiByZWxhdGVkIGZ1bmN0aW9uc1xuICBpbml0aWFsaXplUGFnaW5hdGlvbigpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgc2VsZWN0ZWRQYWdlIGZyb20gY29uZmlnIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgZGVmYXVsdCB0byAxXG4gICAgICAvLyBjb25zdCBjb25maWdTZWxlY3RlZFBhZ2UgPSB0aGlzLnRhYmxlQ29uZmlnKCkucGFnaW5hdGlvbkNvbmZpZy5zZWxlY3RlZFBhZ2U7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUGFnZS5zZXQoY29uZmlnU2VsZWN0ZWRQYWdlID8/IDEpO1xuICAgICAgXG4gICAgICBsZXQgbGVuID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzO1xuICAgICAgaWYgKGxlbiA8PSA3KSB7XG4gICAgICAgIGNvbnN0IG5ld1BhZ2VzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxlbjsgaSsrKSB7XG4gICAgICAgICAgbmV3UGFnZXMucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhZ2VzLnNldChuZXdQYWdlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwZGF0ZVNlbGVjdGVkUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICAvLyBHdWFyZCBjbGF1c2UgdG8gcHJldmVudCBvdXQtb2YtcmFuZ2UgdXBkYXRlc1xuICAgIGlmIChwYWdlTnVtYmVyIDwgMSB8fCBwYWdlTnVtYmVyID4gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzKSByZXR1cm47XG5cbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgc2VsZWN0ZWRQYWdlIHN0YXRlIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5zZWxlY3RlZFBhZ2Uuc2V0KHBhZ2VOdW1iZXIpO1xuXG4gICAgLy8gUmVzZXQgaGVhZGVyIGNoZWNrYm94IHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBwYWdlXG4gICAgdGhpcy5zZWxlY3RBbGxDaGVja2JveC5zZXQoZmFsc2UpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBwYWdlIG51bWJlcnMgZGlzcGxheSBmb3IgcGFnaW5hdGlvbiB3aXRoIG1hbnkgcGFnZXNcbiAgICBsZXQgbGVuID0gdGhpcy50YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcubm9PZlBhZ2VzO1xuICAgIGlmIChsZW4gPiA3KSB7XG4gICAgICBpZiAocGFnZU51bWJlciAtIDIgPD0gMSkge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMiwgMywgNCwgMCwgbGVuXSk7XG4gICAgICB9IGVsc2UgaWYgKHBhZ2VOdW1iZXIgLSAyID4gMSAmJiBwYWdlTnVtYmVyICsgMiA8IGxlbikge1xuICAgICAgICB0aGlzLnBhZ2VzLnNldChbMSwgMCwgcGFnZU51bWJlciAtIDEsIHBhZ2VOdW1iZXIsIHBhZ2VOdW1iZXIgKyAxLCAwLCBsZW5dKTtcbiAgICAgIH0gZWxzZSBpZiAocGFnZU51bWJlciArIDIgPj0gbGVuKSB7XG4gICAgICAgIHRoaXMucGFnZXMuc2V0KFsxLCAwLCBsZW4gLSAzLCBsZW4gLSAyLCBsZW4gLSAxLCBsZW5dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRW1pdCB0byBwYXJlbnQgc28gdGhleSBjYW4gdXBkYXRlIHRoZWlyIGNvbmZpZ1xuICAgIHRoaXMucGFnZVNlbGVjdGVkLmVtaXQocGFnZU51bWJlcik7XG4gIH1cblxuICAvLyBNYWluIGNvbnRhaW5lciByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb250YWluZXJIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVDb25maWcoKT8uaGVpZ2h0KSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLmhlaWdodDtcbiAgICBlbHNlIHJldHVybiBcIlwiO1xuICB9XG4gIGdldENvbnRhaW5lcldpZHRoKCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCk/LndpZHRoKSByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpLndpZHRoO1xuICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvLyBDb2x1bW4gSGVhZGVycyByZWxhdGVkIGZ1bmN0aW9uc1xuICBnZXRDb2xIZWFkZXJzUm93U3R5bGVzKCkge1xuICAgIGNvbnN0IHsgY29sSGVhZGVyc1Jvd0NvbmZpZyB9ID0gdGhpcy50YWJsZUNvbmZpZygpO1xuICAgIGNvbnN0IG1pbkhlaWdodCA9IGNvbEhlYWRlcnNSb3dDb25maWc/LmhlaWdodCB8fCBcIjQ0cHhcIjtcbiAgICBjb25zdCBib3JkZXJUb3AgPSAoY29sSGVhZGVyc1Jvd0NvbmZpZz8uc3R5bGUgYXMgYW55KT8uYm9yZGVyVG9wIHx8IFwiXCI7XG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJvcmRlckJvdHRvbSB8fCBcIjFweCBzb2xpZCAjRTBFMEUwXCI7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gKGNvbEhlYWRlcnNSb3dDb25maWc/LnN0eWxlIGFzIGFueSk/LmJhY2tncm91bmRDb2xvciB8fCBcIiNGRkZGRkZcIjtcbiAgICBjb25zdCBmb250U2l6ZSA9IChjb2xIZWFkZXJzUm93Q29uZmlnPy5zdHlsZSBhcyBhbnkpPy5mb250U2l6ZSB8fCBcIjE0cHhcIjtcbiAgICByZXR1cm4ge1xuICAgICAgXCJtaW4taGVpZ2h0XCI6IG1pbkhlaWdodCxcbiAgICAgIFwiYm9yZGVyLXRvcFwiOiBib3JkZXJUb3AsXG4gICAgICBcImJvcmRlci1ib3R0b21cIjogYm9yZGVyQm90dG9tLFxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IGJhY2tncm91bmRDb2xvcixcbiAgICAgIFwiZm9udC1zaXplXCI6IGZvbnRTaXplXG4gICAgfTtcbiAgfVxuXG4gIG9uU29ydENoYW5nZShzb3J0U3RhdGU6IFNvcnRTdGF0ZSkge1xuICAgIC8vIEVtaXQgdGhlIHNvcnQgY2hhbmdlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydFN0YXRlKTtcbiAgICBcbiAgICAvLyBIYW5kbGUgbXVsdGktY29sdW1uIHNvcnQgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKCkubXVsdGlDb2x1bW5Tb3J0KSB7XG4gICAgICBjb25zdCBjdXJyZW50TXVsdGlTb3J0ID0gdGhpcy5tdWx0aUNvbHVtblNvcnQoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudE11bHRpU29ydC5maW5kSW5kZXgoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gc29ydFN0YXRlLmNvbHVtbik7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGlmIChzb3J0U3RhdGUuZGlyZWN0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgbmV3TXVsdGlTb3J0ID0gWy4uLmN1cnJlbnRNdWx0aVNvcnRdO1xuICAgICAgICAgIG5ld011bHRpU29ydC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ld011bHRpU29ydCA9IFsuLi5jdXJyZW50TXVsdGlTb3J0XTtcbiAgICAgICAgICBuZXdNdWx0aVNvcnRbaW5kZXhdID0gc29ydFN0YXRlO1xuICAgICAgICAgIHRoaXMubXVsdGlDb2x1bW5Tb3J0LnNldChuZXdNdWx0aVNvcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvcnRTdGF0ZS5kaXJlY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5tdWx0aUNvbHVtblNvcnQuc2V0KFsuLi5jdXJyZW50TXVsdGlTb3J0LCBzb3J0U3RhdGVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBY3Rpb25zQ2VsbFN0eWxlKHN0eWxlOiBhbnkpOiBhbnkge1xuICAgIGlmICghc3R5bGUpIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHdpZHRoLCAuLi5yZXN0U3R5bGUgfSA9IHN0eWxlO1xuICAgIHJldHVybiByZXN0U3R5bGU7XG4gIH1cblxuICBvbkFjdGlvbkNsaWNrKGV2ZW50OiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgY29uc3QgY3VycmVudEFjdGl2ZVJvd3MgPSB0aGlzLmFjdGl2ZVJvd0luZGV4KCk7XG4gICAgICBpZiAoZXZlbnQudmFsdWUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoWy4uLmN1cnJlbnRBY3RpdmVSb3dzLCByb3dJbmRleF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleC5zZXQoY3VycmVudEFjdGl2ZVJvd3MuZmlsdGVyKGluZGV4ID0+IGluZGV4ICE9PSByb3dJbmRleCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb25JbmZvID0gdGhpcy5maW5kQWN0aW9uQ29uZmlnKCdjaGVja2JveCcpO1xuICAgICAgaWYgKGFjdGlvbkluZm8gJiYgdGhpcy50YWJsZURhdGEoKVtyb3dJbmRleF0pIHtcbiAgICAgICAgY29uc3QgeyBpbmRleCwgY29uZmlnIH0gPSBhY3Rpb25JbmZvO1xuICAgICAgICAvLyBOb3RlOiBXZSBjYW4ndCBkaXJlY3RseSBtb2RpZnkgaW5wdXQgc2lnbmFscywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwYXJlbnQgY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKHJvdyA9PiByb3dbaW5kZXhdID09PSB0cnVlKTtcbiAgICAgICAgY29uZmlnLmFjdGlvbj8uKGNoZWNrZWRJdGVtcyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYoZXZlbnQuYWN0aW9uVHlwZSA9PT0gJ3Jvdy1jb2xsYXBzZScpe1xuICAgICAgY29uc3Qgcm93Q29sbGFwc2UgPSB0aGlzLmZpbmRBY3Rpb25Db25maWcoJ3Jvdy1jb2xsYXBzZScpO1xuICAgICAgaWYgKHJvd0NvbGxhcHNlICYmIHRoaXMudGFibGVEYXRhKClbcm93SW5kZXhdKSB7XG4gICAgICAgIC8vIE5vdGU6IFdlIGNhbid0IGRpcmVjdGx5IG1vZGlmeSBpbnB1dCBzaWduYWxzLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgcm93Q29sbGFwc2UuY29uZmlnLmFjdGlvbj8uKHRoaXMudGFibGVEYXRhKCkpO1xuICAgICAgICB0aGlzLmJ1aWxkRXhwYW5kZWRNYXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaW5kQWN0aW9uQ29uZmlnKGFjdGlvblR5cGU6IHN0cmluZyk6IHsgaW5kZXg6IG51bWJlciwgY29uZmlnOiBDb2xDb25maWcgfSB8IG51bGwge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tpXTtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2FjdGlvbnMnICYmIGNvbC5hY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XG4gICAgICAgIHJldHVybiB7IGluZGV4OiBpLCBjb25maWc6IGNvbCB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBcblxuICBpc1Jvd0Rpc2FibGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmRpc2FibGVSb3cgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudGFibGVDb25maWcoKS5yb3dDb25maWcuZGlzYWJsZVJvdyhyb3cpIDogZmFsc2U7XG4gIH1cblxuICB0b2dnbGVDaGVja2JveCgpIHtcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrYm94LnNldCghdGhpcy5zZWxlY3RBbGxDaGVja2JveCgpKTtcbiAgICBjb25zdCBjaGVja2JveENvbEluZGV4ID0gdGhpcy50YWJsZUNvbmZpZygpLmNvbENvbmZpZy5maW5kSW5kZXgoY29sID0+IGNvbC50eXBlID09PSAnYWN0aW9ucycgJiYgY29sLmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcpO1xuICAgIGlmIChjaGVja2JveENvbEluZGV4ICE9PSAtMSkge1xuICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgZGlyZWN0bHkgbW9kaWZ5IGlucHV0IHNpZ25hbHMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudFxuICAgICAgY29uc3QgdXBkYXRlZFRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhKCkubWFwKChyb3c6IGFueVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSBbLi4ucm93XTtcbiAgICAgICAgY29uc3QgY3VycmVudENoZWNrYm94ID0gdXBkYXRlZFJvd1tjaGVja2JveENvbEluZGV4XTtcbiAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuaXNSb3dEaXNhYmxlZChyb3cpO1xuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgICB1cGRhdGVkUm93W2NoZWNrYm94Q29sSW5kZXhdID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGRhdGVkUm93O1xuICAgICAgfSk7XG4gICAgICB0aGlzLmhlYWRlckFjdGlvbj8uZW1pdCh7XG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hUb2dnbGVcIixcbiAgICAgICAgcGF5bG9hZDogdXBkYXRlZFRhYmxlRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNlbGVjdGVkT3B0aW9uOiBEcm9wZG93bkl0ZW0pIHtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHBhcnNlSW50KHNlbGVjdGVkT3B0aW9uLnZhbHVlKSk7XG4gIH1cblxuICBzaG91bGRTaG93UGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKT8ucGFnaW5hdGlvbkNvbmZpZztcbiAgICAgIGlmICghY29uZmlnKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBoYXNNdWx0aXBsZVBhZ2VzID0gY29uZmlnLm5vT2ZQYWdlcyA+IDE7XG4gICAgICBjb25zdCBoYXNFbm91Z2hEYXRhID0gdGhpcy50YWJsZUxlbmd0aCgpID4gY29uZmlnLnJvd3NQZXJQYWdlO1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1BhZ2VTaXplRHJvcGRvd24oKSB8fCBoYXNNdWx0aXBsZVBhZ2VzIHx8IGhhc0Vub3VnaERhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbmZpZyB7XG4gIGhlaWdodDogc3RyaW5nIHwgXCIxMDAlXCI7XG4gIHdpZHRoOiBzdHJpbmcgfCBcIjEwMCVcIjtcbiAgcGFnaW5hdGlvbkNvbmZpZz86IFBhZ2luYXRpb25Db25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICBjb2xIZWFkZXJzUm93Q29uZmlnOiBSb3dDb25maWcgfCB1bmRlZmluZWQgfCBudWxsO1xuICByb3dDb25maWc6IFJvd0NvbmZpZyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gIGNvbEhlYWRlckNvbmZpZzogQXJyYXk8Q29sSGVhZGVyQ29uZmlnPjtcbiAgY29sQ29uZmlnOiBBcnJheTxDb2xDb25maWc+O1xuICBjYW5FeHBhbmQ/OiBib29sZWFuO1xuICBjYW5TY3JvbGxIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBjZWxsSG92ZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dJbmRleD86IG51bWJlciB8IG51bWJlcltdO1xuICBtdWx0aUNvbHVtblNvcnQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ29uZmlnIHtcbiAgbm9PZlBhZ2VzOiBudW1iZXI7XG4gIHJvd3NQZXJQYWdlOiBudW1iZXI7XG4gIHRvdGFsTm9PZlJvd3M6IG51bWJlcjtcbiAgc2VsZWN0ZWRQYWdlPzogbnVtYmVyO1xuICBkaXNhYmxlUGFnZUp1bXBpbmc/OiBib29sZWFuO1xuICBzaG93UGFnZVNpemVEcm9wZG93bj86IGJvb2xlYW47IC8vIFdoZW4gdHJ1ZSwgcm93c1BlclBhZ2UgdmFsdWUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHBhZ2VTaXplcyBhcnJheVxuICBwYWdlU2l6ZXM/OiBudW1iZXJbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm93Q29uZmlnIHtcbiAgaGVpZ2h0Pzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBkaXNhYmxlUm93PzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sSGVhZGVyQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiY2hlY2tib3hcIjtcbiAgZGF0YTogYW55O1xuICBjb21wb25lbnRSZWY/OiBhbnk7XG4gIGZpbHRlcnM/OiBBcnJheTxGaWx0ZXI+IHwgbnVsbDtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBpc1NvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydEFzY0ljb24/OiBzdHJpbmc7XG4gIHNvcnREZXNjSWNvbj86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sQ29uZmlnIHtcbiAgdHlwZTogXCJ0ZXh0XCIgfCBcIm51bWJlclwiIHwgXCJjdXN0b21cIiB8IFwiYWN0aW9uc1wiIHwgXCJodG1sXCI7XG4gIGNvbXBvbmVudFJlZj86IGFueTtcbiAgc3R5bGU/OiB7fTtcbiAgYWN0aW9uPzogYW55O1xuICBhY3Rpb25JdGVtcz86IEFjdGlvbkl0ZW1bXTtcbiAgYWN0aW9uVHlwZT86IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImNoZWNrYm94XCIgfCBcInJvdy1jb2xsYXBzZVwiOyAvLyBpbmxpbmUgZm9yIGluZGl2aWR1YWwgaWNvbnMsIGRyb3Bkb3duIGZvciBtZW51XG4gIGRpc2FibGU/OiAocm93RGF0YTogYW55KSA9PiBib29sZWFuO1xuICBjb2xsYXBzZUNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBwcmV2aWV3TGluZXM/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBkaXNhYmxlPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgYWN0aW9uPzogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgY2hpbGRyZW4/OiBBY3Rpb25JdGVtW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQWN0aW9uSXRlbSBleHRlbmRzIEFjdGlvbkl0ZW0ge1xuICBzaG93U3VibWVudT86IGJvb2xlYW47XG59XG4iLCI8ZGl2XG4gIFtuZ1N0eWxlXT1cIntcbiAgICBoZWlnaHQ6IGdldENvbnRhaW5lckhlaWdodCgpLFxuICAgIHdpZHRoOiBnZXRDb250YWluZXJXaWR0aCgpLFxuICAgICdvdmVyZmxvdy14JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgPyAnYXV0bycgOiAndW5zZXQnXG4gIH1cIlxuICBpZD1cIm1haW4tY29udGFpbmVyXCJcbj5cbiAgPG1pcy10YWJsZS1maWx0ZXJcbiAgICAjZmlsdGVyXG4gICAgKGZpbHRlcnNBcHBsaWVkKT1cInVwZGF0ZUFwcGxpZWRGaWx0ZXJzKCRldmVudClcIlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlcigpXCJcbiAgICBbY29udGFpbmVyU3R5bGVzXT1cImZpbHRlckNvbnRhaW5lclN0eWxlcygpXCJcbiAgICBbZmlsdGVyc0RhdGFdPVwiZmlsdGVyRGF0YSgpXCJcbiAgPjwvbWlzLXRhYmxlLWZpbHRlcj5cbiAgPGRpdlxuICAgICN0YWJsZVxuICAgIGlkPVwidGFibGUtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7ICduby1zY3JvbGxiYXInOiBleHBhbmRlZEluZGV4KCkgPCAwLCBzY3JvbGxiYXI6ICEoZXhwYW5kZWRJbmRleCgpIDwgMCksICdzY3JvbGwtaG9yaXpvbnRhbGx5JzogdGFibGVDb25maWcoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgfVwiXG4gID5cbiAgICA8ZGl2XG4gICAgW25nU3R5bGVdPVwiZ2V0Q29sSGVhZGVyc1Jvd1N0eWxlcygpXCJcbiAgICAgIGlkPVwiY29sLWhlYWRlcnMtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICNjb2xIZWFkZXJSZWZcbiAgICAgICAgKGNsaWNrKT1cImNvbEhlYWRlcj8uYWN0aW9uID8gY29sSGVhZGVyPy5hY3Rpb24oY29sSGVhZGVyKSA6IG51bGxcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sSGVhZGVyIG9mIHRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZ1wiXG4gICAgICAgIGNsYXNzPVwiY29sLWhlYWRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICB3aWR0aDogY29sSGVhZGVyPy5zdHlsZT8ud2lkdGggfHwgJycsXG4gICAgICAgICAgY3Vyc29yOiBjb2xIZWFkZXIuYWN0aW9uID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgPyBjb2xIZWFkZXI/LnN0eWxlPy5qdXN0aWZ5Q29udGVudFxuICAgICAgICAgICAgOiBjb2xIZWFkZXIudHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gJ2ZsZXgtZW5kJ1xuICAgICAgICAgICAgOiAnc3BhY2UtYmV0d2VlbidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxwICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlICE9PSAnY3VzdG9tJyAmJiBjb2xIZWFkZXI/LnR5cGUgIT09ICdjaGVja2JveCdcIiBjbGFzcz1cImNvbC1oZWFkZXItdGV4dFwiPlxuICAgICAgICAgIHt7IGNvbEhlYWRlcj8uZGF0YSB8fCBcIiBcIiB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cImZpbHRlckRhdGEuc2V0KGNvbEhlYWRlci5maWx0ZXJzKTsgdG9nZ2xlRmlsdGVyKGNvbEhlYWRlci5kYXRhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSAhPT0gJ2N1c3RvbScgJiYgY29sSGVhZGVyPy5maWx0ZXJzICYmIGNvbEhlYWRlcj8uZmlsdGVycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImFwcGxpZWRGaWx0ZXJzKClbY29sSGVhZGVyLmRhdGFdPy5sZW5ndGggPiAwXCIgaWQ9XCJmaWx0ZXItYWN0aXZlXCI+PC9zcGFuPlxuICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMTMgMTBcIiB3aWR0aD1cIjEzXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGQ9XCJNNC45NzU0NiAxMEg3LjY0MjEzVjhINC45NzU0NlYxMFpNMC4zMDg0NzIgMFYySDEyLjMwODVWMEgwLjMwODQ3MlpNMi4zMDg0NyA2SDEwLjMwODVWNEgyLjMwODQ3VjZaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2hlY2tib3goKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAqbmdJZj1cImNvbEhlYWRlcj8udHlwZSA9PT0gJ2NoZWNrYm94J1wiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1pY29uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtaXMtY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tib3goKVwiPjwvbWlzLWNoZWNrYm94PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiY29sSGVhZGVyPy5pc1NvcnRhYmxlICYmICFjb2xIZWFkZXI/LmZpbHRlcnNcIiBhcHBTb3J0SWNvbnNcbiAgICAgICAgICBbY29sdW1uXT1cImNvbEhlYWRlclwiXG4gICAgICAgICAgW2FjdGl2ZVNvcnRdPVwiY3VycmVudFNvcnQoKVwiXG4gICAgICAgICAgW2FjdGl2ZVNvcnRzXT1cIm11bHRpQ29sdW1uU29ydCgpXCJcbiAgICAgICAgICBbbXVsdGlDb2x1bW5Tb3J0XT1cInRhYmxlQ29uZmlnKCkubXVsdGlDb2x1bW5Tb3J0XCJcbiAgICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJzb3J0LWljb25cIj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29sSGVhZGVyPy50eXBlID09PSAnY3VzdG9tJ1wiIGN1c3RvbVRhYmxlQ2VsbCBbY3VzdG9tQ29tcG9uZW50XT1cImNvbEhlYWRlcj8uY29tcG9uZW50UmVmXCIgW2RhdGFdPVwiY29sSGVhZGVyLmRhdGFcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBpZD1cImRhdGEtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93LXdyYXBwZXJcIiAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlRGF0YSgpOyBsZXQgaSA9IGluZGV4OyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0LXJvd1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAndC1yb3ctaG92ZXInOiB0YWJsZUNvbmZpZygpLmNlbGxIb3ZlciwgJ2FjdGl2ZS1yb3cnOiBhY3RpdmVSb3dJbmRleCgpLmluY2x1ZGVzKGkpIH1cIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ21pbi1oZWlnaHQnOiB0YWJsZUNvbmZpZygpPy5yb3dDb25maWc/LmhlaWdodCA/IHRhYmxlQ29uZmlnKCkucm93Q29uZmlnLmhlaWdodCA6ICc0NHB4JyB9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Um93KGkpXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtcm93XT1cImlzUm93RGlzYWJsZWQocm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZUNvbmZpZygpPy5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb24gJiYgdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uYWN0aW9uVHlwZSAhPT0gJ2NoZWNrYm94JyA/IHRhYmxlQ29uZmlnKCk/LmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvbihjb2wpIDogbnVsbFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHJvdzsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICB3aWR0aDogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LndpZHRoIHx8IHRhYmxlQ29uZmlnKCk/LmNvbEhlYWRlckNvbmZpZ1tjb2xJbmRleF0/LnN0eWxlPy53aWR0aCB8fCAnJ1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cInQtY29sLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0LWNvbC1jb250YWluZXItaG92ZXInOiB0YWJsZUNvbmZpZygpLmNlbGxIb3ZlciB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidC1jb2xcIlxuICAgICAgICAgICAgICBbc3R5bGVdPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5zdHlsZVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICA/IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/Lmp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICA6IHRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgID8gJ2ZsZXgtZW5kJ1xuICAgICAgICAgICAgICAgICAgOiAnc3BhY2UtYmV0d2VlbidcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnKCkuY29sQ29uZmlnW2NvbEluZGV4XT8udHlwZSAhPT0gJ2N1c3RvbScgJiYgdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlICE9PSAnYWN0aW9ucydcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBjb2xvcjogdGFibGVDb25maWcoKT8uY29sQ29uZmlnW2NvbEluZGV4XT8uc3R5bGU/LmNvbG9yIHx8ICcnLFxuICAgICAgICAgICAgICAnLS1jb2xsYXBzZWQtbGluZXMnOiBwcmV2aWV3TGluZXMoKSB8fCAzXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbGxhcHNlZC1jZWxsJzogY29sbGFwc2VDb2xJbmRleCgpID09IGNvbEluZGV4ICYmIGV4cGFuZGVkTWFwKClbcm93SW5kZXhdXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1jb2wtdGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBSZW5kZXIgYXMgSFRNTCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdodG1sJzsgZWxzZSBwbGFpblRleHRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjb2xcIj48L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gUmVuZGVyIGFzIHBsYWluIHRleHQgLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWluVGV4dD5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgY29sIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy50eXBlID09PSAnY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNvbXBvbmVudF09XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0uY29tcG9uZW50UmVmXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgIGN1c3RvbVRhYmxlQ2VsbFxuICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bWlzLWFjdGlvbnMtY2VsbFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LnR5cGUgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICBbY2VsbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgIFtjb25maWddPVwidGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtYWN0aW9ucyc6ICh0YWJsZUNvbmZpZygpLmNvbENvbmZpZ1tjb2xJbmRleF0/LmFjdGlvblR5cGUgPT09ICdjaGVja2JveCcgfHwgdGFibGVDb25maWcoKS5jb2xDb25maWdbY29sSW5kZXhdPy5hY3Rpb25UeXBlID09PSAncm93LWNvbGxhcHNlJykgJiYgaXNSb3dEaXNhYmxlZChyb3cpXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+PC9taXMtYWN0aW9ucy1jZWxsPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0YWJsZUNvbmZpZygpPy5jYW5FeHBhbmQgJiYgZXhwYW5kZWRJbmRleCgpID09PSBpXCIgY2xhc3M9XCJzdWItcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YlRhYmxlRGF0YUxvYWRpbmcoKVwiPlxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcuLi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3ViVGFibGVEYXRhTG9hZGluZygpICYmIHN1YlRhYmxlRGF0YSgpLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIE5vIERhdGEgQXZhaWxhYmxlLi4uXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1YlRhYmxlRGF0YUxvYWRpbmcoKSAmJiBzdWJUYWJsZURhdGEoKS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8c3ViLXRhYmxlIFtjb25maWddPVwic3ViVGFibGVjb25maWcoKVwiIFt0YWJsZURhdGFdPVwic3ViVGFibGVEYXRhKClcIj48L3N1Yi10YWJsZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgaWQ9XCJwYWdpbmF0aW9uLWNvbnRlbnQtY29udGFpbmVyXCI+XG4gICAgQGlmKHNob3VsZFNob3dQYWdpbmF0aW9uKCkpe1xuICAgICAgPGRpdiBcbiAgICAgICAgaWQ9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDxwIGlkPVwicGFnaW5hdGlvbi10ZXh0XCI+XG4gICAgICAgICAgU2hvd2luZ1xuICAgICAgICAgIHt7IChzZWxlY3RlZFBhZ2UoKSAtIDEpICogdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnLnJvd3NQZXJQYWdlICsgMSB9fS17e1xuICAgICAgICAgICAgKHNlbGVjdGVkUGFnZSgpIC0gMSkgKiB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcucm93c1BlclBhZ2UgKyB0YWJsZUxlbmd0aCgpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvZiB7eyB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWcudG90YWxOb09mUm93cyB9fSBpdGVtc1xuICAgICAgICA8L3A+XG4gICAgICAgIEBpZihzaG93UGFnZVNpemVEcm9wZG93bigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgPG1pcy1kcm9wZG93blxuICAgICAgICAgICAgICBbZGF0YV09XCJwYWdlU2l6ZU9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1dPVwic2VsZWN0ZWRQYWdlU2l6ZU9wdGlvbigpXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJvcGRvd25MaXN0SGVpZ2h0XT1cIicxMDBweCdcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlLXNpemUtZHJvcGRvd25cIlxuICAgICAgICAgICAgPjwvbWlzLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgaWQ9XCJwYWdlcy1jb250YWluZXJcIj5cbiAgICAgICAgICA8c3BhbiAgIChjbGljayk9XCJzZWxlY3RlZFBhZ2UoKSA+IDEgJiYgdXBkYXRlU2VsZWN0ZWRQYWdlKHNlbGVjdGVkUGFnZSgpIC0gMSlcIiBjbGFzcz1cInBhZ2VcIiBbY2xhc3MucGFnZS1uYXYtaW5hY3RpdmVdPVwic2VsZWN0ZWRQYWdlKCkgPT09IDFcIj5cbiAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICBkPVwiTTAuODU3NDA1IDUuNTYyOTVDMC44NTU3OTQgNS41NjEzOSAwLjg1NDE4OCA1LjU1OTgyIDAuODUyNTg4IDUuNTU4MjRDMC42OTU5NTUgNS40MDQwOCAwLjYxNzY0MSA1LjIwMjAzIDAuNjE3NjQ3IDQuOTk5OThDMC42MTc2NDEgNC43OTc5MyAwLjY5NTk1NSA0LjU5NTg4IDAuODUyNTg4IDQuNDQxNzJDMC44NTQxODggNC40NDAxNCAwLjg1NTc5NCA0LjQzODU4IDAuODU3NDA0IDQuNDM3MDJMNS4xMzA2NiAwLjIzMTIzMUM1LjQ0MzkyIC0wLjA3NzA3NzEgNS45NTE4IC0wLjA3NzA3NzEgNi4yNjUwNiAwLjIzMTIzMUM2LjU3ODMxIDAuNTM5NTQgNi41NzgzMSAxLjAzOTQxIDYuMjY1MDYgMS4zNDc3MkwyLjU1NDIgNC45OTk5OEw2LjI2NTA2IDguNjUyMjVDNi41NzgzMSA4Ljk2MDU1IDYuNTc4MzEgOS40NjA0MiA2LjI2NTA2IDkuNzY4NzNDNS45NTE4IDEwLjA3NyA1LjQ0MzkyIDEwLjA3NyA1LjEzMDY2IDkuNzY4NzNMMC44NTc0MDUgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gUGFnZSBudW1iZXJzIChvbmx5IHNob3cgaWYgZGlzYWJsZVBhZ2VKdW1waW5nIGlzIGZhbHNlKSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5kaXNhYmxlUGFnZUp1bXBpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFnZU51bWJlciBvZiBwYWdlcygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3RlZFBhZ2UocGFnZU51bWJlcilcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlTnVtYmVyICE9IDBcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncGFnZS1hY3RpdmUnOiBwYWdlTnVtYmVyID09PSBzZWxlY3RlZFBhZ2UoKSB9XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFnZSBwYWdlLWp1bXBpbmctZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgPnt7IHBhZ2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWdlTnVtYmVyID09IDBcIiBjbGFzcz1cInBhZ2Utc2VwZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgZGlzcGxheTogJ2ZsZXgnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RcIiBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnNHB4JyB9XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiIFtuZ1N0eWxlXT1cInsgJ21hcmdpbi1yaWdodCc6ICc0cHgnIH1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgICAgPHNwYW4gW2NsYXNzLnBhZ2UtbmF2LWluYWN0aXZlXT1cInNlbGVjdGVkUGFnZSgpID09PSB0YWJsZUNvbmZpZygpLnBhZ2luYXRpb25Db25maWc/Lm5vT2ZQYWdlc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkUGFnZSgpIDwgdGFibGVDb25maWcoKS5wYWdpbmF0aW9uQ29uZmlnPy5ub09mUGFnZXMgJiYgdXBkYXRlU2VsZWN0ZWRQYWdlKHNlbGVjdGVkUGFnZSgpICsgMSlcIiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgICAgICAgIDxzdmcgZmlsbD1cIm5vbmVcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNyAxMFwiIHdpZHRoPVwiN1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICBkPVwiTTYuMTQyNiA1LjU2Mjk1QzYuMTQ0MjEgNS41NjEzOSA2LjE0NTgxIDUuNTU5ODIgNi4xNDc0MSA1LjU1ODI0QzYuMzA0MDUgNS40MDQwOCA2LjM4MjM2IDUuMjAyMDMgNi4zODIzNiA0Ljk5OTk4QzYuMzgyMzYgNC43OTc5MyA2LjMwNDA1IDQuNTk1ODggNi4xNDc0MSA0LjQ0MTcyQzYuMTQ1ODEgNC40NDAxNCA2LjE0NDIxIDQuNDM4NTggNi4xNDI2IDQuNDM3MDJMMS44NjkzNCAwLjIzMTIzMUMxLjU1NjA4IC0wLjA3NzA3NzEgMS4wNDgyIC0wLjA3NzA3NzEgMC43MzQ5NDIgMC4yMzEyMzFDMC40MjE2ODggMC41Mzk1NCAwLjQyMTY4OCAxLjAzOTQxIDAuNzM0OTQyIDEuMzQ3NzJMNC40NDU4IDQuOTk5OThMMC43MzQ5NDEgOC42NTIyNUMwLjQyMTY4NiA4Ljk2MDU1IDAuNDIxNjg2IDkuNDYwNDIgMC43MzQ5NDEgOS43Njg3M0MxLjA0ODIgMTAuMDc3IDEuNTU2MDggMTAuMDc3IDEuODY5MzQgOS43Njg3M0w2LjE0MjYgNS41NjI5NVpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -414,6 +414,35 @@ class TableComponent {
414
414
  if (this.rowCollapseConfigIndex() !== -1) {
415
415
  this.buildExpandedMap();
416
416
  }
417
+ // --- PAGINATION PAGE ARRAY LOGIC (MOVED/REPLACED initializePagination) ---
418
+ const len = config?.paginationConfig?.noOfPages;
419
+ const disablePageJumping = config?.paginationConfig?.disablePageJumping;
420
+ // Only run if pagination is configured and page jumping is enabled
421
+ if (len && len > 0 && !disablePageJumping) {
422
+ // Read the internal state of the selected page for calculating the pages array.
423
+ // Since this runs on every config change, we rely on the value set
424
+ // by updateSelectedPage().
425
+ const pageNumber = this.selectedPage();
426
+ if (len <= 7) {
427
+ const newPages = [];
428
+ for (let i = 1; i <= len; i++) {
429
+ newPages.push(i);
430
+ }
431
+ this.pages.set(newPages);
432
+ }
433
+ else {
434
+ if (pageNumber - 2 <= 1) {
435
+ this.pages.set([1, 2, 3, 4, 0, len]);
436
+ }
437
+ else if (pageNumber - 2 > 1 && pageNumber + 2 < len) {
438
+ this.pages.set([1, 0, pageNumber - 1, pageNumber, pageNumber + 1, 0, len]);
439
+ }
440
+ else if (pageNumber + 2 >= len) {
441
+ this.pages.set([1, 0, len - 3, len - 2, len - 1, len]);
442
+ }
443
+ }
444
+ }
445
+ // --- END PAGINATION PAGE ARRAY LOGIC ---
417
446
  if (config?.paginationConfig?.showPageSizeDropdown) {
418
447
  const options = this.pageSizeOptions();
419
448
  const rowsPerPage = this.tableConfig()?.paginationConfig?.rowsPerPage;
@@ -589,8 +618,8 @@ class TableComponent {
589
618
  initializePagination() {
590
619
  if (this.tableConfig().paginationConfig) {
591
620
  // Initialize selectedPage from config if provided, otherwise default to 1
592
- const configSelectedPage = this.tableConfig().paginationConfig.selectedPage;
593
- this.selectedPage.set(configSelectedPage ?? 1);
621
+ // const configSelectedPage = this.tableConfig().paginationConfig.selectedPage;
622
+ // this.selectedPage.set(configSelectedPage ?? 1);
594
623
  let len = this.tableConfig().paginationConfig.noOfPages;
595
624
  if (len <= 7) {
596
625
  const newPages = [];
@@ -1 +1 @@
1
- {"version":3,"file":"mis-crystal-design-system-table.mjs","sources":["../../../projects/mis-components/table/table.component.html","../../../projects/mis-components/table/table.component.ts","../../../projects/mis-components/table/custom-table-cell.directive.ts","../../../projects/mis-components/table/sub-table/sub-table.component.html","../../../projects/mis-components/table/sub-table/sub-table.component.ts","../../../projects/mis-components/table/filter/filter.component.html","../../../projects/mis-components/table/filter/filter.component.ts","../../../projects/mis-components/table/sort-icons.directive.ts","../../../projects/mis-components/table/actions-cell/actions-cell.component.html","../../../projects/mis-components/table/actions-cell/actions-cell.component.ts","../../../projects/mis-components/table/table.module.ts","../../../projects/mis-components/table/mis-crystal-design-system-table.ts"],"sourcesContent":["<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters()[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n \n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[colIndex]?.action && tableConfig()?.colConfig[colIndex]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[colIndex]?.action(col) : null\"\n *ngFor=\"let col of row; let colIndex = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[colIndex]?.style?.width || tableConfig()?.colHeaderConfig[colIndex]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[colIndex]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[colIndex]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[colIndex]?.style?.justifyContent\n ? tableConfig().colConfig[colIndex]?.style?.justifyContent\n : tableConfig().colConfig[colIndex]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[colIndex]?.type !== 'custom' && tableConfig().colConfig[colIndex]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[colIndex]?.style?.color || '',\n '--collapsed-lines': previewLines() || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex() == colIndex && expandedMap()[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[colIndex].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[colIndex]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[colIndex]?.actionType === 'checkbox' || tableConfig().colConfig[colIndex]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex() === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading()\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length > 0\">\n <sub-table [config]=\"subTableconfig()\" [tableData]=\"subTableData()\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div id=\"pagination-content-container\">\n @if(shouldShowPagination()){\n <div \n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n @if(showPageSizeDropdown()) {\n <div class=\"page-size-selector\">\n <mis-dropdown\n [data]=\"pageSizeOptions()\"\n [selectedItem]=\"selectedPageSizeOption()\"\n [width]=\"'90px'\"\n [height]=\"'32px'\"\n [searchEnabled]=\"false\"\n [dropdownListHeight]=\"'100px'\"\n (onChange)=\"onPageSizeChange($event)\"\n class=\"page-size-dropdown\"\n ></mis-dropdown>\n </div>\n }\n <div id=\"pages-container\">\n <span (click)=\"selectedPage() > 1 && updateSelectedPage(selectedPage() - 1)\" class=\"page\" [class.page-nav-inactive]=\"selectedPage() === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber === selectedPage() }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"selectedPage() === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"selectedPage() < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(selectedPage() + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n OnChanges,\n OnInit,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n input,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n untracked\n} from \"@angular/core\";\nimport { Filter, TableFilterComponent } from \"./filter/filter.component\";\nimport { SortState } from \"./sort-icons.directive\";\nimport { effect } from \"@angular/core\";\nimport { DropdownItem } from \"mis-crystal-design-system/dropdown\";\n\n@Component({\n selector: \"mis-table\",\n templateUrl: \"table.component.html\",\n styleUrls: [\"table.component.css\"]\n})\nexport class TableComponent implements OnInit, AfterViewInit, OnChanges {\n // Initialize with -1 to indicate no row is colored at the beginning\n activeRowIndex = signal<number[]>([]);\n hasCheckboxActions = signal<boolean>(false);\n selectAllCheckbox = signal<boolean>(false);\n\n // Filter related variables\n showFilter = signal<boolean>(false);\n filterName = signal<string>(\"\");\n filterData = signal<Array<Filter>>([]);\n filterContainerStyles = signal<any>({});\n appliedFilters = signal<{ [key: string]: Array<{ name: string; value: string }> }>({});\n \n // Convert outputs to signal-based outputs\n filtersUpdated = output<{\n [key: string]: Array<{ name: string; value: string }>;\n }>();\n\n @ViewChild(\"filter\") filter: TableFilterComponent | any;\n @ViewChildren(\"colHeaderRef\") colHeaders: QueryList<ElementRef> | any;\n\n // Pagination related variables\n pages = signal<Array<number>>([]);\n tableLength = signal<number>(0);\n selectedPage = signal<number>(1); // Internal state for selected page\n pageSelected = output<number>();\n pageSizeChanged = output<number>();\n pageSizeOptions = computed(() => {\n const config = this.tableConfig()?.paginationConfig;\n if (!config?.pageSizes || !Array.isArray(config.pageSizes) || !config.pageSizes?.length) return [];\n \n return config.pageSizes?.map(option => ({\n label: option?.toString() || '',\n value: option?.toString() || '',\n })) || [];\n });\n\n showPageSizeDropdown = computed(() => {\n return !!this.tableConfig()?.paginationConfig?.showPageSizeDropdown;\n });\n\n selectedPageSizeOption = signal<DropdownItem>({ label: \"\", value: \"\" });\n\n // Convert inputs to signal-based inputs\n tableConfig = input<TableConfig>();\n subTableconfig = input<TableConfig>();\n tableDataLoading = input<boolean>();\n expandedIndex = input<number>();\n tableData = input<Array<Array<any>>>([]);\n subTableData = input<Array<Array<any>>>([]);\n subTableDataLoading = input<boolean>();\n currentSort = input<{column: string, direction: 'ASC' | 'DESC' | ''} | null>();\n @ViewChild(\"table\") table: ElementRef | any;\n collapseColIndex = signal<number>(-1);\n previewLines = signal<number>(0);\n rowCollapseConfigIndex = signal<number>(-1);\n expandedMap = signal<Record<string, boolean>>({});\n\n\n // Sorting related properties\n multiColumnSort = signal<SortState[]>([]);\n sortChange = output<SortState>();\n headerAction = output<{ type: string; payload?: any }>();\n\n \n constructor(private renderer: Renderer2) {\n effect(() => {\n this.tableLength.set(this.tableData()?.length ?? 0);\n \n const config = this.tableConfig();\n \n if (config && config.activeRowIndex !== null && config.activeRowIndex !== undefined) {\n const activeRowIndex = config.activeRowIndex;\n this.activeRowIndex.set(Array.isArray(activeRowIndex) ? activeRowIndex : [activeRowIndex]);\n }\n\n if (this.rowCollapseConfigIndex() !== -1) {\n this.buildExpandedMap();\n }\n \n if(config?.paginationConfig?.showPageSizeDropdown) {\n const options = this.pageSizeOptions();\n const rowsPerPage = this.tableConfig()?.paginationConfig?.rowsPerPage;\n \n if (!Array.isArray(options) || !rowsPerPage) {\n this.selectedPageSizeOption.set({ label: \"\", value: \"\" });\n return;\n }\n \n const selected = options.find(opt => opt?.value === rowsPerPage.toString());\n if (selected) {\n this.selectedPageSizeOption.set(selected);\n } else if (options.length > 0) {\n // If configured rowsPerPage is not among options, pick the floor value and notify parent\n const target = Number(rowsPerPage);\n //Sort the options\n const sorted = options\n .map(opt => ({ opt, num: Number(opt?.value) }))\n .filter(({ num }) => Number.isFinite(num))\n .sort((a, b) => a.num - b.num);\n\n let floorOption = sorted[0]?.opt;\n for (let i = sorted.length - 1; i >= 0; i--) {\n if (sorted[i].num <= target) {\n floorOption = sorted[i].opt;\n break;\n }\n }\n console.error(\"The configured rowsPerPage was not matched to any of the pageSizes sent in the paginationConfig. Selecting the nearest floor value among the available pageSizes.\");\n this.selectedPageSizeOption.set(floorOption);\n this.onPageSizeChange(floorOption);\n } else {\n console.error(\"No page size options available.\")\n }\n }\n }, { allowSignalWrites: true });\n\n // Reactive height calculation: maintains exact old behavior for backward compatibility\n // Old code: height - 56 + \"px\" (flawed for percentages, but we maintain it)\n // Note: Effect must be in constructor, not lifecycle hooks (NG0203 error otherwise)\n // effect(() => {\n // const config = this.tableConfig();\n // if (!config?.paginationConfig || !this.table?.nativeElement) return;\n \n // const height = config.height;\n // // Old behavior: height - 56 + \"px\" (maintains the flaw for backward compatibility)\n // const result = (height as any) - 56;\n // const finalHeight = result + \"px\";\n // this.renderer.setStyle(this.table.nativeElement, \"height\", finalHeight);\n // });\n }\n\n\n // Function to handle row click\n selectRow(index: number) {\n if (this.hasCheckboxActions()) return;\n this.activeRowIndex.set([index]); // Set the selected index to the clicked row's index\n !!this.tableConfig().rowConfig.action && this.tableConfig().rowConfig.action(index);\n }\n\n ngOnInit(): void {\n this.hasCheckboxActions.set(this.tableConfig().colConfig?.some(col => col.type === \"actions\" && col.actionType === \"checkbox\"));\n this.tableLength.set(!!this.tableData() ? this.tableData().length : 0);\n this.initializeFilters();\n if (this.tableConfig().paginationConfig) {\n this.initializePagination();\n }\n if (this.tableConfig().canScrollHorizontally === undefined) {\n // Note: We can't directly modify input signals, this should be handled by parent component\n }\n document.addEventListener(\"click\", event => {\n if (this.filter) {\n let isCheckBoxClicked = true;\n let targetElement = event.target as HTMLSpanElement;\n if (targetElement.className === \"checkmark\") {\n isCheckBoxClicked = true;\n this.showFilter.set(true);\n }\n let isClickInsideElement = this.filter.container.nativeElement.contains(event.target);\n if (!isClickInsideElement && !isCheckBoxClicked) {\n this.toggleFilter(this.filterName());\n }\n }\n });\n\n // fetch collapseColIndex and previewLines if present\n this.rowCollapseConfigIndex.set(this.tableConfig()?.colConfig?.findIndex(\n col => col.type === 'actions' && col.actionType === 'row-collapse'\n ));\n if (this.rowCollapseConfigIndex() !== -1) {\n this.collapseColIndex.set(this.tableConfig().colConfig[this.rowCollapseConfigIndex()].collapseColumnIndex ?? null);\n this.previewLines.set(this.tableConfig().colConfig[this.rowCollapseConfigIndex()].previewLines ?? null);\n this.buildExpandedMap();\n }\n }\n\n buildExpandedMap(): void{\n const newExpandedMap: Record<string, boolean> = {};\n const collapseIndex = this.rowCollapseConfigIndex();\n \n this.tableData().forEach((row, rowIndex) => {\n newExpandedMap[`${rowIndex}`] = row[collapseIndex];\n });\n this.expandedMap.set(newExpandedMap);\n}\n\n ngAfterViewInit() {\n // ViewChild is now available - manually trigger height calculation once\n // The effect in constructor will handle subsequent config changes\n const config = this.tableConfig();\n if (config?.paginationConfig && this.table?.nativeElement) {\n const height = config.height;\n const result = (height as any) - 56;\n const finalHeight = result + \"px\";\n this.renderer.setStyle(this.table.nativeElement, \"height\", finalHeight);\n }\n }\n \n ngOnChanges() {\n this.tableLength.set(this.tableData()?.length ?? 0);\n if (this.tableConfig().activeRowIndex !== null && this.tableConfig().activeRowIndex !== undefined) {\n const activeRowIndex = this.tableConfig().activeRowIndex;\n this.activeRowIndex.set(Array.isArray(activeRowIndex) ? activeRowIndex : [activeRowIndex])\n }\n }\n\n // Filter related functions\n initializeFilters() {\n const newAppliedFilters: { [key: string]: Array<{ name: string; value: string }> } = {};\n const allFilters: Array<Filter> = [];\n \n for (let colHeader of this.tableConfig()?.colHeaderConfig) {\n if (colHeader.filters) {\n let filters = [];\n for (let filter of colHeader.filters) {\n if (filter.checked) {\n filters.push({\n name: filter.name,\n value: filter.value\n });\n }\n // Add all filters to the filterData array\n allFilters.push(filter);\n }\n if (filters.length > 0) newAppliedFilters[colHeader.data] = filters;\n }\n }\n this.appliedFilters.set(newAppliedFilters);\n this.filterData.set(allFilters);\n }\n toggleFilter(filterName: string) {\n if (!this.showFilter()) {\n this.filterName.set(filterName);\n this.showFilter.set(true);\n\n let offSet = 0;\n let colHeadersReversed = this.colHeaders.toArray().reverse();\n\n for (let header of colHeadersReversed) {\n if (header.nativeElement.innerText === filterName) break;\n offSet += header.nativeElement.offsetWidth;\n }\n this.filterContainerStyles.set({\n top: \"44px\",\n right: offSet > 0 ? offSet - 116 + \"px\" : \"12px\"\n });\n } else {\n this.filterName.set(\"\");\n this.filterData.set([]);\n this.showFilter.set(false);\n }\n }\n updateAppliedFilters(appliedFilters: Array<{ name: string; value: string }>) {\n const currentFilters = this.appliedFilters();\n if (appliedFilters.length == 0) {\n delete currentFilters[this.filterName()];\n } else {\n currentFilters[this.filterName()] = appliedFilters;\n }\n this.appliedFilters.set({ ...currentFilters });\n this.filtersUpdated.emit({ ...this.appliedFilters() });\n this.toggleFilter(this.filterName());\n }\n\n // Pagination related functions\n initializePagination() {\n if (this.tableConfig().paginationConfig) {\n // Initialize selectedPage from config if provided, otherwise default to 1\n const configSelectedPage = this.tableConfig().paginationConfig.selectedPage;\n this.selectedPage.set(configSelectedPage ?? 1);\n \n let len = this.tableConfig().paginationConfig.noOfPages;\n if (len <= 7) {\n const newPages = [];\n for (let i = 1; i <= len; i++) {\n newPages.push(i);\n }\n this.pages.set(newPages);\n } else {\n this.pages.set([1, 2, 3, 4, 0, len]);\n }\n }\n }\n updateSelectedPage(pageNumber: number) {\n // Guard clause to prevent out-of-range updates\n if (pageNumber < 1 || pageNumber > this.tableConfig().paginationConfig.noOfPages) return;\n\n // Update internal selectedPage state immediately\n this.selectedPage.set(pageNumber);\n\n // Reset header checkbox when navigating to a different page\n this.selectAllCheckbox.set(false);\n \n // Update page numbers display for pagination with many pages\n let len = this.tableConfig().paginationConfig.noOfPages;\n if (len > 7) {\n if (pageNumber - 2 <= 1) {\n this.pages.set([1, 2, 3, 4, 0, len]);\n } else if (pageNumber - 2 > 1 && pageNumber + 2 < len) {\n this.pages.set([1, 0, pageNumber - 1, pageNumber, pageNumber + 1, 0, len]);\n } else if (pageNumber + 2 >= len) {\n this.pages.set([1, 0, len - 3, len - 2, len - 1, len]);\n }\n }\n \n // Emit to parent so they can update their config\n this.pageSelected.emit(pageNumber);\n }\n\n // Main container related functions\n getContainerHeight() {\n if (this.tableConfig()?.height) return this.tableConfig().height;\n else return \"\";\n }\n getContainerWidth() {\n if (this.tableConfig()?.width) return this.tableConfig().width;\n else return \"\";\n }\n\n // Column Headers related functions\n getColHeadersRowStyles() {\n const { colHeadersRowConfig } = this.tableConfig();\n const minHeight = colHeadersRowConfig?.height || \"44px\";\n const borderTop = (colHeadersRowConfig?.style as any)?.borderTop || \"\";\n const borderBottom = (colHeadersRowConfig?.style as any)?.borderBottom || \"1px solid #E0E0E0\";\n const backgroundColor = (colHeadersRowConfig?.style as any)?.backgroundColor || \"#FFFFFF\";\n const fontSize = (colHeadersRowConfig?.style as any)?.fontSize || \"14px\";\n return {\n \"min-height\": minHeight,\n \"border-top\": borderTop,\n \"border-bottom\": borderBottom,\n \"background-color\": backgroundColor,\n \"font-size\": fontSize\n };\n }\n\n onSortChange(sortState: SortState) {\n // Emit the sort change to the parent component\n this.sortChange.emit(sortState);\n \n // Handle multi-column sort if enabled\n if (this.tableConfig().multiColumnSort) {\n const currentMultiSort = this.multiColumnSort();\n const index = currentMultiSort.findIndex(sort => sort.column === sortState.column);\n if (index !== -1) {\n if (sortState.direction === null) {\n const newMultiSort = [...currentMultiSort];\n newMultiSort.splice(index, 1);\n this.multiColumnSort.set(newMultiSort);\n } else {\n const newMultiSort = [...currentMultiSort];\n newMultiSort[index] = sortState;\n this.multiColumnSort.set(newMultiSort);\n }\n } else if (sortState.direction !== null) {\n this.multiColumnSort.set([...currentMultiSort, sortState]);\n }\n }\n }\n\n getActionsCellStyle(style: any): any {\n if (!style) return {};\n const { width, ...restStyle } = style;\n return restStyle;\n }\n\n onActionClick(event: any, rowIndex: number): void {\n if (event.actionType === 'checkbox') {\n const currentActiveRows = this.activeRowIndex();\n if (event.value) {\n this.activeRowIndex.set([...currentActiveRows, rowIndex]);\n } else {\n this.activeRowIndex.set(currentActiveRows.filter(index => index !== rowIndex));\n }\n\n const actionInfo = this.findActionConfig('checkbox');\n if (actionInfo && this.tableData()[rowIndex]) {\n const { index, config } = actionInfo;\n // Note: We can't directly modify input signals, this should be handled by parent component\n const checkedItems = this.tableData().filter(row => row[index] === true);\n config.action?.(checkedItems);\n }\n\n } else if(event.actionType === 'row-collapse'){\n const rowCollapse = this.findActionConfig('row-collapse');\n if (rowCollapse && this.tableData()[rowIndex]) {\n // Note: We can't directly modify input signals, this should be handled by parent component\n rowCollapse.config.action?.(this.tableData());\n this.buildExpandedMap();\n }\n }\n }\n\n findActionConfig(actionType: string): { index: number, config: ColConfig } | null {\n for (let i = 0; i < this.tableConfig().colConfig.length; i++) {\n const col = this.tableConfig().colConfig[i];\n if (col.type === 'actions' && col.actionType === actionType) {\n return { index: i, config: col };\n }\n }\n return null;\n }\n \n\n isRowDisabled(row: any): boolean {\n return typeof this.tableConfig().rowConfig.disableRow === \"function\" ? this.tableConfig().rowConfig.disableRow(row) : false;\n }\n\n toggleCheckbox() {\n this.selectAllCheckbox.set(!this.selectAllCheckbox());\n const checkboxColIndex = this.tableConfig().colConfig.findIndex(col => col.type === 'actions' && col.actionType === 'checkbox');\n if (checkboxColIndex !== -1) {\n // Note: We can't directly modify input signals, this should be handled by parent component\n const updatedTableData = this.tableData().map((row: any[]) => {\n const updatedRow = [...row];\n const currentCheckbox = updatedRow[checkboxColIndex];\n const isDisabled = this.isRowDisabled(row);\n if (!isDisabled) {\n updatedRow[checkboxColIndex] = this.selectAllCheckbox();\n }\n return updatedRow;\n });\n this.headerAction?.emit({\n type: \"checkboxToggle\",\n payload: updatedTableData\n });\n }\n }\n\n\n onPageSizeChange(selectedOption: DropdownItem) {\n this.pageSizeChanged.emit(parseInt(selectedOption.value));\n }\n\n shouldShowPagination(): boolean {\n const config = this.tableConfig()?.paginationConfig;\n if (!config) return false;\n const hasMultiplePages = config.noOfPages > 1;\n const hasEnoughData = this.tableLength() > config.rowsPerPage;\n return this.showPageSizeDropdown() || hasMultiplePages || hasEnoughData;\n }\n}\n\nexport interface TableConfig {\n height: string | \"100%\";\n width: string | \"100%\";\n paginationConfig?: PaginationConfig | undefined | null;\n colHeadersRowConfig: RowConfig | undefined | null;\n rowConfig: RowConfig | undefined | null;\n colHeaderConfig: Array<ColHeaderConfig>;\n colConfig: Array<ColConfig>;\n canExpand?: boolean;\n canScrollHorizontally?: boolean;\n cellHover?: boolean;\n activeRowIndex?: number | number[];\n multiColumnSort?: boolean;\n}\nexport interface PaginationConfig {\n noOfPages: number;\n rowsPerPage: number;\n totalNoOfRows: number;\n selectedPage?: number;\n disablePageJumping?: boolean;\n showPageSizeDropdown?: boolean; // When true, rowsPerPage value should be included in pageSizes array\n pageSizes?: number[];\n}\nexport interface RowConfig {\n height?: string | undefined | null;\n style?: {};\n action?: any;\n disableRow?: (data: any) => boolean;\n}\nexport interface ColHeaderConfig {\n type: \"text\" | \"number\" | \"custom\" | \"checkbox\";\n data: any;\n componentRef?: any;\n filters?: Array<Filter> | null;\n style?: {};\n action?: any;\n isSortable?: boolean;\n sortAscIcon?: string;\n sortDescIcon?: string;\n}\nexport interface ColConfig {\n type: \"text\" | \"number\" | \"custom\" | \"actions\" | \"html\";\n componentRef?: any;\n style?: {};\n action?: any;\n actionItems?: ActionItem[];\n actionType?: \"inline\" | \"dropdown\" | \"checkbox\" | \"row-collapse\"; // inline for individual icons, dropdown for menu\n disable?: (rowData: any) => boolean;\n collapseColumnIndex?: number;\n previewLines?: number;\n}\nexport interface ActionItem {\n label: string;\n value: string;\n icon?: string;\n disable?: (data: any) => boolean;\n action?: (data: any) => void;\n children?: ActionItem[];\n}\nexport interface InternalActionItem extends ActionItem {\n showSubmenu?: boolean;\n}\n","import { ComponentFactoryResolver, Directive, ViewContainerRef, input, effect } from \"@angular/core\";\n\n@Directive({\n selector: \"[customTableCell]\"\n})\nexport class CustomTableCellDirective {\n private ref: any;\n private component: any;\n private cellData: any;\n\n customComponent = input<any>();\n data = input<any>();\n\n constructor(private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {\n effect(() => {\n const component = this.customComponent();\n if (component) {\n this.component = component;\n this.createComponent();\n }\n });\n\n effect(() => {\n const data = this.data();\n if (data !== undefined) {\n this.cellData = data;\n if (this.ref) {\n this.ref.instance.data = this.cellData;\n }\n }\n });\n }\n\n createComponent() {\n if (this.component) {\n const cmpFactoryResolver = this.componentFactoryResolver.resolveComponentFactory(this.component);\n this.viewContainerRef.clear();\n this.ref = this.viewContainerRef.createComponent(cmpFactoryResolver);\n this.setData();\n }\n }\n setData() {\n this.ref.instance.data = this.cellData;\n }\n}\n","<div\n id=\"main-container\"\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth()\n }\"\n>\n <div id=\"table-container\" #table>\n <div\n id=\"col-headers-container\"\n *ngIf=\"!!config().showHeader\"\n [ngStyle]=\"{\n height: getColHeadersRowHeight(),\n 'border-top': getColHeadersRowBorderTop(),\n 'border-bottom': getColHeadersRowBorderBottom()\n }\"\n >\n <div\n class=\"col-header\"\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of config()?.colHeaderConfig\"\n [style]=\"colHeader?.style\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <ng-template\n *ngIf=\"colHeader?.type === 'custom'\"\n customTableCell\n [customComponent]=\"colHeader?.componentRef\"\n [data]=\"colHeader.data\"\n ></ng-template>\n </div>\n </div>\n <div>\n <cdk-virtual-scroll-viewport\n [minBufferPx]=\"config().dataContainerMaxHeight || '400'\"\n [maxBufferPx]=\"config().dataContainerMaxHeight + 200 || '600'\"\n [style.overflow]=\"'overlay'\"\n [style.height]=\"config().dataContainerMaxHeight || '400px'\"\n itemSize=\"50\"\n id=\"data-container\"\n >\n \n <div\n class=\"row-wrapper\"\n *cdkVirtualFor=\"let row of tableData(); let i = index\"\n [ngStyle]=\"{\n backgroundColor: i % 2 === 0 ? '#FAFAFA' : null,\n }\"\n >\n <div class=\"t-row\">\n <div\n (click)=\"config()?.colConfig[i]?.action ? config()?.colConfig[i]?.action(col) : null\"\n *ngFor=\"let col of row; let i = index\"\n [ngStyle]=\"{\n width: config()?.colConfig[i]?.style?.width || config()?.colHeaderConfig[i]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n >\n <div\n class=\"t-col\"\n [style]=\"config().colConfig[i]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: config().colConfig[i].action ? 'pointer' : 'default',\n 'justify-content': config().colConfig[i]?.style?.justifyContent\n ? config().colConfig[i]?.style?.justifyContent\n : config().colConfig[i].type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p\n *ngIf=\"config().colConfig[i].type !== 'custom'\"\n [ngStyle]=\"{\n color: config()?.colConfig[i]?.style?.color ? config()?.colConfig[i]?.style?.color : ''\n }\"\n class=\"t-col-text\"\n >\n {{ col }}\n </p>\n <ng-template\n *ngIf=\"config().colConfig[i].type === 'custom'\"\n [customComponent]=\"config().colConfig[i].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n </div>\n </div>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, OnInit, Renderer2, ViewChild, input, signal } from \"@angular/core\";\n\n@Component({\n selector: \"sub-table\",\n templateUrl: \"sub-table.component.html\",\n styleUrls: [\"sub-table.component.css\"]\n})\nexport class SubTableComponent implements OnInit, AfterViewInit {\n selectedPage = signal<number>(1);\n pages = signal<Array<number>>([]);\n\n config = input<SubTableConfig | any>();\n tableData = input<Array<Array<any>>>([]);\n @ViewChild(\"table\") table: ElementRef | any;\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n const config = this.config();\n if (!config?.paginationConfig) return; // ← Only set height if pagination exists (same as old code)\n \n const rawHeight = config.height;\n \n // Handle percentage values - use calc() to subtract 56px\n if (typeof rawHeight === 'string' && rawHeight.includes('%')) {\n const calcHeight = `calc(${rawHeight} - 56px)`;\n this.renderer.setStyle(this.table.nativeElement, \"height\", calcHeight);\n } else {\n // Handle pixel values - subtract 56px (same as old code)\n const result = (rawHeight as any) - 56;\n const finalHeight = result + \"px\";\n this.renderer.setStyle(this.table.nativeElement, \"height\", finalHeight);\n }\n }\n\n // Main container related functions\n getContainerHeight() {\n if (this.config().height) return this.config().height;\n else return \"\";\n }\n getContainerWidth() {\n if (this.config().width) return this.config().width;\n else return \"\";\n }\n\n // Column Headers related functions\n getColHeadersRowHeight() {\n if (this.config().colHeadersRowConfig && this.config().colHeadersRowConfig.height) {\n return this.config().colHeadersRowConfig.height;\n }\n return \"44px\";\n }\n getColHeadersRowBorderTop() {\n if (this.config().colHeadersRowConfig && this.config().colHeadersRowConfig.style?.borderTop) {\n return this.config().colHeadersRowConfig.style?.borderTop;\n }\n return \"\";\n }\n getColHeadersRowBorderBottom() {\n if (this.config().colHeadersRowConfig && this.config().colHeadersRowConfig.style?.borderBottom) {\n return this.config().colHeadersRowConfig.style?.borderBottom;\n }\n return \"1px solid #E0E0E0\";\n }\n}\n\nexport interface SubTableConfig {\n height: string | \"100%\";\n width: string | \"100%\";\n dataContainerMaxHeight: string | \"400px\";\n showHeader?: boolean | undefined;\n rowConfig: SubTableRowConfig | undefined | null;\n colHeaderConfig?: Array<SubTableColHeaderConfig>;\n colConfig: Array<SubTableColConfig>;\n}\n\nexport interface SubTableRowConfig {\n height?: string | undefined | null;\n style?: {};\n}\nexport interface SubTableColHeaderConfig {\n type: \"text\" | \"number\" | \"custom\";\n data: any;\n componentRef?: any;\n style?: {};\n action?: any;\n}\nexport interface SubTableColConfig {\n type: \"text\" | \"number\" | \"custom\";\n componentRef?: any;\n style?: {};\n action?: any;\n}\n","<div id=\"main-container\" #mainContainer [ngStyle]=\"containerStyles()\">\n <div id=\"search-bar-container\">\n <input (keyup)=\"updateSearchValue($event)\" type=\"text\" placeholder=\"Search\" />\n <svg id=\"search-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M1.21496 8.14563C1.21496 4.3179 4.33709 1.21165 8.19249 1.21165C12.0479 1.21165 15.17 4.3179 15.17 8.14563C15.17 9.69308 14.6598 11.1226 13.797 12.2767L12.3684 13.7013C11.2043 14.5668 9.75891 15.0796 8.19249 15.0796C4.33709 15.0796 1.21496 11.9734 1.21496 8.14563ZM12.9419 14.7835C11.602 15.7329 9.96259 16.2913 8.19249 16.2913C3.66965 16.2913 -0.00012207 12.6461 -0.00012207 8.14563C-0.00012207 3.64512 3.66965 0 8.19249 0C12.7153 0 16.3851 3.64512 16.3851 8.14563C16.3851 9.93713 15.8036 11.5931 14.8183 12.9375L16.836 14.4048C17.6704 14.912 18.7553 15.6543 17.2453 17.215C15.7352 18.7756 15.0098 17.6663 14.499 16.8364L12.9419 14.7835Z\"\n fill=\"#6A737D\"\n />\n </svg>\n </div>\n <div id=\"filters-main-container\">\n <div class=\"filters-sub-container\">\n <div *ngFor=\"let filter of getCheckedFilters()\">\n <div class=\"filter\">\n <mis-checkbox [checked]=\"true\" [name]=\"filter.value\" (valueChange)=\"updateFilter($event)\"></mis-checkbox>\n <span class=\"filter-text\">{{ filter.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"separator\" [ngStyle]=\"{ 'margin': '16px 0px' }\" *ngIf=\"getCheckedFilters().length && getCheckedFilters().length < filtersData().length\"></div>\n <div class=\"filters-sub-container\">\n <div *ngFor=\"let filter of getFiltersBasedOnSearchValue()\">\n <div class=\"filter\" *ngIf=\"!filter.checked\">\n <mis-checkbox [checked]=\"false\" [name]=\"filter.value\" (valueChange)=\"updateFilter($event)\"></mis-checkbox>\n <span class=\"filter-text\">{{ filter.name }}</span>\n </div>\n </div>\n <div id=\"no-results-container\" *ngIf=\"getFiltersBasedOnSearchValue().length < 1\">\n <span class=\"filter-text\">No matches found</span>\n </div>\n </div>\n \n <div class=\"separator\" [ngStyle]=\"{ 'margin': '16px 0px' }\"></div>\n <div id=\"buttons-container\">\n <button id=\"reset-btn\" [ngStyle]=\"{ 'margin-right': '8px' }\" (click)=\"resetFilters()\">Reset</button>\n <button id=\"apply-btn\" (click)=\"applyFilters()\">Apply</button>\n </div>\n </div>\n</div>","import { Component, ElementRef, OnInit, ViewChild, input, output, signal } from \"@angular/core\";\n\n@Component({\n selector: \"mis-table-filter\",\n templateUrl: \"filter.component.html\",\n styleUrls: [\"filter.component.css\"]\n})\nexport class TableFilterComponent implements OnInit {\n filtersData = input<Array<Filter>>([]);\n containerStyles = input<any>({});\n\n filtersApplied = output<any>();\n\n @ViewChild(\"mainContainer\") container: ElementRef | undefined;\n\n filtersMap = signal<any>({});\n searchValue = signal<string>(\"\");\n\n constructor() {}\n\n ngOnInit(): void {\n const newFiltersMap: any = {};\n const filters = this.filtersData() || [];\n if (Array.isArray(filters) && filters.length > 0) {\n filters.forEach(filter => {\n if (filter && filter.value) {\n newFiltersMap[filter.value] = filter;\n }\n });\n }\n this.filtersMap.set(newFiltersMap);\n }\n resetFilters() {\n const currentFiltersMap = this.filtersMap();\n const filters = this.filtersData() || [];\n \n if (filters.length > 0) {\n filters.forEach(filter => {\n if (filter && filter.value && currentFiltersMap[filter.value]) {\n currentFiltersMap[filter.value].checked = false;\n }\n });\n this.filtersMap.set({ ...currentFiltersMap });\n }\n this.filtersApplied.emit([]);\n }\n applyFilters() {\n const filtersMap = this.filtersMap();\n if (!filtersMap || Object.keys(filtersMap).length === 0) {\n this.filtersApplied.emit([]);\n return;\n }\n \n let list = Object.values(filtersMap)\n .filter((filter: Filter | any) => filter && filter.checked)\n .map((filter: Filter | any) => {\n return {\n name: filter.name,\n value: filter.value\n };\n });\n this.filtersApplied.emit(list);\n }\n updateFilter(data: any) {\n const currentFiltersMap = this.filtersMap();\n if (currentFiltersMap && data && data.name && currentFiltersMap[data.name]) {\n currentFiltersMap[data.name].checked = !currentFiltersMap[data.name].checked;\n this.filtersMap.set({ ...currentFiltersMap });\n }\n }\n updateSearchValue(event: any) {\n this.searchValue.set(event.target.value);\n }\n getFiltersBasedOnSearchValue(): Filter[] | any {\n const filtersMap = this.filtersMap();\n if (!filtersMap || Object.keys(filtersMap).length === 0) {\n return [];\n }\n let list = Object.values(filtersMap);\n list = list.filter((filter: Filter | any) => {\n return filter && filter.name && filter.name.match(new RegExp(this.searchValue(), \"i\"));\n });\n return list.sort(this.mySort);\n }\n getCheckedFilters(): Filter[] | any {\n const filtersMap = this.filtersMap();\n if (!filtersMap || Object.keys(filtersMap).length === 0) {\n return [];\n }\n let list = Object.values(filtersMap);\n list = list.filter((filter: Filter | any) => filter && filter.checked).sort(this.mySort);\n return list;\n }\n mySort = (a: Filter, b: Filter) => {\n return a.name.localeCompare(b.name);\n };\n}\n\nexport interface Filter {\n name: string;\n value: string;\n checked: boolean;\n}","import {\n Directive,\n ElementRef,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChanges,\n input,\n output,\n signal,\n effect,\n} from '@angular/core';\n\nexport interface SortState {\n column: string;\n direction: 'ASC' | 'DESC' | '';\n}\n\nexport interface SortColumn {\n data: string;\n sortAscIcon?: string;\n sortDescIcon?: string;\n}\n\n@Directive({\n selector: '[appSortIcons]',\n})\nexport class SortIconsDirective implements OnInit, OnChanges {\n // Convert inputs to signals\n column = input<SortColumn>();\n activeSort = input<SortState>();\n activeSorts = input<SortState[]>();\n multiColumnSort = input<boolean>(false);\n \n // Convert output to signal\n sortChange = output<SortState>();\n multiSortChange = output<SortState[]>();\n\n // Internal state as signals\n currentDirection = signal<'ASC' | 'DESC' | ''>('');\n\n // Assets\n private upIcon!: HTMLImageElement;\n private downIcon!: HTMLImageElement;\n private sortOrderElement?: HTMLSpanElement;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n // Watch for changes in activeSort, activeSorts, and currentDirection signals\n // Signal inputs don't trigger ngOnChanges, so we need to use effect()\n effect(() => {\n // Access the signals to create a dependency (we don't need to store the values)\n this.activeSort();\n this.activeSorts();\n this.currentDirection(); // Also watch internal direction changes\n // Update icon styles when signals change (only after icons are created)\n if (this.upIcon && this.downIcon) {\n this.updateIconStyles();\n }\n });\n }\n\n ngOnInit() {\n \n // Create a container for the icons\n const container = this.renderer.createElement('div');\n this.renderer?.setStyle(container, 'display', 'inline-flex');\n this.renderer?.setStyle(container, 'align-items', 'center');\n\n const iconContainer = this.renderer.createElement('div');\n this.renderer?.setStyle(iconContainer, 'display', 'inline-flex');\n this.renderer?.setStyle(iconContainer, 'flex-direction', 'column');\n this.renderer?.setStyle(iconContainer, 'align-items', 'center');\n\n this.upIcon = this.renderer.createElement('img');\n this.renderer?.setAttribute(this.upIcon, 'src', this.column()?.sortAscIcon);\n this.renderer?.setStyle(this.upIcon, 'opacity', '0.5');\n this.renderer?.setStyle(this.upIcon, 'transition', 'opacity 0.3s ease');\n this.renderer?.setStyle(this.upIcon, 'width', '9px');\n this.renderer?.setStyle(this.upIcon, 'cursor', 'pointer');\n this.renderer?.listen(this.upIcon, 'click', () => this.setSortDirection('ASC'));\n\n this.downIcon = this.renderer.createElement('img');\n this.renderer?.setAttribute(this.downIcon, 'src', this.column()?.sortDescIcon);\n this.renderer?.setStyle(this.downIcon, 'opacity', '0.5');\n this.renderer?.setStyle(this.downIcon, 'transition', 'opacity 0.3s ease');\n this.renderer?.setStyle(this.downIcon, 'width', '9px');\n this.renderer?.setStyle(this.downIcon, 'cursor', 'pointer');\n this.renderer?.listen(this.downIcon, 'click', () => this.setSortDirection('DESC'));\n\n this.renderer?.appendChild(iconContainer, this.upIcon);\n this.renderer?.appendChild(iconContainer, this.downIcon);\n this.renderer?.appendChild(container, iconContainer);\n\n if (this.multiColumnSort()) {\n this.sortOrderElement = this.renderer.createElement('span');\n this.renderer?.setStyle(this.sortOrderElement, 'font-size', '12px');\n this.renderer?.setStyle(this.sortOrderElement, 'font-weight', 'bold');\n this.renderer?.setStyle(this.sortOrderElement, 'color', '#000');\n this.renderer?.appendChild(container, this.sortOrderElement);\n }\n\n this.renderer?.appendChild(this.el.nativeElement, container);\n this.updateIconStyles();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['activeSort'] || changes['activeSorts']) {\n this.updateIconStyles();\n }\n }\n\n private setSortDirection(direction: 'ASC' | 'DESC'): void {\n if (this.multiColumnSort()) {\n this.handleMultiColumnSort(direction);\n } else {\n this.handleSingleColumnSort(direction);\n }\n }\n\n private handleSingleColumnSort(direction: 'ASC' | 'DESC'): void {\n if (this.currentDirection() === direction) {\n this.currentDirection.set(''); // Reset sorting if the same direction is clicked\n } else {\n this.currentDirection.set(direction);\n }\n\n this.sortChange.emit({ \n column: this.column()?.data || '', \n direction: this.currentDirection()\n });\n this.updateIconStyles();\n }\n\n private handleMultiColumnSort(direction: 'ASC' | 'DESC'): void {\n const activeSorts = this.activeSorts();\n \n if (!Array.isArray(activeSorts)) {\n return;\n }\n \n const existingSortIndex = activeSorts.findIndex(sort => sort.column === this.column()?.data);\n \n if (existingSortIndex !== -1) {\n if (activeSorts[existingSortIndex].direction !== direction) {\n activeSorts[existingSortIndex].direction = direction;\n } else {\n return;\n }\n } else {\n activeSorts.push({ \n column: this.column()?.data || '', \n direction\n });\n }\n this.multiSortChange.emit([...activeSorts]);\n this.updateIconStyles();\n }\n\n private updateIconStyles(): void {\n if (this.multiColumnSort()) {\n this.updateMultiColumnIconStyles();\n } else {\n this.updateSingleColumnIconStyles();\n }\n }\n\n private updateSingleColumnIconStyles(): void {\n // Check both parent's activeSort AND internal currentDirection\n // Parent's activeSort may not be updated immediately, so we also check internal state\n const parentActiveSort = this.activeSort();\n const isActiveColumnFromParent = parentActiveSort?.column === this.column()?.data;\n const internalDirection = this.currentDirection();\n const isActiveColumn = isActiveColumnFromParent || (internalDirection !== '');\n\n setTimeout(() => {\n // Use parent's direction if available, otherwise use internal direction\n const activeDirection = parentActiveSort?.direction || internalDirection;\n \n this.renderer?.setStyle(\n this.upIcon,\n 'opacity',\n isActiveColumn && activeDirection === 'ASC' ? '1' : '0.5'\n );\n this.renderer?.setStyle(\n this.downIcon,\n 'opacity',\n isActiveColumn && activeDirection === 'DESC' ? '1' : '0.5'\n );\n }, 0);\n }\n\n private updateMultiColumnIconStyles(): void {\n const activeSorts = this.activeSorts();\n \n if (!Array.isArray(activeSorts)) {\n return;\n }\n \n const columnSort = activeSorts.find(sort => sort.column === this.column()?.data);\n \n setTimeout(() => {\n this.renderer?.setStyle(\n this.upIcon,\n 'opacity',\n columnSort?.direction === 'ASC' ? '1' : '0.5'\n );\n this.renderer?.setStyle(\n this.downIcon,\n 'opacity',\n columnSort?.direction === 'DESC' ? '1' : '0.5'\n );\n\n if (this.sortOrderElement) {\n const sortIndex = activeSorts.findIndex(sort => sort.column === this.column()?.data);\n if (sortIndex !== -1) {\n this.renderer?.setProperty(this.sortOrderElement, 'textContent', (sortIndex + 1).toString());\n } else {\n this.renderer?.setProperty(this.sortOrderElement, 'textContent', '');\n }\n }\n }, 0);\n }\n}","<div class=\"actions-cell-container\" [ngStyle]=\"containerStyle()\">\n <!-- Inline Actions -->\n <div *ngIf=\"actionType() === 'inline'\" class=\"inline-actions\">\n <div\n *ngFor=\"let item of actionItems(); trackBy: trackByAction\"\n class=\"action-item\"\n [ngClass]=\"{ disabled: isDisabled(item) }\"\n (click)=\"onActionClick(item, $event)\"\n >\n <img [src]=\"item.icon\" [alt]=\"item.label\" class=\"action-icon-svg\" />\n </div>\n </div>\n\n <!-- Dropdown Actions -->\n <div *ngIf=\"actionType() === 'dropdown'\" class=\"dropdown-actions\">\n <div #dropdownTrigger class=\"dropdown-trigger\" (click)=\"toggleDropdown($event)\" title=\"More actions\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"4\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"#333\" />\n </svg>\n </div>\n </div>\n\n <!-- Checkbox Actions -->\n <div *ngIf=\"actionType() === 'checkbox'\" class=\"checkbox-actions\">\n <mis-checkbox [checked]=\"currentState()\" (valueChange)=\"onClick($event)\" [disabled]=\"disable() ? disable()(data()) : false\"> </mis-checkbox>\n </div>\n</div>\n\n<!-- Collapse / Expand Actions -->\n<div *ngIf=\"actionType() === 'row-collapse'\" class=\"collapse-toggle-action\">\n <div class=\"collapse-icon\" (click)=\"onClick($event)\" [title]=\"currentState() ? 'Expand' : 'Collapse'\">\n <svg *ngIf=\"currentState()\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n <path d=\"M7 10l5 5 5-5\" stroke=\"#0D1321\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"!currentState()\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n <path d=\"M7 14l5-5 5 5\" stroke=\"#0D1321\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n</div>\n\n<!-- CDK Overlay Template for Dropdown Menu -->\n<ng-template #dropdownMenu>\n <div class=\"dropdown-menu-overlay\">\n <div\n class=\"dropdown-menu-item\"\n *ngFor=\"let item of actionItems()\"\n (click)=\"onDropdownItemClick(item, $event)\"\n [ngClass]=\"{ disabled: isDisabled(item) }\"\n >\n <ng-container *ngIf=\"item.children?.length; else noChildren\">\n <span class=\"dropdown-icon\" *ngIf=\"item.icon\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n <span class=\"submenu-arrow\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 6L15 12L9 18\" stroke=\"#0D1321\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n\n <!-- DYNAMIC SUBMENU -->\n <div class=\"dropdown-submenu\" *ngIf=\"item.showSubmenu\">\n <div\n class=\"dropdown-menu-item\"\n *ngFor=\"let child of item.children\"\n [ngClass]=\"{ disabled: isDisabled(child) }\"\n (click)=\"onDropdownItemClick(child, $event)\"\n >\n <span class=\"dropdown-icon\" *ngIf=\"child.icon\">\n <img [src]=\"child.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ child.label }}</span>\n </div>\n </div>\n </ng-container>\n\n <ng-template #noChildren>\n <span class=\"dropdown-icon\" *ngIf=\"item.icon\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n </ng-template>\n </div>\n </div>\n</ng-template>\n","import { Component, OnInit, HostListener, ElementRef, ViewChild, TemplateRef, ViewContainerRef, OnDestroy, input, output, signal } from \"@angular/core\";\nimport { ConnectionPositionPair, Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\nimport { ActionItem } from \"../table.component\";\n\n@Component({\n selector: \"mis-actions-cell\",\n templateUrl: \"./actions-cell.component.html\",\n styleUrl: \"./actions-cell.component.css\"\n})\nexport class ActionsCellComponent implements OnInit, OnDestroy {\n cellData = input<any>();\n config = input<any>();\n\n actionClick = output<{ item?: ActionItem; data?: any, actionType?: string, value?: any }>();\n\n @ViewChild('dropdownMenu', { static: false }) dropdownMenu: TemplateRef<any>;\n @ViewChild('dropdownTrigger', { static: false }) dropdownTrigger: ElementRef;\n\n isDropdownOpen = signal<boolean>(false);\n actionItems = signal<ActionItem[]>([]);\n actionType = signal<\"inline\" | \"dropdown\" | \"checkbox\" | \"row-collapse\">(\"inline\");\n action = signal<((data: any) => void) | undefined>(undefined);\n data = signal<any>(undefined);\n disable = signal<((data: any) => boolean) | undefined>(undefined);\n currentState = signal<boolean>(false);\n private _style = signal<any>({});\n containerStyle = signal<any>({});\n private overlayRef: OverlayRef | null = null;\n\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n ngOnInit(): void {\n if (this.config()) {\n this.actionItems.set(this.config().actionItems);\n this.actionType.set(this.config().actionType);\n this._style.set(this.config().style);\n this.action.set(this.config().action);\n this.disable.set(this.config().disable);\n this.processStyle();\n }\n \n if (this.cellData() !== null) {\n const defaultStates: Record<string, boolean> = {\n 'checkbox': false,\n 'row-collapse': true,\n };\n if (this.actionType() in defaultStates) {\n this.currentState.set(typeof this.cellData() === 'boolean' ? this.cellData() : defaultStates[this.actionType()]);\n } else {\n this.data.set(this.cellData());\n }\n }\n }\n\n ngOnDestroy(): void {\n this.closeDropdown();\n }\n\n private processStyle(): void {\n // Remove width from style to avoid conflicts with table column width\n const { width, ...restStyle } = this._style();\n this.containerStyle.set(restStyle);\n }\n\n onActionClick(item: ActionItem, event: Event) {\n event.stopPropagation();\n\n // Check permissions before executing action\n if (this.isDisabled(item)) return;\n\n // Execute action only if permitted\n if (item.action) {\n item.action(this.data());\n }\n\n this.actionClick.emit({ item });\n }\n\n trackByAction(index: number, item: ActionItem): string {\n return item.value;\n }\n\n isSvgFile(iconPath: string): boolean {\n if (!iconPath) return false;\n return iconPath.toLowerCase().includes(\".svg\") || iconPath.toLowerCase().includes(\"assets/icons/\");\n }\n\n @HostListener(\"document:click\")\n onDocumentClick() {\n if (this.isDropdownOpen()) {\n this.closeDropdown();\n }\n }\n\n toggleDropdown(event: Event) {\n event.stopPropagation();\n \n if (this.isDropdownOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.dropdownTrigger || !this.dropdownMenu) return;\n\n // Close all submenus when opening main menu\n this.actionItems().forEach((item: any) => (item.showSubmenu = false));\n\n const positions = this.getDropdownPositions();\n \n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.dropdownTrigger)\n .withPositions(positions)\n .withPush(true),\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n\n this.overlayRef = this.overlay.create(overlayConfig);\n const portal = new TemplatePortal(this.dropdownMenu, this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.closeDropdown();\n });\n\n this.isDropdownOpen.set(true);\n }\n\n private closeDropdown(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.isDropdownOpen.set(false);\n }\n\n private getDropdownPositions(): ConnectionPositionPair[] {\n // Use CDK Overlay's flexible positioning - it will automatically choose the best position\n return [\n // Primary position: below and aligned to end (right)\n new ConnectionPositionPair(\n { originX: 'end', originY: 'bottom' },\n { overlayX: 'end', overlayY: 'top' },\n 0, 4\n ),\n // Fallback position: above and aligned to end (right)\n new ConnectionPositionPair(\n { originX: 'end', originY: 'top' },\n { overlayX: 'end', overlayY: 'bottom' },\n 0, -4\n ),\n // Fallback position: below and aligned to start (left)\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n 0, 4\n ),\n // Fallback position: above and aligned to start (left)\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n 0, -4\n )\n ];\n }\n\n onDropdownItemClick(item: any, event: Event) {\n event.stopPropagation();\n\n if (this.isDisabled(item)) return;\n\n if (item?.children?.length) {\n // Toggle submenu\n item.showSubmenu = !item.showSubmenu;\n // Optionally close other submenus\n this.actionItems().forEach((i: any) => {\n if (i !== item) i.showSubmenu = false;\n });\n } else {\n // Handle action\n if (item.action) item.action(this.data());\n this.actionClick.emit({ item, data: this.data() });\n this.closeDropdown(); // Only close if action was executed\n }\n }\n\n onClick(event?: any): void{\n // Handle checkbox value - event might be {value: true} or just true\n const newValue = event && typeof event === 'object' ? event.value : event;\n this.currentState.set(newValue);\n this.actionClick.emit({ \n actionType: this.actionType(),\n value: newValue\n });\n }\n\n isDisabled(item: ActionItem): boolean {\n if (typeof item.disable === \"function\") {\n return item.disable(this.data());\n }\n return false;\n }\n \n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { TableComponent } from \"./table.component\";\nimport { CustomTableCellDirective } from \"./custom-table-cell.directive\";\nimport { SubTableComponent } from \"./sub-table/sub-table.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { TableFilterComponent } from \"./filter/filter.component\";\nimport { CheckboxModule } from \"mis-crystal-design-system/checkbox\";\nimport { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { PortalModule } from \"@angular/cdk/portal\";\nimport { SortIconsDirective } from \"./sort-icons.directive\";\nimport { ActionsCellComponent } from \"./actions-cell/actions-cell.component\";\nimport { DropdownModule } from \"mis-crystal-design-system/dropdown\";\n\n@NgModule({\n declarations: [\n TableComponent, \n SubTableComponent, \n TableFilterComponent, \n CustomTableCellDirective,\n SortIconsDirective,\n ActionsCellComponent\n ],\n imports: [CommonModule, CheckboxModule, ScrollingModule, OverlayModule, PortalModule, DropdownModule],\n exports: [\n TableComponent, \n SubTableComponent, \n TableFilterComponent, \n CustomTableCellDirective,\n SortIconsDirective,\n ActionsCellComponent\n ]\n})\nexport class TableModule {\n static forRoot(): ModuleWithProviders<TableModule> {\n return { ngModule: TableModule, providers: [] };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_c5","_c7","_c3","_c4","_c2","_c1","i1"],"mappings":"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"}
1
+ {"version":3,"file":"mis-crystal-design-system-table.mjs","sources":["../../../projects/mis-components/table/table.component.html","../../../projects/mis-components/table/table.component.ts","../../../projects/mis-components/table/custom-table-cell.directive.ts","../../../projects/mis-components/table/sub-table/sub-table.component.html","../../../projects/mis-components/table/sub-table/sub-table.component.ts","../../../projects/mis-components/table/filter/filter.component.html","../../../projects/mis-components/table/filter/filter.component.ts","../../../projects/mis-components/table/sort-icons.directive.ts","../../../projects/mis-components/table/actions-cell/actions-cell.component.html","../../../projects/mis-components/table/actions-cell/actions-cell.component.ts","../../../projects/mis-components/table/table.module.ts","../../../projects/mis-components/table/mis-crystal-design-system-table.ts"],"sourcesContent":["<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters()[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n \n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[colIndex]?.action && tableConfig()?.colConfig[colIndex]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[colIndex]?.action(col) : null\"\n *ngFor=\"let col of row; let colIndex = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[colIndex]?.style?.width || tableConfig()?.colHeaderConfig[colIndex]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[colIndex]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[colIndex]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[colIndex]?.style?.justifyContent\n ? tableConfig().colConfig[colIndex]?.style?.justifyContent\n : tableConfig().colConfig[colIndex]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[colIndex]?.type !== 'custom' && tableConfig().colConfig[colIndex]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[colIndex]?.style?.color || '',\n '--collapsed-lines': previewLines() || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex() == colIndex && expandedMap()[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[colIndex].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[colIndex]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[colIndex]?.actionType === 'checkbox' || tableConfig().colConfig[colIndex]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex() === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading()\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length > 0\">\n <sub-table [config]=\"subTableconfig()\" [tableData]=\"subTableData()\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div id=\"pagination-content-container\">\n @if(shouldShowPagination()){\n <div \n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n @if(showPageSizeDropdown()) {\n <div class=\"page-size-selector\">\n <mis-dropdown\n [data]=\"pageSizeOptions()\"\n [selectedItem]=\"selectedPageSizeOption()\"\n [width]=\"'90px'\"\n [height]=\"'32px'\"\n [searchEnabled]=\"false\"\n [dropdownListHeight]=\"'100px'\"\n (onChange)=\"onPageSizeChange($event)\"\n class=\"page-size-dropdown\"\n ></mis-dropdown>\n </div>\n }\n <div id=\"pages-container\">\n <span (click)=\"selectedPage() > 1 && updateSelectedPage(selectedPage() - 1)\" class=\"page\" [class.page-nav-inactive]=\"selectedPage() === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber === selectedPage() }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"selectedPage() === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"selectedPage() < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(selectedPage() + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n OnChanges,\n OnInit,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n input,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n untracked\n} from \"@angular/core\";\nimport { Filter, TableFilterComponent } from \"./filter/filter.component\";\nimport { SortState } from \"./sort-icons.directive\";\nimport { effect } from \"@angular/core\";\nimport { DropdownItem } from \"mis-crystal-design-system/dropdown\";\n\n@Component({\n selector: \"mis-table\",\n templateUrl: \"table.component.html\",\n styleUrls: [\"table.component.css\"]\n})\nexport class TableComponent implements OnInit, AfterViewInit, OnChanges {\n // Initialize with -1 to indicate no row is colored at the beginning\n activeRowIndex = signal<number[]>([]);\n hasCheckboxActions = signal<boolean>(false);\n selectAllCheckbox = signal<boolean>(false);\n\n // Filter related variables\n showFilter = signal<boolean>(false);\n filterName = signal<string>(\"\");\n filterData = signal<Array<Filter>>([]);\n filterContainerStyles = signal<any>({});\n appliedFilters = signal<{ [key: string]: Array<{ name: string; value: string }> }>({});\n \n // Convert outputs to signal-based outputs\n filtersUpdated = output<{\n [key: string]: Array<{ name: string; value: string }>;\n }>();\n\n @ViewChild(\"filter\") filter: TableFilterComponent | any;\n @ViewChildren(\"colHeaderRef\") colHeaders: QueryList<ElementRef> | any;\n\n // Pagination related variables\n pages = signal<Array<number>>([]);\n tableLength = signal<number>(0);\n selectedPage = signal<number>(1); // Internal state for selected page\n pageSelected = output<number>();\n pageSizeChanged = output<number>();\n pageSizeOptions = computed(() => {\n const config = this.tableConfig()?.paginationConfig;\n if (!config?.pageSizes || !Array.isArray(config.pageSizes) || !config.pageSizes?.length) return [];\n \n return config.pageSizes?.map(option => ({\n label: option?.toString() || '',\n value: option?.toString() || '',\n })) || [];\n });\n\n showPageSizeDropdown = computed(() => {\n return !!this.tableConfig()?.paginationConfig?.showPageSizeDropdown;\n });\n\n selectedPageSizeOption = signal<DropdownItem>({ label: \"\", value: \"\" });\n\n // Convert inputs to signal-based inputs\n tableConfig = input<TableConfig>();\n subTableconfig = input<TableConfig>();\n tableDataLoading = input<boolean>();\n expandedIndex = input<number>();\n tableData = input<Array<Array<any>>>([]);\n subTableData = input<Array<Array<any>>>([]);\n subTableDataLoading = input<boolean>();\n currentSort = input<{column: string, direction: 'ASC' | 'DESC' | ''} | null>();\n @ViewChild(\"table\") table: ElementRef | any;\n collapseColIndex = signal<number>(-1);\n previewLines = signal<number>(0);\n rowCollapseConfigIndex = signal<number>(-1);\n expandedMap = signal<Record<string, boolean>>({});\n\n\n // Sorting related properties\n multiColumnSort = signal<SortState[]>([]);\n sortChange = output<SortState>();\n headerAction = output<{ type: string; payload?: any }>();\n\n \n constructor(private renderer: Renderer2) {\n effect(() => {\n this.tableLength.set(this.tableData()?.length ?? 0);\n \n const config = this.tableConfig();\n \n if (config && config.activeRowIndex !== null && config.activeRowIndex !== undefined) {\n const activeRowIndex = config.activeRowIndex;\n this.activeRowIndex.set(Array.isArray(activeRowIndex) ? activeRowIndex : [activeRowIndex]);\n }\n\n if (this.rowCollapseConfigIndex() !== -1) {\n this.buildExpandedMap();\n }\n\n // --- PAGINATION PAGE ARRAY LOGIC (MOVED/REPLACED initializePagination) ---\n const len = config?.paginationConfig?.noOfPages;\n const disablePageJumping = config?.paginationConfig?.disablePageJumping;\n \n // Only run if pagination is configured and page jumping is enabled\n if (len && len > 0 && !disablePageJumping) {\n // Read the internal state of the selected page for calculating the pages array.\n // Since this runs on every config change, we rely on the value set \n // by updateSelectedPage().\n const pageNumber = this.selectedPage(); \n\n if (len <= 7) {\n const newPages = [];\n for (let i = 1; i <= len; i++) {\n newPages.push(i);\n }\n this.pages.set(newPages);\n } else {\n if (pageNumber - 2 <= 1) {\n this.pages.set([1, 2, 3, 4, 0, len]);\n } else if (pageNumber - 2 > 1 && pageNumber + 2 < len) {\n this.pages.set([1, 0, pageNumber - 1, pageNumber, pageNumber + 1, 0, len]);\n } else if (pageNumber + 2 >= len) {\n this.pages.set([1, 0, len - 3, len - 2, len - 1, len]);\n }\n }\n }\n // --- END PAGINATION PAGE ARRAY LOGIC ---\n\n \n if(config?.paginationConfig?.showPageSizeDropdown) {\n const options = this.pageSizeOptions();\n const rowsPerPage = this.tableConfig()?.paginationConfig?.rowsPerPage;\n \n if (!Array.isArray(options) || !rowsPerPage) {\n this.selectedPageSizeOption.set({ label: \"\", value: \"\" });\n return;\n }\n \n const selected = options.find(opt => opt?.value === rowsPerPage.toString());\n if (selected) {\n this.selectedPageSizeOption.set(selected);\n } else if (options.length > 0) {\n // If configured rowsPerPage is not among options, pick the floor value and notify parent\n const target = Number(rowsPerPage);\n //Sort the options\n const sorted = options\n .map(opt => ({ opt, num: Number(opt?.value) }))\n .filter(({ num }) => Number.isFinite(num))\n .sort((a, b) => a.num - b.num);\n\n let floorOption = sorted[0]?.opt;\n for (let i = sorted.length - 1; i >= 0; i--) {\n if (sorted[i].num <= target) {\n floorOption = sorted[i].opt;\n break;\n }\n }\n console.error(\"The configured rowsPerPage was not matched to any of the pageSizes sent in the paginationConfig. Selecting the nearest floor value among the available pageSizes.\");\n this.selectedPageSizeOption.set(floorOption);\n this.onPageSizeChange(floorOption);\n } else {\n console.error(\"No page size options available.\")\n }\n }\n }, { allowSignalWrites: true });\n\n // Reactive height calculation: maintains exact old behavior for backward compatibility\n // Old code: height - 56 + \"px\" (flawed for percentages, but we maintain it)\n // Note: Effect must be in constructor, not lifecycle hooks (NG0203 error otherwise)\n // effect(() => {\n // const config = this.tableConfig();\n // if (!config?.paginationConfig || !this.table?.nativeElement) return;\n \n // const height = config.height;\n // // Old behavior: height - 56 + \"px\" (maintains the flaw for backward compatibility)\n // const result = (height as any) - 56;\n // const finalHeight = result + \"px\";\n // this.renderer.setStyle(this.table.nativeElement, \"height\", finalHeight);\n // });\n }\n\n\n // Function to handle row click\n selectRow(index: number) {\n if (this.hasCheckboxActions()) return;\n this.activeRowIndex.set([index]); // Set the selected index to the clicked row's index\n !!this.tableConfig().rowConfig.action && this.tableConfig().rowConfig.action(index);\n }\n\n ngOnInit(): void {\n this.hasCheckboxActions.set(this.tableConfig().colConfig?.some(col => col.type === \"actions\" && col.actionType === \"checkbox\"));\n this.tableLength.set(!!this.tableData() ? this.tableData().length : 0);\n this.initializeFilters();\n if (this.tableConfig().paginationConfig) {\n this.initializePagination();\n }\n if (this.tableConfig().canScrollHorizontally === undefined) {\n // Note: We can't directly modify input signals, this should be handled by parent component\n }\n document.addEventListener(\"click\", event => {\n if (this.filter) {\n let isCheckBoxClicked = true;\n let targetElement = event.target as HTMLSpanElement;\n if (targetElement.className === \"checkmark\") {\n isCheckBoxClicked = true;\n this.showFilter.set(true);\n }\n let isClickInsideElement = this.filter.container.nativeElement.contains(event.target);\n if (!isClickInsideElement && !isCheckBoxClicked) {\n this.toggleFilter(this.filterName());\n }\n }\n });\n\n // fetch collapseColIndex and previewLines if present\n this.rowCollapseConfigIndex.set(this.tableConfig()?.colConfig?.findIndex(\n col => col.type === 'actions' && col.actionType === 'row-collapse'\n ));\n if (this.rowCollapseConfigIndex() !== -1) {\n this.collapseColIndex.set(this.tableConfig().colConfig[this.rowCollapseConfigIndex()].collapseColumnIndex ?? null);\n this.previewLines.set(this.tableConfig().colConfig[this.rowCollapseConfigIndex()].previewLines ?? null);\n this.buildExpandedMap();\n }\n }\n\n buildExpandedMap(): void{\n const newExpandedMap: Record<string, boolean> = {};\n const collapseIndex = this.rowCollapseConfigIndex();\n \n this.tableData().forEach((row, rowIndex) => {\n newExpandedMap[`${rowIndex}`] = row[collapseIndex];\n });\n this.expandedMap.set(newExpandedMap);\n}\n\n ngAfterViewInit() {\n // ViewChild is now available - manually trigger height calculation once\n // The effect in constructor will handle subsequent config changes\n const config = this.tableConfig();\n if (config?.paginationConfig && this.table?.nativeElement) {\n const height = config.height;\n const result = (height as any) - 56;\n const finalHeight = result + \"px\";\n this.renderer.setStyle(this.table.nativeElement, \"height\", finalHeight);\n }\n }\n \n ngOnChanges() {\n this.tableLength.set(this.tableData()?.length ?? 0);\n if (this.tableConfig().activeRowIndex !== null && this.tableConfig().activeRowIndex !== undefined) {\n const activeRowIndex = this.tableConfig().activeRowIndex;\n this.activeRowIndex.set(Array.isArray(activeRowIndex) ? activeRowIndex : [activeRowIndex])\n }\n }\n\n // Filter related functions\n initializeFilters() {\n const newAppliedFilters: { [key: string]: Array<{ name: string; value: string }> } = {};\n const allFilters: Array<Filter> = [];\n \n for (let colHeader of this.tableConfig()?.colHeaderConfig) {\n if (colHeader.filters) {\n let filters = [];\n for (let filter of colHeader.filters) {\n if (filter.checked) {\n filters.push({\n name: filter.name,\n value: filter.value\n });\n }\n // Add all filters to the filterData array\n allFilters.push(filter);\n }\n if (filters.length > 0) newAppliedFilters[colHeader.data] = filters;\n }\n }\n this.appliedFilters.set(newAppliedFilters);\n this.filterData.set(allFilters);\n }\n toggleFilter(filterName: string) {\n if (!this.showFilter()) {\n this.filterName.set(filterName);\n this.showFilter.set(true);\n\n let offSet = 0;\n let colHeadersReversed = this.colHeaders.toArray().reverse();\n\n for (let header of colHeadersReversed) {\n if (header.nativeElement.innerText === filterName) break;\n offSet += header.nativeElement.offsetWidth;\n }\n this.filterContainerStyles.set({\n top: \"44px\",\n right: offSet > 0 ? offSet - 116 + \"px\" : \"12px\"\n });\n } else {\n this.filterName.set(\"\");\n this.filterData.set([]);\n this.showFilter.set(false);\n }\n }\n updateAppliedFilters(appliedFilters: Array<{ name: string; value: string }>) {\n const currentFilters = this.appliedFilters();\n if (appliedFilters.length == 0) {\n delete currentFilters[this.filterName()];\n } else {\n currentFilters[this.filterName()] = appliedFilters;\n }\n this.appliedFilters.set({ ...currentFilters });\n this.filtersUpdated.emit({ ...this.appliedFilters() });\n this.toggleFilter(this.filterName());\n }\n\n // Pagination related functions\n initializePagination() {\n if (this.tableConfig().paginationConfig) {\n // Initialize selectedPage from config if provided, otherwise default to 1\n // const configSelectedPage = this.tableConfig().paginationConfig.selectedPage;\n // this.selectedPage.set(configSelectedPage ?? 1);\n \n let len = this.tableConfig().paginationConfig.noOfPages;\n if (len <= 7) {\n const newPages = [];\n for (let i = 1; i <= len; i++) {\n newPages.push(i);\n }\n this.pages.set(newPages);\n } else {\n this.pages.set([1, 2, 3, 4, 0, len]);\n }\n }\n }\n updateSelectedPage(pageNumber: number) {\n // Guard clause to prevent out-of-range updates\n if (pageNumber < 1 || pageNumber > this.tableConfig().paginationConfig.noOfPages) return;\n\n // Update internal selectedPage state immediately\n this.selectedPage.set(pageNumber);\n\n // Reset header checkbox when navigating to a different page\n this.selectAllCheckbox.set(false);\n \n // Update page numbers display for pagination with many pages\n let len = this.tableConfig().paginationConfig.noOfPages;\n if (len > 7) {\n if (pageNumber - 2 <= 1) {\n this.pages.set([1, 2, 3, 4, 0, len]);\n } else if (pageNumber - 2 > 1 && pageNumber + 2 < len) {\n this.pages.set([1, 0, pageNumber - 1, pageNumber, pageNumber + 1, 0, len]);\n } else if (pageNumber + 2 >= len) {\n this.pages.set([1, 0, len - 3, len - 2, len - 1, len]);\n }\n }\n \n // Emit to parent so they can update their config\n this.pageSelected.emit(pageNumber);\n }\n\n // Main container related functions\n getContainerHeight() {\n if (this.tableConfig()?.height) return this.tableConfig().height;\n else return \"\";\n }\n getContainerWidth() {\n if (this.tableConfig()?.width) return this.tableConfig().width;\n else return \"\";\n }\n\n // Column Headers related functions\n getColHeadersRowStyles() {\n const { colHeadersRowConfig } = this.tableConfig();\n const minHeight = colHeadersRowConfig?.height || \"44px\";\n const borderTop = (colHeadersRowConfig?.style as any)?.borderTop || \"\";\n const borderBottom = (colHeadersRowConfig?.style as any)?.borderBottom || \"1px solid #E0E0E0\";\n const backgroundColor = (colHeadersRowConfig?.style as any)?.backgroundColor || \"#FFFFFF\";\n const fontSize = (colHeadersRowConfig?.style as any)?.fontSize || \"14px\";\n return {\n \"min-height\": minHeight,\n \"border-top\": borderTop,\n \"border-bottom\": borderBottom,\n \"background-color\": backgroundColor,\n \"font-size\": fontSize\n };\n }\n\n onSortChange(sortState: SortState) {\n // Emit the sort change to the parent component\n this.sortChange.emit(sortState);\n \n // Handle multi-column sort if enabled\n if (this.tableConfig().multiColumnSort) {\n const currentMultiSort = this.multiColumnSort();\n const index = currentMultiSort.findIndex(sort => sort.column === sortState.column);\n if (index !== -1) {\n if (sortState.direction === null) {\n const newMultiSort = [...currentMultiSort];\n newMultiSort.splice(index, 1);\n this.multiColumnSort.set(newMultiSort);\n } else {\n const newMultiSort = [...currentMultiSort];\n newMultiSort[index] = sortState;\n this.multiColumnSort.set(newMultiSort);\n }\n } else if (sortState.direction !== null) {\n this.multiColumnSort.set([...currentMultiSort, sortState]);\n }\n }\n }\n\n getActionsCellStyle(style: any): any {\n if (!style) return {};\n const { width, ...restStyle } = style;\n return restStyle;\n }\n\n onActionClick(event: any, rowIndex: number): void {\n if (event.actionType === 'checkbox') {\n const currentActiveRows = this.activeRowIndex();\n if (event.value) {\n this.activeRowIndex.set([...currentActiveRows, rowIndex]);\n } else {\n this.activeRowIndex.set(currentActiveRows.filter(index => index !== rowIndex));\n }\n\n const actionInfo = this.findActionConfig('checkbox');\n if (actionInfo && this.tableData()[rowIndex]) {\n const { index, config } = actionInfo;\n // Note: We can't directly modify input signals, this should be handled by parent component\n const checkedItems = this.tableData().filter(row => row[index] === true);\n config.action?.(checkedItems);\n }\n\n } else if(event.actionType === 'row-collapse'){\n const rowCollapse = this.findActionConfig('row-collapse');\n if (rowCollapse && this.tableData()[rowIndex]) {\n // Note: We can't directly modify input signals, this should be handled by parent component\n rowCollapse.config.action?.(this.tableData());\n this.buildExpandedMap();\n }\n }\n }\n\n findActionConfig(actionType: string): { index: number, config: ColConfig } | null {\n for (let i = 0; i < this.tableConfig().colConfig.length; i++) {\n const col = this.tableConfig().colConfig[i];\n if (col.type === 'actions' && col.actionType === actionType) {\n return { index: i, config: col };\n }\n }\n return null;\n }\n \n\n isRowDisabled(row: any): boolean {\n return typeof this.tableConfig().rowConfig.disableRow === \"function\" ? this.tableConfig().rowConfig.disableRow(row) : false;\n }\n\n toggleCheckbox() {\n this.selectAllCheckbox.set(!this.selectAllCheckbox());\n const checkboxColIndex = this.tableConfig().colConfig.findIndex(col => col.type === 'actions' && col.actionType === 'checkbox');\n if (checkboxColIndex !== -1) {\n // Note: We can't directly modify input signals, this should be handled by parent component\n const updatedTableData = this.tableData().map((row: any[]) => {\n const updatedRow = [...row];\n const currentCheckbox = updatedRow[checkboxColIndex];\n const isDisabled = this.isRowDisabled(row);\n if (!isDisabled) {\n updatedRow[checkboxColIndex] = this.selectAllCheckbox();\n }\n return updatedRow;\n });\n this.headerAction?.emit({\n type: \"checkboxToggle\",\n payload: updatedTableData\n });\n }\n }\n\n\n onPageSizeChange(selectedOption: DropdownItem) {\n this.pageSizeChanged.emit(parseInt(selectedOption.value));\n }\n\n shouldShowPagination(): boolean {\n const config = this.tableConfig()?.paginationConfig;\n if (!config) return false;\n const hasMultiplePages = config.noOfPages > 1;\n const hasEnoughData = this.tableLength() > config.rowsPerPage;\n return this.showPageSizeDropdown() || hasMultiplePages || hasEnoughData;\n }\n}\n\nexport interface TableConfig {\n height: string | \"100%\";\n width: string | \"100%\";\n paginationConfig?: PaginationConfig | undefined | null;\n colHeadersRowConfig: RowConfig | undefined | null;\n rowConfig: RowConfig | undefined | null;\n colHeaderConfig: Array<ColHeaderConfig>;\n colConfig: Array<ColConfig>;\n canExpand?: boolean;\n canScrollHorizontally?: boolean;\n cellHover?: boolean;\n activeRowIndex?: number | number[];\n multiColumnSort?: boolean;\n}\nexport interface PaginationConfig {\n noOfPages: number;\n rowsPerPage: number;\n totalNoOfRows: number;\n selectedPage?: number;\n disablePageJumping?: boolean;\n showPageSizeDropdown?: boolean; // When true, rowsPerPage value should be included in pageSizes array\n pageSizes?: number[];\n}\nexport interface RowConfig {\n height?: string | undefined | null;\n style?: {};\n action?: any;\n disableRow?: (data: any) => boolean;\n}\nexport interface ColHeaderConfig {\n type: \"text\" | \"number\" | \"custom\" | \"checkbox\";\n data: any;\n componentRef?: any;\n filters?: Array<Filter> | null;\n style?: {};\n action?: any;\n isSortable?: boolean;\n sortAscIcon?: string;\n sortDescIcon?: string;\n}\nexport interface ColConfig {\n type: \"text\" | \"number\" | \"custom\" | \"actions\" | \"html\";\n componentRef?: any;\n style?: {};\n action?: any;\n actionItems?: ActionItem[];\n actionType?: \"inline\" | \"dropdown\" | \"checkbox\" | \"row-collapse\"; // inline for individual icons, dropdown for menu\n disable?: (rowData: any) => boolean;\n collapseColumnIndex?: number;\n previewLines?: number;\n}\nexport interface ActionItem {\n label: string;\n value: string;\n icon?: string;\n disable?: (data: any) => boolean;\n action?: (data: any) => void;\n children?: ActionItem[];\n}\nexport interface InternalActionItem extends ActionItem {\n showSubmenu?: boolean;\n}\n","import { ComponentFactoryResolver, Directive, ViewContainerRef, input, effect } from \"@angular/core\";\n\n@Directive({\n selector: \"[customTableCell]\"\n})\nexport class CustomTableCellDirective {\n private ref: any;\n private component: any;\n private cellData: any;\n\n customComponent = input<any>();\n data = input<any>();\n\n constructor(private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {\n effect(() => {\n const component = this.customComponent();\n if (component) {\n this.component = component;\n this.createComponent();\n }\n });\n\n effect(() => {\n const data = this.data();\n if (data !== undefined) {\n this.cellData = data;\n if (this.ref) {\n this.ref.instance.data = this.cellData;\n }\n }\n });\n }\n\n createComponent() {\n if (this.component) {\n const cmpFactoryResolver = this.componentFactoryResolver.resolveComponentFactory(this.component);\n this.viewContainerRef.clear();\n this.ref = this.viewContainerRef.createComponent(cmpFactoryResolver);\n this.setData();\n }\n }\n setData() {\n this.ref.instance.data = this.cellData;\n }\n}\n","<div\n id=\"main-container\"\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth()\n }\"\n>\n <div id=\"table-container\" #table>\n <div\n id=\"col-headers-container\"\n *ngIf=\"!!config().showHeader\"\n [ngStyle]=\"{\n height: getColHeadersRowHeight(),\n 'border-top': getColHeadersRowBorderTop(),\n 'border-bottom': getColHeadersRowBorderBottom()\n }\"\n >\n <div\n class=\"col-header\"\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of config()?.colHeaderConfig\"\n [style]=\"colHeader?.style\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <ng-template\n *ngIf=\"colHeader?.type === 'custom'\"\n customTableCell\n [customComponent]=\"colHeader?.componentRef\"\n [data]=\"colHeader.data\"\n ></ng-template>\n </div>\n </div>\n <div>\n <cdk-virtual-scroll-viewport\n [minBufferPx]=\"config().dataContainerMaxHeight || '400'\"\n [maxBufferPx]=\"config().dataContainerMaxHeight + 200 || '600'\"\n [style.overflow]=\"'overlay'\"\n [style.height]=\"config().dataContainerMaxHeight || '400px'\"\n itemSize=\"50\"\n id=\"data-container\"\n >\n \n <div\n class=\"row-wrapper\"\n *cdkVirtualFor=\"let row of tableData(); let i = index\"\n [ngStyle]=\"{\n backgroundColor: i % 2 === 0 ? '#FAFAFA' : null,\n }\"\n >\n <div class=\"t-row\">\n <div\n (click)=\"config()?.colConfig[i]?.action ? config()?.colConfig[i]?.action(col) : null\"\n *ngFor=\"let col of row; let i = index\"\n [ngStyle]=\"{\n width: config()?.colConfig[i]?.style?.width || config()?.colHeaderConfig[i]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n >\n <div\n class=\"t-col\"\n [style]=\"config().colConfig[i]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: config().colConfig[i].action ? 'pointer' : 'default',\n 'justify-content': config().colConfig[i]?.style?.justifyContent\n ? config().colConfig[i]?.style?.justifyContent\n : config().colConfig[i].type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p\n *ngIf=\"config().colConfig[i].type !== 'custom'\"\n [ngStyle]=\"{\n color: config()?.colConfig[i]?.style?.color ? config()?.colConfig[i]?.style?.color : ''\n }\"\n class=\"t-col-text\"\n >\n {{ col }}\n </p>\n <ng-template\n *ngIf=\"config().colConfig[i].type === 'custom'\"\n [customComponent]=\"config().colConfig[i].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n </div>\n </div>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, OnInit, Renderer2, ViewChild, input, signal } from \"@angular/core\";\n\n@Component({\n selector: \"sub-table\",\n templateUrl: \"sub-table.component.html\",\n styleUrls: [\"sub-table.component.css\"]\n})\nexport class SubTableComponent implements OnInit, AfterViewInit {\n selectedPage = signal<number>(1);\n pages = signal<Array<number>>([]);\n\n config = input<SubTableConfig | any>();\n tableData = input<Array<Array<any>>>([]);\n @ViewChild(\"table\") table: ElementRef | any;\n constructor(private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n ngAfterViewInit() {\n const config = this.config();\n if (!config?.paginationConfig) return; // ← Only set height if pagination exists (same as old code)\n \n const rawHeight = config.height;\n \n // Handle percentage values - use calc() to subtract 56px\n if (typeof rawHeight === 'string' && rawHeight.includes('%')) {\n const calcHeight = `calc(${rawHeight} - 56px)`;\n this.renderer.setStyle(this.table.nativeElement, \"height\", calcHeight);\n } else {\n // Handle pixel values - subtract 56px (same as old code)\n const result = (rawHeight as any) - 56;\n const finalHeight = result + \"px\";\n this.renderer.setStyle(this.table.nativeElement, \"height\", finalHeight);\n }\n }\n\n // Main container related functions\n getContainerHeight() {\n if (this.config().height) return this.config().height;\n else return \"\";\n }\n getContainerWidth() {\n if (this.config().width) return this.config().width;\n else return \"\";\n }\n\n // Column Headers related functions\n getColHeadersRowHeight() {\n if (this.config().colHeadersRowConfig && this.config().colHeadersRowConfig.height) {\n return this.config().colHeadersRowConfig.height;\n }\n return \"44px\";\n }\n getColHeadersRowBorderTop() {\n if (this.config().colHeadersRowConfig && this.config().colHeadersRowConfig.style?.borderTop) {\n return this.config().colHeadersRowConfig.style?.borderTop;\n }\n return \"\";\n }\n getColHeadersRowBorderBottom() {\n if (this.config().colHeadersRowConfig && this.config().colHeadersRowConfig.style?.borderBottom) {\n return this.config().colHeadersRowConfig.style?.borderBottom;\n }\n return \"1px solid #E0E0E0\";\n }\n}\n\nexport interface SubTableConfig {\n height: string | \"100%\";\n width: string | \"100%\";\n dataContainerMaxHeight: string | \"400px\";\n showHeader?: boolean | undefined;\n rowConfig: SubTableRowConfig | undefined | null;\n colHeaderConfig?: Array<SubTableColHeaderConfig>;\n colConfig: Array<SubTableColConfig>;\n}\n\nexport interface SubTableRowConfig {\n height?: string | undefined | null;\n style?: {};\n}\nexport interface SubTableColHeaderConfig {\n type: \"text\" | \"number\" | \"custom\";\n data: any;\n componentRef?: any;\n style?: {};\n action?: any;\n}\nexport interface SubTableColConfig {\n type: \"text\" | \"number\" | \"custom\";\n componentRef?: any;\n style?: {};\n action?: any;\n}\n","<div id=\"main-container\" #mainContainer [ngStyle]=\"containerStyles()\">\n <div id=\"search-bar-container\">\n <input (keyup)=\"updateSearchValue($event)\" type=\"text\" placeholder=\"Search\" />\n <svg id=\"search-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M1.21496 8.14563C1.21496 4.3179 4.33709 1.21165 8.19249 1.21165C12.0479 1.21165 15.17 4.3179 15.17 8.14563C15.17 9.69308 14.6598 11.1226 13.797 12.2767L12.3684 13.7013C11.2043 14.5668 9.75891 15.0796 8.19249 15.0796C4.33709 15.0796 1.21496 11.9734 1.21496 8.14563ZM12.9419 14.7835C11.602 15.7329 9.96259 16.2913 8.19249 16.2913C3.66965 16.2913 -0.00012207 12.6461 -0.00012207 8.14563C-0.00012207 3.64512 3.66965 0 8.19249 0C12.7153 0 16.3851 3.64512 16.3851 8.14563C16.3851 9.93713 15.8036 11.5931 14.8183 12.9375L16.836 14.4048C17.6704 14.912 18.7553 15.6543 17.2453 17.215C15.7352 18.7756 15.0098 17.6663 14.499 16.8364L12.9419 14.7835Z\"\n fill=\"#6A737D\"\n />\n </svg>\n </div>\n <div id=\"filters-main-container\">\n <div class=\"filters-sub-container\">\n <div *ngFor=\"let filter of getCheckedFilters()\">\n <div class=\"filter\">\n <mis-checkbox [checked]=\"true\" [name]=\"filter.value\" (valueChange)=\"updateFilter($event)\"></mis-checkbox>\n <span class=\"filter-text\">{{ filter.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"separator\" [ngStyle]=\"{ 'margin': '16px 0px' }\" *ngIf=\"getCheckedFilters().length && getCheckedFilters().length < filtersData().length\"></div>\n <div class=\"filters-sub-container\">\n <div *ngFor=\"let filter of getFiltersBasedOnSearchValue()\">\n <div class=\"filter\" *ngIf=\"!filter.checked\">\n <mis-checkbox [checked]=\"false\" [name]=\"filter.value\" (valueChange)=\"updateFilter($event)\"></mis-checkbox>\n <span class=\"filter-text\">{{ filter.name }}</span>\n </div>\n </div>\n <div id=\"no-results-container\" *ngIf=\"getFiltersBasedOnSearchValue().length < 1\">\n <span class=\"filter-text\">No matches found</span>\n </div>\n </div>\n \n <div class=\"separator\" [ngStyle]=\"{ 'margin': '16px 0px' }\"></div>\n <div id=\"buttons-container\">\n <button id=\"reset-btn\" [ngStyle]=\"{ 'margin-right': '8px' }\" (click)=\"resetFilters()\">Reset</button>\n <button id=\"apply-btn\" (click)=\"applyFilters()\">Apply</button>\n </div>\n </div>\n</div>","import { Component, ElementRef, OnInit, ViewChild, input, output, signal } from \"@angular/core\";\n\n@Component({\n selector: \"mis-table-filter\",\n templateUrl: \"filter.component.html\",\n styleUrls: [\"filter.component.css\"]\n})\nexport class TableFilterComponent implements OnInit {\n filtersData = input<Array<Filter>>([]);\n containerStyles = input<any>({});\n\n filtersApplied = output<any>();\n\n @ViewChild(\"mainContainer\") container: ElementRef | undefined;\n\n filtersMap = signal<any>({});\n searchValue = signal<string>(\"\");\n\n constructor() {}\n\n ngOnInit(): void {\n const newFiltersMap: any = {};\n const filters = this.filtersData() || [];\n if (Array.isArray(filters) && filters.length > 0) {\n filters.forEach(filter => {\n if (filter && filter.value) {\n newFiltersMap[filter.value] = filter;\n }\n });\n }\n this.filtersMap.set(newFiltersMap);\n }\n resetFilters() {\n const currentFiltersMap = this.filtersMap();\n const filters = this.filtersData() || [];\n \n if (filters.length > 0) {\n filters.forEach(filter => {\n if (filter && filter.value && currentFiltersMap[filter.value]) {\n currentFiltersMap[filter.value].checked = false;\n }\n });\n this.filtersMap.set({ ...currentFiltersMap });\n }\n this.filtersApplied.emit([]);\n }\n applyFilters() {\n const filtersMap = this.filtersMap();\n if (!filtersMap || Object.keys(filtersMap).length === 0) {\n this.filtersApplied.emit([]);\n return;\n }\n \n let list = Object.values(filtersMap)\n .filter((filter: Filter | any) => filter && filter.checked)\n .map((filter: Filter | any) => {\n return {\n name: filter.name,\n value: filter.value\n };\n });\n this.filtersApplied.emit(list);\n }\n updateFilter(data: any) {\n const currentFiltersMap = this.filtersMap();\n if (currentFiltersMap && data && data.name && currentFiltersMap[data.name]) {\n currentFiltersMap[data.name].checked = !currentFiltersMap[data.name].checked;\n this.filtersMap.set({ ...currentFiltersMap });\n }\n }\n updateSearchValue(event: any) {\n this.searchValue.set(event.target.value);\n }\n getFiltersBasedOnSearchValue(): Filter[] | any {\n const filtersMap = this.filtersMap();\n if (!filtersMap || Object.keys(filtersMap).length === 0) {\n return [];\n }\n let list = Object.values(filtersMap);\n list = list.filter((filter: Filter | any) => {\n return filter && filter.name && filter.name.match(new RegExp(this.searchValue(), \"i\"));\n });\n return list.sort(this.mySort);\n }\n getCheckedFilters(): Filter[] | any {\n const filtersMap = this.filtersMap();\n if (!filtersMap || Object.keys(filtersMap).length === 0) {\n return [];\n }\n let list = Object.values(filtersMap);\n list = list.filter((filter: Filter | any) => filter && filter.checked).sort(this.mySort);\n return list;\n }\n mySort = (a: Filter, b: Filter) => {\n return a.name.localeCompare(b.name);\n };\n}\n\nexport interface Filter {\n name: string;\n value: string;\n checked: boolean;\n}","import {\n Directive,\n ElementRef,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChanges,\n input,\n output,\n signal,\n effect,\n} from '@angular/core';\n\nexport interface SortState {\n column: string;\n direction: 'ASC' | 'DESC' | '';\n}\n\nexport interface SortColumn {\n data: string;\n sortAscIcon?: string;\n sortDescIcon?: string;\n}\n\n@Directive({\n selector: '[appSortIcons]',\n})\nexport class SortIconsDirective implements OnInit, OnChanges {\n // Convert inputs to signals\n column = input<SortColumn>();\n activeSort = input<SortState>();\n activeSorts = input<SortState[]>();\n multiColumnSort = input<boolean>(false);\n \n // Convert output to signal\n sortChange = output<SortState>();\n multiSortChange = output<SortState[]>();\n\n // Internal state as signals\n currentDirection = signal<'ASC' | 'DESC' | ''>('');\n\n // Assets\n private upIcon!: HTMLImageElement;\n private downIcon!: HTMLImageElement;\n private sortOrderElement?: HTMLSpanElement;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n // Watch for changes in activeSort, activeSorts, and currentDirection signals\n // Signal inputs don't trigger ngOnChanges, so we need to use effect()\n effect(() => {\n // Access the signals to create a dependency (we don't need to store the values)\n this.activeSort();\n this.activeSorts();\n this.currentDirection(); // Also watch internal direction changes\n // Update icon styles when signals change (only after icons are created)\n if (this.upIcon && this.downIcon) {\n this.updateIconStyles();\n }\n });\n }\n\n ngOnInit() {\n \n // Create a container for the icons\n const container = this.renderer.createElement('div');\n this.renderer?.setStyle(container, 'display', 'inline-flex');\n this.renderer?.setStyle(container, 'align-items', 'center');\n\n const iconContainer = this.renderer.createElement('div');\n this.renderer?.setStyle(iconContainer, 'display', 'inline-flex');\n this.renderer?.setStyle(iconContainer, 'flex-direction', 'column');\n this.renderer?.setStyle(iconContainer, 'align-items', 'center');\n\n this.upIcon = this.renderer.createElement('img');\n this.renderer?.setAttribute(this.upIcon, 'src', this.column()?.sortAscIcon);\n this.renderer?.setStyle(this.upIcon, 'opacity', '0.5');\n this.renderer?.setStyle(this.upIcon, 'transition', 'opacity 0.3s ease');\n this.renderer?.setStyle(this.upIcon, 'width', '9px');\n this.renderer?.setStyle(this.upIcon, 'cursor', 'pointer');\n this.renderer?.listen(this.upIcon, 'click', () => this.setSortDirection('ASC'));\n\n this.downIcon = this.renderer.createElement('img');\n this.renderer?.setAttribute(this.downIcon, 'src', this.column()?.sortDescIcon);\n this.renderer?.setStyle(this.downIcon, 'opacity', '0.5');\n this.renderer?.setStyle(this.downIcon, 'transition', 'opacity 0.3s ease');\n this.renderer?.setStyle(this.downIcon, 'width', '9px');\n this.renderer?.setStyle(this.downIcon, 'cursor', 'pointer');\n this.renderer?.listen(this.downIcon, 'click', () => this.setSortDirection('DESC'));\n\n this.renderer?.appendChild(iconContainer, this.upIcon);\n this.renderer?.appendChild(iconContainer, this.downIcon);\n this.renderer?.appendChild(container, iconContainer);\n\n if (this.multiColumnSort()) {\n this.sortOrderElement = this.renderer.createElement('span');\n this.renderer?.setStyle(this.sortOrderElement, 'font-size', '12px');\n this.renderer?.setStyle(this.sortOrderElement, 'font-weight', 'bold');\n this.renderer?.setStyle(this.sortOrderElement, 'color', '#000');\n this.renderer?.appendChild(container, this.sortOrderElement);\n }\n\n this.renderer?.appendChild(this.el.nativeElement, container);\n this.updateIconStyles();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['activeSort'] || changes['activeSorts']) {\n this.updateIconStyles();\n }\n }\n\n private setSortDirection(direction: 'ASC' | 'DESC'): void {\n if (this.multiColumnSort()) {\n this.handleMultiColumnSort(direction);\n } else {\n this.handleSingleColumnSort(direction);\n }\n }\n\n private handleSingleColumnSort(direction: 'ASC' | 'DESC'): void {\n if (this.currentDirection() === direction) {\n this.currentDirection.set(''); // Reset sorting if the same direction is clicked\n } else {\n this.currentDirection.set(direction);\n }\n\n this.sortChange.emit({ \n column: this.column()?.data || '', \n direction: this.currentDirection()\n });\n this.updateIconStyles();\n }\n\n private handleMultiColumnSort(direction: 'ASC' | 'DESC'): void {\n const activeSorts = this.activeSorts();\n \n if (!Array.isArray(activeSorts)) {\n return;\n }\n \n const existingSortIndex = activeSorts.findIndex(sort => sort.column === this.column()?.data);\n \n if (existingSortIndex !== -1) {\n if (activeSorts[existingSortIndex].direction !== direction) {\n activeSorts[existingSortIndex].direction = direction;\n } else {\n return;\n }\n } else {\n activeSorts.push({ \n column: this.column()?.data || '', \n direction\n });\n }\n this.multiSortChange.emit([...activeSorts]);\n this.updateIconStyles();\n }\n\n private updateIconStyles(): void {\n if (this.multiColumnSort()) {\n this.updateMultiColumnIconStyles();\n } else {\n this.updateSingleColumnIconStyles();\n }\n }\n\n private updateSingleColumnIconStyles(): void {\n // Check both parent's activeSort AND internal currentDirection\n // Parent's activeSort may not be updated immediately, so we also check internal state\n const parentActiveSort = this.activeSort();\n const isActiveColumnFromParent = parentActiveSort?.column === this.column()?.data;\n const internalDirection = this.currentDirection();\n const isActiveColumn = isActiveColumnFromParent || (internalDirection !== '');\n\n setTimeout(() => {\n // Use parent's direction if available, otherwise use internal direction\n const activeDirection = parentActiveSort?.direction || internalDirection;\n \n this.renderer?.setStyle(\n this.upIcon,\n 'opacity',\n isActiveColumn && activeDirection === 'ASC' ? '1' : '0.5'\n );\n this.renderer?.setStyle(\n this.downIcon,\n 'opacity',\n isActiveColumn && activeDirection === 'DESC' ? '1' : '0.5'\n );\n }, 0);\n }\n\n private updateMultiColumnIconStyles(): void {\n const activeSorts = this.activeSorts();\n \n if (!Array.isArray(activeSorts)) {\n return;\n }\n \n const columnSort = activeSorts.find(sort => sort.column === this.column()?.data);\n \n setTimeout(() => {\n this.renderer?.setStyle(\n this.upIcon,\n 'opacity',\n columnSort?.direction === 'ASC' ? '1' : '0.5'\n );\n this.renderer?.setStyle(\n this.downIcon,\n 'opacity',\n columnSort?.direction === 'DESC' ? '1' : '0.5'\n );\n\n if (this.sortOrderElement) {\n const sortIndex = activeSorts.findIndex(sort => sort.column === this.column()?.data);\n if (sortIndex !== -1) {\n this.renderer?.setProperty(this.sortOrderElement, 'textContent', (sortIndex + 1).toString());\n } else {\n this.renderer?.setProperty(this.sortOrderElement, 'textContent', '');\n }\n }\n }, 0);\n }\n}","<div class=\"actions-cell-container\" [ngStyle]=\"containerStyle()\">\n <!-- Inline Actions -->\n <div *ngIf=\"actionType() === 'inline'\" class=\"inline-actions\">\n <div\n *ngFor=\"let item of actionItems(); trackBy: trackByAction\"\n class=\"action-item\"\n [ngClass]=\"{ disabled: isDisabled(item) }\"\n (click)=\"onActionClick(item, $event)\"\n >\n <img [src]=\"item.icon\" [alt]=\"item.label\" class=\"action-icon-svg\" />\n </div>\n </div>\n\n <!-- Dropdown Actions -->\n <div *ngIf=\"actionType() === 'dropdown'\" class=\"dropdown-actions\">\n <div #dropdownTrigger class=\"dropdown-trigger\" (click)=\"toggleDropdown($event)\" title=\"More actions\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"4\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"#333\" />\n </svg>\n </div>\n </div>\n\n <!-- Checkbox Actions -->\n <div *ngIf=\"actionType() === 'checkbox'\" class=\"checkbox-actions\">\n <mis-checkbox [checked]=\"currentState()\" (valueChange)=\"onClick($event)\" [disabled]=\"disable() ? disable()(data()) : false\"> </mis-checkbox>\n </div>\n</div>\n\n<!-- Collapse / Expand Actions -->\n<div *ngIf=\"actionType() === 'row-collapse'\" class=\"collapse-toggle-action\">\n <div class=\"collapse-icon\" (click)=\"onClick($event)\" [title]=\"currentState() ? 'Expand' : 'Collapse'\">\n <svg *ngIf=\"currentState()\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n <path d=\"M7 10l5 5 5-5\" stroke=\"#0D1321\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"!currentState()\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n <path d=\"M7 14l5-5 5 5\" stroke=\"#0D1321\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n</div>\n\n<!-- CDK Overlay Template for Dropdown Menu -->\n<ng-template #dropdownMenu>\n <div class=\"dropdown-menu-overlay\">\n <div\n class=\"dropdown-menu-item\"\n *ngFor=\"let item of actionItems()\"\n (click)=\"onDropdownItemClick(item, $event)\"\n [ngClass]=\"{ disabled: isDisabled(item) }\"\n >\n <ng-container *ngIf=\"item.children?.length; else noChildren\">\n <span class=\"dropdown-icon\" *ngIf=\"item.icon\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n <span class=\"submenu-arrow\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 6L15 12L9 18\" stroke=\"#0D1321\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n\n <!-- DYNAMIC SUBMENU -->\n <div class=\"dropdown-submenu\" *ngIf=\"item.showSubmenu\">\n <div\n class=\"dropdown-menu-item\"\n *ngFor=\"let child of item.children\"\n [ngClass]=\"{ disabled: isDisabled(child) }\"\n (click)=\"onDropdownItemClick(child, $event)\"\n >\n <span class=\"dropdown-icon\" *ngIf=\"child.icon\">\n <img [src]=\"child.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ child.label }}</span>\n </div>\n </div>\n </ng-container>\n\n <ng-template #noChildren>\n <span class=\"dropdown-icon\" *ngIf=\"item.icon\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n </ng-template>\n </div>\n </div>\n</ng-template>\n","import { Component, OnInit, HostListener, ElementRef, ViewChild, TemplateRef, ViewContainerRef, OnDestroy, input, output, signal } from \"@angular/core\";\nimport { ConnectionPositionPair, Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\nimport { ActionItem } from \"../table.component\";\n\n@Component({\n selector: \"mis-actions-cell\",\n templateUrl: \"./actions-cell.component.html\",\n styleUrl: \"./actions-cell.component.css\"\n})\nexport class ActionsCellComponent implements OnInit, OnDestroy {\n cellData = input<any>();\n config = input<any>();\n\n actionClick = output<{ item?: ActionItem; data?: any, actionType?: string, value?: any }>();\n\n @ViewChild('dropdownMenu', { static: false }) dropdownMenu: TemplateRef<any>;\n @ViewChild('dropdownTrigger', { static: false }) dropdownTrigger: ElementRef;\n\n isDropdownOpen = signal<boolean>(false);\n actionItems = signal<ActionItem[]>([]);\n actionType = signal<\"inline\" | \"dropdown\" | \"checkbox\" | \"row-collapse\">(\"inline\");\n action = signal<((data: any) => void) | undefined>(undefined);\n data = signal<any>(undefined);\n disable = signal<((data: any) => boolean) | undefined>(undefined);\n currentState = signal<boolean>(false);\n private _style = signal<any>({});\n containerStyle = signal<any>({});\n private overlayRef: OverlayRef | null = null;\n\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n ngOnInit(): void {\n if (this.config()) {\n this.actionItems.set(this.config().actionItems);\n this.actionType.set(this.config().actionType);\n this._style.set(this.config().style);\n this.action.set(this.config().action);\n this.disable.set(this.config().disable);\n this.processStyle();\n }\n \n if (this.cellData() !== null) {\n const defaultStates: Record<string, boolean> = {\n 'checkbox': false,\n 'row-collapse': true,\n };\n if (this.actionType() in defaultStates) {\n this.currentState.set(typeof this.cellData() === 'boolean' ? this.cellData() : defaultStates[this.actionType()]);\n } else {\n this.data.set(this.cellData());\n }\n }\n }\n\n ngOnDestroy(): void {\n this.closeDropdown();\n }\n\n private processStyle(): void {\n // Remove width from style to avoid conflicts with table column width\n const { width, ...restStyle } = this._style();\n this.containerStyle.set(restStyle);\n }\n\n onActionClick(item: ActionItem, event: Event) {\n event.stopPropagation();\n\n // Check permissions before executing action\n if (this.isDisabled(item)) return;\n\n // Execute action only if permitted\n if (item.action) {\n item.action(this.data());\n }\n\n this.actionClick.emit({ item });\n }\n\n trackByAction(index: number, item: ActionItem): string {\n return item.value;\n }\n\n isSvgFile(iconPath: string): boolean {\n if (!iconPath) return false;\n return iconPath.toLowerCase().includes(\".svg\") || iconPath.toLowerCase().includes(\"assets/icons/\");\n }\n\n @HostListener(\"document:click\")\n onDocumentClick() {\n if (this.isDropdownOpen()) {\n this.closeDropdown();\n }\n }\n\n toggleDropdown(event: Event) {\n event.stopPropagation();\n \n if (this.isDropdownOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.dropdownTrigger || !this.dropdownMenu) return;\n\n // Close all submenus when opening main menu\n this.actionItems().forEach((item: any) => (item.showSubmenu = false));\n\n const positions = this.getDropdownPositions();\n \n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.dropdownTrigger)\n .withPositions(positions)\n .withPush(true),\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n\n this.overlayRef = this.overlay.create(overlayConfig);\n const portal = new TemplatePortal(this.dropdownMenu, this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.closeDropdown();\n });\n\n this.isDropdownOpen.set(true);\n }\n\n private closeDropdown(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.isDropdownOpen.set(false);\n }\n\n private getDropdownPositions(): ConnectionPositionPair[] {\n // Use CDK Overlay's flexible positioning - it will automatically choose the best position\n return [\n // Primary position: below and aligned to end (right)\n new ConnectionPositionPair(\n { originX: 'end', originY: 'bottom' },\n { overlayX: 'end', overlayY: 'top' },\n 0, 4\n ),\n // Fallback position: above and aligned to end (right)\n new ConnectionPositionPair(\n { originX: 'end', originY: 'top' },\n { overlayX: 'end', overlayY: 'bottom' },\n 0, -4\n ),\n // Fallback position: below and aligned to start (left)\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n 0, 4\n ),\n // Fallback position: above and aligned to start (left)\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n 0, -4\n )\n ];\n }\n\n onDropdownItemClick(item: any, event: Event) {\n event.stopPropagation();\n\n if (this.isDisabled(item)) return;\n\n if (item?.children?.length) {\n // Toggle submenu\n item.showSubmenu = !item.showSubmenu;\n // Optionally close other submenus\n this.actionItems().forEach((i: any) => {\n if (i !== item) i.showSubmenu = false;\n });\n } else {\n // Handle action\n if (item.action) item.action(this.data());\n this.actionClick.emit({ item, data: this.data() });\n this.closeDropdown(); // Only close if action was executed\n }\n }\n\n onClick(event?: any): void{\n // Handle checkbox value - event might be {value: true} or just true\n const newValue = event && typeof event === 'object' ? event.value : event;\n this.currentState.set(newValue);\n this.actionClick.emit({ \n actionType: this.actionType(),\n value: newValue\n });\n }\n\n isDisabled(item: ActionItem): boolean {\n if (typeof item.disable === \"function\") {\n return item.disable(this.data());\n }\n return false;\n }\n \n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { TableComponent } from \"./table.component\";\nimport { CustomTableCellDirective } from \"./custom-table-cell.directive\";\nimport { SubTableComponent } from \"./sub-table/sub-table.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { TableFilterComponent } from \"./filter/filter.component\";\nimport { CheckboxModule } from \"mis-crystal-design-system/checkbox\";\nimport { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { OverlayModule } from \"@angular/cdk/overlay\";\nimport { PortalModule } from \"@angular/cdk/portal\";\nimport { SortIconsDirective } from \"./sort-icons.directive\";\nimport { ActionsCellComponent } from \"./actions-cell/actions-cell.component\";\nimport { DropdownModule } from \"mis-crystal-design-system/dropdown\";\n\n@NgModule({\n declarations: [\n TableComponent, \n SubTableComponent, \n TableFilterComponent, \n CustomTableCellDirective,\n SortIconsDirective,\n ActionsCellComponent\n ],\n imports: [CommonModule, CheckboxModule, ScrollingModule, OverlayModule, PortalModule, DropdownModule],\n exports: [\n TableComponent, \n SubTableComponent, \n TableFilterComponent, \n CustomTableCellDirective,\n SortIconsDirective,\n ActionsCellComponent\n ]\n})\nexport class TableModule {\n static forRoot(): ModuleWithProviders<TableModule> {\n return { ngModule: TableModule, providers: [] };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_c5","_c7","_c3","_c4","_c2","_c1","i1"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mis-crystal-design-system",
3
- "version": "18.1.4-test-4",
3
+ "version": "18.1.4-test-5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "*",
6
6
  "@angular/core": "*",
@@ -40,12 +40,6 @@
40
40
  "esm": "./esm2022/async-search-dropdown/mis-crystal-design-system-async-search-dropdown.mjs",
41
41
  "default": "./fesm2022/mis-crystal-design-system-async-search-dropdown.mjs"
42
42
  },
43
- "./button": {
44
- "types": "./button/index.d.ts",
45
- "esm2022": "./esm2022/button/mis-crystal-design-system-button.mjs",
46
- "esm": "./esm2022/button/mis-crystal-design-system-button.mjs",
47
- "default": "./fesm2022/mis-crystal-design-system-button.mjs"
48
- },
49
43
  "./checkbox": {
50
44
  "types": "./checkbox/index.d.ts",
51
45
  "esm2022": "./esm2022/checkbox/mis-crystal-design-system-checkbox.mjs",
@@ -58,6 +52,12 @@
58
52
  "esm": "./esm2022/chip/mis-crystal-design-system-chip.mjs",
59
53
  "default": "./fesm2022/mis-crystal-design-system-chip.mjs"
60
54
  },
55
+ "./button": {
56
+ "types": "./button/index.d.ts",
57
+ "esm2022": "./esm2022/button/mis-crystal-design-system-button.mjs",
58
+ "esm": "./esm2022/button/mis-crystal-design-system-button.mjs",
59
+ "default": "./fesm2022/mis-crystal-design-system-button.mjs"
60
+ },
61
61
  "./datepicker_v2": {
62
62
  "types": "./datepicker_v2/index.d.ts",
63
63
  "esm2022": "./esm2022/datepicker_v2/mis-crystal-design-system-datepicker_v2.mjs",