pdm-ui-kit 0.1.49 → 0.2.0

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 (52) hide show
  1. package/README.md +189 -2
  2. package/esm2020/lib/components/alert-dialog/alert-dialog.component.mjs +25 -7
  3. package/esm2020/lib/components/breadcrumb/breadcrumb.component.mjs +37 -4
  4. package/esm2020/lib/components/calendar/calendar.component.mjs +3 -3
  5. package/esm2020/lib/components/card/card.component.mjs +36 -53
  6. package/esm2020/lib/components/command/command.component.mjs +3 -3
  7. package/esm2020/lib/components/context-menu/context-menu.component.mjs +16 -8
  8. package/esm2020/lib/components/data-table/data-table.component.mjs +214 -16
  9. package/esm2020/lib/components/dialog/dialog.component.mjs +133 -17
  10. package/esm2020/lib/components/draggable-table/draggable-table.component.mjs +300 -0
  11. package/esm2020/lib/components/drawer/drawer.component.mjs +138 -10
  12. package/esm2020/lib/components/dropdown-menu/dropdown-menu.component.mjs +6 -3
  13. package/esm2020/lib/components/hover-card/hover-card.component.mjs +3 -3
  14. package/esm2020/lib/components/menubar/menubar.component.mjs +38 -7
  15. package/esm2020/lib/components/navigation-menu/navigation-menu.component.mjs +25 -3
  16. package/esm2020/lib/components/pagination/pagination.component.mjs +3 -3
  17. package/esm2020/lib/components/popover/popover.component.mjs +19 -11
  18. package/esm2020/lib/components/select/select.component.mjs +8 -4
  19. package/esm2020/lib/components/sheet/sheet.component.mjs +88 -11
  20. package/esm2020/lib/components/sidebar/sidebar.component.mjs +52 -5
  21. package/esm2020/lib/components/table/table.component.mjs +152 -188
  22. package/esm2020/lib/components/tabs/tabs.component.mjs +3 -3
  23. package/esm2020/lib/components/tooltip/tooltip.component.mjs +3 -3
  24. package/esm2020/lib/overlay/pdm-outside-click.directive.mjs +86 -0
  25. package/esm2020/lib/pdm-ui-kit.module.mjs +9 -1
  26. package/esm2020/lib/utils/responsive.mjs +143 -0
  27. package/esm2020/lib/utils/z-index.mjs +93 -0
  28. package/esm2020/public-api.mjs +5 -1
  29. package/fesm2015/pdm-ui-kit.mjs +1625 -370
  30. package/fesm2015/pdm-ui-kit.mjs.map +1 -1
  31. package/fesm2020/pdm-ui-kit.mjs +1620 -367
  32. package/fesm2020/pdm-ui-kit.mjs.map +1 -1
  33. package/lib/components/alert-dialog/alert-dialog.component.d.ts +9 -1
  34. package/lib/components/breadcrumb/breadcrumb.component.d.ts +23 -1
  35. package/lib/components/card/card.component.d.ts +32 -19
  36. package/lib/components/context-menu/context-menu.component.d.ts +6 -3
  37. package/lib/components/data-table/data-table.component.d.ts +172 -14
  38. package/lib/components/dialog/dialog.component.d.ts +35 -1
  39. package/lib/components/draggable-table/draggable-table.component.d.ts +74 -0
  40. package/lib/components/drawer/drawer.component.d.ts +67 -3
  41. package/lib/components/menubar/menubar.component.d.ts +10 -2
  42. package/lib/components/navigation-menu/navigation-menu.component.d.ts +22 -1
  43. package/lib/components/popover/popover.component.d.ts +6 -3
  44. package/lib/components/sheet/sheet.component.d.ts +34 -1
  45. package/lib/components/sidebar/sidebar.component.d.ts +39 -1
  46. package/lib/components/table/table.component.d.ts +46 -25
  47. package/lib/overlay/pdm-outside-click.directive.d.ts +40 -0
  48. package/lib/pdm-ui-kit.module.d.ts +42 -40
  49. package/lib/utils/responsive.d.ts +107 -0
  50. package/lib/utils/z-index.d.ts +73 -0
  51. package/package.json +5 -3
  52. package/public-api.d.ts +4 -0
@@ -463,10 +463,10 @@ export class PdmCalendarComponent {
463
463
  }
464
464
  }
465
465
  PdmCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCalendarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
