@sarasanalytics-com/design-system 0.0.192 → 0.0.194

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +24 -24
  2. package/esm2022/interfaces/avatar-interface.mjs +1 -1
  3. package/esm2022/interfaces/button-interface.mjs +1 -1
  4. package/esm2022/interfaces/card-carousel-interface.mjs +1 -1
  5. package/esm2022/interfaces/chip-interface.mjs +1 -1
  6. package/esm2022/interfaces/form-layout.interface.mjs +1 -1
  7. package/esm2022/interfaces/grid-interface.mjs +1 -1
  8. package/esm2022/interfaces/guide-card-interface.mjs +1 -1
  9. package/esm2022/interfaces/header-interface.mjs +1 -1
  10. package/esm2022/interfaces/icon-interface.mjs +1 -1
  11. package/esm2022/interfaces/layout-section-interface.mjs +1 -1
  12. package/esm2022/interfaces/left-nav-interface.mjs +1 -1
  13. package/esm2022/interfaces/menu.interface.mjs +1 -1
  14. package/esm2022/interfaces/message-banner.mjs +1 -1
  15. package/esm2022/interfaces/option-interface.mjs +1 -1
  16. package/esm2022/interfaces/scrolling-card-interface.mjs +1 -1
  17. package/esm2022/interfaces/select-interface.mjs +1 -1
  18. package/esm2022/interfaces/status-dot.interface.mjs +1 -1
  19. package/esm2022/interfaces/tab-interface.mjs +1 -1
  20. package/esm2022/interfaces/toast-interface.mjs +1 -1
  21. package/esm2022/interfaces/typography-animation-interface.mjs +1 -1
  22. package/esm2022/lib/accordion/accordion.component.mjs +3 -3
  23. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  24. package/esm2022/lib/button/button.component.mjs +3 -3
  25. package/esm2022/lib/calendar-header/calendar-header.component.mjs +3 -3
  26. package/esm2022/lib/card/card-body/card-body.component.mjs +1 -1
  27. package/esm2022/lib/card/card-custom-header/card-custom-header.component.mjs +1 -1
  28. package/esm2022/lib/card/card-footer-actions/card-footer-actions.component.mjs +3 -3
  29. package/esm2022/lib/card/card-icon/card-icon.component.mjs +1 -1
  30. package/esm2022/lib/card/card-title-actions/card-title-actions.component.mjs +1 -1
  31. package/esm2022/lib/card/card.component.mjs +3 -3
  32. package/esm2022/lib/card/checkbox-card/checkbox-card.component.mjs +3 -3
  33. package/esm2022/lib/card/guide-card/guide-card.component.mjs +3 -3
  34. package/esm2022/lib/card/menu-card/menu-card.component.mjs +3 -3
  35. package/esm2022/lib/card/thumbnail-card/thumbnail-card.component.mjs +3 -3
  36. package/esm2022/lib/card-carousel/card-carousel.component.mjs +3 -3
  37. package/esm2022/lib/categories-nav/categories-nav.component.mjs +3 -3
  38. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  39. package/esm2022/lib/chips/chips.component.mjs +3 -3
  40. package/esm2022/lib/component-library.component.mjs +9 -9
  41. package/esm2022/lib/component-library.service.mjs +1 -1
  42. package/esm2022/lib/dashboard-loader/dashboard-loader.component.mjs +1 -1
  43. package/esm2022/lib/data-grid/data-grid.component.mjs +3 -3
  44. package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
  45. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  46. package/esm2022/lib/dropdown/category-dropdown/category-dropdown.component.mjs +3 -3
  47. package/esm2022/lib/dropdown/ng-select/ng-select.component.mjs +13 -76
  48. package/esm2022/lib/dropdown-menu/dropdown-menu.component.mjs +3 -3
  49. package/esm2022/lib/filter/filter.component.mjs +3 -3
  50. package/esm2022/lib/form-input/form-input.component.mjs +3 -3
  51. package/esm2022/lib/form-select/form-select.component.mjs +10 -3
  52. package/esm2022/lib/grid-cell/grid-cell.component.mjs +10 -10
  53. package/esm2022/lib/grid-header/grid-header.component.mjs +3 -3
  54. package/esm2022/lib/header/header.component.mjs +3 -3
  55. package/esm2022/lib/icon/icon.component.mjs +3 -3
  56. package/esm2022/lib/icon/icon.service.mjs +1 -1
  57. package/esm2022/lib/layout-section/layout-section.component.mjs +3 -3
  58. package/esm2022/lib/left-nav/left-nav.component.mjs +3 -3
  59. package/esm2022/lib/list/list.component.mjs +3 -3
  60. package/esm2022/lib/menu/menu-list/menu-item.component.mjs +3 -3
  61. package/esm2022/lib/menu/menu.component.mjs +3 -3
  62. package/esm2022/lib/menu/menu.directive.mjs +1 -1
  63. package/esm2022/lib/message-banner/message-banner.component.mjs +3 -3
  64. package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +3 -3
  65. package/esm2022/lib/mini-card/mini-card.component.mjs +3 -3
  66. package/esm2022/lib/page-layout/page-layout.component.mjs +3 -3
  67. package/esm2022/lib/progress-bar/progress-bar.component.mjs +3 -3
  68. package/esm2022/lib/query-builder/query-builder-demo.component.mjs +45 -45
  69. package/esm2022/lib/query-builder/query-builder.component.mjs +3 -3
  70. package/esm2022/lib/query-builder/query-builder.service.mjs +1 -1
  71. package/esm2022/lib/query-builder-formly/query-builder-formly.component.mjs +3 -3
  72. package/esm2022/lib/query-builder-textarea/query-builder-textarea-demo.component.mjs +39 -39
  73. package/esm2022/lib/query-builder-textarea/query-builder-textarea.component.mjs +3 -3
  74. package/esm2022/lib/radio-button/radio-button.component.mjs +3 -3
  75. package/esm2022/lib/scrolling-cards/scrolling-cards.component.mjs +3 -3
  76. package/esm2022/lib/skeleton/skeleton-base.component.mjs +1 -1
  77. package/esm2022/lib/skeleton/skeleton-container.component.mjs +9 -9
  78. package/esm2022/lib/skeleton/skeleton-loader.component.mjs +217 -217
  79. package/esm2022/lib/skeleton/skeleton-presets.mjs +1 -1
  80. package/esm2022/lib/skeleton/skeleton-shapes.component.mjs +1 -1
  81. package/esm2022/lib/spinner/spinner.component.mjs +1 -1
  82. package/esm2022/lib/status-dot/status-dot.component.mjs +17 -17
  83. package/esm2022/lib/stepper/stepper.component.mjs +3 -3
  84. package/esm2022/lib/tabs/tabs.component.mjs +3 -3
  85. package/esm2022/lib/toast/toast.component.mjs +3 -3
  86. package/esm2022/lib/tool-tip/tool-tip.component.mjs +3 -3
  87. package/esm2022/lib/typography-animation/typography-animation.component.mjs +3 -3
  88. package/esm2022/utils/validators.mjs +1 -1
  89. package/fesm2022/sarasanalytics-com-design-system.mjs +449 -504
  90. package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
  91. package/lib/dropdown/ng-select/ng-select.component.d.ts +2 -27
  92. package/lib/form-select/form-select.component.d.ts +1 -0
  93. package/package.json +1 -1
  94. package/styles/styles.css +434 -435
@@ -6,11 +6,11 @@ export class PageLayoutComponent {
6
6
  this.showFooterContent = false;
7
7
  }
8
8
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PageLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: PageLayoutComponent, isStandalone: true, selector: "sa-page-layout", inputs: { showRightContent: "showRightContent", showFooterContent: "showFooterContent", showProgressBarContent: "showProgressBarContent" }, ngImport: i0, template: "<div class=\"layout-container\" [class]=\"showProgressBarContent === false ? 'no-padding': 'padding'\">\n <div class=\"layout-inner-container\"\n [class]=\"showProgressBarContent === false ? 'no-border-radius': 'border-radius'\">\n @if (showProgressBarContent) {\n <div class=\"progress-bar-container\">\n <ng-content select=\"[progress-bar-content]\"></ng-content>\n </div>\n }\n <div class=\"content-container\">\n <div class=\"left-section\">\n <div class=\"top-section\">\n <ng-content select=\"[top-content]\"></ng-content>\n </div>\n <div class=\"left-wrapper\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n @if (showFooterContent) {\n <div class=\"footer-section\">\n <ng-content select=\"[footer-content]\"></ng-content>\n </div>\n }\n </div>\n @if (showRightContent) {\n <div class=\"right-section\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n }\n </div>\n </div>\n</div>", styles: [".layout-container{height:100%}.layout-container.padding{padding:var(--medium-20px)}.layout-inner-container{display:flex;flex-direction:column;position:relative;overflow:hidden;height:100%}.layout-inner-container.border-radius{border:1px solid var(--grey-100, #EAECF0);background:var(--structural-white);box-shadow:3px 4px 16px 4px #00000014;border-radius:var(--small-16px, 16px)}.progress-bar-container{border-radius:var(--small-16px, 16px);position:absolute;top:0;width:100%}.content-container{display:flex;flex:1;height:100%;-ms-overflow-style:none;scrollbar-width:none}.content-container::-webkit-scrollbar,.left-section::-webkit-scrollbar{display:none}.left-section{flex:1;padding:var(--medium-20px) var(--medium-20px) 0 var(--large-44px);display:flex;flex-direction:column}.right-section{background:var(--structural-primarytint, #FBFAFF);display:flex;align-items:center;width:28.9375rem;max-width:28.9375rem}.left-wrapper{height:calc(100% - 11.5rem);overflow-y:auto;-ms-overflow-style:none;scrollbar-width:none;padding:1rem 0}.footer-section{display:flex;margin-top:auto;margin-bottom:var(--large-40px)}\n"] }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: PageLayoutComponent, isStandalone: true, selector: "sa-page-layout", inputs: { showRightContent: "showRightContent", showFooterContent: "showFooterContent", showProgressBarContent: "showProgressBarContent" }, ngImport: i0, template: "<div class=\"layout-container\" [class]=\"showProgressBarContent === false ? 'no-padding': 'padding'\">\r\n <div class=\"layout-inner-container\"\r\n [class]=\"showProgressBarContent === false ? 'no-border-radius': 'border-radius'\">\r\n @if (showProgressBarContent) {\r\n <div class=\"progress-bar-container\">\r\n <ng-content select=\"[progress-bar-content]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"content-container\">\r\n <div class=\"left-section\">\r\n <div class=\"top-section\">\r\n <ng-content select=\"[top-content]\"></ng-content>\r\n </div>\r\n <div class=\"left-wrapper\">\r\n <ng-content select=\"[left-content]\"></ng-content>\r\n </div>\r\n @if (showFooterContent) {\r\n <div class=\"footer-section\">\r\n <ng-content select=\"[footer-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n @if (showRightContent) {\r\n <div class=\"right-section\">\r\n <ng-content select=\"[right-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>", styles: [".layout-container{height:100%}.layout-container.padding{padding:var(--medium-20px)}.layout-inner-container{display:flex;flex-direction:column;position:relative;overflow:hidden;height:100%}.layout-inner-container.border-radius{border:1px solid var(--grey-100, #EAECF0);background:var(--structural-white);box-shadow:3px 4px 16px 4px #00000014;border-radius:var(--small-16px, 16px)}.progress-bar-container{border-radius:var(--small-16px, 16px);position:absolute;top:0;width:100%}.content-container{display:flex;flex:1;height:100%;-ms-overflow-style:none;scrollbar-width:none}.content-container::-webkit-scrollbar,.left-section::-webkit-scrollbar{display:none}.left-section{flex:1;padding:var(--medium-20px) var(--medium-20px) 0 var(--large-44px);display:flex;flex-direction:column}.right-section{background:var(--structural-primarytint, #FBFAFF);display:flex;align-items:center;width:28.9375rem;max-width:28.9375rem}.left-wrapper{height:calc(100% - 11.5rem);overflow-y:auto;-ms-overflow-style:none;scrollbar-width:none;padding:1rem 0}.footer-section{display:flex;margin-top:auto;margin-bottom:var(--large-40px)}\n"] }); }
10
10
  }
