@testgorilla/tgo-ui 3.11.3 → 3.11.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,6 +22,7 @@ export declare class BreadcrumbComponent implements AfterViewInit, OnDestroy {
22
22
  breadcrumbContainer: ElementRef<HTMLElement>;
23
23
  private resizeObserver?;
24
24
  private itemsInOverflow;
25
+ private previousLoadingState?;
25
26
  constructor();
26
27
  ngAfterViewInit(): void;
27
28
  ngOnDestroy(): void;
@@ -62,6 +62,27 @@ export declare class DatepickerComponent implements OnChanges, ControlValueAcces
62
62
  * @memberof DatepickerComponent
63
63
  */
64
64
  isRange: boolean;
65
+ /**
66
+ * Determines if on blur of calendar and no end date is selected, set the end date as the start date
67
+ *
68
+ * @type {boolean}
69
+ * @memberof DatepickerComponent
70
+ */
71
+ setSingleDateRangeOnBlur: boolean;
72
+ /**
73
+ * Determines if inner errors should be shown
74
+ *
75
+ * @type {boolean}
76
+ * @memberof DatepickerComponent
77
+ */
78
+ showInnerErrors: boolean;
79
+ /**
80
+ * Determines inner errors message
81
+ *
82
+ * @type {string}
83
+ * @memberof DatepickerComponent
84
+ */
85
+ innerErrorsMessage: string;
65
86
  /**
66
87
  * Determines if input is disabled
67
88
  *
@@ -204,11 +225,13 @@ export declare class DatepickerComponent implements OnChanges, ControlValueAcces
204
225
  registerOnChange(fn: any): void;
205
226
  registerOnTouched(fn: any): void;
206
227
  setDisabledState(isDisabled: boolean): void;
228
+ handleCloseRangePicker(): void;
229
+ fillSingleDateRange(isStart: boolean): void;
207
230
  dateRangeChange(): void;
208
231
  setMonthAndYear(normalizedMonthAndYear: any, datepicker: MatDatepicker<Date>): void;
209
232
  private setRange;
210
233
  onInput(event: Event): void;
211
234
  private setStyleVariable;
212
235
  static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerComponent, [{ optional: true; }, null, null, { optional: true; self: true; }, null]>;
213
- static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "ui-datepicker", never, { "label": { "alias": "label"; "required": false; }; "fieldName": { "alias": "fieldName"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hintMessage": { "alias": "hintMessage"; "required": false; }; "updateOnBlur": { "alias": "updateOnBlur"; "required": false; }; "showBottomContent": { "alias": "showBottomContent"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "monthPicker": { "alias": "monthPicker"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "hideBuiltInErrors": { "alias": "hideBuiltInErrors"; "required": false; }; "hideLabelInErrors": { "alias": "hideLabelInErrors"; "required": false; }; "preventUserInput": { "alias": "preventUserInput"; "required": false; }; "companyColor": { "alias": "companyColor"; "required": false; }; "browserTimezone": { "alias": "browserTimezone"; "required": false; }; }, { "changed": "changed"; }, never, never, false, never>;
236
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "ui-datepicker", never, { "label": { "alias": "label"; "required": false; }; "fieldName": { "alias": "fieldName"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "setSingleDateRangeOnBlur": { "alias": "setSingleDateRangeOnBlur"; "required": false; }; "showInnerErrors": { "alias": "showInnerErrors"; "required": false; }; "innerErrorsMessage": { "alias": "innerErrorsMessage"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hintMessage": { "alias": "hintMessage"; "required": false; }; "updateOnBlur": { "alias": "updateOnBlur"; "required": false; }; "showBottomContent": { "alias": "showBottomContent"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "monthPicker": { "alias": "monthPicker"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "hideBuiltInErrors": { "alias": "hideBuiltInErrors"; "required": false; }; "hideLabelInErrors": { "alias": "hideLabelInErrors"; "required": false; }; "preventUserInput": { "alias": "preventUserInput"; "required": false; }; "companyColor": { "alias": "companyColor"; "required": false; }; "browserTimezone": { "alias": "browserTimezone"; "required": false; }; }, { "changed": "changed"; }, never, never, false, never>;
214
237
  }
@@ -37,6 +37,14 @@ export class BreadcrumbComponent {
37
37
  setTimeout(() => this.calculateItemDistribution(), 0);
38
38
  }
39
39
  });
40
+ // React to loading state changes and setup ResizeObserver when loading changes from true to false
41
+ effect(() => {
42
+ const currentLoadingState = this.isLoading();
43
+ if (this.previousLoadingState === true && currentLoadingState === false) {
44
+ this.setupResizeObserver();
45
+ }
46
+ this.previousLoadingState = currentLoadingState;
47
+ });
40
48
  }
41
49
  ngAfterViewInit() {
42
50
  this.calculateItemDistribution();
@@ -166,11 +174,11 @@ export class BreadcrumbComponent {
166
174
  this.resizeObserver.observe(this.breadcrumbContainer.nativeElement);
167
175
  }
168
176
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
169
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BreadcrumbComponent, selector: "ui-breadcrumb", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, applicationTheme: { classPropertyName: "applicationTheme", publicName: "applicationTheme", isSignal: true, isRequired: false, transformFunction: null }, includeBackButton: { classPropertyName: "includeBackButton", publicName: "includeBackButton", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, numberOfLoadingItems: { classPropertyName: "numberOfLoadingItems", publicName: "numberOfLoadingItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectItem: "selectItem", backButtonClickEvent: "backButtonClickEvent" }, viewQueries: [{ propertyName: "breadcrumbContainer", first: true, predicate: ["breadcrumbContainer"], descendants: true }], ngImport: i0, template: "@if (!isLoading()) {\n <div class=\"breadcrumb\" [attr.theme]=\"applicationTheme()\" #breadcrumbContainer [class]=\"'breadcrumb-' + size()\">\n @if (includeBackButton()) {\n <ui-button\n [variant]=\"'icon-button'\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (buttonClickEvent)=\"backButtonClickEvent.emit($event)\"\n ></ui-button>\n }\n @if (isOverflowing()) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"overflowMenu\"\n [buttons]=\"overflowButtonItems()\"\n [matTooltip]=\"('COMMON.OPTIONS' | uiTranslate | async)!\"\n [matTooltipClass]=\"applicationTheme()\"\n [isDynamicMenu]=\"true\"\n (selectItem)=\"selectItem.emit($event)\"\n class=\"breadcrumb-overflow-menu\"\n ></ui-overflow-menu>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n @for (item of visibleItems(); track item.value) {\n @if (!$last) {\n <span\n class=\"breadcrumb-item\"\n tabindex=\"0\"\n [matTooltip]=\"item.label.length > 10 ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [attr.aria-label]=\"item.label\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label | truncate: 12 : '...' }}\n </span>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n } @else {\n <strong\n class=\"breadcrumb-item-active\"\n tabindex=\"0\"\n [matTooltip]=\"shouldTruncateLastItem() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [class.breadcrumb-item-active-truncated]=\"shouldTruncateLastItem()\"\n [attr.aria-label]=\"item.label\"\n [attr.aria-current]=\"'page'\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label }}\n </strong>\n }\n }\n </div>\n} @else {\n <div class=\"breadcrumb\">\n @for (i of loadingItems(); track $index) {\n <ui-skeleton count=\"1\" [theme]=\"{ width: '160px', margin: '10px 0 0' }\"></ui-skeleton>\n @if ($index !== numberOfLoadingItems() - 1) {\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n }\n </div>\n}\n<ng-template #overflowMenu>\n <div class=\"breadcrumb-item breadcrumb-overflow\" [class]=\"'breadcrumb-' + size()\">...</div>\n</ng-template>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.breadcrumb{display:flex;align-items:center;gap:4px;color:#666}.breadcrumb .breadcrumb-item{text-decoration:underline;cursor:pointer;transition:color .15s ease,transform .1s ease;white-space:nowrap}.breadcrumb .breadcrumb-item:hover{color:#919191}.breadcrumb .breadcrumb-item:active{transform:scale(.98);color:#919191}.breadcrumb .breadcrumb-item:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}.breadcrumb.breadcrumb-small{font-size:14px;line-height:22px}.breadcrumb.breadcrumb-medium{font-size:20px;line-height:26px}.breadcrumb.breadcrumb-large{font-size:32px;line-height:48px}.breadcrumb.breadcrumb-large .breadcrumb-item:focus-visible{outline-offset:8px}.breadcrumb.breadcrumb-large .breadcrumb-item-active:focus-visible{outline-offset:8px}.breadcrumb .breadcrumb-item-active{color:#242424;white-space:nowrap}.breadcrumb .breadcrumb-item-active.breadcrumb-item-active-truncated{text-overflow:ellipsis;overflow:hidden}.breadcrumb .breadcrumb-item-active:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}.breadcrumb .breadcrumb-overflow-menu ::ng-deep .overflow-menu-container .mat-mdc-menu-trigger{min-width:0}.breadcrumb-overflow{cursor:pointer;color:#666}.breadcrumb-overflow:active{transform:scale(.98);color:#919191}.breadcrumb-overflow.breadcrumb-small{font-size:14px;line-height:22px}.breadcrumb-overflow.breadcrumb-medium{font-size:20px;line-height:26px}.breadcrumb-overflow.breadcrumb-large{font-size:32px;line-height:48px}\n"], dependencies: [{ kind: "component", type: i1.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i3.OverflowMenuComponent, selector: "ui-overflow-menu", inputs: ["buttons", "iconTrigger", "menuLabel", "applicationTheme", "ariaLabel", "ariaRequired", "describedby", "contentTemplateRef", "buttonVariant", "buttonSize", "menuConfig", "isDynamicMenu"], outputs: ["selectItem", "menuOpened", "menuClosed"] }, { kind: "component", type: i4.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "component", type: i5.SkeletonComponent, selector: "ui-skeleton", inputs: ["count", "theme", "appearance", "isAiTheme", "applicationTheme"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i8.TruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BreadcrumbComponent, selector: "ui-breadcrumb", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, applicationTheme: { classPropertyName: "applicationTheme", publicName: "applicationTheme", isSignal: true, isRequired: false, transformFunction: null }, includeBackButton: { classPropertyName: "includeBackButton", publicName: "includeBackButton", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, numberOfLoadingItems: { classPropertyName: "numberOfLoadingItems", publicName: "numberOfLoadingItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectItem: "selectItem", backButtonClickEvent: "backButtonClickEvent" }, viewQueries: [{ propertyName: "breadcrumbContainer", first: true, predicate: ["breadcrumbContainer"], descendants: true }], ngImport: i0, template: "@if (!isLoading()) {\n <div class=\"breadcrumb\" [attr.theme]=\"applicationTheme()\" #breadcrumbContainer [class]=\"'breadcrumb-' + size()\">\n @if (includeBackButton()) {\n <ui-button\n [variant]=\"'icon-button'\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (buttonClickEvent)=\"backButtonClickEvent.emit($event)\"\n ></ui-button>\n }\n @if (isOverflowing()) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"overflowMenu\"\n [buttons]=\"overflowButtonItems()\"\n [matTooltip]=\"('COMMON.OPTIONS' | uiTranslate | async)!\"\n [matTooltipClass]=\"applicationTheme()\"\n [isDynamicMenu]=\"true\"\n (selectItem)=\"selectItem.emit($event)\"\n class=\"breadcrumb-overflow-menu\"\n ></ui-overflow-menu>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n @for (item of visibleItems(); track item.value) {\n @if (!$last) {\n <span\n class=\"breadcrumb-item\"\n tabindex=\"0\"\n [matTooltip]=\"item.label.length > 10 ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [attr.aria-label]=\"item.label\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label | truncate: 12 : '...' }}\n </span>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n } @else {\n <strong\n class=\"breadcrumb-item-active\"\n tabindex=\"0\"\n [matTooltip]=\"shouldTruncateLastItem() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [class.breadcrumb-item-active-truncated]=\"shouldTruncateLastItem()\"\n [attr.aria-label]=\"item.label\"\n [attr.aria-current]=\"'page'\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label }}\n </strong>\n }\n }\n </div>\n} @else {\n <div class=\"breadcrumb\">\n @for (i of loadingItems(); track $index) {\n <ui-skeleton count=\"1\" [theme]=\"{ width: '160px', margin: '10px 0 0' }\"></ui-skeleton>\n @if ($index !== numberOfLoadingItems() - 1) {\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n }\n </div>\n}\n<ng-template #overflowMenu>\n <div class=\"breadcrumb-item breadcrumb-overflow\" [class]=\"'breadcrumb-' + size()\">...</div>\n</ng-template>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host{min-width:0}:host .breadcrumb{display:flex;align-items:center;gap:4px;color:#666}:host .breadcrumb .breadcrumb-item{text-decoration:underline;cursor:pointer;transition:color .15s ease,transform .1s ease;white-space:nowrap}:host .breadcrumb .breadcrumb-item:hover{color:#919191}:host .breadcrumb .breadcrumb-item:active{transform:scale(.98);color:#919191}:host .breadcrumb .breadcrumb-item:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}:host .breadcrumb.breadcrumb-small{font-size:14px;line-height:22px}:host .breadcrumb.breadcrumb-medium{font-size:20px;line-height:26px}:host .breadcrumb.breadcrumb-large{font-size:32px;line-height:48px}:host .breadcrumb.breadcrumb-large .breadcrumb-item:focus-visible{outline-offset:8px}:host .breadcrumb.breadcrumb-large .breadcrumb-item-active:focus-visible{outline-offset:8px}:host .breadcrumb .breadcrumb-item-active{color:#242424;white-space:nowrap}:host .breadcrumb .breadcrumb-item-active.breadcrumb-item-active-truncated{text-overflow:ellipsis;overflow:hidden}:host .breadcrumb .breadcrumb-item-active:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}:host .breadcrumb .breadcrumb-overflow-menu ::ng-deep .overflow-menu-container .mat-mdc-menu-trigger{min-width:0}:host .breadcrumb-overflow{cursor:pointer;color:#666}:host .breadcrumb-overflow:active{transform:scale(.98);color:#919191}:host .breadcrumb-overflow.breadcrumb-small{font-size:14px;line-height:22px}:host .breadcrumb-overflow.breadcrumb-medium{font-size:20px;line-height:26px}:host .breadcrumb-overflow.breadcrumb-large{font-size:32px;line-height:48px}\n"], dependencies: [{ kind: "component", type: i1.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i3.OverflowMenuComponent, selector: "ui-overflow-menu", inputs: ["buttons", "iconTrigger", "menuLabel", "applicationTheme", "ariaLabel", "ariaRequired", "describedby", "contentTemplateRef", "buttonVariant", "buttonSize", "menuConfig", "isDynamicMenu"], outputs: ["selectItem", "menuOpened", "menuClosed"] }, { kind: "component", type: i4.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "component", type: i5.SkeletonComponent, selector: "ui-skeleton", inputs: ["count", "theme", "appearance", "isAiTheme", "applicationTheme"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i8.TruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
170
178
  }
171
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BreadcrumbComponent, decorators: [{
172
180
  type: Component,
173
- args: [{ selector: 'ui-breadcrumb', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isLoading()) {\n <div class=\"breadcrumb\" [attr.theme]=\"applicationTheme()\" #breadcrumbContainer [class]=\"'breadcrumb-' + size()\">\n @if (includeBackButton()) {\n <ui-button\n [variant]=\"'icon-button'\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (buttonClickEvent)=\"backButtonClickEvent.emit($event)\"\n ></ui-button>\n }\n @if (isOverflowing()) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"overflowMenu\"\n [buttons]=\"overflowButtonItems()\"\n [matTooltip]=\"('COMMON.OPTIONS' | uiTranslate | async)!\"\n [matTooltipClass]=\"applicationTheme()\"\n [isDynamicMenu]=\"true\"\n (selectItem)=\"selectItem.emit($event)\"\n class=\"breadcrumb-overflow-menu\"\n ></ui-overflow-menu>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n @for (item of visibleItems(); track item.value) {\n @if (!$last) {\n <span\n class=\"breadcrumb-item\"\n tabindex=\"0\"\n [matTooltip]=\"item.label.length > 10 ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [attr.aria-label]=\"item.label\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label | truncate: 12 : '...' }}\n </span>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n } @else {\n <strong\n class=\"breadcrumb-item-active\"\n tabindex=\"0\"\n [matTooltip]=\"shouldTruncateLastItem() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [class.breadcrumb-item-active-truncated]=\"shouldTruncateLastItem()\"\n [attr.aria-label]=\"item.label\"\n [attr.aria-current]=\"'page'\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label }}\n </strong>\n }\n }\n </div>\n} @else {\n <div class=\"breadcrumb\">\n @for (i of loadingItems(); track $index) {\n <ui-skeleton count=\"1\" [theme]=\"{ width: '160px', margin: '10px 0 0' }\"></ui-skeleton>\n @if ($index !== numberOfLoadingItems() - 1) {\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n }\n </div>\n}\n<ng-template #overflowMenu>\n <div class=\"breadcrumb-item breadcrumb-overflow\" [class]=\"'breadcrumb-' + size()\">...</div>\n</ng-template>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.breadcrumb{display:flex;align-items:center;gap:4px;color:#666}.breadcrumb .breadcrumb-item{text-decoration:underline;cursor:pointer;transition:color .15s ease,transform .1s ease;white-space:nowrap}.breadcrumb .breadcrumb-item:hover{color:#919191}.breadcrumb .breadcrumb-item:active{transform:scale(.98);color:#919191}.breadcrumb .breadcrumb-item:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}.breadcrumb.breadcrumb-small{font-size:14px;line-height:22px}.breadcrumb.breadcrumb-medium{font-size:20px;line-height:26px}.breadcrumb.breadcrumb-large{font-size:32px;line-height:48px}.breadcrumb.breadcrumb-large .breadcrumb-item:focus-visible{outline-offset:8px}.breadcrumb.breadcrumb-large .breadcrumb-item-active:focus-visible{outline-offset:8px}.breadcrumb .breadcrumb-item-active{color:#242424;white-space:nowrap}.breadcrumb .breadcrumb-item-active.breadcrumb-item-active-truncated{text-overflow:ellipsis;overflow:hidden}.breadcrumb .breadcrumb-item-active:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}.breadcrumb .breadcrumb-overflow-menu ::ng-deep .overflow-menu-container .mat-mdc-menu-trigger{min-width:0}.breadcrumb-overflow{cursor:pointer;color:#666}.breadcrumb-overflow:active{transform:scale(.98);color:#919191}.breadcrumb-overflow.breadcrumb-small{font-size:14px;line-height:22px}.breadcrumb-overflow.breadcrumb-medium{font-size:20px;line-height:26px}.breadcrumb-overflow.breadcrumb-large{font-size:32px;line-height:48px}\n"] }]
181
+ args: [{ selector: 'ui-breadcrumb', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isLoading()) {\n <div class=\"breadcrumb\" [attr.theme]=\"applicationTheme()\" #breadcrumbContainer [class]=\"'breadcrumb-' + size()\">\n @if (includeBackButton()) {\n <ui-button\n [variant]=\"'icon-button'\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (buttonClickEvent)=\"backButtonClickEvent.emit($event)\"\n ></ui-button>\n }\n @if (isOverflowing()) {\n <ui-overflow-menu\n [applicationTheme]=\"applicationTheme()\"\n [contentTemplateRef]=\"overflowMenu\"\n [buttons]=\"overflowButtonItems()\"\n [matTooltip]=\"('COMMON.OPTIONS' | uiTranslate | async)!\"\n [matTooltipClass]=\"applicationTheme()\"\n [isDynamicMenu]=\"true\"\n (selectItem)=\"selectItem.emit($event)\"\n class=\"breadcrumb-overflow-menu\"\n ></ui-overflow-menu>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n @for (item of visibleItems(); track item.value) {\n @if (!$last) {\n <span\n class=\"breadcrumb-item\"\n tabindex=\"0\"\n [matTooltip]=\"item.label.length > 10 ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [attr.aria-label]=\"item.label\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label | truncate: 12 : '...' }}\n </span>\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n } @else {\n <strong\n class=\"breadcrumb-item-active\"\n tabindex=\"0\"\n [matTooltip]=\"shouldTruncateLastItem() ? item.label : ''\"\n [matTooltipClass]=\"applicationTheme()\"\n [class.breadcrumb-item-active-truncated]=\"shouldTruncateLastItem()\"\n [attr.aria-label]=\"item.label\"\n [attr.aria-current]=\"'page'\"\n (click)=\"selectItem.emit(item.value)\"\n (keydown.enter)=\"selectItem.emit(item.value)\"\n >\n {{ item.label }}\n </strong>\n }\n }\n </div>\n} @else {\n <div class=\"breadcrumb\">\n @for (i of loadingItems(); track $index) {\n <ui-skeleton count=\"1\" [theme]=\"{ width: '160px', margin: '10px 0 0' }\"></ui-skeleton>\n @if ($index !== numberOfLoadingItems() - 1) {\n <ui-icon name=\"Arrow-chevron-right-filled\" [applicationTheme]=\"applicationTheme()\" color=\"gray\"></ui-icon>\n }\n }\n </div>\n}\n<ng-template #overflowMenu>\n <div class=\"breadcrumb-item breadcrumb-overflow\" [class]=\"'breadcrumb-' + size()\">...</div>\n</ng-template>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host{min-width:0}:host .breadcrumb{display:flex;align-items:center;gap:4px;color:#666}:host .breadcrumb .breadcrumb-item{text-decoration:underline;cursor:pointer;transition:color .15s ease,transform .1s ease;white-space:nowrap}:host .breadcrumb .breadcrumb-item:hover{color:#919191}:host .breadcrumb .breadcrumb-item:active{transform:scale(.98);color:#919191}:host .breadcrumb .breadcrumb-item:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}:host .breadcrumb.breadcrumb-small{font-size:14px;line-height:22px}:host .breadcrumb.breadcrumb-medium{font-size:20px;line-height:26px}:host .breadcrumb.breadcrumb-large{font-size:32px;line-height:48px}:host .breadcrumb.breadcrumb-large .breadcrumb-item:focus-visible{outline-offset:8px}:host .breadcrumb.breadcrumb-large .breadcrumb-item-active:focus-visible{outline-offset:8px}:host .breadcrumb .breadcrumb-item-active{color:#242424;white-space:nowrap}:host .breadcrumb .breadcrumb-item-active.breadcrumb-item-active-truncated{text-overflow:ellipsis;overflow:hidden}:host .breadcrumb .breadcrumb-item-active:focus-visible{outline:2px solid #242424;outline-offset:4px;border-radius:1px}:host .breadcrumb .breadcrumb-overflow-menu ::ng-deep .overflow-menu-container .mat-mdc-menu-trigger{min-width:0}:host .breadcrumb-overflow{cursor:pointer;color:#666}:host .breadcrumb-overflow:active{transform:scale(.98);color:#919191}:host .breadcrumb-overflow.breadcrumb-small{font-size:14px;line-height:22px}:host .breadcrumb-overflow.breadcrumb-medium{font-size:20px;line-height:26px}:host .breadcrumb-overflow.breadcrumb-large{font-size:32px;line-height:48px}\n"] }]
174
182
  }], ctorParameters: () => [], propDecorators: { selectItem: [{
175
183
  type: Output
176
184
  }], backButtonClickEvent: [{
@@ -179,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
179
187
  type: ViewChild,
180
188
  args: ['breadcrumbContainer']
181
189
  }] } });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Z28tY2Fub3B5LXVpL2NvbXBvbmVudHMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sdUJBQXVCLEdBQ3hCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBWXZCLE1BQU0sT0FBTyxtQkFBbUI7SUEyQjlCO1FBMUJBLFNBQUksR0FBRyxLQUFLLENBQWlCLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLFVBQUssR0FBRyxLQUFLLENBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLHFCQUFnQixHQUFHLEtBQUssQ0FBbUIsT0FBTyxDQUFDLENBQUM7UUFDcEQsc0JBQWlCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzFDLGNBQVMsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEMseUJBQW9CLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlCLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5RCx5QkFBb0IsR0FBd0IsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUVoRixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLGtCQUFhLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZD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Q3BDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzdDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEUsQ0FBQzsrR0F2TFUsbUJBQW1CO21HQUFuQixtQkFBbUIsNmxDQ3hCaEMsMHVGQW1FQTs7NEZEM0NhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU07d0RBU3JDLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQWMyQixtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgY29tcHV0ZWQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBlZmZlY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyZWFkY3J1bWJJdGVtLCBCcmVhZGNydW1iU2l6ZSB9IGZyb20gJy4vYnJlYWRjcnVtYi5tb2RlbCc7XG5pbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblRoZW1lIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uLXRoZW1lLm1vZGVsJztcbmltcG9ydCB7IE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlIH0gZnJvbSAnLi4vb3ZlcmZsb3ctbWVudS9vdmVyZmxvdy1tZW51Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHNpemUgPSBpbnB1dDxCcmVhZGNydW1iU2l6ZT4oJ2xhcmdlJyk7XG4gIGl0ZW1zID0gaW5wdXQ8QnJlYWRjcnVtYkl0ZW1bXT4oW10pO1xuICBhcHBsaWNhdGlvblRoZW1lID0gaW5wdXQ8QXBwbGljYXRpb25UaGVtZT4oJ2xpZ2h0Jyk7XG4gIGluY2x1ZGVCYWNrQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIG51bWJlck9mTG9hZGluZ0l0ZW1zID0gaW5wdXQ8bnVtYmVyPigzKTtcbiAgQE91dHB1dCgpIHNlbGVjdEl0ZW06IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBiYWNrQnV0dG9uQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgbG9hZGluZ0l0ZW1zID0gY29tcHV0ZWQoKCkgPT4gQXJyYXkodGhpcy5udW1iZXJPZkxvYWRpbmdJdGVtcygpKSk7XG4gIGlzT3ZlcmZsb3dpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICB2aXNpYmxlSXRlbXMgPSBzaWduYWw8QnJlYWRjcnVtYkl0ZW1bXT4oW10pO1xuICBvdmVyZmxvd0l0ZW1zID0gc2lnbmFsPEJyZWFkY3J1bWJJdGVtW10+KFtdKTtcbiAgb3ZlcmZsb3dCdXR0b25JdGVtcyA9IGNvbXB1dGVkPE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlW10+KCgpID0+XG4gICAgdGhpcy5vdmVyZmxvd0l0ZW1zKCkubWFwKGl0ZW0gPT4gKHtcbiAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgfSkpXG4gICk7XG4gIHNob3VsZFRydW5jYXRlTGFzdEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBWaWV3Q2hpbGQoJ2JyZWFkY3J1bWJDb250YWluZXInKSBicmVhZGNydW1iQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIGl0ZW1zSW5PdmVyZmxvdyA9IDA7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gUmVhY3QgdG8gaXRlbXMgY2hhbmdlcyBhbmQgcmVjYWxjdWxhdGUgb3ZlcmZsb3dcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5pdGVtcygpO1xuICAgICAgdGhpcy5pdGVtc0luT3ZlcmZsb3cgPSAwO1xuICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAvLyBXYWl0IGZvciBET00gdG8gcmVuZGVyIG5ldyBpdGVtcyBiZWZvcmUgY2FsY3VsYXRpbmcgb3ZlcmZsb3dcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNhbGN1bGF0ZUl0ZW1EaXN0cmlidXRpb24oKSwgMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVJdGVtRGlzdHJpYnV0aW9uKCk7XG4gICAgdGhpcy5zZXR1cFJlc2l6ZU9ic2VydmVyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUl0ZW1EaXN0cmlidXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmJyZWFkY3J1bWJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5pdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNldFRvQWxsVmlzaWJsZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmJyZWFkY3J1bWJDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcblxuICAgIGlmIChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpIHtcbiAgICAgIHRoaXMuaGFuZGxlT3ZlcmZsb3coKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXNJbk92ZXJmbG93ID4gMCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGJyaW5nIGl0ZW1zIGJhY2sgZnJvbSBvdmVyZmxvd1xuICAgICAgdGhpcy50cnlSZWR1Y2VPdmVyZmxvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0VG9BbGxWaXNpYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPdmVyZmxvdygpIHtcbiAgICB0aGlzLml0ZW1zSW5PdmVyZmxvdyA9IE1hdGgubWluKHRoaXMuaXRlbXNJbk92ZXJmbG93ICsgMSwgdGhpcy5pdGVtcygpLmxlbmd0aCAtIDEpO1xuXG4gICAgdGhpcy51cGRhdGVJdGVtQXJyYXlzKCk7XG4gICAgdGhpcy5pc092ZXJmbG93aW5nLnNldCh0cnVlKTtcblxuICAgIC8vIFdhaXQgZm9yIERPTSB0byByZW5kZXIgdGhlIHVwZGF0ZWQgdGVtcGxhdGUgYWZ0ZXIgaGlkaW5nIGl0ZW1zXG4gICAgLy8gV2UgbmVlZCB0byBtZWFzdXJlIGRpbWVuc2lvbnMgQUZURVIgdGhlIERPTSBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGhlIG5ldyB2aXNpYmxlIGl0ZW1zXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5icmVhZGNydW1iQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmJyZWFkY3J1bWJDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc3RpbGxPdmVyZmxvd2luZyA9IGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgICAgIGlmIChzdGlsbE92ZXJmbG93aW5nICYmIHRoaXMuaXRlbXNJbk92ZXJmbG93IDwgdGhpcy5pdGVtcygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZU92ZXJmbG93KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RpbGxPdmVyZmxvd2luZyAmJiB0aGlzLml0ZW1zSW5PdmVyZmxvdyA9PT0gdGhpcy5pdGVtcygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnNob3VsZFRydW5jYXRlTGFzdEl0ZW0uc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHRyeVJlZHVjZU92ZXJmbG93KCkge1xuICAgIGNvbnN0IHRlc3RJdGVtc0luT3ZlcmZsb3cgPSB0aGlzLml0ZW1zSW5PdmVyZmxvdyAtIDE7XG5cbiAgICBpZiAodGVzdEl0ZW1zSW5PdmVyZmxvdyA+PSAwKSB7XG4gICAgICBjb25zdCB0ZXN0VmlzaWJsZUl0ZW1zID0gdGhpcy5pdGVtcygpLnNsaWNlKHRlc3RJdGVtc0luT3ZlcmZsb3cpO1xuICAgICAgY29uc3QgdGVzdE92ZXJmbG93SXRlbXMgPSB0ZXN0SXRlbXNJbk92ZXJmbG93ID4gMCA/IHRoaXMuaXRlbXMoKS5zbGljZSgwLCB0ZXN0SXRlbXNJbk92ZXJmbG93KSA6IFtdO1xuXG4gICAgICB0aGlzLnZpc2libGVJdGVtcy5zZXQodGVzdFZpc2libGVJdGVtcyk7XG4gICAgICB0aGlzLm92ZXJmbG93SXRlbXMuc2V0KHRlc3RPdmVyZmxvd0l0ZW1zKTtcblxuICAgICAgLy8gQWx3YXlzIHJlc2V0IHRydW5jYXRpb24gd2hlbiB0cnlpbmcgdG8gcmVkdWNlIG92ZXJmbG93XG4gICAgICB0aGlzLnNob3VsZFRydW5jYXRlTGFzdEl0ZW0uc2V0KGZhbHNlKTtcblxuICAgICAgLy8gV2FpdCBmb3IgRE9NIHRvIHJlbmRlciB3aXRoIHRlc3QgY29uZmlndXJhdGlvbiBiZWZvcmUgbWVhc3VyaW5nXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmJyZWFkY3J1bWJDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICBjb25zdCBoYXNPdmVyZmxvdyA9IGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgICAgICAgaWYgKCFoYXNPdmVyZmxvdykge1xuICAgICAgICAgICAgLy8gSXQgZml0cyEgVXBkYXRlIHRoZSBjb3VudGVyXG4gICAgICAgICAgICB0aGlzLml0ZW1zSW5PdmVyZmxvdyA9IHRlc3RJdGVtc0luT3ZlcmZsb3c7XG4gICAgICAgICAgICB0aGlzLmlzT3ZlcmZsb3dpbmcuc2V0KHRoaXMuaXRlbXNJbk92ZXJmbG93ID4gMCk7XG5cbiAgICAgICAgICAgIC8vIFRyeSB0byByZWR1Y2UgbW9yZSBpZiB0aGVyZSBhcmUgc3RpbGwgaXRlbXMgaW4gb3ZlcmZsb3dcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zSW5PdmVyZmxvdyA+IDApIHtcbiAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgbmV4dCByZWR1Y3Rpb24gYXR0ZW1wdCBhZnRlciBjdXJyZW50IHJlbmRlciBjeWNsZVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJ5UmVkdWNlT3ZlcmZsb3coKSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERvZXNuJ3QgZml0LCByZXZlcnQgdG8gcHJldmlvdXMgc3RhdGVcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbUFycmF5cygpO1xuXG4gICAgICAgICAgICAvLyBXYWl0IGZvciBET00gdG8gcmVuZGVyIHJldmVydGVkIHN0YXRlIGJlZm9yZSBjaGVja2luZyB0cnVuY2F0aW9uXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmJyZWFkY3J1bWJDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGlsbE92ZXJmbG93aW5nID0gY29udGFpbmVyRWxlbWVudC5zY3JvbGxXaWR0aCA+IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RpbGxPdmVyZmxvd2luZyAmJiB0aGlzLml0ZW1zSW5PdmVyZmxvdyA9PT0gdGhpcy5pdGVtcygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkVHJ1bmNhdGVMYXN0SXRlbS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0ZXN0SXRlbXNJbk92ZXJmbG93IDwgMCwgbWVhbnMgd2UncmUgdHJ5aW5nIHRvIHNob3cgYWxsIGl0ZW1zXG4gICAgICB0aGlzLnJlc2V0VG9BbGxWaXNpYmxlKCk7XG5cbiAgICAgIC8vIFdhaXQgZm9yIERPTSB0byByZW5kZXIgYWxsIGl0ZW1zIGJlZm9yZSBtZWFzdXJpbmcgb3ZlcmZsb3dcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5icmVhZGNydW1iQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIGNvbnN0IGhhc092ZXJmbG93ID0gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICAgICAgICBpZiAoaGFzT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgIC8vIFN0aWxsIG92ZXJmbG93cyB3aXRoIGFsbCBpdGVtcywgbmVlZCB0byBnbyBiYWNrIHRvIG92ZXJmbG93IHN0YXRlXG4gICAgICAgICAgICB0aGlzLml0ZW1zSW5PdmVyZmxvdyA9IDE7IC8vIFN0YXJ0IHdpdGggbWluaW1hbCBvdmVyZmxvd1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVPdmVyZmxvdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJdGVtQXJyYXlzKCkge1xuICAgIGlmICh0aGlzLml0ZW1zSW5PdmVyZmxvdyA+IDApIHtcbiAgICAgIHRoaXMub3ZlcmZsb3dJdGVtcy5zZXQodGhpcy5pdGVtcygpLnNsaWNlKDAsIHRoaXMuaXRlbXNJbk92ZXJmbG93KSk7XG4gICAgICB0aGlzLnZpc2libGVJdGVtcy5zZXQodGhpcy5pdGVtcygpLnNsaWNlKHRoaXMuaXRlbXNJbk92ZXJmbG93KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRUb0FsbFZpc2libGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VG9BbGxWaXNpYmxlKCkge1xuICAgIHRoaXMudmlzaWJsZUl0ZW1zLnNldCh0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMub3ZlcmZsb3dJdGVtcy5zZXQoW10pO1xuICAgIHRoaXMuaXNPdmVyZmxvd2luZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvdWxkVHJ1bmNhdGVMYXN0SXRlbS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXRlbXNJbk92ZXJmbG93ID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNpemVPYnNlcnZlcigpIHtcbiAgICBpZiAoIXRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtRGlzdHJpYnV0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5icmVhZGNydW1iQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iLCJAaWYgKCFpc0xvYWRpbmcoKSkge1xuICA8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYlwiIFthdHRyLnRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWUoKVwiICNicmVhZGNydW1iQ29udGFpbmVyIFtjbGFzc109XCInYnJlYWRjcnVtYi0nICsgc2l6ZSgpXCI+XG4gICAgQGlmIChpbmNsdWRlQmFja0J1dHRvbigpKSB7XG4gICAgICA8dWktYnV0dG9uXG4gICAgICAgIFt2YXJpYW50XT1cIidpY29uLWJ1dHRvbidcIlxuICAgICAgICBbdG9vbHRpcF09XCIoJ0NPTU1PTi5CQUNLJyB8IHVpVHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgIFtpY29uTmFtZV09XCInQXJyb3ctY2hldnJvbi1sZWZ0LWZpbGxlZCdcIlxuICAgICAgICAoYnV0dG9uQ2xpY2tFdmVudCk9XCJiYWNrQnV0dG9uQ2xpY2tFdmVudC5lbWl0KCRldmVudClcIlxuICAgICAgPjwvdWktYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKGlzT3ZlcmZsb3dpbmcoKSkge1xuICAgICAgPHVpLW92ZXJmbG93LW1lbnVcbiAgICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZSgpXCJcbiAgICAgICAgW2NvbnRlbnRUZW1wbGF0ZVJlZl09XCJvdmVyZmxvd01lbnVcIlxuICAgICAgICBbYnV0dG9uc109XCJvdmVyZmxvd0J1dHRvbkl0ZW1zKClcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCIoJ0NPTU1PTi5PUFRJT05TJyB8IHVpVHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgIFttYXRUb29sdGlwQ2xhc3NdPVwiYXBwbGljYXRpb25UaGVtZSgpXCJcbiAgICAgICAgW2lzRHluYW1pY01lbnVdPVwidHJ1ZVwiXG4gICAgICAgIChzZWxlY3RJdGVtKT1cInNlbGVjdEl0ZW0uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJicmVhZGNydW1iLW92ZXJmbG93LW1lbnVcIlxuICAgICAgPjwvdWktb3ZlcmZsb3ctbWVudT5cbiAgICAgIDx1aS1pY29uIG5hbWU9XCJBcnJvdy1jaGV2cm9uLXJpZ2h0LWZpbGxlZFwiIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWUoKVwiIGNvbG9yPVwiZ3JheVwiPjwvdWktaWNvbj5cbiAgICB9XG4gICAgQGZvciAoaXRlbSBvZiB2aXNpYmxlSXRlbXMoKTsgdHJhY2sgaXRlbS52YWx1ZSkge1xuICAgICAgQGlmICghJGxhc3QpIHtcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImJyZWFkY3J1bWItaXRlbVwiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpdGVtLmxhYmVsLmxlbmd0aCA+IDEwID8gaXRlbS5sYWJlbCA6ICcnXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cImFwcGxpY2F0aW9uVGhlbWUoKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbS5lbWl0KGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWxlY3RJdGVtLmVtaXQoaXRlbS52YWx1ZSlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaXRlbS5sYWJlbCB8IHRydW5jYXRlOiAxMiA6ICcuLi4nIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHVpLWljb24gbmFtZT1cIkFycm93LWNoZXZyb24tcmlnaHQtZmlsbGVkXCIgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZSgpXCIgY29sb3I9XCJncmF5XCI+PC91aS1pY29uPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxzdHJvbmdcbiAgICAgICAgICBjbGFzcz1cImJyZWFkY3J1bWItaXRlbS1hY3RpdmVcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwic2hvdWxkVHJ1bmNhdGVMYXN0SXRlbSgpID8gaXRlbS5sYWJlbCA6ICcnXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cImFwcGxpY2F0aW9uVGhlbWUoKVwiXG4gICAgICAgICAgW2NsYXNzLmJyZWFkY3J1bWItaXRlbS1hY3RpdmUtdHJ1bmNhdGVkXT1cInNob3VsZFRydW5jYXRlTGFzdEl0ZW0oKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiJ3BhZ2UnXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbS5lbWl0KGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWxlY3RJdGVtLmVtaXQoaXRlbS52YWx1ZSlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICA8L3N0cm9uZz5cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXYgY2xhc3M9XCJicmVhZGNydW1iXCI+XG4gICAgQGZvciAoaSBvZiBsb2FkaW5nSXRlbXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8dWktc2tlbGV0b24gY291bnQ9XCIxXCIgW3RoZW1lXT1cInsgd2lkdGg6ICcxNjBweCcsIG1hcmdpbjogJzEwcHggMCAwJyB9XCI+PC91aS1za2VsZXRvbj5cbiAgICAgIEBpZiAoJGluZGV4ICE9PSBudW1iZXJPZkxvYWRpbmdJdGVtcygpIC0gMSkge1xuICAgICAgICA8dWktaWNvbiBuYW1lPVwiQXJyb3ctY2hldnJvbi1yaWdodC1maWxsZWRcIiBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lKClcIiBjb2xvcj1cImdyYXlcIj48L3VpLWljb24+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbn1cbjxuZy10ZW1wbGF0ZSAjb3ZlcmZsb3dNZW51PlxuICA8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtIGJyZWFkY3J1bWItb3ZlcmZsb3dcIiBbY2xhc3NdPVwiJ2JyZWFkY3J1bWItJyArIHNpemUoKVwiPi4uLjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Z28tY2Fub3B5LXVpL2NvbXBvbmVudHMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sdUJBQXVCLEdBQ3hCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBWXZCLE1BQU0sT0FBTyxtQkFBbUI7SUE0QjlCO1FBM0JBLFNBQUksR0FBRyxLQUFLLENBQWlCLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLFVBQUssR0FBRyxLQUFLLENBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLHFCQUFnQixHQUFHLEtBQUssQ0FBbUIsT0FBTyxDQUFDLENBQUM7UUFDcEQsc0JBQWlCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzFDLGNBQVMsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEMseUJBQW9CLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlCLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5RCx5QkFBb0IsR0FBd0IsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUVoRixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLGtCQUFhLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZD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QjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgT25EZXN0cm95LFxuICBjb21wdXRlZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIGVmZmVjdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYkl0ZW0sIEJyZWFkY3J1bWJTaXplIH0gZnJvbSAnLi9icmVhZGNydW1iLm1vZGVsJztcbmltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVGhlbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24tdGhlbWUubW9kZWwnO1xuaW1wb3J0IHsgT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUgfSBmcm9tICcuLi9vdmVyZmxvdy1tZW51L292ZXJmbG93LW1lbnUubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1aS1icmVhZGNydW1iJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9icmVhZGNydW1iLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgc2l6ZSA9IGlucHV0PEJyZWFkY3J1bWJTaXplPignbGFyZ2UnKTtcbiAgaXRlbXMgPSBpbnB1dDxCcmVhZGNydW1iSXRlbVtdPihbXSk7XG4gIGFwcGxpY2F0aW9uVGhlbWUgPSBpbnB1dDxBcHBsaWNhdGlvblRoZW1lPignbGlnaHQnKTtcbiAgaW5jbHVkZUJhY2tCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGlzTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbnVtYmVyT2ZMb2FkaW5nSXRlbXMgPSBpbnB1dDxudW1iZXI+KDMpO1xuICBAT3V0cHV0KCkgc2VsZWN0SXRlbTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGJhY2tCdXR0b25DbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBsb2FkaW5nSXRlbXMgPSBjb21wdXRlZCgoKSA9PiBBcnJheSh0aGlzLm51bWJlck9mTG9hZGluZ0l0ZW1zKCkpKTtcbiAgaXNPdmVyZmxvd2luZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHZpc2libGVJdGVtcyA9IHNpZ25hbDxCcmVhZGNydW1iSXRlbVtdPihbXSk7XG4gIG92ZXJmbG93SXRlbXMgPSBzaWduYWw8QnJlYWRjcnVtYkl0ZW1bXT4oW10pO1xuICBvdmVyZmxvd0J1dHRvbkl0ZW1zID0gY29tcHV0ZWQ8T3ZlcmZsb3dNZW51QnV0dG9uc1R5cGVbXT4oKCkgPT5cbiAgICB0aGlzLm92ZXJmbG93SXRlbXMoKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXG4gICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICB9KSlcbiAgKTtcbiAgc2hvdWxkVHJ1bmNhdGVMYXN0SXRlbSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgQFZpZXdDaGlsZCgnYnJlYWRjcnVtYkNvbnRhaW5lcicpIGJyZWFkY3J1bWJDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgaXRlbXNJbk92ZXJmbG93ID0gMDtcbiAgcHJpdmF0ZSBwcmV2aW91c0xvYWRpbmdTdGF0ZT86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gUmVhY3QgdG8gaXRlbXMgY2hhbmdlcyBhbmQgcmVjYWxjdWxhdGUgb3ZlcmZsb3dcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5pdGVtcygpO1xuICAgICAgdGhpcy5pdGVtc0luT3ZlcmZsb3cgPSAwO1xuICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAvLyBXYWl0IGZvciBET00gdG8gcmVuZGVyIG5ldyBpdGVtcyBiZWZvcmUgY2FsY3VsYXRpbmcgb3ZlcmZsb3dcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNhbGN1bGF0ZUl0ZW1EaXN0cmlidXRpb24oKSwgMCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZWFjdCB0byBsb2FkaW5nIHN0YXRlIGNoYW5nZXMgYW5kIHNldHVwIFJlc2l6ZU9ic2VydmVyIHdoZW4gbG9hZGluZyBjaGFuZ2VzIGZyb20gdHJ1ZSB0byBmYWxzZVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50TG9hZGluZ1N0YXRlID0gdGhpcy5pc0xvYWRpbmcoKTtcblxuICAgICAgaWYgKHRoaXMucHJldmlvdXNMb2FkaW5nU3RhdGUgPT09IHRydWUgJiYgY3VycmVudExvYWRpbmdTdGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zZXR1cFJlc2l6ZU9ic2VydmVyKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJldmlvdXNMb2FkaW5nU3RhdGUgPSBjdXJyZW50TG9hZGluZ1N0YXRlO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FsY3VsYXRlSXRlbURpc3RyaWJ1dGlvbigpO1xuICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtRGlzdHJpYnV0aW9uKCkge1xuICAgIGlmICghdGhpcy5icmVhZGNydW1iQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50IHx8IHRoaXMuaXRlbXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucmVzZXRUb0FsbFZpc2libGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5icmVhZGNydW1iQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICBpZiAoaGFzSG9yaXpvbnRhbE92ZXJmbG93KSB7XG4gICAgICB0aGlzLmhhbmRsZU92ZXJmbG93KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1zSW5PdmVyZmxvdyA+IDApIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBicmluZyBpdGVtcyBiYWNrIGZyb20gb3ZlcmZsb3dcbiAgICAgIHRoaXMudHJ5UmVkdWNlT3ZlcmZsb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldFRvQWxsVmlzaWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT3ZlcmZsb3coKSB7XG4gICAgdGhpcy5pdGVtc0luT3ZlcmZsb3cgPSBNYXRoLm1pbih0aGlzLml0ZW1zSW5PdmVyZmxvdyArIDEsIHRoaXMuaXRlbXMoKS5sZW5ndGggLSAxKTtcblxuICAgIHRoaXMudXBkYXRlSXRlbUFycmF5cygpO1xuICAgIHRoaXMuaXNPdmVyZmxvd2luZy5zZXQodHJ1ZSk7XG5cbiAgICAvLyBXYWl0IGZvciBET00gdG8gcmVuZGVyIHRoZSB1cGRhdGVkIHRlbXBsYXRlIGFmdGVyIGhpZGluZyBpdGVtc1xuICAgIC8vIFdlIG5lZWQgdG8gbWVhc3VyZSBkaW1lbnNpb25zIEFGVEVSIHRoZSBET00gaGFzIGJlZW4gdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmlzaWJsZSBpdGVtc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5icmVhZGNydW1iQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHN0aWxsT3ZlcmZsb3dpbmcgPSBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcblxuICAgICAgICBpZiAoc3RpbGxPdmVyZmxvd2luZyAmJiB0aGlzLml0ZW1zSW5PdmVyZmxvdyA8IHRoaXMuaXRlbXMoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVPdmVyZmxvdygpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0aWxsT3ZlcmZsb3dpbmcgJiYgdGhpcy5pdGVtc0luT3ZlcmZsb3cgPT09IHRoaXMuaXRlbXMoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy5zaG91bGRUcnVuY2F0ZUxhc3RJdGVtLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlSZWR1Y2VPdmVyZmxvdygpIHtcbiAgICBjb25zdCB0ZXN0SXRlbXNJbk92ZXJmbG93ID0gdGhpcy5pdGVtc0luT3ZlcmZsb3cgLSAxO1xuXG4gICAgaWYgKHRlc3RJdGVtc0luT3ZlcmZsb3cgPj0gMCkge1xuICAgICAgY29uc3QgdGVzdFZpc2libGVJdGVtcyA9IHRoaXMuaXRlbXMoKS5zbGljZSh0ZXN0SXRlbXNJbk92ZXJmbG93KTtcbiAgICAgIGNvbnN0IHRlc3RPdmVyZmxvd0l0ZW1zID0gdGVzdEl0ZW1zSW5PdmVyZmxvdyA+IDAgPyB0aGlzLml0ZW1zKCkuc2xpY2UoMCwgdGVzdEl0ZW1zSW5PdmVyZmxvdykgOiBbXTtcblxuICAgICAgdGhpcy52aXNpYmxlSXRlbXMuc2V0KHRlc3RWaXNpYmxlSXRlbXMpO1xuICAgICAgdGhpcy5vdmVyZmxvd0l0ZW1zLnNldCh0ZXN0T3ZlcmZsb3dJdGVtcyk7XG5cbiAgICAgIC8vIEFsd2F5cyByZXNldCB0cnVuY2F0aW9uIHdoZW4gdHJ5aW5nIHRvIHJlZHVjZSBvdmVyZmxvd1xuICAgICAgdGhpcy5zaG91bGRUcnVuY2F0ZUxhc3RJdGVtLnNldChmYWxzZSk7XG5cbiAgICAgIC8vIFdhaXQgZm9yIERPTSB0byByZW5kZXIgd2l0aCB0ZXN0IGNvbmZpZ3VyYXRpb24gYmVmb3JlIG1lYXN1cmluZ1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJyZWFkY3J1bWJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5icmVhZGNydW1iQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgaGFzT3ZlcmZsb3cgPSBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcblxuICAgICAgICAgIGlmICghaGFzT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgIC8vIEl0IGZpdHMhIFVwZGF0ZSB0aGUgY291bnRlclxuICAgICAgICAgICAgdGhpcy5pdGVtc0luT3ZlcmZsb3cgPSB0ZXN0SXRlbXNJbk92ZXJmbG93O1xuICAgICAgICAgICAgdGhpcy5pc092ZXJmbG93aW5nLnNldCh0aGlzLml0ZW1zSW5PdmVyZmxvdyA+IDApO1xuXG4gICAgICAgICAgICAvLyBUcnkgdG8gcmVkdWNlIG1vcmUgaWYgdGhlcmUgYXJlIHN0aWxsIGl0ZW1zIGluIG92ZXJmbG93XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0luT3ZlcmZsb3cgPiAwKSB7XG4gICAgICAgICAgICAgIC8vIFNjaGVkdWxlIG5leHQgcmVkdWN0aW9uIGF0dGVtcHQgYWZ0ZXIgY3VycmVudCByZW5kZXIgY3ljbGVcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyeVJlZHVjZU92ZXJmbG93KCksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEb2Vzbid0IGZpdCwgcmV2ZXJ0IHRvIHByZXZpb3VzIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1BcnJheXMoKTtcblxuICAgICAgICAgICAgLy8gV2FpdCBmb3IgRE9NIHRvIHJlbmRlciByZXZlcnRlZCBzdGF0ZSBiZWZvcmUgY2hlY2tpbmcgdHJ1bmNhdGlvblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmJyZWFkY3J1bWJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5icmVhZGNydW1iQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RpbGxPdmVyZmxvd2luZyA9IGNvbnRhaW5lckVsZW1lbnQuc2Nyb2xsV2lkdGggPiBjb250YWluZXJFbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0aWxsT3ZlcmZsb3dpbmcgJiYgdGhpcy5pdGVtc0luT3ZlcmZsb3cgPT09IHRoaXMuaXRlbXMoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZFRydW5jYXRlTGFzdEl0ZW0uc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGVzdEl0ZW1zSW5PdmVyZmxvdyA8IDAsIG1lYW5zIHdlJ3JlIHRyeWluZyB0byBzaG93IGFsbCBpdGVtc1xuICAgICAgdGhpcy5yZXNldFRvQWxsVmlzaWJsZSgpO1xuXG4gICAgICAvLyBXYWl0IGZvciBET00gdG8gcmVuZGVyIGFsbCBpdGVtcyBiZWZvcmUgbWVhc3VyaW5nIG92ZXJmbG93XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmJyZWFkY3J1bWJDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICBjb25zdCBoYXNPdmVyZmxvdyA9IGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgICAgICAgaWYgKGhhc092ZXJmbG93KSB7XG4gICAgICAgICAgICAvLyBTdGlsbCBvdmVyZmxvd3Mgd2l0aCBhbGwgaXRlbXMsIG5lZWQgdG8gZ28gYmFjayB0byBvdmVyZmxvdyBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5pdGVtc0luT3ZlcmZsb3cgPSAxOyAvLyBTdGFydCB3aXRoIG1pbmltYWwgb3ZlcmZsb3dcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlT3ZlcmZsb3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSXRlbUFycmF5cygpIHtcbiAgICBpZiAodGhpcy5pdGVtc0luT3ZlcmZsb3cgPiAwKSB7XG4gICAgICB0aGlzLm92ZXJmbG93SXRlbXMuc2V0KHRoaXMuaXRlbXMoKS5zbGljZSgwLCB0aGlzLml0ZW1zSW5PdmVyZmxvdykpO1xuICAgICAgdGhpcy52aXNpYmxlSXRlbXMuc2V0KHRoaXMuaXRlbXMoKS5zbGljZSh0aGlzLml0ZW1zSW5PdmVyZmxvdykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0VG9BbGxWaXNpYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldFRvQWxsVmlzaWJsZSgpIHtcbiAgICB0aGlzLnZpc2libGVJdGVtcy5zZXQodGhpcy5pdGVtcygpKTtcbiAgICB0aGlzLm92ZXJmbG93SXRlbXMuc2V0KFtdKTtcbiAgICB0aGlzLmlzT3ZlcmZsb3dpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3VsZFRydW5jYXRlTGFzdEl0ZW0uc2V0KGZhbHNlKTtcbiAgICB0aGlzLml0ZW1zSW5PdmVyZmxvdyA9IDA7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgaWYgKCF0aGlzLmJyZWFkY3J1bWJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlSXRlbURpc3RyaWJ1dGlvbigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuYnJlYWRjcnVtYkNvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcbiAgfVxufVxuIiwiQGlmICghaXNMb2FkaW5nKCkpIHtcbiAgPGRpdiBjbGFzcz1cImJyZWFkY3J1bWJcIiBbYXR0ci50aGVtZV09XCJhcHBsaWNhdGlvblRoZW1lKClcIiAjYnJlYWRjcnVtYkNvbnRhaW5lciBbY2xhc3NdPVwiJ2JyZWFkY3J1bWItJyArIHNpemUoKVwiPlxuICAgIEBpZiAoaW5jbHVkZUJhY2tCdXR0b24oKSkge1xuICAgICAgPHVpLWJ1dHRvblxuICAgICAgICBbdmFyaWFudF09XCInaWNvbi1idXR0b24nXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiKCdDT01NT04uQkFDSycgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICBbaWNvbk5hbWVdPVwiJ0Fycm93LWNoZXZyb24tbGVmdC1maWxsZWQnXCJcbiAgICAgICAgKGJ1dHRvbkNsaWNrRXZlbnQpPVwiYmFja0J1dHRvbkNsaWNrRXZlbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgID48L3VpLWJ1dHRvbj5cbiAgICB9XG4gICAgQGlmIChpc092ZXJmbG93aW5nKCkpIHtcbiAgICAgIDx1aS1vdmVyZmxvdy1tZW51XG4gICAgICAgIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWUoKVwiXG4gICAgICAgIFtjb250ZW50VGVtcGxhdGVSZWZdPVwib3ZlcmZsb3dNZW51XCJcbiAgICAgICAgW2J1dHRvbnNdPVwib3ZlcmZsb3dCdXR0b25JdGVtcygpXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiKCdDT01NT04uT1BUSU9OUycgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cImFwcGxpY2F0aW9uVGhlbWUoKVwiXG4gICAgICAgIFtpc0R5bmFtaWNNZW51XT1cInRydWVcIlxuICAgICAgICAoc2VsZWN0SXRlbSk9XCJzZWxlY3RJdGVtLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiYnJlYWRjcnVtYi1vdmVyZmxvdy1tZW51XCJcbiAgICAgID48L3VpLW92ZXJmbG93LW1lbnU+XG4gICAgICA8dWktaWNvbiBuYW1lPVwiQXJyb3ctY2hldnJvbi1yaWdodC1maWxsZWRcIiBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lKClcIiBjb2xvcj1cImdyYXlcIj48L3VpLWljb24+XG4gICAgfVxuICAgIEBmb3IgKGl0ZW0gb2YgdmlzaWJsZUl0ZW1zKCk7IHRyYWNrIGl0ZW0udmFsdWUpIHtcbiAgICAgIEBpZiAoISRsYXN0KSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW1cIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXRlbS5sYWJlbC5sZW5ndGggPiAxMCA/IGl0ZW0ubGFiZWwgOiAnJ1wiXG4gICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCJhcHBsaWNhdGlvblRoZW1lKClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0uZW1pdChpdGVtLnZhbHVlKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0SXRlbS5lbWl0KGl0ZW0udmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCB0cnVuY2F0ZTogMTIgOiAnLi4uJyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDx1aS1pY29uIG5hbWU9XCJBcnJvdy1jaGV2cm9uLXJpZ2h0LWZpbGxlZFwiIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWUoKVwiIGNvbG9yPVwiZ3JheVwiPjwvdWktaWNvbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3Ryb25nXG4gICAgICAgICAgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW0tYWN0aXZlXCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cInNob3VsZFRydW5jYXRlTGFzdEl0ZW0oKSA/IGl0ZW0ubGFiZWwgOiAnJ1wiXG4gICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCJhcHBsaWNhdGlvblRoZW1lKClcIlxuICAgICAgICAgIFtjbGFzcy5icmVhZGNydW1iLWl0ZW0tYWN0aXZlLXRydW5jYXRlZF09XCJzaG91bGRUcnVuY2F0ZUxhc3RJdGVtKClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIidwYWdlJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0uZW1pdChpdGVtLnZhbHVlKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0SXRlbS5lbWl0KGl0ZW0udmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgPC9zdHJvbmc+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYlwiPlxuICAgIEBmb3IgKGkgb2YgbG9hZGluZ0l0ZW1zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgPHVpLXNrZWxldG9uIGNvdW50PVwiMVwiIFt0aGVtZV09XCJ7IHdpZHRoOiAnMTYwcHgnLCBtYXJnaW46ICcxMHB4IDAgMCcgfVwiPjwvdWktc2tlbGV0b24+XG4gICAgICBAaWYgKCRpbmRleCAhPT0gbnVtYmVyT2ZMb2FkaW5nSXRlbXMoKSAtIDEpIHtcbiAgICAgICAgPHVpLWljb24gbmFtZT1cIkFycm93LWNoZXZyb24tcmlnaHQtZmlsbGVkXCIgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZSgpXCIgY29sb3I9XCJncmF5XCI+PC91aS1pY29uPlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG59XG48bmctdGVtcGxhdGUgI292ZXJmbG93TWVudT5cbiAgPGRpdiBjbGFzcz1cImJyZWFkY3J1bWItaXRlbSBicmVhZGNydW1iLW92ZXJmbG93XCIgW2NsYXNzXT1cIidicmVhZGNydW1iLScgKyBzaXplKClcIj4uLi48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=