466
- PdmCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmCalendarComponent, selector: "pdm-calendar", inputs: { variant: "variant", className: "className", disabledDates: "disabledDates", minDate: "minDate", maxDate: "maxDate", minYear: "minYear", maxYear: "maxYear", isDateDisabled: "isDateDisabled", allowSameDayRange: "allowSameDayRange", readonly: "readonly", value: "value", rangeValue: "rangeValue", month: "month" }, outputs: { valueChange: "valueChange", rangeValueChange: "rangeValueChange", monthChange: "monthChange", dateClick: "dateClick", disabledDateClick: "disabledDateClick" }, ngImport: i0, template: "<div [ngClass]=\"rootClasses\" [ngStyle]=\"rootStyle\">\n <div *ngFor=\"let month of visibleMonths; let monthIndex = index; trackBy: trackByIndex\" [ngClass]=\"monthPanelClasses(monthIndex)\">\n <div [ngClass]=\"headerClasses(month)\">\n <button\n *ngIf=\"month.showPrevButton; else prevPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Previous month\"\n (click)=\"goToPreviousMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m15 18-6-6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #prevPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n\n <ng-container *ngIf=\"month.titleStyle === 'dropdowns'; else plainTitle\">\n <div [ngClass]=\"dropdownWrapClasses()\">\n <div [ngClass]=\"dropdownClasses('w-[72px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderMonth\"\n aria-label=\"Month\"\n (change)=\"onSingleMonthChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let monthOption of monthOptions\"\n [value]=\"monthOption.value\"\n [selected]=\"monthOption.value === singleHeaderMonth\"\n >\n {{ monthOption.label }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n <div [ngClass]=\"dropdownClasses('w-[82px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderYear\"\n aria-label=\"Year\"\n (change)=\"onSingleYearChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let year of yearOptions\"\n [value]=\"year\"\n [selected]=\"year === singleHeaderYear\"\n >\n {{ year }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-template #plainTitle>\n <div class=\"flex min-w-0 flex-1 items-center justify-center\">\n <p class=\"m-0 text-foreground text-center text-sm font-medium leading-5\">\n {{ month.title }}\n </p>\n </div>\n </ng-template>\n\n <button\n *ngIf=\"month.showNextButton; else nextPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Next month\"\n (click)=\"goToNextMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #nextPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n </div>\n\n <div [ngClass]=\"calendarGridWrapClasses()\">\n <div [ngClass]=\"weekdayRowClasses()\">\n <div *ngFor=\"let day of weekdays; trackBy: trackByIndex\" [ngClass]=\"weekdayCellClasses()\">\n <span>{{ day }}</span>\n </div>\n </div>\n\n <div *ngFor=\"let week of month.weeks; trackBy: trackByIndex\" [ngClass]=\"weekRowClasses()\">\n <div *ngFor=\"let cell of week; trackBy: trackByDate\" [ngClass]=\"dayCellClasses(cell)\">\n <button\n type=\"button\"\n [ngClass]=\"dayButtonClasses(cell)\"\n [disabled]=\"readonly\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled || readonly\"\n [attr.title]=\"cell.date | date : 'yyyy-MM-dd'\"\n (click)=\"onDatePressed(cell)\"\n >\n <span [ngClass]=\"dayLabelClasses(cell)\">{{ cell.label }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
466
+ PdmCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmCalendarComponent, selector: "pdm-calendar", inputs: { variant: "variant", className: "className", disabledDates: "disabledDates", minDate: "minDate", maxDate: "maxDate", minYear: "minYear", maxYear: "maxYear", isDateDisabled: "isDateDisabled", allowSameDayRange: "allowSameDayRange", readonly: "readonly", value: "value", rangeValue: "rangeValue", month: "month" }, outputs: { valueChange: "valueChange", rangeValueChange: "rangeValueChange", monthChange: "monthChange", dateClick: "dateClick", disabledDateClick: "disabledDateClick" }, ngImport: i0, template: "<div [ngClass]=\"rootClasses\" [ngStyle]=\"rootStyle\">\n <div *ngFor=\"let month of visibleMonths; let monthIndex = index; trackBy: trackByIndex\" [ngClass]=\"monthPanelClasses(monthIndex)\">\n <div [ngClass]=\"headerClasses(month)\">\n <button\n *ngIf=\"month.showPrevButton; else prevPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Previous month\"\n (click)=\"goToPreviousMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m15 18-6-6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #prevPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n\n <ng-container *ngIf=\"month.titleStyle === 'dropdowns'; else plainTitle\">\n <div [ngClass]=\"dropdownWrapClasses()\">\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[72px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderMonth\"\n aria-label=\"Month\"\n (change)=\"onSingleMonthChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let monthOption of monthOptions\"\n [value]=\"monthOption.value\"\n [selected]=\"monthOption.value === singleHeaderMonth\"\n >\n {{ monthOption.label }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[82px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderYear\"\n aria-label=\"Year\"\n (change)=\"onSingleYearChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let year of yearOptions\"\n [value]=\"year\"\n [selected]=\"year === singleHeaderYear\"\n >\n {{ year }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-template #plainTitle>\n <div class=\"flex min-w-0 flex-1 items-center justify-center\">\n <p class=\"m-0 text-foreground text-center text-sm font-medium leading-5\">\n {{ month.title }}\n </p>\n </div>\n </ng-template>\n\n <button\n *ngIf=\"month.showNextButton; else nextPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Next month\"\n (click)=\"goToNextMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #nextPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n </div>\n\n <div [ngClass]=\"calendarGridWrapClasses()\">\n <div [ngClass]=\"weekdayRowClasses()\">\n <div *ngFor=\"let day of weekdays; trackBy: trackByIndex\" [ngClass]=\"weekdayCellClasses()\">\n <span>{{ day }}</span>\n </div>\n </div>\n\n <div *ngFor=\"let week of month.weeks; trackBy: trackByIndex\" [ngClass]=\"weekRowClasses()\">\n <div *ngFor=\"let cell of week; trackBy: trackByDate\" [ngClass]=\"dayCellClasses(cell)\">\n <button\n type=\"button\"\n [ngClass]=\"dayButtonClasses(cell)\"\n [disabled]=\"readonly\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled || readonly\"\n [attr.title]=\"cell.date | date : 'yyyy-MM-dd'\"\n (click)=\"onDatePressed(cell)\"\n >\n <span [ngClass]=\"dayLabelClasses(cell)\">{{ cell.label }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
467
467
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCalendarComponent, decorators: [{
468
468
  type: Component,
469
- args: [{ selector: 'pdm-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\" [ngStyle]=\"rootStyle\">\n <div *ngFor=\"let month of visibleMonths; let monthIndex = index; trackBy: trackByIndex\" [ngClass]=\"monthPanelClasses(monthIndex)\">\n <div [ngClass]=\"headerClasses(month)\">\n <button\n *ngIf=\"month.showPrevButton; else prevPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Previous month\"\n (click)=\"goToPreviousMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m15 18-6-6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #prevPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n\n <ng-container *ngIf=\"month.titleStyle === 'dropdowns'; else plainTitle\">\n <div [ngClass]=\"dropdownWrapClasses()\">\n <div [ngClass]=\"dropdownClasses('w-[72px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderMonth\"\n aria-label=\"Month\"\n (change)=\"onSingleMonthChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let monthOption of monthOptions\"\n [value]=\"monthOption.value\"\n [selected]=\"monthOption.value === singleHeaderMonth\"\n >\n {{ monthOption.label }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n <div [ngClass]=\"dropdownClasses('w-[82px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderYear\"\n aria-label=\"Year\"\n (change)=\"onSingleYearChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let year of yearOptions\"\n [value]=\"year\"\n [selected]=\"year === singleHeaderYear\"\n >\n {{ year }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-template #plainTitle>\n <div class=\"flex min-w-0 flex-1 items-center justify-center\">\n <p class=\"m-0 text-foreground text-center text-sm font-medium leading-5\">\n {{ month.title }}\n </p>\n </div>\n </ng-template>\n\n <button\n *ngIf=\"month.showNextButton; else nextPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Next month\"\n (click)=\"goToNextMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #nextPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n </div>\n\n <div [ngClass]=\"calendarGridWrapClasses()\">\n <div [ngClass]=\"weekdayRowClasses()\">\n <div *ngFor=\"let day of weekdays; trackBy: trackByIndex\" [ngClass]=\"weekdayCellClasses()\">\n <span>{{ day }}</span>\n </div>\n </div>\n\n <div *ngFor=\"let week of month.weeks; trackBy: trackByIndex\" [ngClass]=\"weekRowClasses()\">\n <div *ngFor=\"let cell of week; trackBy: trackByDate\" [ngClass]=\"dayCellClasses(cell)\">\n <button\n type=\"button\"\n [ngClass]=\"dayButtonClasses(cell)\"\n [disabled]=\"readonly\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled || readonly\"\n [attr.title]=\"cell.date | date : 'yyyy-MM-dd'\"\n (click)=\"onDatePressed(cell)\"\n >\n <span [ngClass]=\"dayLabelClasses(cell)\">{{ cell.label }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
469
+ args: [{ selector: 'pdm-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\" [ngStyle]=\"rootStyle\">\n <div *ngFor=\"let month of visibleMonths; let monthIndex = index; trackBy: trackByIndex\" [ngClass]=\"monthPanelClasses(monthIndex)\">\n <div [ngClass]=\"headerClasses(month)\">\n <button\n *ngIf=\"month.showPrevButton; else prevPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Previous month\"\n (click)=\"goToPreviousMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m15 18-6-6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #prevPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n\n <ng-container *ngIf=\"month.titleStyle === 'dropdowns'; else plainTitle\">\n <div [ngClass]=\"dropdownWrapClasses()\">\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[72px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderMonth\"\n aria-label=\"Month\"\n (change)=\"onSingleMonthChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let monthOption of monthOptions\"\n [value]=\"monthOption.value\"\n [selected]=\"monthOption.value === singleHeaderMonth\"\n >\n {{ monthOption.label }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[82px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderYear\"\n aria-label=\"Year\"\n (change)=\"onSingleYearChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let year of yearOptions\"\n [value]=\"year\"\n [selected]=\"year === singleHeaderYear\"\n >\n {{ year }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-template #plainTitle>\n <div class=\"flex min-w-0 flex-1 items-center justify-center\">\n <p class=\"m-0 text-foreground text-center text-sm font-medium leading-5\">\n {{ month.title }}\n </p>\n </div>\n </ng-template>\n\n <button\n *ngIf=\"month.showNextButton; else nextPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Next month\"\n (click)=\"goToNextMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #nextPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n </div>\n\n <div [ngClass]=\"calendarGridWrapClasses()\">\n <div [ngClass]=\"weekdayRowClasses()\">\n <div *ngFor=\"let day of weekdays; trackBy: trackByIndex\" [ngClass]=\"weekdayCellClasses()\">\n <span>{{ day }}</span>\n </div>\n </div>\n\n <div *ngFor=\"let week of month.weeks; trackBy: trackByIndex\" [ngClass]=\"weekRowClasses()\">\n <div *ngFor=\"let cell of week; trackBy: trackByDate\" [ngClass]=\"dayCellClasses(cell)\">\n <button\n type=\"button\"\n [ngClass]=\"dayButtonClasses(cell)\"\n [disabled]=\"readonly\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled || readonly\"\n [attr.title]=\"cell.date | date : 'yyyy-MM-dd'\"\n (click)=\"onDatePressed(cell)\"\n >\n <span [ngClass]=\"dayLabelClasses(cell)\">{{ cell.label }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
470
470
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { variant: [{
471
471
  type: Input
472
472
  }], className: [{
@@ -504,4 +504,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
504
504
  }], month: [{
505
505
  type: Input
506
506
  }] } });
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBZ0NuSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFPbkMsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUpsQyxXQUFNLEdBQWdCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDNUMsV0FBTSxHQUFnQixJQUFJLENBQUM7UUFJMUIsWUFBTyxHQUFnQyxRQUFRLENBQUM7UUFDaEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQXFDLElBQUksQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDL0QsZ0JBQVcsR0FBRyxJQUFJ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QUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFVLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDaEYsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVTtRQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVU7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7aUhBM2lCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixpaUJDdkNqQyw4eEpBa0hBOzJGRDNFYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNO3dHQVN0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0gsS0FBSztzQkFEUixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFBkbUNhbGVuZGFyVmFyaWFudCA9ICdzaW5nbGUnIHwgJ3JhbmdlJztcblxuZXhwb3J0IGludGVyZmFjZSBQZG1DYWxlbmRhclJhbmdlIHtcbiAgc3RhcnQ6IERhdGUgfCBudWxsO1xuICBlbmQ6IERhdGUgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUGRtQ2FsZW5kYXJDZWxsIHtcbiAgZGF0ZTogRGF0ZTtcbiAgbGFiZWw6IG51bWJlcjtcbiAgbXV0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgaW5SYW5nZTogYm9vbGVhbjtcbiAgcmFuZ2VGaWxsOiBib29sZWFuO1xuICByYW5nZUxlZnRDYXA6IGJvb2xlYW47XG4gIHJhbmdlUmlnaHRDYXA6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQZG1DYWxlbmRhck1vbnRoVmlldyB7XG4gIGRhdGU6IERhdGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlU3R5bGU6ICdkcm9wZG93bnMnIHwgJ3BsYWluJztcbiAgZHJvcGRvd25Nb250aD86IHN0cmluZztcbiAgZHJvcGRvd25ZZWFyPzogc3RyaW5nO1xuICBzaG93UHJldkJ1dHRvbjogYm9vbGVhbjtcbiAgc2hvd05leHRCdXR0b246IGJvb2xlYW47XG4gIHdlZWtzOiByZWFkb25seSAocmVhZG9ubHkgUGRtQ2FsZW5kYXJDZWxsW10pW107XG59XG5cbmNvbnN0IERBWV9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmFuZ2VWYWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tb250aDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASW5wdXQoKSB2YXJpYW50OiBQZG1DYWxlbmRhclZhcmlhbnQgfCBzdHJpbmcgPSAnc2luZ2xlJztcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWluWWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heFllYXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBhbGxvd1NhbWVEYXlSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHJhbmdlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkaXNhYmxlZERhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJhbmdlVmFsdWUodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKSB7XG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXQgcmFuZ2VWYWx1ZSgpOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlVmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbW9udGgodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbW9udGggPSB2YWx1ZSA/IHRoaXMuc3RhcnRPZk1vbnRoKHZhbHVlKSA6IG51bGw7XG4gIH1cbiAgZ2V0IG1vbnRoKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbW9udGg7XG4gIH1cblxuICByZWFkb25seSB3ZWVrZGF5cyA9IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnSmFuJyB9LFxuICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnRmViJyB9LFxuICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnTWFyJyB9LFxuICAgIHsgdmFsdWU6IDMsIGxhYmVsOiAnQXByJyB9LFxuICAgIHsgdmFsdWU6IDQsIGxhYmVsOiAnTWF5JyB9LFxuICAgIHsgdmFsdWU6IDUsIGxhYmVsOiAnSnVuJyB9LFxuICAgIHsgdmFsdWU6IDYsIGxhYmVsOiAnSnVsJyB9LFxuICAgIHsgdmFsdWU6IDcsIGxhYmVsOiAnQXVnJyB9LFxuICAgIHsgdmFsdWU6IDgsIGxhYmVsOiAnU2VwJyB9LFxuICAgIHsgdmFsdWU6IDksIGxhYmVsOiAnT2N0JyB9LFxuICAgIHsgdmFsdWU6IDEwLCBsYWJlbDogJ05vdicgfSxcbiAgICB7IHZhbHVlOiAxMSwgbGFiZWw6ICdEZWMnIH1cbiAgXSBhcyBjb25zdDtcblxuICBnZXQgcmVzb2x2ZWRWYXJpYW50KCk6IFBkbUNhbGVuZGFyVmFyaWFudCB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFudCA9PT0gJ3JhbmdlJyA/ICdyYW5nZScgOiAnc2luZ2xlJztcbiAgfVxuXG4gIGdldCB2aXNpYmxlTW9udGhzKCk6IHJlYWRvbmx5IFBkbUNhbGVuZGFyTW9udGhWaWV3W10ge1xuICAgIGNvbnN0IGJhc2VNb250aCA9IHRoaXMuZ2V0QW5jaG9yTW9udGgoKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiBiYXNlTW9udGgsXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKGJhc2VNb250aCksXG4gICAgICAgICAgdGl0bGVTdHlsZTogJ2Ryb3Bkb3ducycsXG4gICAgICAgICAgZHJvcGRvd25Nb250aDogdGhpcy5mb3JtYXRNb250aFNob3J0KGJhc2VNb250aCksXG4gICAgICAgICAgZHJvcGRvd25ZZWFyOiBTdHJpbmcoYmFzZU1vbnRoLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgICAgIHNob3dQcmV2QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHNob3dOZXh0QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhiYXNlTW9udGgsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuYWRkTW9udGhzKGJhc2VNb250aCwgMSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGF0ZTogYmFzZU1vbnRoLFxuICAgICAgICB0aXRsZTogdGhpcy5mb3JtYXRNb250aFllYXIoYmFzZU1vbnRoKSxcbiAgICAgICAgdGl0bGVTdHlsZTogJ3BsYWluJyxcbiAgICAgICAgc2hvd1ByZXZCdXR0b246IHRydWUsXG4gICAgICAgIHNob3dOZXh0QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgd2Vla3M6IHRoaXMuYnVpbGRNb250aFdlZWtzKGJhc2VNb250aCwgdHJ1ZSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRhdGU6IG5leHRNb250aCxcbiAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKG5leHRNb250aCksXG4gICAgICAgIHRpdGxlU3R5bGU6ICdwbGFpbicsXG4gICAgICAgIHNob3dQcmV2QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc2hvd05leHRCdXR0b246IHRydWUsXG4gICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhuZXh0TW9udGgsIHRydWUpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEFuY2hvck1vbnRoKCkuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QW5jaG9yTW9udGgoKS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0IHllYXJPcHRpb25zKCk6IHJlYWRvbmx5IG51bWJlcltdIHtcbiAgICBjb25zdCBiYXNlWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBzZWxlY3RlZFllYXIgPSB0aGlzLnNpbmdsZUhlYWRlclllYXI7XG4gICAgbGV0IG1pblllYXIgPSB0aGlzLm1pblllYXIgPz8gKHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpIDogYmFzZVllYXIgLSAxMDApO1xuICAgIGxldCBtYXhZZWFyID0gdGhpcy5tYXhZZWFyID8/ICh0aGlzLm1heERhdGUgPyB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKSA6IGJhc2VZZWFyICsgMTApO1xuICAgIGNvbnN0IHllYXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA8IG1pblllYXIpIHtcbiAgICAgIG1pblllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA+IG1heFllYXIpIHtcbiAgICAgIG1heFllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKG1pblllYXIgPiBtYXhZZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TWluID0gbWF4WWVhcjtcbiAgICAgIG1heFllYXIgPSBtaW5ZZWFyO1xuICAgICAgbWluWWVhciA9IG5leHRNaW47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgeWVhciA9IG1pblllYXI7IHllYXIgPD0gbWF4WWVhcjsgeWVhciArPSAxKSB7XG4gICAgICB5ZWFycy5wdXNoKHllYXIpO1xuICAgIH1cblxuICAgIHJldHVybiB5ZWFycztcbiAgfVxuXG4gIGdldCByb290Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUgcm91bmRlZC1bMTBweF0gYm9yZGVyIHAtMyBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdyYW5nZSdcbiAgICAgICAgPyAnaW5saW5lLWZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1jZW50ZXIgZ2FwLTQgc2hyaW5rLTAgZ3Jvdy0wIGJhc2lzLWF1dG8nXG4gICAgICAgIDogJ2lubGluZS1mbGV4IGZsZXgtY29sIGdhcC00IHNocmluay0wIGdyb3ctMCBiYXNpcy1hdXRvJyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIGdldCByb290U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICc0ODhweCcgOiAnMjUwcHgnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoLFxuICAgICAgbWluV2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgICAgbWluSGVpZ2h0OiAnMjkzcHgnLFxuICAgICAgZmxleDogJzAgMCBhdXRvJyxcbiAgICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnXG4gICAgfTtcbiAgfVxuXG4gIG1vbnRoUGFuZWxDbGFzc2VzKF9pbmRleDogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQnLCB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICd3LVsyMjRweF0gZ2FwLTQnIDogJ3ctZnVsbCBnYXAtMCddO1xuICB9XG5cbiAgaGVhZGVyQ2xhc3Nlcyhtb250aDogUGRtQ2FsZW5kYXJNb250aFZpZXcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsIG1vbnRoLnRpdGxlU3R5bGUgPT09ICdkcm9wZG93bnMnID8gJycgOiAnbWItNCddO1xuICB9XG5cbiAgbmF2QnV0dG9uQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmbGV4IGgtOCB3LTggYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgJ2Rpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS00MCdcbiAgICBdO1xuICB9XG5cbiAgbmF2UGxhY2Vob2xkZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydoLTcgdy03IHNocmluay0wJ107XG4gIH1cblxuICBkcm9wZG93bldyYXBDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydmbGV4IHctNDAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yJ107XG4gIH1cblxuICBkcm9wZG93bkNsYXNzZXMod2lkdGhDbGFzczogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggaC04IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0xJywgd2lkdGhDbGFzc107XG4gIH1cblxuICBkcm9wZG93blNlbGVjdENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAndGV4dC1mb3JlZ3JvdW5kIGgtZnVsbCBiZy10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNScsXG4gICAgICAnYXBwZWFyYW5jZS1ub25lIGJvcmRlci0wIG91dGxpbmUtbm9uZSByaW5nLTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCB0ZXh0LWNlbnRlciBjdXJzb3ItcG9pbnRlcidcbiAgICBdO1xuICB9XG5cbiAgZ2V0IGRyb3Bkb3duU2VsZWN0U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICBib3JkZXI6ICcwJyxcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgb3V0bGluZTogJzAnLFxuICAgICAgcGFkZGluZzogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9O1xuICB9XG5cbiAgY2FsZW5kYXJHcmlkV3JhcENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGZsZXgtY29sIGl0ZW1zLXN0YXJ0J107XG4gIH1cblxuICB3ZWVrZGF5Um93Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyJ107XG4gIH1cblxuICB3ZWVrZGF5Q2VsbENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBmbGV4IGgtWzIxcHhdIHctOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCB0ZXh0LXhzIGxlYWRpbmctNCddO1xuICB9XG5cbiAgd2Vla1Jvd0NsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGl0ZW1zLXN0YXJ0IHB0LTInXTtcbiAgfVxuXG4gIGRheUNlbGxDbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIGZsZXggaC04IHctOCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgY2VsbC5yYW5nZUZpbGwgPyAnYmctYWNjZW50JyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZUxlZnRDYXAgPyAncm91bmRlZC1sLW1kJyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZVJpZ2h0Q2FwID8gJ3JvdW5kZWQtci1tZCcgOiAnJ1xuICAgIF07XG4gIH1cblxuICBkYXlCdXR0b25DbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIHotMTAgZmxleCBoLTggdy04IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItMCBwLTAgdGV4dC1zbSBsZWFkaW5nLTUnLFxuICAgICAgY2VsbC5zZWxlY3RlZFxuICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuICAgICAgICA6IGNlbGwucmFuZ2VGaWxsXG4gICAgICAgICAgPyAnYmctdHJhbnNwYXJlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcbiAgICAgICAgICA6ICdiZy10cmFuc3BhcmVudCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgY2VsbC5tdXRlZCAmJiAhY2VsbC5yYW5nZUZpbGwgPyAnb3BhY2l0eS01MCcgOiAnJyxcbiAgICAgIGNlbGwuZGlzYWJsZWQgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNDAnIDogJycsXG4gICAgICAhY2VsbC5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAhY2VsbC5zZWxlY3RlZCA/ICdob3ZlcjpiZy1hY2NlbnQvNzAnIDogJydcbiAgICBdO1xuICB9XG5cbiAgZGF5TGFiZWxDbGFzc2VzKF9jZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZm9udC1ub3JtYWwnXTtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RGF0ZSA9IChfaW5kZXg6IG51bWJlciwgY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRlS2V5KGNlbGwuZGF0ZSk7XG4gIH1cblxuICBnb1RvUHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFuY2hvck1vbnRoKHRoaXMuYWRkTW9udGhzKHRoaXMuZ2V0QW5jaG9yTW9udGgoKSwgLTEpKTtcbiAgfVxuXG4gIGdvVG9OZXh0TW9udGgoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aCh0aGlzLmFkZE1vbnRocyh0aGlzLmdldEFuY2hvck1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlTW9udGhDaGFuZ2UobW9udGhWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIobW9udGhWYWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihtb250aCkgfHwgbW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldEFuY2hvck1vbnRoKCk7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aChuZXcgRGF0ZShhbmNob3IuZ2V0RnVsbFllYXIoKSwgbW9udGgsIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlWWVhckNoYW5nZSh5ZWFyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoeWVhclZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHllYXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5nZXRBbmNob3JNb250aCgpO1xuICAgIHRoaXMuc2V0QW5jaG9yTW9udGgobmV3IERhdGUoeWVhciwgYW5jaG9yLmdldE1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uRGF0ZVByZXNzZWQoY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuY2xvbmVEYXRlKGNlbGwuZGF0ZSk7XG5cbiAgICBpZiAoY2VsbC5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVDbGljay5lbWl0KGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlQ2xpY2suZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZGF0ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICB0aGlzLnN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVJhbmdlU2VsZWN0aW9uKGRhdGUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSYW5nZVNlbGVjdGlvbihkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3JhbmdlVmFsdWU7XG4gICAgY29uc3QgY3VycmVudFN0YXJ0ID0gY3VycmVudD8uc3RhcnQgPyB0aGlzLmNsb25lRGF0ZShjdXJyZW50LnN0YXJ0KSA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudEVuZCA9IGN1cnJlbnQ/LmVuZCA/IHRoaXMuY2xvbmVEYXRlKGN1cnJlbnQuZW5kKSA6IG51bGw7XG5cbiAgICBpZiAoIWN1cnJlbnRTdGFydCB8fCAoY3VycmVudFN0YXJ0ICYmIGN1cnJlbnRFbmQpKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgdGhpcy5zeW5jVmlzaWJsZU1vbnRoVG9EYXRlKGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FtZURheShjdXJyZW50U3RhcnQsIGRhdGUpICYmICF0aGlzLmFsbG93U2FtZURheVJhbmdlKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGRhdGUgOiBjdXJyZW50U3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGN1cnJlbnRTdGFydCA6IGRhdGU7XG5cbiAgICBpZiAodGhpcy5yYW5nZUNvbnRhaW5zQmxvY2tlZERhdGUoc3RhcnQsIGVuZCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlQ2xpY2suZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHsgc3RhcnQsIGVuZCB9O1xuICAgIHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKHN0YXJ0KSwgZW5kOiB0aGlzLmNsb25lRGF0ZShlbmQpIH0pO1xuICAgIHRoaXMuc3luY1Zpc2libGVNb250aFRvRGF0ZShzdGFydCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTW9udGhXZWVrcyhtb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogcmVhZG9ubHkgKHJlYWRvbmx5IFBkbUNhbGVuZGFyQ2VsbFtdKVtdIHtcbiAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLnN0YXJ0T2ZNb250aChtb250aCk7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0T2ZXZWVrKGZpcnN0T2ZNb250aCk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5lbmRPZldlZWsodGhpcy5lbmRPZk1vbnRoKGZpcnN0T2ZNb250aCkpO1xuICAgIGNvbnN0IHdlZWtzOiBQZG1DYWxlbmRhckNlbGxbXVtdID0gW107XG5cbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuICAgIHdoaWxlICh0aGlzLmNvbXBhcmVEYXRlKGN1cnNvciwgZW5kKSA8PSAwKSB7XG4gICAgICBjb25zdCByb3c6IFBkbUNhbGVuZGFyQ2VsbFtdID0gW107XG5cbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCArPSAxKSB7XG4gICAgICAgIHJvdy5wdXNoKHRoaXMuYnVpbGRDZWxsKGN1cnNvciwgbW9udGgsIGluY2x1ZGVSYW5nZSkpO1xuICAgICAgICBjdXJzb3IgPSB0aGlzLmFkZERheXMoY3Vyc29yLCAxKTtcbiAgICAgIH1cblxuICAgICAgd2Vla3MucHVzaChyb3cpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHdlZWtzKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCByb3cubGVuZ3RoOyBjb2wgKz0gMSkge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbF07XG4gICAgICAgIGlmICghY2VsbC5pblJhbmdlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWZ0SW5Sb3cgPSBjb2wgPiAwID8gcm93W2NvbCAtIDFdLmluUmFuZ2UgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcmlnaHRJblJvdyA9IGNvbCA8IHJvdy5sZW5ndGggLSAxID8gcm93W2NvbCArIDFdLmluUmFuZ2UgOiBmYWxzZTtcblxuICAgICAgICBjZWxsLnJhbmdlTGVmdENhcCA9ICFsZWZ0SW5Sb3c7XG4gICAgICAgIGNlbGwucmFuZ2VSaWdodENhcCA9ICFyaWdodEluUm93O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDZWxsKGRhdGU6IERhdGUsIHZpc2libGVNb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogUGRtQ2FsZW5kYXJDZWxsIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5jbG9uZURhdGUoZGF0ZSk7XG4gICAgY29uc3QgaW5DdXJyZW50TW9udGggPSBub3JtYWxpemVkLmdldE1vbnRoKCkgPT09IHZpc2libGVNb250aC5nZXRNb250aCgpICYmIG5vcm1hbGl6ZWQuZ2V0RnVsbFllYXIoKSA9PT0gdmlzaWJsZU1vbnRoLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzQmxvY2tlZChub3JtYWxpemVkKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkU2luZ2xlID0gdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmICEhdGhpcy5fdmFsdWUgJiYgdGhpcy5pc1NhbWVEYXkobm9ybWFsaXplZCwgdGhpcy5fdmFsdWUpO1xuICAgIGNvbnN0IHJhbmdlU3RhcnQgPSBpbmNsdWRlUmFuZ2UgJiYgISF0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KTtcbiAgICBjb25zdCByYW5nZUVuZCA9IGluY2x1ZGVSYW5nZSAmJiAhIXRoaXMuX3JhbmdlVmFsdWU/LmVuZCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLmVuZCk7XG4gICAgY29uc3QgaW5SYW5nZSA9XG4gICAgICBpbmNsdWRlUmFuZ2UgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uc3RhcnQgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kICYmXG4gICAgICB0aGlzLmNvbXBhcmVEYXRlKG5vcm1hbGl6ZWQsIHRoaXMuX3JhbmdlVmFsdWUuc3RhcnQpID49IDAgJiZcbiAgICAgIHRoaXMuY29tcGFyZURhdGUobm9ybWFsaXplZCwgdGhpcy5fcmFuZ2VWYWx1ZS5lbmQpIDw9IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbm9ybWFsaXplZCxcbiAgICAgIGxhYmVsOiBub3JtYWxpemVkLmdldERhdGUoKSxcbiAgICAgIG11dGVkOiAhaW5DdXJyZW50TW9udGgsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFNpbmdsZSB8fCByYW5nZVN0YXJ0IHx8IHJhbmdlRW5kLFxuICAgICAgaW5SYW5nZSxcbiAgICAgIHJhbmdlRmlsbDogaW5SYW5nZSxcbiAgICAgIHJhbmdlTGVmdENhcDogZmFsc2UsXG4gICAgICByYW5nZVJpZ2h0Q2FwOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEFuY2hvck1vbnRoKCk6IERhdGUge1xuICAgIGxldCBjYW5kaWRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl9tb250aCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5jbG9uZURhdGUodGhpcy5fbW9udGgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmIHRoaXMuX3ZhbHVlKSB7XG4gICAgICBjYW5kaWRhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyAmJiB0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5zdGFydE9mTW9udGgodGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuc3RhcnRPZk1vbnRoKG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShjYW5kaWRhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydE9mTW9udGgobmV3IERhdGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QW5jaG9yTW9udGgobW9udGg6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5zdGFydE9mTW9udGgobW9udGgpO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShub3JtYWxpemVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tb250aCA9IG5vcm1hbGl6ZWQ7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKHRoaXMuX21vbnRoKSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgIGlmICghdGhpcy5fbW9udGggfHwgIXRoaXMuaXNTYW1lTW9udGgodGhpcy5fbW9udGgsIG5leHRNb250aCkpIHtcbiAgICAgIHRoaXMuX21vbnRoID0gbmV4dE1vbnRoO1xuICAgICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKG5leHRNb250aCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNCbG9ja2VkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5taW5EYXRlKSA8IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5jb21wYXJlRGF0ZShkYXRlLCB0aGlzLm1heERhdGUpID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tlZFNldCA9IG5ldyBTZXQoKHRoaXMuZGlzYWJsZWREYXRlcyB8fCBbXSkubWFwKChpdGVtKSA9PiB0aGlzLmRhdGVLZXkoaXRlbSkpKTtcbiAgICBpZiAoYmxvY2tlZFNldC5oYXModGhpcy5kYXRlS2V5KGRhdGUpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhdGhpcy5pc0RhdGVEaXNhYmxlZD8uKHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VDb250YWluc0Jsb2NrZWREYXRlKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpOiBib29sZWFuIHtcbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuXG4gICAgd2hpbGUgKHRoaXMuY29tcGFyZURhdGUoY3Vyc29yLCBlbmQpIDw9IDApIHtcbiAgICAgIGlmICh0aGlzLmlzQmxvY2tlZChjdXJzb3IpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY3Vyc29yID0gdGhpcy5hZGREYXlzKGN1cnNvciwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0RnVsbFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVEYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZERhdGUoZGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBkYXRlIGlzIERhdGUge1xuICAgIHJldHVybiAhIWRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIU51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIC1kYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIDYgLSBkYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTW9udGhzKGRhdGU6IERhdGUsIG1vbnRoczogbnVtYmVyKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgbW9udGhzLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGVWYWx1ZShhKSAtIHRoaXMuZGF0ZVZhbHVlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlVmFsdWUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkgLyBEQVlfTVM7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZURheShhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUoYSwgYikgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZU1vbnRoKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKCkgJiYgYS5nZXRNb250aCgpID09PSBiLmdldE1vbnRoKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGVLZXkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeSA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgZCA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eX0tJHttfS0ke2R9YDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhTaG9ydChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb250aFllYXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnLCB5ZWFyOiAnbnVtZXJpYycgfSk7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwicm9vdENsYXNzZXNcIiBbbmdTdHlsZV09XCJyb290U3R5bGVcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgbW9udGggb2YgdmlzaWJsZU1vbnRoczsgbGV0IG1vbnRoSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwibW9udGhQYW5lbENsYXNzZXMobW9udGhJbmRleClcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImhlYWRlckNsYXNzZXMobW9udGgpXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibW9udGguc2hvd1ByZXZCdXR0b247IGVsc2UgcHJldlBsYWNlaG9sZGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5hdkJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXNNb250aCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZD1cIm0xNSAxOC02LTYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNwcmV2UGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2UGxhY2Vob2xkZXJDbGFzc2VzKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aC50aXRsZVN0eWxlID09PSAnZHJvcGRvd25zJzsgZWxzZSBwbGFpblRpdGxlXCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZHJvcGRvd25XcmFwQ2xhc3NlcygpXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzZXMoJ3ctWzcycHhdJylcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZHJvcGRvd25TZWxlY3RDbGFzc2VzKClcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJkcm9wZG93blNlbGVjdFN0eWxlXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNpbmdsZUhlYWRlck1vbnRoXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1vbnRoXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNpbmdsZU1vbnRoQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aE9wdGlvbiBvZiBtb250aE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJtb250aE9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm1vbnRoT3B0aW9uLnZhbHVlID09PSBzaW5nbGVIZWFkZXJNb250aFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBtb250aE9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTMgdy0zIHRleHQtZm9yZWdyb3VuZFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwibTYgOSA2IDYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzZXMoJ3ctWzgycHhdJylcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZHJvcGRvd25TZWxlY3RDbGFzc2VzKClcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJkcm9wZG93blNlbGVjdFN0eWxlXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNpbmdsZUhlYWRlclllYXJcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiWWVhclwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TaW5nbGVZZWFyQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwieWVhclwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cInllYXIgPT09IHNpbmdsZUhlYWRlclllYXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgeWVhciB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTMgdy0zIHRleHQtZm9yZWdyb3VuZFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwibTYgOSA2IDYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhaW5UaXRsZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWluLXctMCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtLTAgdGV4dC1mb3JlZ3JvdW5kIHRleHQtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy01XCI+XG4gICAgICAgICAgICB7eyBtb250aC50aXRsZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibW9udGguc2hvd05leHRCdXR0b247IGVsc2UgbmV4dFBsYWNlaG9sZGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5hdkJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9OZXh0TW9udGgoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICA+XG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJtOSAxOCA2LTYtNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNuZXh0UGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2UGxhY2Vob2xkZXJDbGFzc2VzKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImNhbGVuZGFyR3JpZFdyYXBDbGFzc2VzKClcIj5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwid2Vla2RheVJvd0NsYXNzZXMoKVwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla2RheXM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiIFtuZ0NsYXNzXT1cIndlZWtkYXlDZWxsQ2xhc3NlcygpXCI+XG4gICAgICAgICAgPHNwYW4+e3sgZGF5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB3ZWVrIG9mIG1vbnRoLndlZWtzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBbbmdDbGFzc109XCJ3ZWVrUm93Q2xhc3NlcygpXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNlbGwgb2Ygd2VlazsgdHJhY2tCeTogdHJhY2tCeURhdGVcIiBbbmdDbGFzc109XCJkYXlDZWxsQ2xhc3NlcyhjZWxsKVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF5QnV0dG9uQ2xhc3NlcyhjZWxsKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJjZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiY2VsbC5kaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJjZWxsLmRhdGUgfCBkYXRlIDogJ3l5eXktTU0tZGQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkRhdGVQcmVzc2VkKGNlbGwpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJkYXlMYWJlbENsYXNzZXMoY2VsbClcIj57eyBjZWxsLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
507
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBZ0NuSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFPbkMsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUpsQyxXQUFNLEdBQWdCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDNUMsV0FBTSxHQUFnQixJQUFJLENBQUM7UUFJMUIsWUFBTyxHQUFnQyxRQUFRLENBQUM7UUFDaEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQXFDLElBQUksQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDL0QsZ0JBQVcsR0FBRyxJQUFJ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QUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFVLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDaEYsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVTtRQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVU7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7aUhBM2lCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixpaUJDdkNqQyw4eUpBa0hBOzJGRDNFYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNO3dHQVN0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0gsS0FBSztzQkFEUixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFBkbUNhbGVuZGFyVmFyaWFudCA9ICdzaW5nbGUnIHwgJ3JhbmdlJztcblxuZXhwb3J0IGludGVyZmFjZSBQZG1DYWxlbmRhclJhbmdlIHtcbiAgc3RhcnQ6IERhdGUgfCBudWxsO1xuICBlbmQ6IERhdGUgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUGRtQ2FsZW5kYXJDZWxsIHtcbiAgZGF0ZTogRGF0ZTtcbiAgbGFiZWw6IG51bWJlcjtcbiAgbXV0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgaW5SYW5nZTogYm9vbGVhbjtcbiAgcmFuZ2VGaWxsOiBib29sZWFuO1xuICByYW5nZUxlZnRDYXA6IGJvb2xlYW47XG4gIHJhbmdlUmlnaHRDYXA6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQZG1DYWxlbmRhck1vbnRoVmlldyB7XG4gIGRhdGU6IERhdGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlU3R5bGU6ICdkcm9wZG93bnMnIHwgJ3BsYWluJztcbiAgZHJvcGRvd25Nb250aD86IHN0cmluZztcbiAgZHJvcGRvd25ZZWFyPzogc3RyaW5nO1xuICBzaG93UHJldkJ1dHRvbjogYm9vbGVhbjtcbiAgc2hvd05leHRCdXR0b246IGJvb2xlYW47XG4gIHdlZWtzOiByZWFkb25seSAocmVhZG9ubHkgUGRtQ2FsZW5kYXJDZWxsW10pW107XG59XG5cbmNvbnN0IERBWV9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmFuZ2VWYWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tb250aDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASW5wdXQoKSB2YXJpYW50OiBQZG1DYWxlbmRhclZhcmlhbnQgfCBzdHJpbmcgPSAnc2luZ2xlJztcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWluWWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heFllYXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBhbGxvd1NhbWVEYXlSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHJhbmdlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkaXNhYmxlZERhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJhbmdlVmFsdWUodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKSB7XG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXQgcmFuZ2VWYWx1ZSgpOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlVmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbW9udGgodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbW9udGggPSB2YWx1ZSA/IHRoaXMuc3RhcnRPZk1vbnRoKHZhbHVlKSA6IG51bGw7XG4gIH1cbiAgZ2V0IG1vbnRoKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbW9udGg7XG4gIH1cblxuICByZWFkb25seSB3ZWVrZGF5cyA9IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnSmFuJyB9LFxuICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnRmViJyB9LFxuICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnTWFyJyB9LFxuICAgIHsgdmFsdWU6IDMsIGxhYmVsOiAnQXByJyB9LFxuICAgIHsgdmFsdWU6IDQsIGxhYmVsOiAnTWF5JyB9LFxuICAgIHsgdmFsdWU6IDUsIGxhYmVsOiAnSnVuJyB9LFxuICAgIHsgdmFsdWU6IDYsIGxhYmVsOiAnSnVsJyB9LFxuICAgIHsgdmFsdWU6IDcsIGxhYmVsOiAnQXVnJyB9LFxuICAgIHsgdmFsdWU6IDgsIGxhYmVsOiAnU2VwJyB9LFxuICAgIHsgdmFsdWU6IDksIGxhYmVsOiAnT2N0JyB9LFxuICAgIHsgdmFsdWU6IDEwLCBsYWJlbDogJ05vdicgfSxcbiAgICB7IHZhbHVlOiAxMSwgbGFiZWw6ICdEZWMnIH1cbiAgXSBhcyBjb25zdDtcblxuICBnZXQgcmVzb2x2ZWRWYXJpYW50KCk6IFBkbUNhbGVuZGFyVmFyaWFudCB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFudCA9PT0gJ3JhbmdlJyA/ICdyYW5nZScgOiAnc2luZ2xlJztcbiAgfVxuXG4gIGdldCB2aXNpYmxlTW9udGhzKCk6IHJlYWRvbmx5IFBkbUNhbGVuZGFyTW9udGhWaWV3W10ge1xuICAgIGNvbnN0IGJhc2VNb250aCA9IHRoaXMuZ2V0QW5jaG9yTW9udGgoKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiBiYXNlTW9udGgsXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKGJhc2VNb250aCksXG4gICAgICAgICAgdGl0bGVTdHlsZTogJ2Ryb3Bkb3ducycsXG4gICAgICAgICAgZHJvcGRvd25Nb250aDogdGhpcy5mb3JtYXRNb250aFNob3J0KGJhc2VNb250aCksXG4gICAgICAgICAgZHJvcGRvd25ZZWFyOiBTdHJpbmcoYmFzZU1vbnRoLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgICAgIHNob3dQcmV2QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHNob3dOZXh0QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhiYXNlTW9udGgsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuYWRkTW9udGhzKGJhc2VNb250aCwgMSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGF0ZTogYmFzZU1vbnRoLFxuICAgICAgICB0aXRsZTogdGhpcy5mb3JtYXRNb250aFllYXIoYmFzZU1vbnRoKSxcbiAgICAgICAgdGl0bGVTdHlsZTogJ3BsYWluJyxcbiAgICAgICAgc2hvd1ByZXZCdXR0b246IHRydWUsXG4gICAgICAgIHNob3dOZXh0QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgd2Vla3M6IHRoaXMuYnVpbGRNb250aFdlZWtzKGJhc2VNb250aCwgdHJ1ZSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRhdGU6IG5leHRNb250aCxcbiAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKG5leHRNb250aCksXG4gICAgICAgIHRpdGxlU3R5bGU6ICdwbGFpbicsXG4gICAgICAgIHNob3dQcmV2QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc2hvd05leHRCdXR0b246IHRydWUsXG4gICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhuZXh0TW9udGgsIHRydWUpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEFuY2hvck1vbnRoKCkuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QW5jaG9yTW9udGgoKS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0IHllYXJPcHRpb25zKCk6IHJlYWRvbmx5IG51bWJlcltdIHtcbiAgICBjb25zdCBiYXNlWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBzZWxlY3RlZFllYXIgPSB0aGlzLnNpbmdsZUhlYWRlclllYXI7XG4gICAgbGV0IG1pblllYXIgPSB0aGlzLm1pblllYXIgPz8gKHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpIDogYmFzZVllYXIgLSAxMDApO1xuICAgIGxldCBtYXhZZWFyID0gdGhpcy5tYXhZZWFyID8/ICh0aGlzLm1heERhdGUgPyB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKSA6IGJhc2VZZWFyICsgMTApO1xuICAgIGNvbnN0IHllYXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA8IG1pblllYXIpIHtcbiAgICAgIG1pblllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA+IG1heFllYXIpIHtcbiAgICAgIG1heFllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKG1pblllYXIgPiBtYXhZZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TWluID0gbWF4WWVhcjtcbiAgICAgIG1heFllYXIgPSBtaW5ZZWFyO1xuICAgICAgbWluWWVhciA9IG5leHRNaW47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgeWVhciA9IG1pblllYXI7IHllYXIgPD0gbWF4WWVhcjsgeWVhciArPSAxKSB7XG4gICAgICB5ZWFycy5wdXNoKHllYXIpO1xuICAgIH1cblxuICAgIHJldHVybiB5ZWFycztcbiAgfVxuXG4gIGdldCByb290Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUgcm91bmRlZC1bMTBweF0gYm9yZGVyIHAtMyBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdyYW5nZSdcbiAgICAgICAgPyAnaW5saW5lLWZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1jZW50ZXIgZ2FwLTQgc2hyaW5rLTAgZ3Jvdy0wIGJhc2lzLWF1dG8nXG4gICAgICAgIDogJ2lubGluZS1mbGV4IGZsZXgtY29sIGdhcC00IHNocmluay0wIGdyb3ctMCBiYXNpcy1hdXRvJyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIGdldCByb290U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICc0ODhweCcgOiAnMjUwcHgnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoLFxuICAgICAgbWluV2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgICAgbWluSGVpZ2h0OiAnMjkzcHgnLFxuICAgICAgZmxleDogJzAgMCBhdXRvJyxcbiAgICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnXG4gICAgfTtcbiAgfVxuXG4gIG1vbnRoUGFuZWxDbGFzc2VzKF9pbmRleDogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQnLCB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICd3LVsyMjRweF0gZ2FwLTQnIDogJ3ctZnVsbCBnYXAtMCddO1xuICB9XG5cbiAgaGVhZGVyQ2xhc3Nlcyhtb250aDogUGRtQ2FsZW5kYXJNb250aFZpZXcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsIG1vbnRoLnRpdGxlU3R5bGUgPT09ICdkcm9wZG93bnMnID8gJycgOiAnbWItNCddO1xuICB9XG5cbiAgbmF2QnV0dG9uQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmbGV4IGgtOCB3LTggYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgJ2Rpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS00MCdcbiAgICBdO1xuICB9XG5cbiAgbmF2UGxhY2Vob2xkZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydoLTcgdy03IHNocmluay0wJ107XG4gIH1cblxuICBkcm9wZG93bldyYXBDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydmbGV4IHctNDAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yJ107XG4gIH1cblxuICBkcm9wZG93bkNsYXNzZXMod2lkdGhDbGFzczogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggaC04IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0xJywgd2lkdGhDbGFzc107XG4gIH1cblxuICBkcm9wZG93blNlbGVjdENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAndGV4dC1mb3JlZ3JvdW5kIGgtZnVsbCBiZy10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNScsXG4gICAgICAnYXBwZWFyYW5jZS1ub25lIGJvcmRlci0wIG91dGxpbmUtbm9uZSByaW5nLTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCB0ZXh0LWNlbnRlciBjdXJzb3ItcG9pbnRlcidcbiAgICBdO1xuICB9XG5cbiAgZ2V0IGRyb3Bkb3duU2VsZWN0U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICBib3JkZXI6ICcwJyxcbiAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgb3V0bGluZTogJzAnLFxuICAgICAgcGFkZGluZzogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9O1xuICB9XG5cbiAgY2FsZW5kYXJHcmlkV3JhcENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGZsZXgtY29sIGl0ZW1zLXN0YXJ0J107XG4gIH1cblxuICB3ZWVrZGF5Um93Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyJ107XG4gIH1cblxuICB3ZWVrZGF5Q2VsbENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBmbGV4IGgtWzIxcHhdIHctOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCB0ZXh0LXhzIGxlYWRpbmctNCddO1xuICB9XG5cbiAgd2Vla1Jvd0NsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGl0ZW1zLXN0YXJ0IHB0LTInXTtcbiAgfVxuXG4gIGRheUNlbGxDbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIGZsZXggaC04IHctOCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgY2VsbC5yYW5nZUZpbGwgPyAnYmctYWNjZW50JyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZUxlZnRDYXAgPyAncm91bmRlZC1sLW1kJyA6ICcnLFxuICAgICAgY2VsbC5yYW5nZVJpZ2h0Q2FwID8gJ3JvdW5kZWQtci1tZCcgOiAnJ1xuICAgIF07XG4gIH1cblxuICBkYXlCdXR0b25DbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3JlbGF0aXZlIHotMTAgZmxleCBoLTggdy04IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItMCBwLTAgdGV4dC1zbSBsZWFkaW5nLTUnLFxuICAgICAgY2VsbC5zZWxlY3RlZFxuICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuICAgICAgICA6IGNlbGwucmFuZ2VGaWxsXG4gICAgICAgICAgPyAnYmctdHJhbnNwYXJlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcbiAgICAgICAgICA6ICdiZy10cmFuc3BhcmVudCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgY2VsbC5tdXRlZCAmJiAhY2VsbC5yYW5nZUZpbGwgPyAnb3BhY2l0eS01MCcgOiAnJyxcbiAgICAgIGNlbGwuZGlzYWJsZWQgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNDAnIDogJycsXG4gICAgICAhY2VsbC5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAhY2VsbC5zZWxlY3RlZCA/ICdob3ZlcjpiZy1hY2NlbnQvNzAnIDogJydcbiAgICBdO1xuICB9XG5cbiAgZGF5TGFiZWxDbGFzc2VzKF9jZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZm9udC1ub3JtYWwnXTtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RGF0ZSA9IChfaW5kZXg6IG51bWJlciwgY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRlS2V5KGNlbGwuZGF0ZSk7XG4gIH1cblxuICBnb1RvUHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFuY2hvck1vbnRoKHRoaXMuYWRkTW9udGhzKHRoaXMuZ2V0QW5jaG9yTW9udGgoKSwgLTEpKTtcbiAgfVxuXG4gIGdvVG9OZXh0TW9udGgoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aCh0aGlzLmFkZE1vbnRocyh0aGlzLmdldEFuY2hvck1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlTW9udGhDaGFuZ2UobW9udGhWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIobW9udGhWYWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihtb250aCkgfHwgbW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldEFuY2hvck1vbnRoKCk7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aChuZXcgRGF0ZShhbmNob3IuZ2V0RnVsbFllYXIoKSwgbW9udGgsIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlWWVhckNoYW5nZSh5ZWFyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoeWVhclZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHllYXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5nZXRBbmNob3JNb250aCgpO1xuICAgIHRoaXMuc2V0QW5jaG9yTW9udGgobmV3IERhdGUoeWVhciwgYW5jaG9yLmdldE1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uRGF0ZVByZXNzZWQoY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuY2xvbmVEYXRlKGNlbGwuZGF0ZSk7XG5cbiAgICBpZiAoY2VsbC5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVDbGljay5lbWl0KGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlQ2xpY2suZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZGF0ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICB0aGlzLnN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVJhbmdlU2VsZWN0aW9uKGRhdGUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSYW5nZVNlbGVjdGlvbihkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3JhbmdlVmFsdWU7XG4gICAgY29uc3QgY3VycmVudFN0YXJ0ID0gY3VycmVudD8uc3RhcnQgPyB0aGlzLmNsb25lRGF0ZShjdXJyZW50LnN0YXJ0KSA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudEVuZCA9IGN1cnJlbnQ/LmVuZCA/IHRoaXMuY2xvbmVEYXRlKGN1cnJlbnQuZW5kKSA6IG51bGw7XG5cbiAgICBpZiAoIWN1cnJlbnRTdGFydCB8fCAoY3VycmVudFN0YXJ0ICYmIGN1cnJlbnRFbmQpKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgdGhpcy5zeW5jVmlzaWJsZU1vbnRoVG9EYXRlKGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FtZURheShjdXJyZW50U3RhcnQsIGRhdGUpICYmICF0aGlzLmFsbG93U2FtZURheVJhbmdlKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGRhdGUgOiBjdXJyZW50U3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGN1cnJlbnRTdGFydCA6IGRhdGU7XG5cbiAgICBpZiAodGhpcy5yYW5nZUNvbnRhaW5zQmxvY2tlZERhdGUoc3RhcnQsIGVuZCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlQ2xpY2suZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHsgc3RhcnQsIGVuZCB9O1xuICAgIHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKHN0YXJ0KSwgZW5kOiB0aGlzLmNsb25lRGF0ZShlbmQpIH0pO1xuICAgIHRoaXMuc3luY1Zpc2libGVNb250aFRvRGF0ZShzdGFydCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTW9udGhXZWVrcyhtb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogcmVhZG9ubHkgKHJlYWRvbmx5IFBkbUNhbGVuZGFyQ2VsbFtdKVtdIHtcbiAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLnN0YXJ0T2ZNb250aChtb250aCk7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0T2ZXZWVrKGZpcnN0T2ZNb250aCk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5lbmRPZldlZWsodGhpcy5lbmRPZk1vbnRoKGZpcnN0T2ZNb250aCkpO1xuICAgIGNvbnN0IHdlZWtzOiBQZG1DYWxlbmRhckNlbGxbXVtdID0gW107XG5cbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuICAgIHdoaWxlICh0aGlzLmNvbXBhcmVEYXRlKGN1cnNvciwgZW5kKSA8PSAwKSB7XG4gICAgICBjb25zdCByb3c6IFBkbUNhbGVuZGFyQ2VsbFtdID0gW107XG5cbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCArPSAxKSB7XG4gICAgICAgIHJvdy5wdXNoKHRoaXMuYnVpbGRDZWxsKGN1cnNvciwgbW9udGgsIGluY2x1ZGVSYW5nZSkpO1xuICAgICAgICBjdXJzb3IgPSB0aGlzLmFkZERheXMoY3Vyc29yLCAxKTtcbiAgICAgIH1cblxuICAgICAgd2Vla3MucHVzaChyb3cpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHdlZWtzKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCByb3cubGVuZ3RoOyBjb2wgKz0gMSkge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbF07XG4gICAgICAgIGlmICghY2VsbC5pblJhbmdlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWZ0SW5Sb3cgPSBjb2wgPiAwID8gcm93W2NvbCAtIDFdLmluUmFuZ2UgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcmlnaHRJblJvdyA9IGNvbCA8IHJvdy5sZW5ndGggLSAxID8gcm93W2NvbCArIDFdLmluUmFuZ2UgOiBmYWxzZTtcblxuICAgICAgICBjZWxsLnJhbmdlTGVmdENhcCA9ICFsZWZ0SW5Sb3c7XG4gICAgICAgIGNlbGwucmFuZ2VSaWdodENhcCA9ICFyaWdodEluUm93O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDZWxsKGRhdGU6IERhdGUsIHZpc2libGVNb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogUGRtQ2FsZW5kYXJDZWxsIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5jbG9uZURhdGUoZGF0ZSk7XG4gICAgY29uc3QgaW5DdXJyZW50TW9udGggPSBub3JtYWxpemVkLmdldE1vbnRoKCkgPT09IHZpc2libGVNb250aC5nZXRNb250aCgpICYmIG5vcm1hbGl6ZWQuZ2V0RnVsbFllYXIoKSA9PT0gdmlzaWJsZU1vbnRoLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzQmxvY2tlZChub3JtYWxpemVkKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkU2luZ2xlID0gdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmICEhdGhpcy5fdmFsdWUgJiYgdGhpcy5pc1NhbWVEYXkobm9ybWFsaXplZCwgdGhpcy5fdmFsdWUpO1xuICAgIGNvbnN0IHJhbmdlU3RhcnQgPSBpbmNsdWRlUmFuZ2UgJiYgISF0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KTtcbiAgICBjb25zdCByYW5nZUVuZCA9IGluY2x1ZGVSYW5nZSAmJiAhIXRoaXMuX3JhbmdlVmFsdWU/LmVuZCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLmVuZCk7XG4gICAgY29uc3QgaW5SYW5nZSA9XG4gICAgICBpbmNsdWRlUmFuZ2UgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uc3RhcnQgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kICYmXG4gICAgICB0aGlzLmNvbXBhcmVEYXRlKG5vcm1hbGl6ZWQsIHRoaXMuX3JhbmdlVmFsdWUuc3RhcnQpID49IDAgJiZcbiAgICAgIHRoaXMuY29tcGFyZURhdGUobm9ybWFsaXplZCwgdGhpcy5fcmFuZ2VWYWx1ZS5lbmQpIDw9IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbm9ybWFsaXplZCxcbiAgICAgIGxhYmVsOiBub3JtYWxpemVkLmdldERhdGUoKSxcbiAgICAgIG11dGVkOiAhaW5DdXJyZW50TW9udGgsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFNpbmdsZSB8fCByYW5nZVN0YXJ0IHx8IHJhbmdlRW5kLFxuICAgICAgaW5SYW5nZSxcbiAgICAgIHJhbmdlRmlsbDogaW5SYW5nZSxcbiAgICAgIHJhbmdlTGVmdENhcDogZmFsc2UsXG4gICAgICByYW5nZVJpZ2h0Q2FwOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEFuY2hvck1vbnRoKCk6IERhdGUge1xuICAgIGxldCBjYW5kaWRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl9tb250aCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5jbG9uZURhdGUodGhpcy5fbW9udGgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmIHRoaXMuX3ZhbHVlKSB7XG4gICAgICBjYW5kaWRhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyAmJiB0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5zdGFydE9mTW9udGgodGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuc3RhcnRPZk1vbnRoKG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShjYW5kaWRhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydE9mTW9udGgobmV3IERhdGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QW5jaG9yTW9udGgobW9udGg6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5zdGFydE9mTW9udGgobW9udGgpO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShub3JtYWxpemVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tb250aCA9IG5vcm1hbGl6ZWQ7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKHRoaXMuX21vbnRoKSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgIGlmICghdGhpcy5fbW9udGggfHwgIXRoaXMuaXNTYW1lTW9udGgodGhpcy5fbW9udGgsIG5leHRNb250aCkpIHtcbiAgICAgIHRoaXMuX21vbnRoID0gbmV4dE1vbnRoO1xuICAgICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKG5leHRNb250aCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNCbG9ja2VkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5taW5EYXRlKSA8IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5jb21wYXJlRGF0ZShkYXRlLCB0aGlzLm1heERhdGUpID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tlZFNldCA9IG5ldyBTZXQoKHRoaXMuZGlzYWJsZWREYXRlcyB8fCBbXSkubWFwKChpdGVtKSA9PiB0aGlzLmRhdGVLZXkoaXRlbSkpKTtcbiAgICBpZiAoYmxvY2tlZFNldC5oYXModGhpcy5kYXRlS2V5KGRhdGUpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhdGhpcy5pc0RhdGVEaXNhYmxlZD8uKHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VDb250YWluc0Jsb2NrZWREYXRlKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpOiBib29sZWFuIHtcbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuXG4gICAgd2hpbGUgKHRoaXMuY29tcGFyZURhdGUoY3Vyc29yLCBlbmQpIDw9IDApIHtcbiAgICAgIGlmICh0aGlzLmlzQmxvY2tlZChjdXJzb3IpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY3Vyc29yID0gdGhpcy5hZGREYXlzKGN1cnNvciwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0RnVsbFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVEYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZERhdGUoZGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBkYXRlIGlzIERhdGUge1xuICAgIHJldHVybiAhIWRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIU51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIC1kYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIDYgLSBkYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTW9udGhzKGRhdGU6IERhdGUsIG1vbnRoczogbnVtYmVyKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgbW9udGhzLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGVWYWx1ZShhKSAtIHRoaXMuZGF0ZVZhbHVlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlVmFsdWUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkgLyBEQVlfTVM7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZURheShhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUoYSwgYikgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZU1vbnRoKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKCkgJiYgYS5nZXRNb250aCgpID09PSBiLmdldE1vbnRoKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGVLZXkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeSA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgZCA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eX0tJHttfS0ke2R9YDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhTaG9ydChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb250aFllYXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnLCB5ZWFyOiAnbnVtZXJpYycgfSk7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwicm9vdENsYXNzZXNcIiBbbmdTdHlsZV09XCJyb290U3R5bGVcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgbW9udGggb2YgdmlzaWJsZU1vbnRoczsgbGV0IG1vbnRoSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwibW9udGhQYW5lbENsYXNzZXMobW9udGhJbmRleClcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImhlYWRlckNsYXNzZXMobW9udGgpXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibW9udGguc2hvd1ByZXZCdXR0b247IGVsc2UgcHJldlBsYWNlaG9sZGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5hdkJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXNNb250aCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZD1cIm0xNSAxOC02LTYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNwcmV2UGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2UGxhY2Vob2xkZXJDbGFzc2VzKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aC50aXRsZVN0eWxlID09PSAnZHJvcGRvd25zJzsgZWxzZSBwbGFpblRpdGxlXCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZHJvcGRvd25XcmFwQ2xhc3NlcygpXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzZXMoJ3ctMTYgc206dy1bNzJweF0nKVwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJkcm9wZG93blNlbGVjdENsYXNzZXMoKVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImRyb3Bkb3duU2VsZWN0U3R5bGVcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2luZ2xlSGVhZGVyTW9udGhcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9udGhcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2luZ2xlTW9udGhDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoT3B0aW9uIG9mIG1vbnRoT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm1vbnRoT3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwibW9udGhPcHRpb24udmFsdWUgPT09IHNpbmdsZUhlYWRlck1vbnRoXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoT3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtMyB3LTMgdGV4dC1mb3JlZ3JvdW5kXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJtNiA5IDYgNiA2LTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImRyb3Bkb3duQ2xhc3Nlcygndy0xNiBzbTp3LVs4MnB4XScpXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRyb3Bkb3duU2VsZWN0Q2xhc3NlcygpXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZHJvcGRvd25TZWxlY3RTdHlsZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzaW5nbGVIZWFkZXJZZWFyXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlllYXJcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2luZ2xlWWVhckNoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInllYXJcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJ5ZWFyID09PSBzaW5nbGVIZWFkZXJZZWFyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC0zIHctMyB0ZXh0LWZvcmVncm91bmRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIm02IDkgNiA2IDYtNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3BsYWluVGl0bGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTAgZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibS0wIHRleHQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNVwiPlxuICAgICAgICAgICAge3sgbW9udGgudGl0bGUgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1vbnRoLnNob3dOZXh0QnV0dG9uOyBlbHNlIG5leHRQbGFjZWhvbGRlclwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbbmdDbGFzc109XCJuYXZCdXR0b25DbGFzc2VzKClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvTmV4dE1vbnRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtNCB3LTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cGF0aCBkPVwibTkgMTggNi02LTYtNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbmV4dFBsYWNlaG9sZGVyPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIm5hdlBsYWNlaG9sZGVyQ2xhc3NlcygpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBbbmdDbGFzc109XCJjYWxlbmRhckdyaWRXcmFwQ2xhc3NlcygpXCI+XG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cIndlZWtkYXlSb3dDbGFzc2VzKClcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtkYXlzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBbbmdDbGFzc109XCJ3ZWVrZGF5Q2VsbENsYXNzZXMoKVwiPlxuICAgICAgICAgIDxzcGFuPnt7IGRheSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2VlayBvZiBtb250aC53ZWVrczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwid2Vla1Jvd0NsYXNzZXMoKVwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjZWxsIG9mIHdlZWs7IHRyYWNrQnk6IHRyYWNrQnlEYXRlXCIgW25nQ2xhc3NdPVwiZGF5Q2VsbENsYXNzZXMoY2VsbClcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRheUJ1dHRvbkNsYXNzZXMoY2VsbClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiY2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImNlbGwuZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiY2VsbC5kYXRlIHwgZGF0ZSA6ICd5eXl5LU1NLWRkJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25EYXRlUHJlc3NlZChjZWxsKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiZGF5TGFiZWxDbGFzc2VzKGNlbGwpXCI+e3sgY2VsbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,65 +1,48 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/common";
4
+ /**
5
+ * Card component - Visual container primitivo
6
+ *
7
+ * BREAKING CHANGE en v0.2.0: variant="login" eliminado.
8
+ * Card es ahora un componente UI puro sin lógica de negocio.
9
+ *
10
+ * Para crear un login form, componer con primitivos:
11
+ *
12
+ * @example
13
+ * <pdm-card>
14
+ * <div pdmCardHeader>
15
+ * <h3 class="text-lg font-semibold">Login</h3>
16
+ * <p class="text-sm text-muted-foreground">Enter your credentials</p>
17
+ * </div>
18
+ * <div pdmCardContent>
19
+ * <form [formGroup]="form">
20
+ * <pdm-field>
21
+ * <pdm-label>Email</pdm-label>
22
+ * <pdm-input type="email" formControlName="email" />
23
+ * </pdm-field>
24
+ * <pdm-field>
25
+ * <pdm-label>Password</pdm-label>
26
+ * <pdm-input-password formControlName="password" />
27
+ * </pdm-field>
28
+ * </form>
29
+ * </div>
30
+ * <div pdmCardFooter>
31
+ * <pdm-button (click)="onLogin()">Login</pdm-button>
32
+ * </div>
33
+ * </pdm-card>
34
+ */
4
35
  export class PdmCardComponent {
5
36
  constructor() {
6
- this.variant = 'default';
7
37
  this.className = '';
8
- this.title = 'Login to your account';
9
- this.description = 'Enter your email below to login to your account';
10
- this.actionText = 'Sign up';
11
- this.emailLabel = 'Email';
12
- this.emailPlaceholder = 'm@example.com';
13
- this.passwordLabel = 'Password';
14
- this.passwordHint = 'Forgot password?';
15
- this.primaryActionText = 'Login';
16
- this.secondaryActionText = 'Login with Google';
17
- this.primaryAction = new EventEmitter();
18
- this.secondaryAction = new EventEmitter();
19
- this.actionPressed = new EventEmitter();
20
- }
21
- onPrimaryAction() {
22
- this.primaryAction.emit();
23
- }
24
- onSecondaryAction() {
25
- this.secondaryAction.emit();
26
- }
27
- onActionPressed() {
28
- this.actionPressed.emit();
29
38
  }
30
39
  }
31
40
  PdmCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- PdmCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmCardComponent, selector: "pdm-card", inputs: { variant: "variant", className: "className", title: "title", description: "description", actionText: "actionText", emailLabel: "emailLabel", emailPlaceholder: "emailPlaceholder", passwordLabel: "passwordLabel", passwordHint: "passwordHint", primaryActionText: "primaryActionText", secondaryActionText: "secondaryActionText" }, outputs: { primaryAction: "primaryAction", secondaryAction: "secondaryAction", actionPressed: "actionPressed" }, ngImport: i0, template: "<section\n [ngClass]=\"[\n 'w-full rounded-lg border border-border bg-background py-6 shadow-sm',\n className\n ]\"\n>\n <ng-container *ngIf=\"variant === 'login'; else defaultCard\">\n <div class=\"flex w-full items-start gap-1.5 px-6\">\n <div class=\"min-w-0 flex-1\">\n <h3 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h3>\n <p class=\"m-0 mt-1.5 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border-0 bg-transparent px-4 py-2 text-sm font-medium text-foreground\"\n (click)=\"onActionPressed()\"\n >\n {{ actionText }}\n </button>\n </div>\n\n <div class=\"mt-6 flex flex-col gap-4 px-6\">\n <div class=\"w-full\">\n <label class=\"mb-3 block text-sm font-medium text-foreground\">{{ emailLabel }}</label>\n <input\n type=\"email\"\n [placeholder]=\"emailPlaceholder\"\n class=\"h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n </div>\n\n <div class=\"w-full\">\n <div class=\"mb-3 flex w-full items-center justify-between gap-4\">\n <label class=\"text-sm font-medium text-foreground\">{{ passwordLabel }}</label>\n <button type=\"button\" class=\"appearance-none border-0 bg-transparent p-0 text-sm text-foreground\">\n {{ passwordHint }}\n </button>\n </div>\n <input\n type=\"password\"\n class=\"h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n </div>\n </div>\n\n <div class=\"mt-6 flex w-full flex-col gap-2 px-6\">\n <button\n type=\"button\"\n class=\"flex h-9 w-full appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </div>\n </ng-container>\n\n <ng-template #defaultCard>\n <div class=\"flex w-full flex-col gap-6\">\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardHeader]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardContent]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardFooter]\"></ng-content>\n </div>\n </div>\n </ng-template>\n</section>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
41
+ PdmCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmCardComponent, selector: "pdm-card", inputs: { className: "className" }, ngImport: i0, template: "<section\n [ngClass]=\"[\n 'w-full rounded-lg border border-border bg-background py-6 shadow-sm',\n className\n ]\"\n>\n <div class=\"flex w-full flex-col gap-6\">\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardHeader]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardContent]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardFooter]\"></ng-content>\n </div>\n </div>\n</section>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
33
42
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCardComponent, decorators: [{
34
43
  type: Component,
35
- args: [{ selector: 'pdm-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n [ngClass]=\"[\n 'w-full rounded-lg border border-border bg-background py-6 shadow-sm',\n className\n ]\"\n>\n <ng-container *ngIf=\"variant === 'login'; else defaultCard\">\n <div class=\"flex w-full items-start gap-1.5 px-6\">\n <div class=\"min-w-0 flex-1\">\n <h3 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h3>\n <p class=\"m-0 mt-1.5 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border-0 bg-transparent px-4 py-2 text-sm font-medium text-foreground\"\n (click)=\"onActionPressed()\"\n >\n {{ actionText }}\n </button>\n </div>\n\n <div class=\"mt-6 flex flex-col gap-4 px-6\">\n <div class=\"w-full\">\n <label class=\"mb-3 block text-sm font-medium text-foreground\">{{ emailLabel }}</label>\n <input\n type=\"email\"\n [placeholder]=\"emailPlaceholder\"\n class=\"h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n </div>\n\n <div class=\"w-full\">\n <div class=\"mb-3 flex w-full items-center justify-between gap-4\">\n <label class=\"text-sm font-medium text-foreground\">{{ passwordLabel }}</label>\n <button type=\"button\" class=\"appearance-none border-0 bg-transparent p-0 text-sm text-foreground\">\n {{ passwordHint }}\n </button>\n </div>\n <input\n type=\"password\"\n class=\"h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n </div>\n </div>\n\n <div class=\"mt-6 flex w-full flex-col gap-2 px-6\">\n <button\n type=\"button\"\n class=\"flex h-9 w-full appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </div>\n </ng-container>\n\n <ng-template #defaultCard>\n <div class=\"flex w-full flex-col gap-6\">\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardHeader]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardContent]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardFooter]\"></ng-content>\n </div>\n </div>\n </ng-template>\n</section>\n" }]
36
- }], propDecorators: { variant: [{
37
- type: Input
38
- }], className: [{
39
- type: Input
40
- }], title: [{
41
- type: Input
42
- }], description: [{
43
- type: Input
44
- }], actionText: [{
45
- type: Input
46
- }], emailLabel: [{
47
- type: Input
48
- }], emailPlaceholder: [{
49
- type: Input
50
- }], passwordLabel: [{
51
- type: Input
52
- }], passwordHint: [{
53
- type: Input
54
- }], primaryActionText: [{
55
- type: Input
56
- }], secondaryActionText: [{
44
+ args: [{ selector: 'pdm-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n [ngClass]=\"[\n 'w-full rounded-lg border border-border bg-background py-6 shadow-sm',\n className\n ]\"\n>\n <div class=\"flex w-full flex-col gap-6\">\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardHeader]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardContent]\"></ng-content>\n </div>\n <div class=\"px-6\">\n <ng-content select=\"[pdmCardFooter]\"></ng-content>\n </div>\n </div>\n</section>\n" }]
45
+ }], propDecorators: { className: [{
57
46
  type: Input
58
- }], primaryAction: [{
59
- type: Output
60
- }], secondaryAction: [{
61
- type: Output
62
- }], actionPressed: [{
63
- type: Output
64
47
  }] } });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBU2hHLE1BQU0sT0FBTyxnQkFBZ0I7SUFMN0I7UUFNVyxZQUFPLEdBQW1CLFNBQVMsQ0FBQztRQUNwQyxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsVUFBSyxHQUFHLHVCQUF1QixDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsaURBQWlELENBQUM7UUFDaEUsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixlQUFVLEdBQUcsT0FBTyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLFVBQVUsQ0FBQztRQUMzQixpQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLHNCQUFpQixHQUFHLE9BQU8sQ0FBQztRQUM1Qix3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUV6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDekMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzNDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQWFwRDtJQVhDLGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs2R0E1QlUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsaWZDVDdCLHFzR0E2RUE7MkZEcEVhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxVQUFVLG1CQUVILHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgUGRtQ2FyZFZhcmlhbnQgPSAnZGVmYXVsdCcgfCAnbG9naW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwZG0tY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGRtQ2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFBkbUNhcmRWYXJpYW50ID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcblxuICBASW5wdXQoKSB0aXRsZSA9ICdMb2dpbiB0byB5b3VyIGFjY291bnQnO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbiA9ICdFbnRlciB5b3VyIGVtYWlsIGJlbG93IHRvIGxvZ2luIHRvIHlvdXIgYWNjb3VudCc7XG4gIEBJbnB1dCgpIGFjdGlvblRleHQgPSAnU2lnbiB1cCc7XG4gIEBJbnB1dCgpIGVtYWlsTGFiZWwgPSAnRW1haWwnO1xuICBASW5wdXQoKSBlbWFpbFBsYWNlaG9sZGVyID0gJ21AZXhhbXBsZS5jb20nO1xuICBASW5wdXQoKSBwYXNzd29yZExhYmVsID0gJ1Bhc3N3b3JkJztcbiAgQElucHV0KCkgcGFzc3dvcmRIaW50ID0gJ0ZvcmdvdCBwYXNzd29yZD8nO1xuICBASW5wdXQoKSBwcmltYXJ5QWN0aW9uVGV4dCA9ICdMb2dpbic7XG4gIEBJbnB1dCgpIHNlY29uZGFyeUFjdGlvblRleHQgPSAnTG9naW4gd2l0aCBHb29nbGUnO1xuXG4gIEBPdXRwdXQoKSBwcmltYXJ5QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2Vjb25kYXJ5QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWN0aW9uUHJlc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBvblByaW1hcnlBY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5wcmltYXJ5QWN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2Vjb25kYXJ5QWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2Vjb25kYXJ5QWN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIG9uQWN0aW9uUHJlc3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvblByZXNzZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8c2VjdGlvblxuICBbbmdDbGFzc109XCJbXG4gICAgJ3ctZnVsbCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcHktNiBzaGFkb3ctc20nLFxuICAgIGNsYXNzTmFtZVxuICBdXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhbnQgPT09ICdsb2dpbic7IGVsc2UgZGVmYXVsdENhcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtc3RhcnQgZ2FwLTEuNSBweC02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWluLXctMCBmbGV4LTFcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibS0wIHRleHQtbGcgZm9udC1zZW1pYm9sZCBsZWFkaW5nLW5vbmUgdHJhY2tpbmctdGlnaHQgdGV4dC1mb3JlZ3JvdW5kXCI+e3sgdGl0bGUgfX08L2gzPlxuICAgICAgICA8cCBjbGFzcz1cIm0tMCBtdC0xLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBkZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvblByZXNzZWQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7IGFjdGlvblRleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTYgZmxleCBmbGV4LWNvbCBnYXAtNCBweC02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTMgYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmRcIj57eyBlbWFpbExhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW1haWxQbGFjZWhvbGRlclwiXG4gICAgICAgICAgY2xhc3M9XCJoLTkgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1iYWNrZ3JvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPnt7IHBhc3N3b3JkTGFiZWwgfX08L2xhYmVsPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYXBwZWFyYW5jZS1ub25lIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LXNtIHRleHQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAge3sgcGFzc3dvcmRIaW50IH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgIGNsYXNzPVwiaC05IHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1iYWNrZ3JvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTYgZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTIgcHgtNlwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGgtOSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJnLXByaW1hcnkgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgc2hhZG93LXNtXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUHJpbWFyeUFjdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAge3sgcHJpbWFyeUFjdGlvblRleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGgtOSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2Vjb25kYXJ5QWN0aW9uKClcIlxuICAgICAgPlxuICAgICAgICB7eyBzZWNvbmRhcnlBY3Rpb25UZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FyZD5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJweC02XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwZG1DYXJkSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInB4LTZcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BkbUNhcmRDb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInB4LTZcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BkbUNhcmRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3NlY3Rpb24+XG4iXX0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUUxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBTUgsTUFBTSxPQUFPLGdCQUFnQjtJQUw3QjtRQU1XLGNBQVMsR0FBRyxFQUFFLENBQUM7S0FDekI7OzZHQUZZLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLG9GQ3RDN0IsNmVBa0JBOzJGRG9CYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsVUFBVSxtQkFFSCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBDYXJkIGNvbXBvbmVudCAtIFZpc3VhbCBjb250YWluZXIgcHJpbWl0aXZvXG4gKiBcbiAqIEJSRUFLSU5HIENIQU5HRSBlbiB2MC4yLjA6IHZhcmlhbnQ9XCJsb2dpblwiIGVsaW1pbmFkby5cbiAqIENhcmQgZXMgYWhvcmEgdW4gY29tcG9uZW50ZSBVSSBwdXJvIHNpbiBsw7NnaWNhIGRlIG5lZ29jaW8uXG4gKiBcbiAqIFBhcmEgY3JlYXIgdW4gbG9naW4gZm9ybSwgY29tcG9uZXIgY29uIHByaW1pdGl2b3M6XG4gKiBcbiAqIEBleGFtcGxlXG4gKiA8cGRtLWNhcmQ+XG4gKiAgIDxkaXYgcGRtQ2FyZEhlYWRlcj5cbiAqICAgICA8aDMgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIj5Mb2dpbjwvaDM+XG4gKiAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPkVudGVyIHlvdXIgY3JlZGVudGlhbHM8L3A+XG4gKiAgIDwvZGl2PlxuICogICA8ZGl2IHBkbUNhcmRDb250ZW50PlxuICogICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICAgICAgPHBkbS1maWVsZD5cbiAqICAgICAgICAgPHBkbS1sYWJlbD5FbWFpbDwvcGRtLWxhYmVsPlxuICogICAgICAgICA8cGRtLWlucHV0IHR5cGU9XCJlbWFpbFwiIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgLz5cbiAqICAgICAgIDwvcGRtLWZpZWxkPlxuICogICAgICAgPHBkbS1maWVsZD5cbiAqICAgICAgICAgPHBkbS1sYWJlbD5QYXNzd29yZDwvcGRtLWxhYmVsPlxuICogICAgICAgICA8cGRtLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCIgLz5cbiAqICAgICAgIDwvcGRtLWZpZWxkPlxuICogICAgIDwvZm9ybT5cbiAqICAgPC9kaXY+XG4gKiAgIDxkaXYgcGRtQ2FyZEZvb3Rlcj5cbiAqICAgICA8cGRtLWJ1dHRvbiAoY2xpY2spPVwib25Mb2dpbigpXCI+TG9naW48L3BkbS1idXR0b24+XG4gKiAgIDwvZGl2PlxuICogPC9wZG0tY2FyZD5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRtLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbn1cbiIsIjxzZWN0aW9uXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAndy1mdWxsIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCBweS02IHNoYWRvdy1zbScsXG4gICAgY2xhc3NOYW1lXG4gIF1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTZcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHgtNlwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BkbUNhcmRIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJweC02XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcGRtQ2FyZENvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJweC02XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcGRtQ2FyZEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
@@ -49,10 +49,10 @@ export class PdmCommandComponent {
49
49
  }
50
50
  }
51
51
  PdmCommandComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCommandComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
- PdmCommandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmCommandComponent, selector: "pdm-command", inputs: { open: "open", hintLabel: "hintLabel", hintKey: "hintKey", placeholder: "placeholder", emptyMessage: "emptyMessage", items: "items", className: "className" }, outputs: { itemSelect: "itemSelect", openChange: "openChange" }, ngImport: i0, template: "<div [ngClass]=\"['w-full', className]\">\n <div *ngIf=\"!open\" class=\"flex items-center gap-1\">\n <span class=\"text-sm font-medium text-muted-foreground\">{{ hintLabel }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-5 appearance-none items-center gap-0.5 rounded-sm border border-border bg-muted px-1.5\"\n (click)=\"toggleOpen()\"\n >\n <pdm-icon name=\"command\" [size]=\"12\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <span class=\"text-xs text-muted-foreground\">{{ hintKey }}</span>\n </button>\n </div>\n\n <section\n *ngIf=\"open\"\n class=\"flex w-full flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <div class=\"flex items-center gap-2 border-b border-border px-3\">\n <pdm-icon name=\"search\" [size]=\"16\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"query\"\n (input)=\"onQueryChange($event)\"\n class=\"h-10 w-full bg-transparent py-3 text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n <div class=\"max-h-72 overflow-y-auto p-1\">\n <ng-container *ngFor=\"let group of groupedItems; let groupIndex = index\">\n <div *ngIf=\"group.name\" class=\"px-2 py-1.5 text-xs text-muted-foreground\">{{ group.name }}</div>\n <button\n *ngFor=\"let item of group.items\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n class=\"flex w-full appearance-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n [ngClass]=\"[\n item.disabled ? 'opacity-50' : '',\n item.label === 'Calendar' ? 'bg-accent text-accent-foreground' : ''\n ]\"\n (click)=\"select(item.value)\"\n >\n <span class=\"inline-flex h-4 w-4 items-center justify-center text-foreground\">\n <pdm-icon *ngIf=\"item.icon\" [name]=\"item.icon\" [size]=\"16\" [decorative]=\"true\"></pdm-icon>\n </span>\n <span class=\"min-w-0 flex-1 text-foreground\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n </button>\n <div *ngIf=\"groupIndex === 0 && groupedItems.length > 1\" class=\"my-1 border-t border-border\"></div>\n </ng-container>\n\n <p *ngIf=\"filteredItems.length === 0\" class=\"m-0 py-6 text-center text-sm text-muted-foreground\">{{ emptyMessage }}</p>\n </div>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
52
+ PdmCommandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmCommandComponent, selector: "pdm-command", inputs: { open: "open", hintLabel: "hintLabel", hintKey: "hintKey", placeholder: "placeholder", emptyMessage: "emptyMessage", items: "items", className: "className" }, outputs: { itemSelect: "itemSelect", openChange: "openChange" }, ngImport: i0, template: "<div [ngClass]=\"['w-full', className]\">\n <div *ngIf=\"!open\" class=\"flex items-center gap-1\">\n <span class=\"text-sm font-medium text-muted-foreground\">{{ hintLabel }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-5 appearance-none items-center gap-0.5 rounded-sm border border-border bg-muted px-1.5\"\n (click)=\"toggleOpen()\"\n >\n <pdm-icon name=\"command\" [size]=\"12\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <span class=\"text-xs text-muted-foreground\">{{ hintKey }}</span>\n </button>\n </div>\n\n <section\n *ngIf=\"open\"\n class=\"flex w-full flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <div class=\"flex items-center gap-2 border-b border-border px-3\">\n <pdm-icon name=\"search\" [size]=\"16\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"query\"\n (input)=\"onQueryChange($event)\"\n class=\"h-10 w-full bg-transparent py-3 text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n <div class=\"max-h-[50vh] overflow-y-auto p-1 md:max-h-72\">\n <ng-container *ngFor=\"let group of groupedItems; let groupIndex = index\">\n <div *ngIf=\"group.name\" class=\"px-2 py-1.5 text-xs text-muted-foreground\">{{ group.name }}</div>\n <button\n *ngFor=\"let item of group.items\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n class=\"flex w-full appearance-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n [ngClass]=\"[\n item.disabled ? 'opacity-50' : '',\n item.label === 'Calendar' ? 'bg-accent text-accent-foreground' : ''\n ]\"\n (click)=\"select(item.value)\"\n >\n <span class=\"inline-flex h-4 w-4 items-center justify-center text-foreground\">\n <pdm-icon *ngIf=\"item.icon\" [name]=\"item.icon\" [size]=\"16\" [decorative]=\"true\"></pdm-icon>\n </span>\n <span class=\"min-w-0 flex-1 text-foreground\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n </button>\n <div *ngIf=\"groupIndex === 0 && groupedItems.length > 1\" class=\"my-1 border-t border-border\"></div>\n </ng-container>\n\n <p *ngIf=\"filteredItems.length === 0\" class=\"m-0 py-6 text-center text-sm text-muted-foreground\">{{ emptyMessage }}</p>\n </div>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCommandComponent, decorators: [{
54
54
  type: Component,
55
- args: [{ selector: 'pdm-command', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['w-full', className]\">\n <div *ngIf=\"!open\" class=\"flex items-center gap-1\">\n <span class=\"text-sm font-medium text-muted-foreground\">{{ hintLabel }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-5 appearance-none items-center gap-0.5 rounded-sm border border-border bg-muted px-1.5\"\n (click)=\"toggleOpen()\"\n >\n <pdm-icon name=\"command\" [size]=\"12\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <span class=\"text-xs text-muted-foreground\">{{ hintKey }}</span>\n </button>\n </div>\n\n <section\n *ngIf=\"open\"\n class=\"flex w-full flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <div class=\"flex items-center gap-2 border-b border-border px-3\">\n <pdm-icon name=\"search\" [size]=\"16\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"query\"\n (input)=\"onQueryChange($event)\"\n class=\"h-10 w-full bg-transparent py-3 text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n <div class=\"max-h-72 overflow-y-auto p-1\">\n <ng-container *ngFor=\"let group of groupedItems; let groupIndex = index\">\n <div *ngIf=\"group.name\" class=\"px-2 py-1.5 text-xs text-muted-foreground\">{{ group.name }}</div>\n <button\n *ngFor=\"let item of group.items\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n class=\"flex w-full appearance-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n [ngClass]=\"[\n item.disabled ? 'opacity-50' : '',\n item.label === 'Calendar' ? 'bg-accent text-accent-foreground' : ''\n ]\"\n (click)=\"select(item.value)\"\n >\n <span class=\"inline-flex h-4 w-4 items-center justify-center text-foreground\">\n <pdm-icon *ngIf=\"item.icon\" [name]=\"item.icon\" [size]=\"16\" [decorative]=\"true\"></pdm-icon>\n </span>\n <span class=\"min-w-0 flex-1 text-foreground\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n </button>\n <div *ngIf=\"groupIndex === 0 && groupedItems.length > 1\" class=\"my-1 border-t border-border\"></div>\n </ng-container>\n\n <p *ngIf=\"filteredItems.length === 0\" class=\"m-0 py-6 text-center text-sm text-muted-foreground\">{{ emptyMessage }}</p>\n </div>\n </section>\n</div>\n" }]
55
+ args: [{ selector: 'pdm-command', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['w-full', className]\">\n <div *ngIf=\"!open\" class=\"flex items-center gap-1\">\n <span class=\"text-sm font-medium text-muted-foreground\">{{ hintLabel }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-5 appearance-none items-center gap-0.5 rounded-sm border border-border bg-muted px-1.5\"\n (click)=\"toggleOpen()\"\n >\n <pdm-icon name=\"command\" [size]=\"12\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <span class=\"text-xs text-muted-foreground\">{{ hintKey }}</span>\n </button>\n </div>\n\n <section\n *ngIf=\"open\"\n class=\"flex w-full flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <div class=\"flex items-center gap-2 border-b border-border px-3\">\n <pdm-icon name=\"search\" [size]=\"16\" className=\"text-muted-foreground\" [decorative]=\"true\"></pdm-icon>\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"query\"\n (input)=\"onQueryChange($event)\"\n class=\"h-10 w-full bg-transparent py-3 text-sm text-foreground outline-none placeholder:text-muted-foreground\"\n />\n </div>\n\n <div class=\"max-h-[50vh] overflow-y-auto p-1 md:max-h-72\">\n <ng-container *ngFor=\"let group of groupedItems; let groupIndex = index\">\n <div *ngIf=\"group.name\" class=\"px-2 py-1.5 text-xs text-muted-foreground\">{{ group.name }}</div>\n <button\n *ngFor=\"let item of group.items\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n class=\"flex w-full appearance-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n [ngClass]=\"[\n item.disabled ? 'opacity-50' : '',\n item.label === 'Calendar' ? 'bg-accent text-accent-foreground' : ''\n ]\"\n (click)=\"select(item.value)\"\n >\n <span class=\"inline-flex h-4 w-4 items-center justify-center text-foreground\">\n <pdm-icon *ngIf=\"item.icon\" [name]=\"item.icon\" [size]=\"16\" [decorative]=\"true\"></pdm-icon>\n </span>\n <span class=\"min-w-0 flex-1 text-foreground\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n </button>\n <div *ngIf=\"groupIndex === 0 && groupedItems.length > 1\" class=\"my-1 border-t border-border\"></div>\n </ng-container>\n\n <p *ngIf=\"filteredItems.length === 0\" class=\"m-0 py-6 text-center text-sm text-muted-foreground\">{{ emptyMessage }}</p>\n </div>\n </section>\n</div>\n" }]
56
56
  }], propDecorators: { open: [{
57
57
  type: Input
58
58
  }], hintLabel: [{
@@ -72,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
72
72
  }], openChange: [{
73
73
  type: Output
74
74
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY29tbWFuZC9jb21tYW5kLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21tYW5kL2NvbW1hbmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQWlCaEcsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQU1XLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixjQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLFlBQU8sR0FBRyxHQUFHLENBQUM7UUFDZCxnQkFBVyxHQUFHLDZCQUE2QixDQUFDO1FBQzVDLGlCQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFDbkMsVUFBSyxHQUFxQjtZQUNqQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDaEYsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQzlFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ3RHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ3ZGLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQzlGLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQzlGLENBQUM7UUFDTyxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbkQsVUFBSyxHQUFHLEVBQUUsQ0FBQztLQThCWjtJQTVCQyxJQUFJLGFBQWE7UUFDZixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO1FBQ2hELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztJQUN4RCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOztnSEFoRFUsbUJBQW1CO29HQUFuQixtQkFBbUIsNFJDakJoQyxreUZBdURBOzJGRHRDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsYUFBYSxtQkFFTix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBQZG1JY29uTmFtZSB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBkbUNvbW1hbmRJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZ3JvdXA/OiBzdHJpbmc7XG4gIGljb24/OiBQZG1JY29uTmFtZTtcbiAgc2hvcnRjdXQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRtLWNvbW1hbmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tbWFuZC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNvbW1hbmRDb21wb25lbnQge1xuICBASW5wdXQoKSBvcGVuID0gdHJ1ZTtcbiAgQElucHV0KCkgaGludExhYmVsID0gJ1ByZXNzJztcbiAgQElucHV0KCkgaGludEtleSA9ICdKJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnVHlwZSBhIGNvbW1hbmQgb3Igc2VhcmNoLi4uJztcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05vIHJlc3VsdHMgZm91bmQuJztcbiAgQElucHV0KCkgaXRlbXM6IFBkbUNvbW1hbmRJdGVtW10gPSBbXG4gICAgeyBsYWJlbDogJ0NhbGVuZGFyJywgdmFsdWU6ICdjYWxlbmRhcicsIGdyb3VwOiAnU3VnZ2VzdGlvbnMnLCBpY29uOiAnY2FsZW5kYXInIH0sXG4gICAgeyBsYWJlbDogJ1NlYXJjaCBlbW9qaScsIHZhbHVlOiAnZW1vamknLCBncm91cDogJ1N1Z2dlc3Rpb25zJywgaWNvbjogJ3NtaWxlJyB9LFxuICAgIHsgbGFiZWw6ICdDYWxjdWxhdG9yJywgdmFsdWU6ICdjYWxjdWxhdG9yJywgZ3JvdXA6ICdTdWdnZXN0aW9ucycsIGljb246ICdjYWxjdWxhdG9yJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICB7IGxhYmVsOiAnUHJvZmlsZScsIHZhbHVlOiAncHJvZmlsZScsIGdyb3VwOiAnU2V0dGluZ3MnLCBpY29uOiAndXNlcicsIHNob3J0Y3V0OiAn4oyYUCcgfSxcbiAgICB7IGxhYmVsOiAnQmlsbGluZycsIHZhbHVlOiAnYmlsbGluZycsIGdyb3VwOiAnU2V0dGluZ3MnLCBpY29uOiAnY3JlZGl0LWNhcmQnLCBzaG9ydGN1dDogJ+KMmEInIH0sXG4gICAgeyBsYWJlbDogJ1NldHRpbmdzJywgdmFsdWU6ICdzZXR0aW5ncycsIGdyb3VwOiAnU2V0dGluZ3MnLCBpY29uOiAnc2V0dGluZ3MnLCBzaG9ydGN1dDogJ+KMmFMnIH1cbiAgXTtcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG5cbiAgQE91dHB1dCgpIGl0ZW1TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcXVlcnkgPSAnJztcblxuICBnZXQgZmlsdGVyZWRJdGVtcygpOiBQZG1Db21tYW5kSXRlbVtdIHtcbiAgICBjb25zdCBxID0gdGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoIXEpIHJldHVybiB0aGlzLml0ZW1zO1xuICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpKTtcbiAgfVxuXG4gIGdldCBncm91cGVkSXRlbXMoKTogeyBuYW1lOiBzdHJpbmc7IGl0ZW1zOiBQZG1Db21tYW5kSXRlbVtdIH1bXSB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFBkbUNvbW1hbmRJdGVtW10+KCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZmlsdGVyZWRJdGVtcykge1xuICAgICAgY29uc3Qga2V5ID0gaXRlbS5ncm91cCB8fCAnJztcbiAgICAgIGNvbnN0IGFyciA9IG1hcC5nZXQoa2V5KSA/PyBbXTtcbiAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgbWFwLnNldChrZXksIGFycik7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKG1hcC5lbnRyaWVzKCkpLm1hcCgoW25hbWUsIGl0ZW1zXSkgPT4gKHsgbmFtZSwgaXRlbXMgfSkpO1xuICB9XG5cbiAgb25RdWVyeUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgfVxuXG4gIHRvZ2dsZU9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoIXRoaXMub3Blbik7XG4gIH1cblxuICBzZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXRlbVNlbGVjdC5lbWl0KHZhbHVlKTtcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJbJ3ctZnVsbCcsIGNsYXNzTmFtZV1cIj5cbiAgPGRpdiAqbmdJZj1cIiFvcGVuXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBoaW50TGFiZWwgfX08L3NwYW4+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtNSBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGdhcC0wLjUgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1tdXRlZCBweC0xLjVcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiXG4gICAgPlxuICAgICAgPHBkbS1pY29uIG5hbWU9XCJjb21tYW5kXCIgW3NpemVdPVwiMTJcIiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmRcIiBbZGVjb3JhdGl2ZV09XCJ0cnVlXCI+PC9wZG0taWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBoaW50S2V5IH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8c2VjdGlvblxuICAgICpuZ0lmPVwib3BlblwiXG4gICAgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBweC0zXCI+XG4gICAgICA8cGRtLWljb24gbmFtZT1cInNlYXJjaFwiIFtzaXplXT1cIjE2XCIgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCIgW2RlY29yYXRpdmVdPVwidHJ1ZVwiPjwvcGRtLWljb24+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbdmFsdWVdPVwicXVlcnlcIlxuICAgICAgICAoaW5wdXQpPVwib25RdWVyeUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJoLTEwIHctZnVsbCBiZy10cmFuc3BhcmVudCBweS0zIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIG91dGxpbmUtbm9uZSBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYXgtaC03MiBvdmVyZmxvdy15LWF1dG8gcC0xXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cGVkSXRlbXM7IGxldCBncm91cEluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLm5hbWVcIiBjbGFzcz1cInB4LTIgcHktMS41IHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgZ3JvdXAubmFtZSB9fTwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ3JvdXAuaXRlbXNcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHB5LTEuNSB0ZXh0LWxlZnQgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpiZy1hY2NlbnQgZm9jdXMtdmlzaWJsZTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICBpdGVtLmRpc2FibGVkID8gJ29wYWNpdHktNTAnIDogJycsXG4gICAgICAgICAgICBpdGVtLmxhYmVsID09PSAnQ2FsZW5kYXInID8gJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyA6ICcnXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChpdGVtLnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IGgtNCB3LTQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgPHBkbS1pY29uICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCIgW3NpemVdPVwiMTZcIiBbZGVjb3JhdGl2ZV09XCJ0cnVlXCI+PC9wZG0taWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtaW4tdy0wIGZsZXgtMSB0ZXh0LWZvcmVncm91bmRcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBpdGVtLnNob3J0Y3V0IH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwSW5kZXggPT09IDAgJiYgZ3JvdXBlZEl0ZW1zLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm15LTEgYm9yZGVyLXQgYm9yZGVyLWJvcmRlclwiPjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxwICpuZ0lmPVwiZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cIm0tMCBweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgZW1wdHlNZXNzYWdlIH19PC9wPlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L2Rpdj5cbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY29tbWFuZC9jb21tYW5kLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jb21tYW5kL2NvbW1hbmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQWlCaEcsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQU1XLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixjQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLFlBQU8sR0FBRyxHQUFHLENBQUM7UUFDZCxnQkFBVyxHQUFHLDZCQUE2QixDQUFDO1FBQzVDLGlCQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFDbkMsVUFBSyxHQUFxQjtZQUNqQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDaEYsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQzlFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ3RHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ3ZGLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQzlGLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQzlGLENBQUM7UUFDTyxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbkQsVUFBSyxHQUFHLEVBQUUsQ0FBQztLQThCWjtJQTVCQyxJQUFJLGFBQWE7UUFDZixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO1FBQ2hELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztJQUN4RCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOztnSEFoRFUsbUJBQW1CO29HQUFuQixtQkFBbUIsNFJDakJoQyxrekZBdURBOzJGRHRDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsYUFBYSxtQkFFTix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBQZG1JY29uTmFtZSB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBkbUNvbW1hbmRJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZ3JvdXA/OiBzdHJpbmc7XG4gIGljb24/OiBQZG1JY29uTmFtZTtcbiAgc2hvcnRjdXQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRtLWNvbW1hbmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tbWFuZC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNvbW1hbmRDb21wb25lbnQge1xuICBASW5wdXQoKSBvcGVuID0gdHJ1ZTtcbiAgQElucHV0KCkgaGludExhYmVsID0gJ1ByZXNzJztcbiAgQElucHV0KCkgaGludEtleSA9ICdKJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnVHlwZSBhIGNvbW1hbmQgb3Igc2VhcmNoLi4uJztcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05vIHJlc3VsdHMgZm91bmQuJztcbiAgQElucHV0KCkgaXRlbXM6IFBkbUNvbW1hbmRJdGVtW10gPSBbXG4gICAgeyBsYWJlbDogJ0NhbGVuZGFyJywgdmFsdWU6ICdjYWxlbmRhcicsIGdyb3VwOiAnU3VnZ2VzdGlvbnMnLCBpY29uOiAnY2FsZW5kYXInIH0sXG4gICAgeyBsYWJlbDogJ1NlYXJjaCBlbW9qaScsIHZhbHVlOiAnZW1vamknLCBncm91cDogJ1N1Z2dlc3Rpb25zJywgaWNvbjogJ3NtaWxlJyB9LFxuICAgIHsgbGFiZWw6ICdDYWxjdWxhdG9yJywgdmFsdWU6ICdjYWxjdWxhdG9yJywgZ3JvdXA6ICdTdWdnZXN0aW9ucycsIGljb246ICdjYWxjdWxhdG9yJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICB7IGxhYmVsOiAnUHJvZmlsZScsIHZhbHVlOiAncHJvZmlsZScsIGdyb3VwOiAnU2V0dGluZ3MnLCBpY29uOiAndXNlcicsIHNob3J0Y3V0OiAn4oyYUCcgfSxcbiAgICB7IGxhYmVsOiAnQmlsbGluZycsIHZhbHVlOiAnYmlsbGluZycsIGdyb3VwOiAnU2V0dGluZ3MnLCBpY29uOiAnY3JlZGl0LWNhcmQnLCBzaG9ydGN1dDogJ+KMmEInIH0sXG4gICAgeyBsYWJlbDogJ1NldHRpbmdzJywgdmFsdWU6ICdzZXR0aW5ncycsIGdyb3VwOiAnU2V0dGluZ3MnLCBpY29uOiAnc2V0dGluZ3MnLCBzaG9ydGN1dDogJ+KMmFMnIH1cbiAgXTtcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG5cbiAgQE91dHB1dCgpIGl0ZW1TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcXVlcnkgPSAnJztcblxuICBnZXQgZmlsdGVyZWRJdGVtcygpOiBQZG1Db21tYW5kSXRlbVtdIHtcbiAgICBjb25zdCBxID0gdGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoIXEpIHJldHVybiB0aGlzLml0ZW1zO1xuICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpKTtcbiAgfVxuXG4gIGdldCBncm91cGVkSXRlbXMoKTogeyBuYW1lOiBzdHJpbmc7IGl0ZW1zOiBQZG1Db21tYW5kSXRlbVtdIH1bXSB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFBkbUNvbW1hbmRJdGVtW10+KCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZmlsdGVyZWRJdGVtcykge1xuICAgICAgY29uc3Qga2V5ID0gaXRlbS5ncm91cCB8fCAnJztcbiAgICAgIGNvbnN0IGFyciA9IG1hcC5nZXQoa2V5KSA/PyBbXTtcbiAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgbWFwLnNldChrZXksIGFycik7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKG1hcC5lbnRyaWVzKCkpLm1hcCgoW25hbWUsIGl0ZW1zXSkgPT4gKHsgbmFtZSwgaXRlbXMgfSkpO1xuICB9XG5cbiAgb25RdWVyeUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgfVxuXG4gIHRvZ2dsZU9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoIXRoaXMub3Blbik7XG4gIH1cblxuICBzZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXRlbVNlbGVjdC5lbWl0KHZhbHVlKTtcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJbJ3ctZnVsbCcsIGNsYXNzTmFtZV1cIj5cbiAgPGRpdiAqbmdJZj1cIiFvcGVuXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBoaW50TGFiZWwgfX08L3NwYW4+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtNSBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGdhcC0wLjUgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1tdXRlZCBweC0xLjVcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiXG4gICAgPlxuICAgICAgPHBkbS1pY29uIG5hbWU9XCJjb21tYW5kXCIgW3NpemVdPVwiMTJcIiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmRcIiBbZGVjb3JhdGl2ZV09XCJ0cnVlXCI+PC9wZG0taWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBoaW50S2V5IH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8c2VjdGlvblxuICAgICpuZ0lmPVwib3BlblwiXG4gICAgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBweC0zXCI+XG4gICAgICA8cGRtLWljb24gbmFtZT1cInNlYXJjaFwiIFtzaXplXT1cIjE2XCIgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCIgW2RlY29yYXRpdmVdPVwidHJ1ZVwiPjwvcGRtLWljb24+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbdmFsdWVdPVwicXVlcnlcIlxuICAgICAgICAoaW5wdXQpPVwib25RdWVyeUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJoLTEwIHctZnVsbCBiZy10cmFuc3BhcmVudCBweS0zIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIG91dGxpbmUtbm9uZSBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYXgtaC1bNTB2aF0gb3ZlcmZsb3cteS1hdXRvIHAtMSBtZDptYXgtaC03MlwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBlZEl0ZW1zOyBsZXQgZ3JvdXBJbmRleCA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5uYW1lXCIgY2xhc3M9XCJweC0yIHB5LTEuNSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IGdyb3VwLm5hbWUgfX08L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwLml0ZW1zXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcHgtMiBweS0xLjUgdGV4dC1sZWZ0IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6YmctYWNjZW50IGZvY3VzLXZpc2libGU6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgaXRlbS5kaXNhYmxlZCA/ICdvcGFjaXR5LTUwJyA6ICcnLFxuICAgICAgICAgICAgaXRlbS5sYWJlbCA9PT0gJ0NhbGVuZGFyJyA/ICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcgOiAnJ1xuICAgICAgICAgIF1cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoaXRlbS52YWx1ZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmUtZmxleCBoLTQgdy00IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgIDxwZG0taWNvbiAqbmdJZj1cIml0ZW0uaWNvblwiIFtuYW1lXT1cIml0ZW0uaWNvblwiIFtzaXplXT1cIjE2XCIgW2RlY29yYXRpdmVdPVwidHJ1ZVwiPjwvcGRtLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWluLXctMCBmbGV4LTEgdGV4dC1mb3JlZ3JvdW5kXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgaXRlbS5zaG9ydGN1dCB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJncm91cEluZGV4ID09PSAwICYmIGdyb3VwZWRJdGVtcy5sZW5ndGggPiAxXCIgY2xhc3M9XCJteS0xIGJvcmRlci10IGJvcmRlci1ib3JkZXJcIj48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8cCAqbmdJZj1cImZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJtLTAgcHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IGVtcHR5TWVzc2FnZSB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=