11
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PageLayoutComponent, decorators: [{
12
12
  type: Component,
13
- args: [{ selector: 'sa-page-layout', standalone: true, imports: [], template: "<div class=\"layout-container\" [class]=\"showProgressBarContent === false ? 'no-padding': 'padding'\">\n <div class=\"layout-inner-container\"\n [class]=\"showProgressBarContent === false ? 'no-border-radius': 'border-radius'\">\n @if (showProgressBarContent) {\n <div class=\"progress-bar-container\">\n <ng-content select=\"[progress-bar-content]\"></ng-content>\n </div>\n }\n <div class=\"content-container\">\n <div class=\"left-section\">\n <div class=\"top-section\">\n <ng-content select=\"[top-content]\"></ng-content>\n </div>\n <div class=\"left-wrapper\">\n <ng-content select=\"[left-content]\"></ng-content>\n </div>\n @if (showFooterContent) {\n <div class=\"footer-section\">\n <ng-content select=\"[footer-content]\"></ng-content>\n </div>\n }\n </div>\n @if (showRightContent) {\n <div class=\"right-section\">\n <ng-content select=\"[right-content]\"></ng-content>\n </div>\n }\n </div>\n </div>\n</div>", styles: [".layout-container{height:100%}.layout-container.padding{padding:var(--medium-20px)}.layout-inner-container{display:flex;flex-direction:column;position:relative;overflow:hidden;height:100%}.layout-inner-container.border-radius{border:1px solid var(--grey-100, #EAECF0);background:var(--structural-white);box-shadow:3px 4px 16px 4px #00000014;border-radius:var(--small-16px, 16px)}.progress-bar-container{border-radius:var(--small-16px, 16px);position:absolute;top:0;width:100%}.content-container{display:flex;flex:1;height:100%;-ms-overflow-style:none;scrollbar-width:none}.content-container::-webkit-scrollbar,.left-section::-webkit-scrollbar{display:none}.left-section{flex:1;padding:var(--medium-20px) var(--medium-20px) 0 var(--large-44px);display:flex;flex-direction:column}.right-section{background:var(--structural-primarytint, #FBFAFF);display:flex;align-items:center;width:28.9375rem;max-width:28.9375rem}.left-wrapper{height:calc(100% - 11.5rem);overflow-y:auto;-ms-overflow-style:none;scrollbar-width:none;padding:1rem 0}.footer-section{display:flex;margin-top:auto;margin-bottom:var(--large-40px)}\n"] }]
13
+ args: [{ selector: 'sa-page-layout', standalone: true, imports: [], template: "<div class=\"layout-container\" [class]=\"showProgressBarContent === false ? 'no-padding': 'padding'\">\r\n <div class=\"layout-inner-container\"\r\n [class]=\"showProgressBarContent === false ? 'no-border-radius': 'border-radius'\">\r\n @if (showProgressBarContent) {\r\n <div class=\"progress-bar-container\">\r\n <ng-content select=\"[progress-bar-content]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"content-container\">\r\n <div class=\"left-section\">\r\n <div class=\"top-section\">\r\n <ng-content select=\"[top-content]\"></ng-content>\r\n </div>\r\n <div class=\"left-wrapper\">\r\n <ng-content select=\"[left-content]\"></ng-content>\r\n </div>\r\n @if (showFooterContent) {\r\n <div class=\"footer-section\">\r\n <ng-content select=\"[footer-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n @if (showRightContent) {\r\n <div class=\"right-section\">\r\n <ng-content select=\"[right-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>", styles: [".layout-container{height:100%}.layout-container.padding{padding:var(--medium-20px)}.layout-inner-container{display:flex;flex-direction:column;position:relative;overflow:hidden;height:100%}.layout-inner-container.border-radius{border:1px solid var(--grey-100, #EAECF0);background:var(--structural-white);box-shadow:3px 4px 16px 4px #00000014;border-radius:var(--small-16px, 16px)}.progress-bar-container{border-radius:var(--small-16px, 16px);position:absolute;top:0;width:100%}.content-container{display:flex;flex:1;height:100%;-ms-overflow-style:none;scrollbar-width:none}.content-container::-webkit-scrollbar,.left-section::-webkit-scrollbar{display:none}.left-section{flex:1;padding:var(--medium-20px) var(--medium-20px) 0 var(--large-44px);display:flex;flex-direction:column}.right-section{background:var(--structural-primarytint, #FBFAFF);display:flex;align-items:center;width:28.9375rem;max-width:28.9375rem}.left-wrapper{height:calc(100% - 11.5rem);overflow-y:auto;-ms-overflow-style:none;scrollbar-width:none;padding:1rem 0}.footer-section{display:flex;margin-top:auto;margin-bottom:var(--large-40px)}\n"] }]
14
14
  }], propDecorators: { showRightContent: [{
15
15
  type: Input
16
16
  }], showFooterContent: [{
@@ -18,4 +18,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
18
18
  }], showProgressBarContent: [{
19
19
  type: Input
20
20
  }] } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9wYWdlLWxheW91dC9wYWdlLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3BhZ2UtbGF5b3V0L3BhZ2UtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVNqRCxNQUFNLE9BQU8sbUJBQW1CO0lBUGhDO1FBUVcscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztLQUU3Qzs4R0FKWSxtQkFBbUI7a0dBQW5CLG1CQUFtQixzTkNUaEMsaXVDQTZCTTs7MkZEcEJPLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsRUFBRTs4QkFLRixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtcGFnZS1sYXlvdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3BhZ2UtbGF5b3V0LmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VMYXlvdXRDb21wb25lbnQge1xuICBASW5wdXQoKSBzaG93UmlnaHRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dGb290ZXJDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dQcm9ncmVzc0JhckNvbnRlbnQ7XG59XG4iLCI8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbnRhaW5lclwiIFtjbGFzc109XCJzaG93UHJvZ3Jlc3NCYXJDb250ZW50ID09PSBmYWxzZSA/ICduby1wYWRkaW5nJzogJ3BhZGRpbmcnXCI+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1pbm5lci1jb250YWluZXJcIlxuICAgICAgICBbY2xhc3NdPVwic2hvd1Byb2dyZXNzQmFyQ29udGVudCA9PT0gZmFsc2UgPyAnbm8tYm9yZGVyLXJhZGl1cyc6ICdib3JkZXItcmFkaXVzJ1wiPlxuICAgICAgICBAaWYgKHNob3dQcm9ncmVzc0JhckNvbnRlbnQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwcm9ncmVzcy1iYXItY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3Atc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbdG9wLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2xlZnQtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmIChzaG93Rm9vdGVyQ29udGVudCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZm9vdGVyLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChzaG93UmlnaHRDb250ZW50KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltyaWdodC1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9wYWdlLWxheW91dC9wYWdlLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3BhZ2UtbGF5b3V0L3BhZ2UtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVNqRCxNQUFNLE9BQU8sbUJBQW1CO0lBUGhDO1FBUVcscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztLQUU3Qzs4R0FKWSxtQkFBbUI7a0dBQW5CLG1CQUFtQixzTkNUaEMsMnhDQTZCTTs7MkZEcEJPLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsRUFBRTs4QkFLRixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2EtcGFnZS1sYXlvdXQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcGFnZS1sYXlvdXQuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2VMYXlvdXRDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dSaWdodENvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Rm9vdGVyQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dQcm9ncmVzc0JhckNvbnRlbnQ7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImxheW91dC1jb250YWluZXJcIiBbY2xhc3NdPVwic2hvd1Byb2dyZXNzQmFyQ29udGVudCA9PT0gZmFsc2UgPyAnbm8tcGFkZGluZyc6ICdwYWRkaW5nJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1pbm5lci1jb250YWluZXJcIlxyXG4gICAgICAgIFtjbGFzc109XCJzaG93UHJvZ3Jlc3NCYXJDb250ZW50ID09PSBmYWxzZSA/ICduby1ib3JkZXItcmFkaXVzJzogJ2JvcmRlci1yYWRpdXMnXCI+XHJcbiAgICAgICAgQGlmIChzaG93UHJvZ3Jlc3NCYXJDb250ZW50KSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Byb2dyZXNzLWJhci1jb250ZW50XVwiPjwvbmctY29udGVudD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3Atc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0b3AtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdC1jb250ZW50XVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgQGlmIChzaG93Rm9vdGVyQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3Rlci1jb250ZW50XVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgQGlmIChzaG93UmlnaHRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcmlnaHQtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -14,11 +14,11 @@ export class ProgressBarComponent {
14
14
  ngOnInit() {
15
15
  }
16
16
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProgressBarComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
17
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ProgressBarComponent, isStandalone: true, selector: "sa-progress-bar", inputs: { progressValue: "progressValue", borderRadius: "borderRadius", height: "height" }, ngImport: i0, template: "<mat-progress-bar mode=\"determinate\" [value]=\"progressValue\" class=\"progress-bar\" [ngStyle]=\"{\n '--dynamic-height': height ,\n '--dynamic-border-radius': borderRadius \n }\"></mat-progress-bar>", styles: [".progress-bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px);overflow:hidden;background-color:transparent;--mdc-linear-progress-active-indicator-color: var(--primary-500, #7F56D9);--mdc-linear-progress-track-color: white}::ng-deep .progress-bar .mdc-linear-progress__primary-bar{background-color:var(--mdc-linear-progress-active-indicator-color)}::ng-deep .progress-bar .mdc-linear-progress__bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__bar-inner{border-top-style:none;border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__secondary-bar{background-color:var(--mdc-linear-progress-track-color)}::ng-deep .progress-bar .mdc-linear-progress__buffer-bar{background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ProgressBarComponent, isStandalone: true, selector: "sa-progress-bar", inputs: { progressValue: "progressValue", borderRadius: "borderRadius", height: "height" }, ngImport: i0, template: "<mat-progress-bar mode=\"determinate\" [value]=\"progressValue\" class=\"progress-bar\" [ngStyle]=\"{\r\n '--dynamic-height': height ,\r\n '--dynamic-border-radius': borderRadius \r\n }\"></mat-progress-bar>", styles: [".progress-bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px);overflow:hidden;background-color:transparent;--mdc-linear-progress-active-indicator-color: var(--primary-500, #7F56D9);--mdc-linear-progress-track-color: white}::ng-deep .progress-bar .mdc-linear-progress__primary-bar{background-color:var(--mdc-linear-progress-active-indicator-color)}::ng-deep .progress-bar .mdc-linear-progress__bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__bar-inner{border-top-style:none;border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__secondary-bar{background-color:var(--mdc-linear-progress-track-color)}::ng-deep .progress-bar .mdc-linear-progress__buffer-bar{background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
18
18
  }
19
19
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProgressBarComponent, decorators: [{
20
20
  type: Component,
21
- args: [{ selector: 'sa-progress-bar', standalone: true, imports: [MatProgressBarModule, NgStyle], template: "<mat-progress-bar mode=\"determinate\" [value]=\"progressValue\" class=\"progress-bar\" [ngStyle]=\"{\n '--dynamic-height': height ,\n '--dynamic-border-radius': borderRadius \n }\"></mat-progress-bar>", styles: [".progress-bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px);overflow:hidden;background-color:transparent;--mdc-linear-progress-active-indicator-color: var(--primary-500, #7F56D9);--mdc-linear-progress-track-color: white}::ng-deep .progress-bar .mdc-linear-progress__primary-bar{background-color:var(--mdc-linear-progress-active-indicator-color)}::ng-deep .progress-bar .mdc-linear-progress__bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__bar-inner{border-top-style:none;border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__secondary-bar{background-color:var(--mdc-linear-progress-track-color)}::ng-deep .progress-bar .mdc-linear-progress__buffer-bar{background-color:transparent}\n"] }]
21
+ args: [{ selector: 'sa-progress-bar', standalone: true, imports: [MatProgressBarModule, NgStyle], template: "<mat-progress-bar mode=\"determinate\" [value]=\"progressValue\" class=\"progress-bar\" [ngStyle]=\"{\r\n '--dynamic-height': height ,\r\n '--dynamic-border-radius': borderRadius \r\n }\"></mat-progress-bar>", styles: [".progress-bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px);overflow:hidden;background-color:transparent;--mdc-linear-progress-active-indicator-color: var(--primary-500, #7F56D9);--mdc-linear-progress-track-color: white}::ng-deep .progress-bar .mdc-linear-progress__primary-bar{background-color:var(--mdc-linear-progress-active-indicator-color)}::ng-deep .progress-bar .mdc-linear-progress__bar{height:var(--dynamic-height, 8px);border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__bar-inner{border-top-style:none;border-radius:var(--dynamic-border-radius, 20px)}::ng-deep .progress-bar .mdc-linear-progress__secondary-bar{background-color:var(--mdc-linear-progress-track-color)}::ng-deep .progress-bar .mdc-linear-progress__buffer-bar{background-color:transparent}\n"] }]
22
22
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { progressValue: [{
23
23
  type: Input
24
24
  }], borderRadius: [{
@@ -26,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
26
26
  }], height: [{
27
27
  type: Input
28
28
  }] } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvcHJvZ3Jlc3MtYmFyL3Byb2dyZXNzLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3Byb2dyZXNzLWJhci9wcm9ncmVzcy1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBVzFDLE1BQU0sT0FBTyxvQkFBb0I7SUFLL0IsWUFBb0IsRUFBYyxFQUFVLFFBQW1CO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBSnRELGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLGlCQUFZLEdBQVcsTUFBTSxDQUFDO1FBQzlCLFdBQU0sR0FBVyxLQUFLLENBQUM7SUFFbUMsQ0FBQztJQUVwRSxRQUFRO0lBQ1IsQ0FBQzs4R0FSVSxvQkFBb0I7a0dBQXBCLG9CQUFvQix1S0NiakMsa05BR3dCLHU0QkRPWixvQkFBb0IseU5BQUUsT0FBTzs7MkZBRzVCLG9CQUFvQjtrQkFSaEMsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBR1AsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUM7dUdBSS9CLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtcHJvZ3Jlc3MtYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyZXNzLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50LmNzcycsXG4gIGltcG9ydHM6IFtNYXRQcm9ncmVzc0Jhck1vZHVsZSwgTmdTdHlsZV0sXG59KVxuXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9ncmVzc1ZhbHVlOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgYm9yZGVyUmFkaXVzOiBzdHJpbmcgPSAnMTBweCc7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzhweCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG59XG4iLCI8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiZGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwicHJvZ3Jlc3NWYWx1ZVwiIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW25nU3R5bGVdPVwie1xuICAgICctLWR5bmFtaWMtaGVpZ2h0JzogaGVpZ2h0ICxcbiAgICAnLS1keW5hbWljLWJvcmRlci1yYWRpdXMnOiBib3JkZXJSYWRpdXMgXG4gIH1cIj48L21hdC1wcm9ncmVzcy1iYXI+Il19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvcHJvZ3Jlc3MtYmFyL3Byb2dyZXNzLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3Byb2dyZXNzLWJhci9wcm9ncmVzcy1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBVzFDLE1BQU0sT0FBTyxvQkFBb0I7SUFLL0IsWUFBb0IsRUFBYyxFQUFVLFFBQW1CO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBSnRELGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLGlCQUFZLEdBQVcsTUFBTSxDQUFDO1FBQzlCLFdBQU0sR0FBVyxLQUFLLENBQUM7SUFFbUMsQ0FBQztJQUVwRSxRQUFRO0lBQ1IsQ0FBQzs4R0FSVSxvQkFBb0I7a0dBQXBCLG9CQUFvQix1S0NiakMsd05BR3dCLHU0QkRPWixvQkFBb0IseU5BQUUsT0FBTzs7MkZBRzVCLG9CQUFvQjtrQkFSaEMsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBR1AsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUM7dUdBSS9CLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2EtcHJvZ3Jlc3MtYmFyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50LmNzcycsXHJcbiAgaW1wb3J0czogW01hdFByb2dyZXNzQmFyTW9kdWxlLCBOZ1N0eWxlXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0JhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcHJvZ3Jlc3NWYWx1ZTogbnVtYmVyID0gMTA7XHJcbiAgQElucHV0KCkgYm9yZGVyUmFkaXVzOiBzdHJpbmcgPSAnMTBweCc7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnOHB4JztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiZGV0ZXJtaW5hdGVcIiBbdmFsdWVdPVwicHJvZ3Jlc3NWYWx1ZVwiIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgJy0tZHluYW1pYy1oZWlnaHQnOiBoZWlnaHQgLFxyXG4gICAgJy0tZHluYW1pYy1ib3JkZXItcmFkaXVzJzogYm9yZGVyUmFkaXVzIFxyXG4gIH1cIj48L21hdC1wcm9ncmVzcy1iYXI+Il19
@@ -81,54 +81,54 @@ export class QueryBuilderDemoComponent {
81
81
  this.queryJson = JSON.stringify(this.queryBuilderService.queryToJson(query), null, 2);
82
82
  }
83
83
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderDemoComponent, deps: [{ token: i1.QueryBuilderService }], target: i0.ɵɵFactoryTarget.Component }); }
84
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: QueryBuilderDemoComponent, isStandalone: true, selector: "sa-query-builder-demo", ngImport: i0, template: `
85
- <mat-card>
86
- <mat-card-header>
87
- <mat-card-title>Query Builder Demo</mat-card-title>
88
- </mat-card-header>
89
- <mat-card-content>
90
- <sa-query-builder [config]="queryConfig" (queryChange)="onQueryChange($event)"></sa-query-builder>
91
-
92
- <div class="query-result" *ngIf="queryString">
93
- <h3>Query Result:</h3>
94
- <pre>{{ queryString }}</pre>
95
- <h3>JSON:</h3>
96
- <pre>{{ queryJson }}</pre>
97
- <h3>Per-Row Conditions:</h3>
98
- <ul>
99
- <li *ngFor="let rule of currentQuery?.rules; let i = index">
100
- Row {{ i + 1 }}: {{ i === 0 ? 'First row' : rule.condition?.toUpperCase() }}
101
- </li>
102
- </ul>
103
- </div>
104
- </mat-card-content>
105
- </mat-card>
84
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: QueryBuilderDemoComponent, isStandalone: true, selector: "sa-query-builder-demo", ngImport: i0, template: `
85
+ <mat-card>
86
+ <mat-card-header>
87
+ <mat-card-title>Query Builder Demo</mat-card-title>
88
+ </mat-card-header>
89
+ <mat-card-content>
90
+ <sa-query-builder [config]="queryConfig" (queryChange)="onQueryChange($event)"></sa-query-builder>
91
+
92
+ <div class="query-result" *ngIf="queryString">
93
+ <h3>Query Result:</h3>
94
+ <pre>{{ queryString }}</pre>
95
+ <h3>JSON:</h3>
96
+ <pre>{{ queryJson }}</pre>
97
+ <h3>Per-Row Conditions:</h3>
98
+ <ul>
99
+ <li *ngFor="let rule of currentQuery?.rules; let i = index">
100
+ Row {{ i + 1 }}: {{ i === 0 ? 'First row' : rule.condition?.toUpperCase() }}
101
+ </li>
102
+ </ul>
103
+ </div>
104
+ </mat-card-content>
105
+ </mat-card>
106
106
  `, isInline: true, styles: [".query-result{margin-top:20px;padding:16px;background-color:#f5f5f5;border-radius:4px}pre{white-space:pre-wrap;word-break:break-all;background-color:#e0e0e0;padding:8px;border-radius:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QueryBuilderComponent, selector: "sa-query-builder", inputs: ["config"], outputs: ["queryChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }] }); }
107
107
  }
108
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderDemoComponent, decorators: [{
109
109
  type: Component,
110
- args: [{ selector: 'sa-query-builder-demo', standalone: true, imports: [CommonModule, QueryBuilderComponent, MatCardModule], template: `
111
- <mat-card>
112
- <mat-card-header>
113
- <mat-card-title>Query Builder Demo</mat-card-title>
114
- </mat-card-header>
115
- <mat-card-content>
116
- <sa-query-builder [config]="queryConfig" (queryChange)="onQueryChange($event)"></sa-query-builder>
117
-
118
- <div class="query-result" *ngIf="queryString">
119
- <h3>Query Result:</h3>
120
- <pre>{{ queryString }}</pre>
121
- <h3>JSON:</h3>
122
- <pre>{{ queryJson }}</pre>
123
- <h3>Per-Row Conditions:</h3>
124
- <ul>
125
- <li *ngFor="let rule of currentQuery?.rules; let i = index">
126
- Row {{ i + 1 }}: {{ i === 0 ? 'First row' : rule.condition?.toUpperCase() }}
127
- </li>
128
- </ul>
129
- </div>
130
- </mat-card-content>
131
- </mat-card>
110
+ args: [{ selector: 'sa-query-builder-demo', standalone: true, imports: [CommonModule, QueryBuilderComponent, MatCardModule], template: `
111
+ <mat-card>
112
+ <mat-card-header>
113
+ <mat-card-title>Query Builder Demo</mat-card-title>
114
+ </mat-card-header>
115
+ <mat-card-content>
116
+ <sa-query-builder [config]="queryConfig" (queryChange)="onQueryChange($event)"></sa-query-builder>
117
+
118
+ <div class="query-result" *ngIf="queryString">
119
+ <h3>Query Result:</h3>
120
+ <pre>{{ queryString }}</pre>
121
+ <h3>JSON:</h3>
122
+ <pre>{{ queryJson }}</pre>
123
+ <h3>Per-Row Conditions:</h3>
124
+ <ul>
125
+ <li *ngFor="let rule of currentQuery?.rules; let i = index">
126
+ Row {{ i + 1 }}: {{ i === 0 ? 'First row' : rule.condition?.toUpperCase() }}
127
+ </li>
128
+ </ul>
129
+ </div>
130
+ </mat-card-content>
131
+ </mat-card>
132
132
  `, styles: [".query-result{margin-top:20px;padding:16px;background-color:#f5f5f5;border-radius:4px}pre{white-space:pre-wrap;word-break:break-all;background-color:#e0e0e0;padding:8px;border-radius:4px}\n"] }]
133
133
  }], ctorParameters: () => [{ type: i1.QueryBuilderService }] });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1kZW1vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvcXVlcnktYnVpbGRlci9xdWVyeS1idWlsZGVyLWRlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBOEN2RCxNQUFNLE9BQU8seUJBQXlCO0lBb0VwQyxZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQW5FNUQsZ0JBQVcsR0FBZ0I7WUFDekIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEdBQUcsRUFBRSxNQUFNO29CQUNYLEtBQUssRUFBRSxNQUFNO29CQUNiLElBQUksRUFBRSxRQUFRO2lCQUNmO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxLQUFLO29CQUNWLEtBQUssRUFBRSxLQUFLO29CQUNaLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztpQkFDeEQ7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLE9BQU87b0JBQ1osS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7aUJBQ25DO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxXQUFXO29CQUNoQixLQUFLLEVBQUUsWUFBWTtvQkFDbkIsSUFBSSxFQUFFLE1BQU07aUJBQ2I7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLFFBQVE7b0JBQ2IsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUNwQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTt3QkFDeEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7cUJBQ3ZDO2lCQUNGO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxZQUFZO29CQUNqQixLQUFLLEVBQUUsYUFBYTtvQkFDcEIsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxXQUFXO29CQUNoQixLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUNwQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTt3QkFDdEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7cUJBQ3ZDO2lCQUNGO2FBQ0Y7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUM1QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDMUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUM1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtnQkFDNUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ3hDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDO1lBQ0QsZ0JBQWdCLEVBQUUsS0FBSztTQUN4QixDQUFDO1FBRUYsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixpQkFBWSxHQUFzQixJQUFJLENBQUM7SUFFd0IsQ0FBQztJQUVoRSxhQUFhLENBQUMsS0FBaUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDOzhHQTFFVSx5QkFBeUI7a0dBQXpCLHlCQUF5QixpRkF4QzFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JULHNRQXZCUyxZQUFZLGdRQUFFLHFCQUFxQiwwR0FBRSxhQUFhOzsyRkF5Q2pELHlCQUF5QjtrQkE1Q3JDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsWUFDbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJDb21wb25lbnQsIFF1ZXJ5Q29uZmlnLCBRdWVyeUdyb3VwIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYS1xdWVyeS1idWlsZGVyLWRlbW8nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBRdWVyeUJ1aWxkZXJDb21wb25lbnQsIE1hdENhcmRNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYXQtY2FyZD5cbiAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgIDxtYXQtY2FyZC10aXRsZT5RdWVyeSBCdWlsZGVyIERlbW88L21hdC1jYXJkLXRpdGxlPlxuICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPHNhLXF1ZXJ5LWJ1aWxkZXIgW2NvbmZpZ109XCJxdWVyeUNvbmZpZ1wiIChxdWVyeUNoYW5nZSk9XCJvblF1ZXJ5Q2hhbmdlKCRldmVudClcIj48L3NhLXF1ZXJ5LWJ1aWxkZXI+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwicXVlcnktcmVzdWx0XCIgKm5nSWY9XCJxdWVyeVN0cmluZ1wiPlxuICAgICAgICAgIDxoMz5RdWVyeSBSZXN1bHQ6PC9oMz5cbiAgICAgICAgICA8cHJlPnt7IHF1ZXJ5U3RyaW5nIH19PC9wcmU+XG4gICAgICAgICAgPGgzPkpTT046PC9oMz5cbiAgICAgICAgICA8cHJlPnt7IHF1ZXJ5SnNvbiB9fTwvcHJlPlxuICAgICAgICAgIDxoMz5QZXItUm93IENvbmRpdGlvbnM6PC9oMz5cbiAgICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHJ1bGUgb2YgY3VycmVudFF1ZXJ5Py5ydWxlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICBSb3cge3sgaSArIDEgfX06IHt7IGkgPT09IDAgPyAnRmlyc3Qgcm93JyA6IHJ1bGUuY29uZGl0aW9uPy50b1VwcGVyQ2FzZSgpIH19XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucXVlcnktcmVzdWx0IHtcbiAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG4gICAgXG4gICAgcHJlIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXJEZW1vQ29tcG9uZW50IHtcbiAgcXVlcnlDb25maWc6IFF1ZXJ5Q29uZmlnID0ge1xuICAgIGZpZWxkczogW1xuICAgICAge1xuICAgICAgICBrZXk6ICduYW1lJyxcbiAgICAgICAgbGFiZWw6ICdOYW1lJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2FnZScsXG4gICAgICAgIGxhYmVsOiAnQWdlJyxcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIG9wZXJhdG9yczogWyc9JywgJyE9JywgJz4nLCAnPCcsICc+PScsICc8PScsICdiZXR3ZWVuJ11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2VtYWlsJyxcbiAgICAgICAgbGFiZWw6ICdFbWFpbCcsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBvcGVyYXRvcnM6IFsnPScsICchPScsICdjb250YWlucyddXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdiaXJ0aGRhdGUnLFxuICAgICAgICBsYWJlbDogJ0JpcnRoIERhdGUnLFxuICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3N0YXR1cycsXG4gICAgICAgIGxhYmVsOiAnU3RhdHVzJyxcbiAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICB7IGxhYmVsOiAnQWN0aXZlJywgdmFsdWU6ICdhY3RpdmUnIH0sXG4gICAgICAgICAgeyBsYWJlbDogJ0luYWN0aXZlJywgdmFsdWU6ICdpbmFjdGl2ZScgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnUGVuZGluZycsIHZhbHVlOiAncGVuZGluZycgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdpc1ZlcmlmaWVkJyxcbiAgICAgICAgbGFiZWw6ICdJcyBWZXJpZmllZCcsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnbGlmZWN5Y2xlJyxcbiAgICAgICAgbGFiZWw6ICdMaWZlY3ljbGUnLFxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdBY3RpdmUnLCB2YWx1ZTogJ2FjdGl2ZScgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnQXQgUmlzaycsIHZhbHVlOiAnYXRfcmlzaycgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnQ2h1cm5lZCcsIHZhbHVlOiAnY2h1cm5lZCcgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBvcGVyYXRvcnM6IFtcbiAgICAgIHsgdmFsdWU6ICc9JywgbGFiZWw6ICc9JyB9LFxuICAgICAgeyB2YWx1ZTogJyE9JywgbGFiZWw6ICchPScgfSxcbiAgICAgIHsgdmFsdWU6ICc+JywgbGFiZWw6ICc+JyB9LFxuICAgICAgeyB2YWx1ZTogJzwnLCBsYWJlbDogJzwnIH0sXG4gICAgICB7IHZhbHVlOiAnPj0nLCBsYWJlbDogJz49JyB9LFxuICAgICAgeyB2YWx1ZTogJzw9JywgbGFiZWw6ICc8PScgfSxcbiAgICAgIHsgdmFsdWU6ICdjb250YWlucycsIGxhYmVsOiAnY29udGFpbnMnIH0sXG4gICAgICB7IHZhbHVlOiAnYmV0d2VlbicsIGxhYmVsOiAnYmV0d2VlbicgfVxuICAgIF0sXG4gICAgZGVmYXVsdENvbmRpdGlvbjogJ2FuZCdcbiAgfTtcblxuICBxdWVyeVN0cmluZzogc3RyaW5nID0gJyc7XG4gIHF1ZXJ5SnNvbjogc3RyaW5nID0gJyc7XG4gIGN1cnJlbnRRdWVyeTogUXVlcnlHcm91cCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcXVlcnlCdWlsZGVyU2VydmljZTogUXVlcnlCdWlsZGVyU2VydmljZSkge31cblxuICBvblF1ZXJ5Q2hhbmdlKHF1ZXJ5OiBRdWVyeUdyb3VwKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLnF1ZXJ5U3RyaW5nID0gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnF1ZXJ5VG9TdHJpbmcocXVlcnkpO1xuICAgIHRoaXMucXVlcnlKc29uID0gSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnF1ZXJ5VG9Kc29uKHF1ZXJ5KSwgbnVsbCwgMik7XG4gIH1cbn1cbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1kZW1vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvcXVlcnktYnVpbGRlci9xdWVyeS1idWlsZGVyLWRlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBOEN2RCxNQUFNLE9BQU8seUJBQXlCO0lBb0VwQyxZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQW5FNUQsZ0JBQVcsR0FBZ0I7WUFDekIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEdBQUcsRUFBRSxNQUFNO29CQUNYLEtBQUssRUFBRSxNQUFNO29CQUNiLElBQUksRUFBRSxRQUFRO2lCQUNmO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxLQUFLO29CQUNWLEtBQUssRUFBRSxLQUFLO29CQUNaLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztpQkFDeEQ7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLE9BQU87b0JBQ1osS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7aUJBQ25DO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxXQUFXO29CQUNoQixLQUFLLEVBQUUsWUFBWTtvQkFDbkIsSUFBSSxFQUFFLE1BQU07aUJBQ2I7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLFFBQVE7b0JBQ2IsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUNwQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTt3QkFDeEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7cUJBQ3ZDO2lCQUNGO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxZQUFZO29CQUNqQixLQUFLLEVBQUUsYUFBYTtvQkFDcEIsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxXQUFXO29CQUNoQixLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUNwQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTt3QkFDdEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7cUJBQ3ZDO2lCQUNGO2FBQ0Y7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUM1QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDMUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUM1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtnQkFDNUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ3hDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDO1lBQ0QsZ0JBQWdCLEVBQUUsS0FBSztTQUN4QixDQUFDO1FBRUYsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixpQkFBWSxHQUFzQixJQUFJLENBQUM7SUFFd0IsQ0FBQztJQUVoRSxhQUFhLENBQUMsS0FBaUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDOzhHQTFFVSx5QkFBeUI7a0dBQXpCLHlCQUF5QixpRkF4QzFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JULHNRQXZCUyxZQUFZLGdRQUFFLHFCQUFxQiwwR0FBRSxhQUFhOzsyRkF5Q2pELHlCQUF5QjtrQkE1Q3JDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsWUFDbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUXVlcnlCdWlsZGVyQ29tcG9uZW50LCBRdWVyeUNvbmZpZywgUXVlcnlHcm91cCB9IGZyb20gJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhLXF1ZXJ5LWJ1aWxkZXItZGVtbycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBRdWVyeUJ1aWxkZXJDb21wb25lbnQsIE1hdENhcmRNb2R1bGVdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bWF0LWNhcmQ+XHJcbiAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlF1ZXJ5IEJ1aWxkZXIgRGVtbzwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8c2EtcXVlcnktYnVpbGRlciBbY29uZmlnXT1cInF1ZXJ5Q29uZmlnXCIgKHF1ZXJ5Q2hhbmdlKT1cIm9uUXVlcnlDaGFuZ2UoJGV2ZW50KVwiPjwvc2EtcXVlcnktYnVpbGRlcj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicXVlcnktcmVzdWx0XCIgKm5nSWY9XCJxdWVyeVN0cmluZ1wiPlxyXG4gICAgICAgICAgPGgzPlF1ZXJ5IFJlc3VsdDo8L2gzPlxyXG4gICAgICAgICAgPHByZT57eyBxdWVyeVN0cmluZyB9fTwvcHJlPlxyXG4gICAgICAgICAgPGgzPkpTT046PC9oMz5cclxuICAgICAgICAgIDxwcmU+e3sgcXVlcnlKc29uIH19PC9wcmU+XHJcbiAgICAgICAgICA8aDM+UGVyLVJvdyBDb25kaXRpb25zOjwvaDM+XHJcbiAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcnVsZSBvZiBjdXJyZW50UXVlcnk/LnJ1bGVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgUm93IHt7IGkgKyAxIH19OiB7eyBpID09PSAwID8gJ0ZpcnN0IHJvdycgOiBydWxlLmNvbmRpdGlvbj8udG9VcHBlckNhc2UoKSB9fVxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAgIC5xdWVyeS1yZXN1bHQge1xyXG4gICAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG4gICAgICBwYWRkaW5nOiAxNnB4O1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHByZSB7XHJcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwO1xyXG4gICAgICBwYWRkaW5nOiA4cHg7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgIH1cclxuICBgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlcnlCdWlsZGVyRGVtb0NvbXBvbmVudCB7XHJcbiAgcXVlcnlDb25maWc6IFF1ZXJ5Q29uZmlnID0ge1xyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICduYW1lJyxcclxuICAgICAgICBsYWJlbDogJ05hbWUnLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdhZ2UnLFxyXG4gICAgICAgIGxhYmVsOiAnQWdlJyxcclxuICAgICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBvcGVyYXRvcnM6IFsnPScsICchPScsICc+JywgJzwnLCAnPj0nLCAnPD0nLCAnYmV0d2VlbiddXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdlbWFpbCcsXHJcbiAgICAgICAgbGFiZWw6ICdFbWFpbCcsXHJcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgb3BlcmF0b3JzOiBbJz0nLCAnIT0nLCAnY29udGFpbnMnXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAnYmlydGhkYXRlJyxcclxuICAgICAgICBsYWJlbDogJ0JpcnRoIERhdGUnLFxyXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAnc3RhdHVzJyxcclxuICAgICAgICBsYWJlbDogJ1N0YXR1cycsXHJcbiAgICAgICAgdHlwZTogJ3NlbGVjdCcsXHJcbiAgICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgICAgeyBsYWJlbDogJ0FjdGl2ZScsIHZhbHVlOiAnYWN0aXZlJyB9LFxyXG4gICAgICAgICAgeyBsYWJlbDogJ0luYWN0aXZlJywgdmFsdWU6ICdpbmFjdGl2ZScgfSxcclxuICAgICAgICAgIHsgbGFiZWw6ICdQZW5kaW5nJywgdmFsdWU6ICdwZW5kaW5nJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAnaXNWZXJpZmllZCcsXHJcbiAgICAgICAgbGFiZWw6ICdJcyBWZXJpZmllZCcsXHJcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdsaWZlY3ljbGUnLFxyXG4gICAgICAgIGxhYmVsOiAnTGlmZWN5Y2xlJyxcclxuICAgICAgICB0eXBlOiAnc2VsZWN0JyxcclxuICAgICAgICBvcHRpb25zOiBbXHJcbiAgICAgICAgICB7IGxhYmVsOiAnQWN0aXZlJywgdmFsdWU6ICdhY3RpdmUnIH0sXHJcbiAgICAgICAgICB7IGxhYmVsOiAnQXQgUmlzaycsIHZhbHVlOiAnYXRfcmlzaycgfSxcclxuICAgICAgICAgIHsgbGFiZWw6ICdDaHVybmVkJywgdmFsdWU6ICdjaHVybmVkJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgb3BlcmF0b3JzOiBbXHJcbiAgICAgIHsgdmFsdWU6ICc9JywgbGFiZWw6ICc9JyB9LFxyXG4gICAgICB7IHZhbHVlOiAnIT0nLCBsYWJlbDogJyE9JyB9LFxyXG4gICAgICB7IHZhbHVlOiAnPicsIGxhYmVsOiAnPicgfSxcclxuICAgICAgeyB2YWx1ZTogJzwnLCBsYWJlbDogJzwnIH0sXHJcbiAgICAgIHsgdmFsdWU6ICc+PScsIGxhYmVsOiAnPj0nIH0sXHJcbiAgICAgIHsgdmFsdWU6ICc8PScsIGxhYmVsOiAnPD0nIH0sXHJcbiAgICAgIHsgdmFsdWU6ICdjb250YWlucycsIGxhYmVsOiAnY29udGFpbnMnIH0sXHJcbiAgICAgIHsgdmFsdWU6ICdiZXR3ZWVuJywgbGFiZWw6ICdiZXR3ZWVuJyB9XHJcbiAgICBdLFxyXG4gICAgZGVmYXVsdENvbmRpdGlvbjogJ2FuZCdcclxuICB9O1xyXG5cclxuICBxdWVyeVN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgcXVlcnlKc29uOiBzdHJpbmcgPSAnJztcclxuICBjdXJyZW50UXVlcnk6IFF1ZXJ5R3JvdXAgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBxdWVyeUJ1aWxkZXJTZXJ2aWNlOiBRdWVyeUJ1aWxkZXJTZXJ2aWNlKSB7fVxyXG5cclxuICBvblF1ZXJ5Q2hhbmdlKHF1ZXJ5OiBRdWVyeUdyb3VwKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWVyeSA9IHF1ZXJ5O1xyXG4gICAgdGhpcy5xdWVyeVN0cmluZyA9IHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5xdWVyeVRvU3RyaW5nKHF1ZXJ5KTtcclxuICAgIHRoaXMucXVlcnlKc29uID0gSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnF1ZXJ5VG9Kc29uKHF1ZXJ5KSwgbnVsbCwgMik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -250,7 +250,7 @@ export class QueryBuilderComponent {
250
250
  this.queryChange.emit(this.model);
251
251
  }
252
252
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
253
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderComponent, isStandalone: true, selector: "sa-query-builder", inputs: { config: "config" }, outputs: { queryChange: "queryChange" }, providers: [MatNativeDateModule], ngImport: i0, template: "<div class=\"sa-query-builder\">\n <form [formGroup]=\"form\">\n <div class=\"query-builder-header\">\n <div class=\"where-label\">Where</div>\n </div>\n\n <div class=\"query-builder-body\">\n <div class=\"rules-container\" formArrayName=\"rules\">\n @for (rule of rulesArray.controls; track $index) {\n <div class=\"rule-row\" [formGroupName]=\"$index\">\n <!-- Condition selector (And/Or) -->\n @if ($index > 0) {\n <div class=\"condition-selector\">\n <mat-form-field appearance=\"fill\">\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\n <mat-option value=\"and\">And</mat-option>\n <mat-option value=\"or\">Or</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"condition-placeholder\"></div>\n }\n \n <!-- Field selection -->\n <mat-form-field class=\"field-select\">\n <mat-label>Select a filter</mat-label>\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\n @for (field of config.fields; track field.key) {\n <mat-option [value]=\"field.key\">\n {{ field.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Operator selection -->\n <mat-form-field class=\"operator-select\">\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\n <mat-option [value]=\"op.value\">\n {{ op.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Value input based on field type -->\n @switch (getFieldType(rule.value.field)) {\n @case ('string') {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('number') {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('date') {\n @if (!isOperatorBetween($index)) {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n } @else {\n <div class=\"date-range-container\">\n <mat-form-field class=\"value-input start-date\">\n <mat-label>Start date</mat-label>\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\n <mat-datepicker #startPicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"value-input end-date\">\n <mat-label>End date</mat-label>\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\n </mat-form-field>\n </div>\n }\n }\n @case ('boolean') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n <mat-option [value]=\"true\">True</mat-option>\n <mat-option [value]=\"false\">False</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @case ('select') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n @for (option of getFieldOptions(rule.value.field); track option.value) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @default {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n }\n\n <!-- Remove rule button -->\n <button mat-icon-button class=\"remove-rule-btn\" \n (click)=\"removeRule($index)\" \n [disabled]=\"rulesArray.length === 1\"\n matTooltip=\"Remove filter\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n </div>\n\n <!-- Add rule button -->\n <div class=\"add-rule-container\">\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\n <mat-icon>add</mat-icon> Add a filter\n </button>\n </div>\n </div>\n\n <div class=\"query-builder-footer\">\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\n </div>\n </form>\n</div>\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
253
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderComponent, isStandalone: true, selector: "sa-query-builder", inputs: { config: "config" }, outputs: { queryChange: "queryChange" }, providers: [MatNativeDateModule], ngImport: i0, template: "<div class=\"sa-query-builder\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"rules-container\" formArrayName=\"rules\">\r\n @for (rule of rulesArray.controls; track $index) {\r\n <div class=\"rule-row\" [formGroupName]=\"$index\">\r\n <!-- Condition selector (And/Or) -->\r\n @if ($index > 0) {\r\n <div class=\"condition-selector\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\r\n <mat-option value=\"and\">And</mat-option>\r\n <mat-option value=\"or\">Or</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <div class=\"condition-placeholder\"></div>\r\n }\r\n \r\n <!-- Field selection -->\r\n <mat-form-field class=\"field-select\">\r\n <mat-label>Select a filter</mat-label>\r\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\r\n @for (field of config.fields; track field.key) {\r\n <mat-option [value]=\"field.key\">\r\n {{ field.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Operator selection -->\r\n <mat-form-field class=\"operator-select\">\r\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\r\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\r\n <mat-option [value]=\"op.value\">\r\n {{ op.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Value input based on field type -->\r\n @switch (getFieldType(rule.value.field)) {\r\n @case ('string') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('number') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('date') {\r\n @if (!isOperatorBetween($index)) {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n } @else {\r\n <div class=\"date-range-container\">\r\n <mat-form-field class=\"value-input start-date\">\r\n <mat-label>Start date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field class=\"value-input end-date\">\r\n <mat-label>End date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n }\r\n @case ('boolean') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n <mat-option [value]=\"true\">True</mat-option>\r\n <mat-option [value]=\"false\">False</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @case ('select') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n @for (option of getFieldOptions(rule.value.field); track option.value) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @default {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n }\r\n\r\n <!-- Remove rule button -->\r\n <button mat-icon-button class=\"remove-rule-btn\" \r\n (click)=\"removeRule($index)\" \r\n [disabled]=\"rulesArray.length === 1\"\r\n matTooltip=\"Remove filter\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Add rule button -->\r\n <div class=\"add-rule-container\">\r\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\r\n <mat-icon>add</mat-icon> Add a filter\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
254
254
  }
255
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderComponent, decorators: [{
256
256
  type: Component,
@@ -267,10 +267,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
267
267
  MatButtonToggleModule,
268
268
  MatDatepickerModule,
269
269
  MatNativeDateModule
270
- ], template: "<div class=\"sa-query-builder\">\n <form [formGroup]=\"form\">\n <div class=\"query-builder-header\">\n <div class=\"where-label\">Where</div>\n </div>\n\n <div class=\"query-builder-body\">\n <div class=\"rules-container\" formArrayName=\"rules\">\n @for (rule of rulesArray.controls; track $index) {\n <div class=\"rule-row\" [formGroupName]=\"$index\">\n <!-- Condition selector (And/Or) -->\n @if ($index > 0) {\n <div class=\"condition-selector\">\n <mat-form-field appearance=\"fill\">\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\n <mat-option value=\"and\">And</mat-option>\n <mat-option value=\"or\">Or</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"condition-placeholder\"></div>\n }\n \n <!-- Field selection -->\n <mat-form-field class=\"field-select\">\n <mat-label>Select a filter</mat-label>\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\n @for (field of config.fields; track field.key) {\n <mat-option [value]=\"field.key\">\n {{ field.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Operator selection -->\n <mat-form-field class=\"operator-select\">\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\n <mat-option [value]=\"op.value\">\n {{ op.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <!-- Value input based on field type -->\n @switch (getFieldType(rule.value.field)) {\n @case ('string') {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('number') {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n @case ('date') {\n @if (!isOperatorBetween($index)) {\n <mat-form-field class=\"value-input\">\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n } @else {\n <div class=\"date-range-container\">\n <mat-form-field class=\"value-input start-date\">\n <mat-label>Start date</mat-label>\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\n <mat-datepicker #startPicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field class=\"value-input end-date\">\n <mat-label>End date</mat-label>\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\n </mat-form-field>\n </div>\n }\n }\n @case ('boolean') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n <mat-option [value]=\"true\">True</mat-option>\n <mat-option [value]=\"false\">False</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @case ('select') {\n <mat-form-field class=\"value-input\">\n <mat-select formControlName=\"value\">\n @for (option of getFieldOptions(rule.value.field); track option.value) {\n <mat-option [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n @default {\n <mat-form-field class=\"value-input\">\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\n </mat-form-field>\n }\n }\n\n <!-- Remove rule button -->\n <button mat-icon-button class=\"remove-rule-btn\" \n (click)=\"removeRule($index)\" \n [disabled]=\"rulesArray.length === 1\"\n matTooltip=\"Remove filter\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n </div>\n\n <!-- Add rule button -->\n <div class=\"add-rule-container\">\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\n <mat-icon>add</mat-icon> Add a filter\n </button>\n </div>\n </div>\n\n <div class=\"query-builder-footer\">\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\n </div>\n </form>\n</div>\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"] }]
270
+ ], template: "<div class=\"sa-query-builder\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"rules-container\" formArrayName=\"rules\">\r\n @for (rule of rulesArray.controls; track $index) {\r\n <div class=\"rule-row\" [formGroupName]=\"$index\">\r\n <!-- Condition selector (And/Or) -->\r\n @if ($index > 0) {\r\n <div class=\"condition-selector\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\r\n <mat-option value=\"and\">And</mat-option>\r\n <mat-option value=\"or\">Or</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <div class=\"condition-placeholder\"></div>\r\n }\r\n \r\n <!-- Field selection -->\r\n <mat-form-field class=\"field-select\">\r\n <mat-label>Select a filter</mat-label>\r\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\r\n @for (field of config.fields; track field.key) {\r\n <mat-option [value]=\"field.key\">\r\n {{ field.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Operator selection -->\r\n <mat-form-field class=\"operator-select\">\r\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\r\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\r\n <mat-option [value]=\"op.value\">\r\n {{ op.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Value input based on field type -->\r\n @switch (getFieldType(rule.value.field)) {\r\n @case ('string') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('number') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('date') {\r\n @if (!isOperatorBetween($index)) {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n } @else {\r\n <div class=\"date-range-container\">\r\n <mat-form-field class=\"value-input start-date\">\r\n <mat-label>Start date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field class=\"value-input end-date\">\r\n <mat-label>End date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n }\r\n @case ('boolean') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n <mat-option [value]=\"true\">True</mat-option>\r\n <mat-option [value]=\"false\">False</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @case ('select') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n @for (option of getFieldOptions(rule.value.field); track option.value) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @default {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n }\r\n\r\n <!-- Remove rule button -->\r\n <button mat-icon-button class=\"remove-rule-btn\" \r\n (click)=\"removeRule($index)\" \r\n [disabled]=\"rulesArray.length === 1\"\r\n matTooltip=\"Remove filter\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Add rule button -->\r\n <div class=\"add-rule-container\">\r\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\r\n <mat-icon>add</mat-icon> Add a filter\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: [".sa-query-builder{display:flex;flex-direction:column;width:100%;background-color:#fff;border-radius:8px;padding:16px;box-sizing:border-box}.sa-query-builder .query-builder-header{display:flex;align-items:center;margin-bottom:16px;height:36px;padding-left:128px}.sa-query-builder .query-builder-header .where-label{font-size:16px;font-weight:500;color:#000000de;margin-right:16px;line-height:36px}.sa-query-builder .query-builder-body .rules-container{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.sa-query-builder .query-builder-body .rules-container .rule-row{display:flex;align-items:center;gap:12px;width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector .mat-form-field{width:100%}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-wrapper{padding-bottom:0;margin:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-selector ::ng-deep .mat-form-field-infix{padding:.5em 0;border-top:0}.sa-query-builder .query-builder-body .rules-container .rule-row .condition-placeholder{width:120px;min-width:120px;margin-right:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .field-select{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .operator-select{flex:1;min-width:100px}.sa-query-builder .query-builder-body .rules-container .rule-row .value-input{flex:2;min-width:180px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container{display:flex;flex:2;gap:8px}.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .start-date,.sa-query-builder .query-builder-body .rules-container .rule-row .date-range-container .end-date{flex:1;min-width:140px}.sa-query-builder .query-builder-body .rules-container .rule-row .remove-rule-btn{color:#0000008a}.sa-query-builder .query-builder-body .add-rule-container{margin-bottom:16px}.sa-query-builder .query-builder-body .add-rule-container .add-rule-btn{display:flex;align-items:center;gap:4px;color:#673ab7;font-weight:500}.sa-query-builder .query-builder-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:16px}.sa-query-builder .query-builder-footer .reset-btn{color:#0000008a}.sa-query-builder .query-builder-footer .apply-btn{background-color:#673ab7;color:#fff}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}::ng-deep .mat-mdc-form-field-infix{min-height:40px}::ng-deep .mat-mdc-select-panel{max-height:300px}::ng-deep .mat-mdc-option{font-size:14px}\n"] }]
271
271
  }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { config: [{
272
272
  type: Input
273
273
  }], queryChange: [{
274
274
  type: Output
275
275
  }] } });
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWtELG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFxQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7O0FB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QUFtQixDQUFDLFdBQ3ZCO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCO2dGQUdRLE1BQU07c0JBQWQsS0FBSztnQkFlSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7TWF0RGF0ZXBpY2tlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWVsZCB7XG4gIGtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIG9wdGlvbnM/OiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdO1xuICBvcGVyYXRvcnM/OiBzdHJpbmdbXTtcbiAgZGVmYXVsdE9wZXJhdG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5T3BlcmF0b3Ige1xuICB2YWx1ZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29uZmlnIHtcbiAgZmllbGRzOiBRdWVyeUZpZWxkW107XG4gIG9wZXJhdG9yczogUXVlcnlPcGVyYXRvcltdO1xuICBkZWZhdWx0Q29uZGl0aW9uPzogJ2FuZCcgfCAnb3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UnVsZSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG4gIGNvbmRpdGlvbj86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUdyb3VwIHtcbiAgY29uZGl0aW9uOiAnYW5kJyB8ICdvcic7XG4gIHJ1bGVzOiAoUXVlcnlSdWxlIHwgUXVlcnlHcm91cClbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtcXVlcnktYnVpbGRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtNYXROYXRpdmVEYXRlTW9kdWxlXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUXVlcnlDb25maWcgPSB7XG4gICAgZmllbGRzOiBbXSxcbiAgICBvcGVyYXRvcnM6IFtcbiAgICAgIHsgdmFsdWU6ICc9JywgbGFiZWw6ICc9JyB9LFxuICAgICAgeyB2YWx1ZTogJyE9JywgbGFiZWw6ICchPScgfSxcbiAgICAgIHsgdmFsdWU6ICc+JywgbGFiZWw6ICc+JyB9LFxuICAgICAgeyB2YWx1ZTogJzwnLCBsYWJlbDogJzwnIH0sXG4gICAgICB7IHZhbHVlOiAnPj0nLCBsYWJlbDogJz49JyB9LFxuICAgICAgeyB2YWx1ZTogJzw9JywgbGFiZWw6ICc8PScgfSxcbiAgICAgIHsgdmFsdWU6ICdjb250YWlucycsIGxhYmVsOiAnY29udGFpbnMnIH0sXG4gICAgICB7IHZhbHVlOiAnYmV0d2VlbicsIGxhYmVsOiAnYmV0d2VlbicgfVxuICAgIF0sXG4gICAgZGVmYXVsdENvbmRpdGlvbjogJ2FuZCdcbiAgfTtcblxuICBAT3V0cHV0KCkgcXVlcnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5R3JvdXA+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICBtb2RlbDogUXVlcnlHcm91cDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uOiBbJ2FuZCddLFxuICAgICAgcnVsZXM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG5cbiAgICB0aGlzLm1vZGVsID0ge1xuICAgICAgY29uZGl0aW9uOiAnYW5kJyxcbiAgICAgIHJ1bGVzOiBbXVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgdGhpcy5hZGRSdWxlKCk7XG5cbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy50cmFuc2Zvcm1Gb3JtVG9Nb2RlbCh2YWx1ZSk7XG4gICAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcnVsZXNBcnJheSgpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdydWxlcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uOiBbdGhpcy5jb25maWcuZGVmYXVsdENvbmRpdGlvbiB8fCAnYW5kJ10sXG4gICAgICBydWxlczogdGhpcy5mYi5hcnJheShbXSlcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFJ1bGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0RmllbGQgPSB0aGlzLmNvbmZpZy5maWVsZHNbMF07XG4gICAgY29uc3QgZGVmYXVsdE9wZXJhdG9yID0gZGVmYXVsdEZpZWxkLmRlZmF1bHRPcGVyYXRvciB8fCB0aGlzLmdldE9wZXJhdG9yc0ZvclR5cGUoZGVmYXVsdEZpZWxkLnR5cGUpWzBdPy52YWx1ZSB8fCAnPSc7XG5cbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGZpZWxkOiBbZGVmYXVsdEZpZWxkLmtleV0sXG4gICAgICBvcGVyYXRvcjogW2RlZmF1bHRPcGVyYXRvcl0sXG4gICAgICB2YWx1ZTogW251bGxdLFxuICAgICAgY29uZGl0aW9uOiBbJ2FuZCddXG4gICAgfSk7XG5cbiAgICB0aGlzLnJ1bGVzQXJyYXkucHVzaChydWxlR3JvdXApO1xuICB9XG5cbiAgcmVtb3ZlUnVsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ydWxlc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIGdldEZpZWxkQnlLZXkoa2V5OiBzdHJpbmcpOiBRdWVyeUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQua2V5ID09PSBrZXkpO1xuICB9XG5cbiAgZ2V0T3BlcmF0b3JzRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBRdWVyeU9wZXJhdG9yW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5vcGVyYXRvcnMuZmlsdGVyKG9wID0+ICFvcC50eXBlcyB8fCBvcC50eXBlcy5pbmNsdWRlcyh0eXBlKSk7XG4gIH1cblxuICBnZXRPcGVyYXRvcnNGb3JGaWVsZChmaWVsZEtleTogc3RyaW5nKTogUXVlcnlPcGVyYXRvcltdIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGRCeUtleShmaWVsZEtleSk7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuIFtdO1xuXG4gICAgaWYgKGZpZWxkLm9wZXJhdG9ycykge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLm9wZXJhdG9ycy5maWx0ZXIob3AgPT4gZmllbGQub3BlcmF0b3JzPy5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldE9wZXJhdG9yc0ZvclR5cGUoZmllbGQudHlwZSk7XG4gIH1cblxuICBnZXRGaWVsZFR5cGUoZmllbGRLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlLZXkoZmllbGRLZXkpO1xuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLnR5cGUgOiAnc3RyaW5nJztcbiAgfVxuICBcbiAgaXNPcGVyYXRvckJldHdlZW4oaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIHJldHVybiBydWxlR3JvdXA/LmdldCgnb3BlcmF0b3InKT8udmFsdWUgPT09ICdiZXR3ZWVuJztcbiAgfVxuXG4gIGdldEZpZWxkT3B0aW9ucyhmaWVsZEtleTogc3RyaW5nKTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlLZXkoZmllbGRLZXkpO1xuICAgIHJldHVybiBmaWVsZD8ub3B0aW9ucyB8fCBbXTtcbiAgfVxuXG4gIG9uRmllbGRDaGFuZ2UoaW5kZXg6IG51bWJlciwgZmllbGRLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5S2V5KGZpZWxkS2V5KTtcbiAgICBcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoZmllbGRLZXkpO1xuICAgICAgY29uc3QgZGVmYXVsdE9wZXJhdG9yID0gZmllbGQuZGVmYXVsdE9wZXJhdG9yIHx8IChvcGVyYXRvcnMubGVuZ3RoID4gMCA/IG9wZXJhdG9yc1swXS52YWx1ZSA6ICc9Jyk7XG4gICAgICBcbiAgICAgIHJ1bGVHcm91cC5nZXQoJ29wZXJhdG9yJyk/LnNldFZhbHVlKGRlZmF1bHRPcGVyYXRvcik7XG4gICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgcmFuZ2UgdmFsdWVzIGlmIHRoZXkgZXhpc3RcbiAgICAgIGlmIChydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0JykpIHtcbiAgICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVTdGFydCcpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlR3JvdXAuZ2V0KCd2YWx1ZUVuZCcpKSB7XG4gICAgICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlRW5kJyk/LnNldFZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBZGQgcmFuZ2UgZm9ybSBjb250cm9scyBpZiBuZWVkZWRcbiAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIGRlZmF1bHRPcGVyYXRvciwgZmllbGQudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgb25PcGVyYXRvckNoYW5nZShpbmRleDogbnVtYmVyLCBvcGVyYXRvcjogc3RyaW5nLCBmaWVsZEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5nZXRGaWVsZFR5cGUoZmllbGRLZXkpO1xuICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIG9wZXJhdG9yLCBmaWVsZFR5cGUpO1xuICAgIFxuICAgIC8vIFJlc2V0IHZhbHVlcyB3aGVuIG9wZXJhdG9yIGNoYW5nZXNcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZShudWxsKTtcbiAgICBpZiAocnVsZUdyb3VwLmdldCgndmFsdWVTdGFydCcpKSB7XG4gICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0Jyk/LnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgICBpZiAocnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKSkge1xuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW11bSBhbGxvd2VkIGRhdGUgZm9yIHRoZSBlbmQgZGF0ZSBwaWNrZXIgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHN0YXJ0IGRhdGVcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcnVsZSByb3dcbiAgICogQHJldHVybnMgVGhlIG1pbmltdW0gZGF0ZSBmb3IgdGhlIGVuZCBkYXRlIHBpY2tlciAodGhlIHN0YXJ0IGRhdGUgb3IgdG9kYXkgaWYgbm8gc3RhcnQgZGF0ZSlcbiAgICovXG4gIGdldE1pbkVuZERhdGUoaW5kZXg6IG51bWJlcik6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBjb25zdCBzdGFydERhdGUgPSBydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0Jyk/LnZhbHVlO1xuICAgIFxuICAgIC8vIElmIHN0YXJ0IGRhdGUgaXMgc2VsZWN0ZWQsIHVzZSBpdCBhcyBtaW5pbXVtIGZvciBlbmQgZGF0ZVxuICAgIC8vIE90aGVyd2lzZSB1c2UgdG9kYXkncyBkYXRlXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZSA/IG5ldyBEYXRlKHN0YXJ0RGF0ZSkgOiBuZXcgRGF0ZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIHRvIHRoZSBzdGFydCBkYXRlXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIHJ1bGUgcm93XG4gICAqIEBwYXJhbSBldmVudCBUaGUgZGF0ZSBjaGFuZ2UgZXZlbnRcbiAgICovXG4gIG9uU3RhcnREYXRlQ2hhbmdlKGluZGV4OiBudW1iZXIsIGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBjb25zdCBlbmREYXRlID0gcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8udmFsdWU7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZXZlbnQudmFsdWU7XG4gICAgXG4gICAgLy8gSWYgZW5kIGRhdGUgaXMgYmVmb3JlIHN0YXJ0IGRhdGUsIHJlc2V0IGl0XG4gICAgaWYgKGVuZERhdGUgJiYgc3RhcnREYXRlICYmIG5ldyBEYXRlKGVuZERhdGUpIDwgbmV3IERhdGUoc3RhcnREYXRlKSkge1xuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG4gIFxuICB1cGRhdGVGb3JtQ29udHJvbHNGb3JPcGVyYXRvcihpbmRleDogbnVtYmVyLCBvcGVyYXRvcjogc3RyaW5nLCBmaWVsZFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIFxuICAgIC8vIEhhbmRsZSBkYXRlIHJhbmdlIGZvciAnYmV0d2Vlbicgb3BlcmF0b3JcbiAgICBpZiAob3BlcmF0b3IgPT09ICdiZXR3ZWVuJyAmJiBmaWVsZFR5cGUgPT09ICdkYXRlJykge1xuICAgICAgLy8gQWRkIHN0YXJ0IGFuZCBlbmQgZGF0ZSBjb250cm9scyBpZiB0aGV5IGRvbid0IGV4aXN0XG4gICAgICBpZiAoIXJ1bGVHcm91cC5jb250YWlucygndmFsdWVTdGFydCcpKSB7XG4gICAgICAgIHJ1bGVHcm91cC5hZGRDb250cm9sKCd2YWx1ZVN0YXJ0JywgdGhpcy5mYi5jb250cm9sKG51bGwpKTtcbiAgICAgIH1cbiAgICAgIGlmICghcnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZUVuZCcpKSB7XG4gICAgICAgIHJ1bGVHcm91cC5hZGRDb250cm9sKCd2YWx1ZUVuZCcsIHRoaXMuZmIuY29udHJvbChudWxsKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbW92ZSByYW5nZSBjb250cm9scyBpZiB0aGV5IGV4aXN0IGFuZCBhcmVuJ3QgbmVlZGVkXG4gICAgICBpZiAocnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZVN0YXJ0JykpIHtcbiAgICAgICAgcnVsZUdyb3VwLnJlbW92ZUNvbnRyb2woJ3ZhbHVlU3RhcnQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlR3JvdXAuY29udGFpbnMoJ3ZhbHVlRW5kJykpIHtcbiAgICAgICAgcnVsZUdyb3VwLnJlbW92ZUNvbnRyb2woJ3ZhbHVlRW5kJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICB0cmFuc2Zvcm1Gb3JtVG9Nb2RlbChmb3JtVmFsdWU6IGFueSk6IFF1ZXJ5R3JvdXAge1xuICAgIHJldHVybiB7XG4gICAgICBjb25kaXRpb246IGZvcm1WYWx1ZS5jb25kaXRpb24sXG4gICAgICBydWxlczogZm9ybVZhbHVlLnJ1bGVzLm1hcCgocnVsZTogYW55KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBkYXRlIHJhbmdlIGZvciAnYmV0d2Vlbicgb3BlcmF0b3JcbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0b3IgPT09ICdiZXR3ZWVuJyAmJiB0aGlzLmdldEZpZWxkVHlwZShydWxlLmZpZWxkKSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkOiBydWxlLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHJ1bGUub3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogeyBzdGFydDogcnVsZS52YWx1ZVN0YXJ0LCBlbmQ6IHJ1bGUudmFsdWVFbmQgfSxcbiAgICAgICAgICAgIGNvbmRpdGlvbjogcnVsZS5jb25kaXRpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBTdGFuZGFyZCBjYXNlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmllbGQ6IHJ1bGUuZmllbGQsXG4gICAgICAgICAgb3BlcmF0b3I6IHJ1bGUub3BlcmF0b3IsXG4gICAgICAgICAgdmFsdWU6IHJ1bGUudmFsdWUsXG4gICAgICAgICAgY29uZGl0aW9uOiBydWxlLmNvbmRpdGlvblxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0cyB0aGUgY29uZGl0aW9uIGZvciBhIHNwZWNpZmljIHJvd1xuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICogQHJldHVybnMgVGhlIGNvbmRpdGlvbiAoYW5kL29yKSBmb3IgdGhlIHJvd1xuICAgKi9cbiAgZ2V0Um93Q29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiAnYW5kJyB8ICdvcicge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuICdhbmQnOyAvLyBGaXJzdCByb3cgZG9lc24ndCBoYXZlIGEgY29uZGl0aW9uXG4gICAgXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgcmV0dXJuIHJ1bGVHcm91cC5nZXQoJ2NvbmRpdGlvbicpPy52YWx1ZSB8fCAnYW5kJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbmRpdGlvbiBmb3IgYSBzcGVjaWZpYyByb3dcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBzZXQgKGFuZC9vcilcbiAgICovXG4gIHNldFJvd0NvbmRpdGlvbihpbmRleDogbnVtYmVyLCBjb25kaXRpb246ICdhbmQnIHwgJ29yJyk6IHZvaWQge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuOyAvLyBGaXJzdCByb3cgZG9lc24ndCBoYXZlIGEgY29uZGl0aW9uXG4gICAgXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgcnVsZUdyb3VwLmdldCgnY29uZGl0aW9uJyk/LnNldFZhbHVlKGNvbmRpdGlvbik7XG4gIH1cblxuICB0b2dnbGVDb25kaXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbmRpdGlvbiA9IHRoaXMuZm9ybS5nZXQoJ2NvbmRpdGlvbicpPy52YWx1ZTtcbiAgICBjb25zdCBuZXdDb25kaXRpb24gPSBjdXJyZW50Q29uZGl0aW9uID09PSAnYW5kJyA/ICdvcicgOiAnYW5kJztcbiAgICB0aGlzLmZvcm0uZ2V0KCdjb25kaXRpb24nKT8uc2V0VmFsdWUobmV3Q29uZGl0aW9uKTtcbiAgfVxuXG4gIGdldENvbmRpdGlvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NvbmRpdGlvbicpPy52YWx1ZSA9PT0gJ2FuZCcgPyAnQU5EJyA6ICdPUic7XG4gIH1cblxuICByZXNldFF1ZXJ5KCk6IHZvaWQge1xuICAgIHRoaXMucnVsZXNBcnJheS5jbGVhcigpO1xuICAgIHRoaXMuYWRkUnVsZSgpO1xuICB9XG5cbiAgYXBwbHlRdWVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzYS1xdWVyeS1idWlsZGVyXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxkaXYgY2xhc3M9XCJxdWVyeS1idWlsZGVyLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIndoZXJlLWxhYmVsXCI+V2hlcmU8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJxdWVyeS1idWlsZGVyLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1jb250YWluZXJcIiBmb3JtQXJyYXlOYW1lPVwicnVsZXNcIj5cbiAgICAgICAgQGZvciAocnVsZSBvZiBydWxlc0FycmF5LmNvbnRyb2xzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZS1yb3dcIiBbZm9ybUdyb3VwTmFtZV09XCIkaW5kZXhcIj5cbiAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uIHNlbGVjdG9yIChBbmQvT3IpIC0tPlxuICAgICAgICAgICAgQGlmICgkaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24tc2VsZWN0b3JcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJnZXRSb3dDb25kaXRpb24oJGluZGV4KVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwic2V0Um93Q29uZGl0aW9uKCRpbmRleCwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImFuZFwiPkFuZDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJvclwiPk9yPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24tcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBGaWVsZCBzZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmaWVsZC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TZWxlY3QgYSBmaWx0ZXI8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZmllbGRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoJGluZGV4LCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgY29uZmlnLmZpZWxkczsgdHJhY2sgZmllbGQua2V5KSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmllbGQua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8IS0tIE9wZXJhdG9yIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm9wZXJhdG9yLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJvcGVyYXRvclwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25PcGVyYXRvckNoYW5nZSgkaW5kZXgsICRldmVudC52YWx1ZSwgcnVsZS52YWx1ZS5maWVsZClcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcCBvZiBnZXRPcGVyYXRvcnNGb3JGaWVsZChydWxlLnZhbHVlLmZpZWxkKTsgdHJhY2sgb3AudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPCEtLSBWYWx1ZSBpbnB1dCBiYXNlZCBvbiBmaWVsZCB0eXBlIC0tPlxuICAgICAgICAgICAgQHN3aXRjaCAoZ2V0RmllbGRUeXBlKHJ1bGUudmFsdWUuZmllbGQpKSB7XG4gICAgICAgICAgICAgIEBjYXNlICgnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdmFsdWUuLi5cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHZhbHVlLi4uXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ2RhdGUnKSB7XG4gICAgICAgICAgICAgICAgQGlmICghaXNPcGVyYXRvckJldHdlZW4oJGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJkYXRlXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1yYW5nZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXQgc3RhcnQtZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U3RhcnQgZGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJzdGFydFBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlU3RhcnRcIiAoY2xpY2spPVwic3RhcnRQaWNrZXIub3BlbigpXCIgKGRhdGVDaGFuZ2UpPVwib25TdGFydERhdGVDaGFuZ2UoJGluZGV4LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwic3RhcnRQaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3N0YXJ0UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0IGVuZC1kYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5FbmQgZGF0ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJlbmRQaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZUVuZFwiIChjbGljayk9XCJlbmRQaWNrZXIub3BlbigpXCIgW21pbl09XCJnZXRNaW5FbmREYXRlKCRpbmRleClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJlbmRQaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2VuZFBpY2tlciBbc3RhcnRBdF09XCJnZXRNaW5FbmREYXRlKCRpbmRleClcIj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj5UcnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5GYWxzZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RmllbGRPcHRpb25zKHJ1bGUudmFsdWUuZmllbGQpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHZhbHVlLi4uXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIFJlbW92ZSBydWxlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicmVtb3ZlLXJ1bGUtYnRuXCIgXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVSdWxlKCRpbmRleClcIiBcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJ1bGVzQXJyYXkubGVuZ3RoID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlbW92ZSBmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBBZGQgcnVsZSBidXR0b24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWRkLXJ1bGUtY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFkZC1ydWxlLWJ0blwiIChjbGljayk9XCJhZGRSdWxlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIGEgZmlsdGVyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicXVlcnktYnVpbGRlci1mb290ZXJcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ0blwiIChjbGljayk9XCJyZXNldFF1ZXJ5KClcIj5SZXNldDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFwcGx5LWJ0blwiIChjbGljayk9XCJhcHBseVF1ZXJ5KClcIj5BcHBseSBmaWx0ZXJzPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuIl19
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWtELG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFxQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7O0FB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QUFtQixDQUFDLFdBQ3ZCO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCO2dGQUdRLE1BQU07c0JBQWQsS0FBSztnQkFlSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xyXG5pbXBvcnQge01hdERhdGVwaWNrZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5RmllbGQge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdO1xyXG4gIG9wZXJhdG9ycz86IHN0cmluZ1tdO1xyXG4gIGRlZmF1bHRPcGVyYXRvcj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeU9wZXJhdG9yIHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdHlwZXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUNvbmZpZyB7XHJcbiAgZmllbGRzOiBRdWVyeUZpZWxkW107XHJcbiAgb3BlcmF0b3JzOiBRdWVyeU9wZXJhdG9yW107XHJcbiAgZGVmYXVsdENvbmRpdGlvbj86ICdhbmQnIHwgJ29yJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVJ1bGUge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG4gIGNvbmRpdGlvbj86ICdhbmQnIHwgJ29yJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUdyb3VwIHtcclxuICBjb25kaXRpb246ICdhbmQnIHwgJ29yJztcclxuICBydWxlczogKFF1ZXJ5UnVsZSB8IFF1ZXJ5R3JvdXApW107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2EtcXVlcnktYnVpbGRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHByb3ZpZGVyczogW01hdE5hdGl2ZURhdGVNb2R1bGVdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBGb3JtbHlNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxyXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNvbmZpZzogUXVlcnlDb25maWcgPSB7XHJcbiAgICBmaWVsZHM6IFtdLFxyXG4gICAgb3BlcmF0b3JzOiBbXHJcbiAgICAgIHsgdmFsdWU6ICc9JywgbGFiZWw6ICc9JyB9LFxyXG4gICAgICB7IHZhbHVlOiAnIT0nLCBsYWJlbDogJyE9JyB9LFxyXG4gICAgICB7IHZhbHVlOiAnPicsIGxhYmVsOiAnPicgfSxcclxuICAgICAgeyB2YWx1ZTogJzwnLCBsYWJlbDogJzwnIH0sXHJcbiAgICAgIHsgdmFsdWU6ICc+PScsIGxhYmVsOiAnPj0nIH0sXHJcbiAgICAgIHsgdmFsdWU6ICc8PScsIGxhYmVsOiAnPD0nIH0sXHJcbiAgICAgIHsgdmFsdWU6ICdjb250YWlucycsIGxhYmVsOiAnY29udGFpbnMnIH0sXHJcbiAgICAgIHsgdmFsdWU6ICdiZXR3ZWVuJywgbGFiZWw6ICdiZXR3ZWVuJyB9XHJcbiAgICBdLFxyXG4gICAgZGVmYXVsdENvbmRpdGlvbjogJ2FuZCdcclxuICB9O1xyXG5cclxuICBAT3V0cHV0KCkgcXVlcnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5R3JvdXA+KCk7XHJcblxyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxuICBtb2RlbDogUXVlcnlHcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBjb25kaXRpb246IFsnYW5kJ10sXHJcbiAgICAgIHJ1bGVzOiB0aGlzLmZiLmFycmF5KFtdKVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5tb2RlbCA9IHtcclxuICAgICAgY29uZGl0aW9uOiAnYW5kJyxcclxuICAgICAgcnVsZXM6IFtdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICB0aGlzLmFkZFJ1bGUoKTtcclxuXHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMubW9kZWwgPSB0aGlzLnRyYW5zZm9ybUZvcm1Ub01vZGVsKHZhbHVlKTtcclxuICAgICAgdGhpcy5xdWVyeUNoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcnVsZXNBcnJheSgpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3J1bGVzJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgY29uZGl0aW9uOiBbdGhpcy5jb25maWcuZGVmYXVsdENvbmRpdGlvbiB8fCAnYW5kJ10sXHJcbiAgICAgIHJ1bGVzOiB0aGlzLmZiLmFycmF5KFtdKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRSdWxlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRGaWVsZCA9IHRoaXMuY29uZmlnLmZpZWxkc1swXTtcclxuICAgIGNvbnN0IGRlZmF1bHRPcGVyYXRvciA9IGRlZmF1bHRGaWVsZC5kZWZhdWx0T3BlcmF0b3IgfHwgdGhpcy5nZXRPcGVyYXRvcnNGb3JUeXBlKGRlZmF1bHRGaWVsZC50eXBlKVswXT8udmFsdWUgfHwgJz0nO1xyXG5cclxuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmaWVsZDogW2RlZmF1bHRGaWVsZC5rZXldLFxyXG4gICAgICBvcGVyYXRvcjogW2RlZmF1bHRPcGVyYXRvcl0sXHJcbiAgICAgIHZhbHVlOiBbbnVsbF0sXHJcbiAgICAgIGNvbmRpdGlvbjogWydhbmQnXVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5ydWxlc0FycmF5LnB1c2gocnVsZUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJ1bGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ydWxlc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkQnlLZXkoa2V5OiBzdHJpbmcpOiBRdWVyeUZpZWxkIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5maWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IGtleSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRvcnNGb3JUeXBlKHR5cGU6IHN0cmluZyk6IFF1ZXJ5T3BlcmF0b3JbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcub3BlcmF0b3JzLmZpbHRlcihvcCA9PiAhb3AudHlwZXMgfHwgb3AudHlwZXMuaW5jbHVkZXModHlwZSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3BlcmF0b3JzRm9yRmllbGQoZmllbGRLZXk6IHN0cmluZyk6IFF1ZXJ5T3BlcmF0b3JbXSB7XHJcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0RmllbGRCeUtleShmaWVsZEtleSk7XHJcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gW107XHJcblxyXG4gICAgaWYgKGZpZWxkLm9wZXJhdG9ycykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcub3BlcmF0b3JzLmZpbHRlcihvcCA9PiBmaWVsZC5vcGVyYXRvcnM/LmluY2x1ZGVzKG9wLnZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JzRm9yVHlwZShmaWVsZC50eXBlKTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkVHlwZShmaWVsZEtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5S2V5KGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLnR5cGUgOiAnc3RyaW5nJztcclxuICB9XHJcbiAgXHJcbiAgaXNPcGVyYXRvckJldHdlZW4oaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICByZXR1cm4gcnVsZUdyb3VwPy5nZXQoJ29wZXJhdG9yJyk/LnZhbHVlID09PSAnYmV0d2Vlbic7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZE9wdGlvbnMoZmllbGRLZXk6IHN0cmluZyk6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10ge1xyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkQnlLZXkoZmllbGRLZXkpO1xyXG4gICAgcmV0dXJuIGZpZWxkPy5vcHRpb25zIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgb25GaWVsZENoYW5nZShpbmRleDogbnVtYmVyLCBmaWVsZEtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZEJ5S2V5KGZpZWxkS2V5KTtcclxuICAgIFxyXG4gICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoZmllbGRLZXkpO1xyXG4gICAgICBjb25zdCBkZWZhdWx0T3BlcmF0b3IgPSBmaWVsZC5kZWZhdWx0T3BlcmF0b3IgfHwgKG9wZXJhdG9ycy5sZW5ndGggPiAwID8gb3BlcmF0b3JzWzBdLnZhbHVlIDogJz0nKTtcclxuICAgICAgXHJcbiAgICAgIHJ1bGVHcm91cC5nZXQoJ29wZXJhdG9yJyk/LnNldFZhbHVlKGRlZmF1bHRPcGVyYXRvcik7XHJcbiAgICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgICBcclxuICAgICAgLy8gUmVzZXQgcmFuZ2UgdmFsdWVzIGlmIHRoZXkgZXhpc3RcclxuICAgICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlU3RhcnQnKSkge1xyXG4gICAgICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlU3RhcnQnKT8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZUVuZCcpPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gQWRkIHJhbmdlIGZvcm0gY29udHJvbHMgaWYgbmVlZGVkXHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIGRlZmF1bHRPcGVyYXRvciwgZmllbGQudHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZXJhdG9yQ2hhbmdlKGluZGV4OiBudW1iZXIsIG9wZXJhdG9yOiBzdHJpbmcsIGZpZWxkS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMuZ2V0RmllbGRUeXBlKGZpZWxkS2V5KTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzRm9yT3BlcmF0b3IoaW5kZXgsIG9wZXJhdG9yLCBmaWVsZFR5cGUpO1xyXG4gICAgXHJcbiAgICAvLyBSZXNldCB2YWx1ZXMgd2hlbiBvcGVyYXRvciBjaGFuZ2VzXHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIHJ1bGVHcm91cC5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlU3RhcnQnKSkge1xyXG4gICAgICBydWxlR3JvdXAuZ2V0KCd2YWx1ZVN0YXJ0Jyk/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJ1bGVHcm91cC5nZXQoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlIGZvciB0aGUgZW5kIGRhdGUgcGlja2VyIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBzdGFydCBkYXRlXHJcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcnVsZSByb3dcclxuICAgKiBAcmV0dXJucyBUaGUgbWluaW11bSBkYXRlIGZvciB0aGUgZW5kIGRhdGUgcGlja2VyICh0aGUgc3RhcnQgZGF0ZSBvciB0b2RheSBpZiBubyBzdGFydCBkYXRlKVxyXG4gICAqL1xyXG4gIGdldE1pbkVuZERhdGUoaW5kZXg6IG51bWJlcik6IERhdGUgfCBudWxsIHtcclxuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMucnVsZXNBcnJheS5hdChpbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3Qgc3RhcnREYXRlID0gcnVsZUdyb3VwLmdldCgndmFsdWVTdGFydCcpPy52YWx1ZTtcclxuICAgIFxyXG4gICAgLy8gSWYgc3RhcnQgZGF0ZSBpcyBzZWxlY3RlZCwgdXNlIGl0IGFzIG1pbmltdW0gZm9yIGVuZCBkYXRlXHJcbiAgICAvLyBPdGhlcndpc2UgdXNlIHRvZGF5J3MgZGF0ZVxyXG4gICAgcmV0dXJuIHN0YXJ0RGF0ZSA/IG5ldyBEYXRlKHN0YXJ0RGF0ZSkgOiBuZXcgRGF0ZSgpO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBIYW5kbGVzIGNoYW5nZXMgdG8gdGhlIHN0YXJ0IGRhdGVcclxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBydWxlIHJvd1xyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZGF0ZSBjaGFuZ2UgZXZlbnRcclxuICAgKi9cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShpbmRleDogbnVtYmVyLCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGVuZERhdGUgPSBydWxlR3JvdXAuZ2V0KCd2YWx1ZUVuZCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGV2ZW50LnZhbHVlO1xyXG4gICAgXHJcbiAgICAvLyBJZiBlbmQgZGF0ZSBpcyBiZWZvcmUgc3RhcnQgZGF0ZSwgcmVzZXQgaXRcclxuICAgIGlmIChlbmREYXRlICYmIHN0YXJ0RGF0ZSAmJiBuZXcgRGF0ZShlbmREYXRlKSA8IG5ldyBEYXRlKHN0YXJ0RGF0ZSkpIHtcclxuICAgICAgcnVsZUdyb3VwLmdldCgndmFsdWVFbmQnKT8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHVwZGF0ZUZvcm1Db250cm9sc0Zvck9wZXJhdG9yKGluZGV4OiBudW1iZXIsIG9wZXJhdG9yOiBzdHJpbmcsIGZpZWxkVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLnJ1bGVzQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIFxyXG4gICAgLy8gSGFuZGxlIGRhdGUgcmFuZ2UgZm9yICdiZXR3ZWVuJyBvcGVyYXRvclxyXG4gICAgaWYgKG9wZXJhdG9yID09PSAnYmV0d2VlbicgJiYgZmllbGRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgLy8gQWRkIHN0YXJ0IGFuZCBlbmQgZGF0ZSBjb250cm9scyBpZiB0aGV5IGRvbid0IGV4aXN0XHJcbiAgICAgIGlmICghcnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZVN0YXJ0JykpIHtcclxuICAgICAgICBydWxlR3JvdXAuYWRkQ29udHJvbCgndmFsdWVTdGFydCcsIHRoaXMuZmIuY29udHJvbChudWxsKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFydWxlR3JvdXAuY29udGFpbnMoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgICBydWxlR3JvdXAuYWRkQ29udHJvbCgndmFsdWVFbmQnLCB0aGlzLmZiLmNvbnRyb2wobnVsbCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZW1vdmUgcmFuZ2UgY29udHJvbHMgaWYgdGhleSBleGlzdCBhbmQgYXJlbid0IG5lZWRlZFxyXG4gICAgICBpZiAocnVsZUdyb3VwLmNvbnRhaW5zKCd2YWx1ZVN0YXJ0JykpIHtcclxuICAgICAgICBydWxlR3JvdXAucmVtb3ZlQ29udHJvbCgndmFsdWVTdGFydCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChydWxlR3JvdXAuY29udGFpbnMoJ3ZhbHVlRW5kJykpIHtcclxuICAgICAgICBydWxlR3JvdXAucmVtb3ZlQ29udHJvbCgndmFsdWVFbmQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICB0cmFuc2Zvcm1Gb3JtVG9Nb2RlbChmb3JtVmFsdWU6IGFueSk6IFF1ZXJ5R3JvdXAge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29uZGl0aW9uOiBmb3JtVmFsdWUuY29uZGl0aW9uLFxyXG4gICAgICBydWxlczogZm9ybVZhbHVlLnJ1bGVzLm1hcCgocnVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gSGFuZGxlIGRhdGUgcmFuZ2UgZm9yICdiZXR3ZWVuJyBvcGVyYXRvclxyXG4gICAgICAgIGlmIChydWxlLm9wZXJhdG9yID09PSAnYmV0d2VlbicgJiYgdGhpcy5nZXRGaWVsZFR5cGUocnVsZS5maWVsZCkgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZmllbGQ6IHJ1bGUuZmllbGQsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBydWxlLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZTogeyBzdGFydDogcnVsZS52YWx1ZVN0YXJ0LCBlbmQ6IHJ1bGUudmFsdWVFbmQgfSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiBydWxlLmNvbmRpdGlvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU3RhbmRhcmQgY2FzZVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZDogcnVsZS5maWVsZCxcclxuICAgICAgICAgIG9wZXJhdG9yOiBydWxlLm9wZXJhdG9yLFxyXG4gICAgICAgICAgdmFsdWU6IHJ1bGUudmFsdWUsXHJcbiAgICAgICAgICBjb25kaXRpb246IHJ1bGUuY29uZGl0aW9uXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNvbmRpdGlvbiBmb3IgYSBzcGVjaWZpYyByb3dcclxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSByb3dcclxuICAgKiBAcmV0dXJucyBUaGUgY29uZGl0aW9uIChhbmQvb3IpIGZvciB0aGUgcm93XHJcbiAgICovXHJcbiAgZ2V0Um93Q29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiAnYW5kJyB8ICdvcicge1xyXG4gICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gJ2FuZCc7IC8vIEZpcnN0IHJvdyBkb2Vzbid0IGhhdmUgYSBjb25kaXRpb25cclxuICAgIFxyXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICByZXR1cm4gcnVsZUdyb3VwLmdldCgnY29uZGl0aW9uJyk/LnZhbHVlIHx8ICdhbmQnO1xyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb25kaXRpb24gZm9yIGEgc3BlY2lmaWMgcm93XHJcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93XHJcbiAgICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIHNldCAoYW5kL29yKVxyXG4gICAqL1xyXG4gIHNldFJvd0NvbmRpdGlvbihpbmRleDogbnVtYmVyLCBjb25kaXRpb246ICdhbmQnIHwgJ29yJyk6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm47IC8vIEZpcnN0IHJvdyBkb2Vzbid0IGhhdmUgYSBjb25kaXRpb25cclxuICAgIFxyXG4gICAgY29uc3QgcnVsZUdyb3VwID0gdGhpcy5ydWxlc0FycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICBydWxlR3JvdXAuZ2V0KCdjb25kaXRpb24nKT8uc2V0VmFsdWUoY29uZGl0aW9uKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbmRpdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25kaXRpb24gPSB0aGlzLmZvcm0uZ2V0KCdjb25kaXRpb24nKT8udmFsdWU7XHJcbiAgICBjb25zdCBuZXdDb25kaXRpb24gPSBjdXJyZW50Q29uZGl0aW9uID09PSAnYW5kJyA/ICdvcicgOiAnYW5kJztcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2NvbmRpdGlvbicpPy5zZXRWYWx1ZShuZXdDb25kaXRpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZGl0aW9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdjb25kaXRpb24nKT8udmFsdWUgPT09ICdhbmQnID8gJ0FORCcgOiAnT1InO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRRdWVyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMucnVsZXNBcnJheS5jbGVhcigpO1xyXG4gICAgdGhpcy5hZGRSdWxlKCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5xdWVyeUNoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic2EtcXVlcnktYnVpbGRlclwiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3aGVyZS1sYWJlbFwiPldoZXJlPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicXVlcnktYnVpbGRlci1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1jb250YWluZXJcIiBmb3JtQXJyYXlOYW1lPVwicnVsZXNcIj5cclxuICAgICAgICBAZm9yIChydWxlIG9mIHJ1bGVzQXJyYXkuY29udHJvbHM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGUtcm93XCIgW2Zvcm1Hcm91cE5hbWVdPVwiJGluZGV4XCI+XHJcbiAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uIHNlbGVjdG9yIChBbmQvT3IpIC0tPlxyXG4gICAgICAgICAgICBAaWYgKCRpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLXNlbGVjdG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cImdldFJvd0NvbmRpdGlvbigkaW5kZXgpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZXRSb3dDb25kaXRpb24oJGluZGV4LCAkZXZlbnQudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJhbmRcIj5BbmQ8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJvclwiPk9yPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLXBsYWNlaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwhLS0gRmllbGQgc2VsZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmaWVsZC1zZWxlY3RcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlNlbGVjdCBhIGZpbHRlcjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpZWxkXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKCRpbmRleCwgJGV2ZW50LnZhbHVlKVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgY29uZmlnLmZpZWxkczsgdHJhY2sgZmllbGQua2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmaWVsZC5rZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBPcGVyYXRvciBzZWxlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm9wZXJhdG9yLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm9wZXJhdG9yXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk9wZXJhdG9yQ2hhbmdlKCRpbmRleCwgJGV2ZW50LnZhbHVlLCBydWxlLnZhbHVlLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAob3Agb2YgZ2V0T3BlcmF0b3JzRm9yRmllbGQocnVsZS52YWx1ZS5maWVsZCk7IHRyYWNrIG9wLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcC52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFZhbHVlIGlucHV0IGJhc2VkIG9uIGZpZWxkIHR5cGUgLS0+XHJcbiAgICAgICAgICAgIEBzd2l0Y2ggKGdldEZpZWxkVHlwZShydWxlLnZhbHVlLmZpZWxkKSkge1xyXG4gICAgICAgICAgICAgIEBjYXNlICgnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhIHZhbHVlLi4uXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAY2FzZSAoJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInZhbHVlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdmFsdWUuLi5cIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIEBpZiAoIWlzT3BlcmF0b3JCZXR3ZWVuKCRpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cImRhdGVcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1yYW5nZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dCBzdGFydC1kYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlN0YXJ0IGRhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJzdGFydFBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlU3RhcnRcIiAoY2xpY2spPVwic3RhcnRQaWNrZXIub3BlbigpXCIgKGRhdGVDaGFuZ2UpPVwib25TdGFydERhdGVDaGFuZ2UoJGluZGV4LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJzdGFydFBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNzdGFydFBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXQgZW5kLWRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RW5kIGRhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJlbmRQaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZUVuZFwiIChjbGljayk9XCJlbmRQaWNrZXIub3BlbigpXCIgW21pbl09XCJnZXRNaW5FbmREYXRlKCRpbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cImVuZFBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNlbmRQaWNrZXIgW3N0YXJ0QXRdPVwiZ2V0TWluRW5kRGF0ZSgkaW5kZXgpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGNhc2UgKCdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPlRydWU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+RmFsc2U8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidmFsdWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RmllbGRPcHRpb25zKHJ1bGUudmFsdWUuZmllbGQpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAZGVmYXVsdCB7XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ2YWx1ZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdmFsdWUuLi5cIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIFJlbW92ZSBydWxlIGJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyZW1vdmUtcnVsZS1idG5cIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUnVsZSgkaW5kZXgpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJ1bGVzQXJyYXkubGVuZ3RoID09PSAxXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIGZpbHRlclwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQWRkIHJ1bGUgYnV0dG9uIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWRkLXJ1bGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYWRkLXJ1bGUtYnRuXCIgKGNsaWNrKT1cImFkZFJ1bGUoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBhIGZpbHRlclxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJxdWVyeS1idWlsZGVyLWZvb3RlclwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJyZXNldC1idG5cIiAoY2xpY2spPVwicmVzZXRRdWVyeSgpXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImFwcGx5LWJ0blwiIChjbGljayk9XCJhcHBseVF1ZXJ5KClcIj5BcHBseSBmaWx0ZXJzPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=