@odx/angular 12.21.1 → 12.21.2

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 (25) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/cdk/date-input/index.d.ts +1 -0
  3. package/cdk/date-input/lib/utils/ngx-mask-init.d.ts +3 -0
  4. package/components/datepicker/lib/directives/datepicker-input-control.directive.d.ts +4 -16
  5. package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +4 -16
  6. package/components/timepicker/lib/directives/timepicker-input-control.directive.d.ts +6 -15
  7. package/components/timepicker/lib/timepicker.service.d.ts +5 -4
  8. package/esm2022/cdk/date-input/index.mjs +2 -1
  9. package/esm2022/cdk/date-input/lib/utils/ngx-mask-init.mjs +22 -0
  10. package/esm2022/components/datepicker/lib/datepicker.component.mjs +3 -2
  11. package/esm2022/components/datepicker/lib/directives/datepicker-input-control.directive.mjs +8 -23
  12. package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +4 -2
  13. package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +8 -23
  14. package/esm2022/components/timepicker/lib/directives/timepicker-input-control.directive.mjs +17 -37
  15. package/esm2022/components/timepicker/lib/timepicker.component.mjs +21 -6
  16. package/esm2022/components/timepicker/lib/timepicker.service.mjs +42 -15
  17. package/fesm2022/odx-angular-cdk-date-input.mjs +23 -2
  18. package/fesm2022/odx-angular-cdk-date-input.mjs.map +1 -1
  19. package/fesm2022/odx-angular-components-datepicker.mjs +10 -24
  20. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  21. package/fesm2022/odx-angular-components-daterangepicker.mjs +11 -24
  22. package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
  23. package/fesm2022/odx-angular-components-timepicker.mjs +113 -90
  24. package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
  25. package/package.json +7 -7
@@ -2,12 +2,12 @@ import { __decorate } from "tslib";
2
2
  import { Directive, EventEmitter, HostListener, inject, Output } from '@angular/core';
3
3
  import { ReadonlyController, WithTabIndex } from '@odx/angular';
4
4
  import { InputControlDirective } from '@odx/angular/cdk/custom-form-control';
5
- import { getDateInputFormat, getDateInputMask, getDateInputValueAsDate, injectDateConfig } from '@odx/angular/cdk/date-input';
5
+ import { getDateInputFormat, getDateInputValueAsDate, injectDateConfig } from '@odx/angular/cdk/date-input';
6
6
  import { CSSComponent } from '@odx/angular/internal';
7
- import { NgxMaskPipe, provideNgxMask } from 'ngx-mask';
8
- import { distinctUntilChanged, fromEvent, map, tap } from 'rxjs';
7
+ import { NgxMaskDirective, provideNgxMask } from 'ngx-mask';
9
8
  import * as i0 from "@angular/core";
10
9
  import * as i1 from "@odx/angular";
10
+ import * as i2 from "ngx-mask";
11
11
  /**
12
12
  * Enhances an input element to support date range picking, applying an input mask for date formatting
13
13
  * and managing focus events. This directive is typically used within a date range picker to provide
@@ -19,30 +19,15 @@ import * as i1 from "@odx/angular";
19
19
  let DaterangepickerInputControlDirective = class DaterangepickerInputControlDirective extends InputControlDirective {
20
20
  constructor() {
21
21
  super(...arguments);
22
- this.maskConfig = { validation: false, leadZeroDateTime: true };
23
22
  this.readonlyController = ReadonlyController.inject();
24
23
  this.config = injectDateConfig();
25
- this.inputMask = getDateInputMask(this.config);
26
- this.ngxMaskPipe = inject(NgxMaskPipe);
24
+ this.ngxMaskDirective = inject(NgxMaskDirective);
27
25
  /**
28
26
  * Emits an event when the input gains or loses focus, facilitating external event handling.
29
27
  *
30
28
  * @emits {boolean} - Indicates whether the input is focused.
31
29
  */
32
30
  this.focused = new EventEmitter();
33
- /**
34
- * Captures and processes changes to the input element's value, applying the mask and updating
35
- * the form control.
36
- *
37
- * @emits {string} - The updated value of the input element.
38
- */
39
- this.valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(distinctUntilChanged(), tap(() => this.applyMask()), map(() => this.nativeElementValue));
40
- }
41
- /**
42
- * Applies the configured input mask to the native input element's value.
43
- */
44
- applyMask() {
45
- this.nativeElementValue = this.ngxMaskPipe.transform(this.nativeElementValue, this.inputMask, this.maskConfig);
46
31
  }
47
32
  /**
48
33
  * Converts the current input value to a Date object based on the configuration's date format.
@@ -67,7 +52,7 @@ let DaterangepickerInputControlDirective = class DaterangepickerInputControlDire
67
52
  this.focused.emit(false);
68
53
  }
69
54
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DaterangepickerInputControlDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
70
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DaterangepickerInputControlDirective, isStandalone: true, selector: "input[odxDaterangepickerControl],input[odxDaterangepickerStartDateControl], input[odxDaterangepickerEndDateControl]", outputs: { focused: "focused" }, host: { listeners: { "focusin": "handleFocusIn()", "focusout": "handleFocusOut()" }, properties: { "attr.readonly": "readonlyController?.readonly || null", "attr.placeholder": "placeholder" } }, providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }], ngImport: i0 }); }
55
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DaterangepickerInputControlDirective, isStandalone: true, selector: "input[odxDaterangepickerControl],input[odxDaterangepickerStartDateControl], input[odxDaterangepickerEndDateControl]", outputs: { focused: "focused" }, host: { listeners: { "focusin": "handleFocusIn()", "focusout": "handleFocusOut()" }, properties: { "attr.readonly": "readonlyController?.readonly || null", "attr.placeholder": "placeholder" } }, providers: [ReadonlyController.connect(), provideNgxMask({ validation: false, leadZeroDateTime: true })], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }, { directive: i2.NgxMaskDirective }], ngImport: i0 }); }
71
56
  };
72
57
  DaterangepickerInputControlDirective = __decorate([
73
58
  CSSComponent('daterangepicker__control')
@@ -82,8 +67,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
82
67
  '[attr.readonly]': 'readonlyController?.readonly || null',
83
68
  '[attr.placeholder]': 'placeholder',
84
69
  },
85
- providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe],
86
- hostDirectives: [WithTabIndex],
70
+ providers: [ReadonlyController.connect(), provideNgxMask({ validation: false, leadZeroDateTime: true })],
71
+ hostDirectives: [WithTabIndex, NgxMaskDirective],
87
72
  }]
88
73
  }], propDecorators: { focused: [{
89
74
  type: Output
@@ -94,4 +79,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
94
79
  type: HostListener,
95
80
  args: ['focusout']
96
81
  }] } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlcGlja2VyLWlucHV0LWNvbnRyb2wuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvZGF0ZXJhbmdlcGlja2VyL3NyYy9saWIvZGlyZWN0aXZlcy9kYXRlcmFuZ2VwaWNrZXItaW5wdXQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBaUIsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUVqRTs7Ozs7OztHQU9HO0FBWUksSUFBTSxvQ0FBb0MsR0FBMUMsTUFBTSxvQ0FBcUMsU0FBUSxxQkFBcUI7SUFBeEU7O1FBQ1ksZUFBVSxHQUEyQixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFakYsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakQsV0FBTSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVyRDs7OztXQUlHO1FBRUksWUFBTyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFN0M7Ozs7O1dBS0c7UUFDYSxpQkFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ2hGLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFDM0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuQyxDQUFDO0tBb0NIO0lBbENDOztPQUVHO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFHUyxhQUFhO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFHUyxjQUFjO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBN0RVLG9DQUFvQzttR0FBcEMsb0NBQW9DLHNZQUhwQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFdBQVcsQ0FBQzs7QUFHN0Qsb0NBQW9DO0lBWGhELFlBQVksQ0FBQywwQkFBMEIsQ0FBQztHQVc1QixvQ0FBb0MsQ0E4RGhEOzs0RkE5RFksb0NBQW9DO2tCQVZoRCxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUscUhBQXFIO29CQUMvSCxJQUFJLEVBQUU7d0JBQ0osaUJBQWlCLEVBQUUsc0NBQXNDO3dCQUN6RCxvQkFBb0IsRUFBRSxhQUFhO3FCQUNwQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxXQUFXLENBQUM7b0JBQ3hFLGNBQWMsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDL0I7OEJBZVEsT0FBTztzQkFEYixNQUFNO2dCQXlDRyxhQUFhO3NCQUR0QixZQUFZO3VCQUFDLFNBQVM7Z0JBTWIsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWRvbmx5Q29udHJvbGxlciwgV2l0aFRhYkluZGV4IH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IElucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBnZXREYXRlSW5wdXRGb3JtYXQsIGdldERhdGVJbnB1dE1hc2ssIGdldERhdGVJbnB1dFZhbHVlQXNEYXRlLCBpbmplY3REYXRlQ29uZmlnIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9kYXRlLWlucHV0JztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBOZ3hNYXNrQ29uZmlnLCBOZ3hNYXNrUGlwZSwgcHJvdmlkZU5neE1hc2sgfSBmcm9tICduZ3gtbWFzayc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZnJvbUV2ZW50LCBtYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEVuaGFuY2VzIGFuIGlucHV0IGVsZW1lbnQgdG8gc3VwcG9ydCBkYXRlIHJhbmdlIHBpY2tpbmcsIGFwcGx5aW5nIGFuIGlucHV0IG1hc2sgZm9yIGRhdGUgZm9ybWF0dGluZ1xuICogYW5kIG1hbmFnaW5nIGZvY3VzIGV2ZW50cy4gVGhpcyBkaXJlY3RpdmUgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aGluIGEgZGF0ZSByYW5nZSBwaWNrZXIgdG8gcHJvdmlkZVxuICogY29uc2lzdGVudCBhbmQgY29uZmlndXJhYmxlIGlucHV0IGJlaGF2aW9yLiBFeHRlbmRzIHRoZSBgSW5wdXRDb250cm9sRGlyZWN0aXZlYCB0byBwcm92aWRlIGZvcm0gY29udHJvbC5cbiAqIEhhcyBob3N0IGRpcmVjdGl2ZSBgV2l0aFRhYkluZGV4YCB0byBtYW5hZ2UgdGhlIHRhYiBpbmRleCBhdHRyaWJ1dGUgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gKlxuICogQHNlZSB7SW5wdXRDb250cm9sRGlyZWN0aXZlfVxuICovXG5AQ1NTQ29tcG9uZW50KCdkYXRlcmFuZ2VwaWNrZXJfX2NvbnRyb2wnKVxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaW5wdXRbb2R4RGF0ZXJhbmdlcGlja2VyQ29udHJvbF0saW5wdXRbb2R4RGF0ZXJhbmdlcGlja2VyU3RhcnREYXRlQ29udHJvbF0sIGlucHV0W29keERhdGVyYW5nZXBpY2tlckVuZERhdGVDb250cm9sXScsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gICAgJ1thdHRyLnBsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcicsXG4gIH0sXG4gIHByb3ZpZGVyczogW1JlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksIHByb3ZpZGVOZ3hNYXNrKCksIE5neE1hc2tQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtXaXRoVGFiSW5kZXhdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcmFuZ2VwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgZXh0ZW5kcyBJbnB1dENvbnRyb2xEaXJlY3RpdmUge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hc2tDb25maWc6IFBhcnRpYWw8Tmd4TWFza0NvbmZpZz4gPSB7IHZhbGlkYXRpb246IGZhbHNlLCBsZWFkWmVyb0RhdGVUaW1lOiB0cnVlIH07XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlYWRvbmx5Q29udHJvbGxlciA9IFJlYWRvbmx5Q29udHJvbGxlci5pbmplY3QoKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdERhdGVDb25maWcoKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlucHV0TWFzayA9IGdldERhdGVJbnB1dE1hc2sodGhpcy5jb25maWcpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmd4TWFza1BpcGUgPSBpbmplY3QoTmd4TWFza1BpcGUpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBpbnB1dCBnYWlucyBvciBsb3NlcyBmb2N1cywgZmFjaWxpdGF0aW5nIGV4dGVybmFsIGV2ZW50IGhhbmRsaW5nLlxuICAgKlxuICAgKiBAZW1pdHMge2Jvb2xlYW59IC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlucHV0IGlzIGZvY3VzZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIENhcHR1cmVzIGFuZCBwcm9jZXNzZXMgY2hhbmdlcyB0byB0aGUgaW5wdXQgZWxlbWVudCdzIHZhbHVlLCBhcHBseWluZyB0aGUgbWFzayBhbmQgdXBkYXRpbmdcbiAgICogdGhlIGZvcm0gY29udHJvbC5cbiAgICpcbiAgICogQGVtaXRzIHtzdHJpbmd9IC0gVGhlIHVwZGF0ZWQgdmFsdWUgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgdmFsdWVDaGFuZ2UkID0gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnaW5wdXQnKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgdGFwKCgpID0+IHRoaXMuYXBwbHlNYXNrKCkpLFxuICAgIG1hcCgoKSA9PiB0aGlzLm5hdGl2ZUVsZW1lbnRWYWx1ZSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGNvbmZpZ3VyZWQgaW5wdXQgbWFzayB0byB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQncyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBhcHBseU1hc2soKTogdm9pZCB7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50VmFsdWUgPSB0aGlzLm5neE1hc2tQaXBlLnRyYW5zZm9ybSh0aGlzLm5hdGl2ZUVsZW1lbnRWYWx1ZSwgdGhpcy5pbnB1dE1hc2ssIHRoaXMubWFza0NvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGN1cnJlbnQgaW5wdXQgdmFsdWUgdG8gYSBEYXRlIG9iamVjdCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbidzIGRhdGUgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGF0ZSB8IG51bGx9IFRoZSBwYXJzZWQgZGF0ZSBvYmplY3Qgb3IgbnVsbCBpZiB0aGUgaW5wdXQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsaWQgZGF0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWVBc0RhdGUoKTogRGF0ZSB8IG51bGwge1xuICAgIHJldHVybiBnZXREYXRlSW5wdXRWYWx1ZUFzRGF0ZSh0aGlzLmNvbmZpZywgdGhpcy5uYXRpdmVFbGVtZW50VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXQsIHR5cGljYWxseSB0aGUgZGF0ZSBmb3JtYXQgaW4gdXBwZXJjYXNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0LlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXREYXRlSW5wdXRGb3JtYXQodGhpcy5jb25maWcpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c2luJylcbiAgcHJvdGVjdGVkIGhhbmRsZUZvY3VzSW4oKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c2VkLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIHByb3RlY3RlZCBoYW5kbGVGb2N1c091dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdChmYWxzZSk7XG4gIH1cbn1cbiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlcGlja2VyLWlucHV0LWNvbnRyb2wuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvZGF0ZXJhbmdlcGlja2VyL3NyYy9saWIvZGlyZWN0aXZlcy9kYXRlcmFuZ2VwaWNrZXItaW5wdXQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFFNUQ7Ozs7Ozs7R0FPRztBQVlJLElBQU0sb0NBQW9DLEdBQTFDLE1BQU0sb0NBQXFDLFNBQVEscUJBQXFCO0lBQXhFOztRQUNjLHVCQUFrQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pELFdBQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9CLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTVEOzs7O1dBSUc7UUFFSSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztLQTZCOUM7SUEzQkM7Ozs7T0FJRztJQUNILElBQVcsV0FBVztRQUNwQixPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUdTLGFBQWE7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUdTLGNBQWM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQzsrR0F2Q1Usb0NBQW9DO21HQUFwQyxvQ0FBb0Msc1lBSHBDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOztBQUc3RixvQ0FBb0M7SUFYaEQsWUFBWSxDQUFDLDBCQUEwQixDQUFDO0dBVzVCLG9DQUFvQyxDQXdDaEQ7OzRGQXhDWSxvQ0FBb0M7a0JBVmhELFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxxSEFBcUg7b0JBQy9ILElBQUksRUFBRTt3QkFDSixpQkFBaUIsRUFBRSxzQ0FBc0M7d0JBQ3pELG9CQUFvQixFQUFFLGFBQWE7cUJBQ3BDO29CQUNELFNBQVMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDeEcsY0FBYyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDO2lCQUNqRDs4QkFZUSxPQUFPO3NCQURiLE1BQU07Z0JBc0JHLGFBQWE7c0JBRHRCLFlBQVk7dUJBQUMsU0FBUztnQkFNYixjQUFjO3NCQUR2QixZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBpbmplY3QsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhZG9ubHlDb250cm9sbGVyLCBXaXRoVGFiSW5kZXggfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgSW5wdXRDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9jdXN0b20tZm9ybS1jb250cm9sJztcbmltcG9ydCB7IGdldERhdGVJbnB1dEZvcm1hdCwgZ2V0RGF0ZUlucHV0VmFsdWVBc0RhdGUsIGluamVjdERhdGVDb25maWcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2RhdGUtaW5wdXQnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IE5neE1hc2tEaXJlY3RpdmUsIHByb3ZpZGVOZ3hNYXNrIH0gZnJvbSAnbmd4LW1hc2snO1xuXG4vKipcbiAqIEVuaGFuY2VzIGFuIGlucHV0IGVsZW1lbnQgdG8gc3VwcG9ydCBkYXRlIHJhbmdlIHBpY2tpbmcsIGFwcGx5aW5nIGFuIGlucHV0IG1hc2sgZm9yIGRhdGUgZm9ybWF0dGluZ1xuICogYW5kIG1hbmFnaW5nIGZvY3VzIGV2ZW50cy4gVGhpcyBkaXJlY3RpdmUgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aGluIGEgZGF0ZSByYW5nZSBwaWNrZXIgdG8gcHJvdmlkZVxuICogY29uc2lzdGVudCBhbmQgY29uZmlndXJhYmxlIGlucHV0IGJlaGF2aW9yLiBFeHRlbmRzIHRoZSBgSW5wdXRDb250cm9sRGlyZWN0aXZlYCB0byBwcm92aWRlIGZvcm0gY29udHJvbC5cbiAqIEhhcyBob3N0IGRpcmVjdGl2ZSBgV2l0aFRhYkluZGV4YCB0byBtYW5hZ2UgdGhlIHRhYiBpbmRleCBhdHRyaWJ1dGUgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gKlxuICogQHNlZSB7SW5wdXRDb250cm9sRGlyZWN0aXZlfVxuICovXG5AQ1NTQ29tcG9uZW50KCdkYXRlcmFuZ2VwaWNrZXJfX2NvbnRyb2wnKVxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaW5wdXRbb2R4RGF0ZXJhbmdlcGlja2VyQ29udHJvbF0saW5wdXRbb2R4RGF0ZXJhbmdlcGlja2VyU3RhcnREYXRlQ29udHJvbF0sIGlucHV0W29keERhdGVyYW5nZXBpY2tlckVuZERhdGVDb250cm9sXScsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gICAgJ1thdHRyLnBsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcicsXG4gIH0sXG4gIHByb3ZpZGVyczogW1JlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksIHByb3ZpZGVOZ3hNYXNrKHsgdmFsaWRhdGlvbjogZmFsc2UsIGxlYWRaZXJvRGF0ZVRpbWU6IHRydWUgfSldLFxuICBob3N0RGlyZWN0aXZlczogW1dpdGhUYWJJbmRleCwgTmd4TWFza0RpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVyYW5nZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSBleHRlbmRzIElucHV0Q29udHJvbERpcmVjdGl2ZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSByZWFkb25seUNvbnRyb2xsZXIgPSBSZWFkb25seUNvbnRyb2xsZXIuaW5qZWN0KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSBpbmplY3REYXRlQ29uZmlnKCk7XG4gIHB1YmxpYyByZWFkb25seSBuZ3hNYXNrRGlyZWN0aXZlID0gaW5qZWN0KE5neE1hc2tEaXJlY3RpdmUpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBpbnB1dCBnYWlucyBvciBsb3NlcyBmb2N1cywgZmFjaWxpdGF0aW5nIGV4dGVybmFsIGV2ZW50IGhhbmRsaW5nLlxuICAgKlxuICAgKiBAZW1pdHMge2Jvb2xlYW59IC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlucHV0IGlzIGZvY3VzZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlIHRvIGEgRGF0ZSBvYmplY3QgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24ncyBkYXRlIGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybnMge0RhdGUgfCBudWxsfSBUaGUgcGFyc2VkIGRhdGUgb2JqZWN0IG9yIG51bGwgaWYgdGhlIGlucHV0IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbGlkIGRhdGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlQXNEYXRlKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0RGF0ZUlucHV0VmFsdWVBc0RhdGUodGhpcy5jb25maWcsIHRoaXMubmF0aXZlRWxlbWVudFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0LCB0eXBpY2FsbHkgdGhlIGRhdGUgZm9ybWF0IGluIHVwcGVyY2FzZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGF0ZUlucHV0Rm9ybWF0KHRoaXMuY29uZmlnKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicpXG4gIHByb3RlY3RlZCBoYW5kbGVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnKVxuICBwcm90ZWN0ZWQgaGFuZGxlRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c2VkLmVtaXQoZmFsc2UpO1xuICB9XG59XG4iXX0=
@@ -2,14 +2,14 @@ import { __decorate } from "tslib";
2
2
  import { Directive, inject } from '@angular/core';
3
3
  import { WithDisabledState, WithTabIndex } from '@odx/angular';
4
4
  import { InputControlDirective } from '@odx/angular/cdk/custom-form-control';
5
+ import { initNgxMask, ngxMaskProviderConfig } from '@odx/angular/cdk/date-input';
5
6
  import { CSSComponent } from '@odx/angular/internal';
6
- import { NgxMaskPipe, provideNgxMask } from 'ngx-mask';
7
- import { distinctUntilChanged, fromEvent, map } from 'rxjs';
7
+ import { NgxMaskDirective, provideNgxMask } from 'ngx-mask';
8
8
  import { TimepickerService } from '../timepicker.service';
9
9
  import { TIMEPICKER_CONTROL } from '../timepicker.token';
10
- import { processInputValue } from '../utils/ngx-mask-helper';
11
10
  import * as i0 from "@angular/core";
12
11
  import * as i1 from "@odx/angular";
12
+ import * as i2 from "ngx-mask";
13
13
  /**
14
14
  * Directive to enhance a standard input element for time picking, integrating mask functionality for time format.
15
15
  * It automatically adapts to locale settings provided by the enclosing `TimepickerComponent` to display time in the appropriate format.
@@ -21,35 +21,15 @@ let TimepickerInputControlDirective = class TimepickerInputControlDirective exte
21
21
  super(...arguments);
22
22
  this.timepicker = inject(TIMEPICKER_CONTROL);
23
23
  this.timepickerService = inject(TimepickerService);
24
- this.ngxMaskPipe = inject(NgxMaskPipe);
25
- /**
26
- * Stream of value changes for the input element, applying the mask and processing the input based on locale.
27
- */
28
- this.valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(distinctUntilChanged(), map((event) => this.applyMask(event)));
24
+ this.ngxMaskDirective = inject(NgxMaskDirective, { self: true, optional: true });
29
25
  }
30
26
  /**
31
- * Configuration for the mask applied to the timepicker input. Adjusts based on locale settings.
32
- *
33
- * @returns {Partial<NgxMaskConfig>} The mask configuration for the timepicker input.
34
- */
35
- get maskConfig() {
36
- return {
37
- validation: false,
38
- apm: this.timepicker.useLocale,
39
- leadZeroDateTime: !this.timepicker.useLocale,
40
- patterns: {
41
- A: { pattern: new RegExp('[AaPp]') },
42
- M: { pattern: new RegExp('M') },
43
- },
44
- };
45
- }
46
- /**
47
- * Computes and returns the placeholder text for the input based on locale settings.
27
+ * Returns the placeholder text for the input based on locale settings.
48
28
  *
49
29
  * @returns {string} The placeholder text for the input.
50
30
  */
51
31
  get placeholder() {
52
- return this.timepickerService.getPlaceholder(this.timepicker.useLocale);
32
+ return this.timepickerService.useLocale() ? '--:-- --' : '--:--';
53
33
  }
54
34
  /**
55
35
  * Determines whether the timepicker input is readonly, based on the state of the parent timepicker component.
@@ -65,17 +45,17 @@ let TimepickerInputControlDirective = class TimepickerInputControlDirective exte
65
45
  * @param {Event} event - The input event triggering the mask application.
66
46
  * @returns {string} The masked input value.
67
47
  */
68
- applyMask(event) {
69
- const mask = this.timepicker.useLocale ? 'Hh:m0 AM' : 'Hh:m0';
70
- let value = this.ngxMaskPipe.transform(this.nativeElementValue, mask, this.maskConfig);
71
- if (this.timepicker.useLocale) {
72
- value = processInputValue(value, event);
48
+ applyMask(useLocale) {
49
+ if (!this.ngxMaskDirective)
50
+ return;
51
+ const mask = useLocale ? 'Hh:m0 AM' : 'Hh:m0';
52
+ useLocale !== this.ngxMaskDirective._maskService.apm && (this.ngxMaskDirective._maskService.apm = useLocale);
53
+ if (Object.hasOwn(this.ngxMaskDirective, '_maskValue') && this.ngxMaskDirective['_maskValue'] !== mask) {
54
+ initNgxMask(this.ngxMaskDirective, mask);
73
55
  }
74
- this.nativeElementValue = value;
75
- return value;
76
56
  }
77
57
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimepickerInputControlDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
78
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TimepickerInputControlDirective, isStandalone: true, selector: "input[odxTimepickerControl]", host: { properties: { "attr.readonly": "isReadonly || null", "attr.placeholder": "placeholder" } }, providers: [provideNgxMask(), NgxMaskPipe], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }, { directive: i1.WithDisabledState }], ngImport: i0 }); }
58
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TimepickerInputControlDirective, isStandalone: true, selector: "input[odxTimepickerControl]", host: { properties: { "attr.readonly": "isReadonly || null", "attr.placeholder": "placeholder" } }, providers: [provideNgxMask(ngxMaskProviderConfig)], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }, { directive: i1.WithDisabledState }, { directive: i2.NgxMaskDirective }], ngImport: i0 }); }
79
59
  };
80
60
  TimepickerInputControlDirective = __decorate([
81
61
  CSSComponent('timepicker__control')
@@ -90,8 +70,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
90
70
  '[attr.readonly]': 'isReadonly || null',
91
71
  '[attr.placeholder]': 'placeholder',
92
72
  },
93
- providers: [provideNgxMask(), NgxMaskPipe],
94
- hostDirectives: [WithTabIndex, WithDisabledState],
73
+ providers: [provideNgxMask(ngxMaskProviderConfig)],
74
+ hostDirectives: [WithTabIndex, WithDisabledState, NgxMaskDirective],
95
75
  }]
96
76
  }] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RpbWVwaWNrZXIvc3JjL2xpYi9kaXJlY3RpdmVzL3RpbWVwaWNrZXItaW5wdXQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBaUIsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBRTdEOzs7OztHQUtHO0FBWUksSUFBTSwrQkFBK0IsR0FBckMsTUFBTSwrQkFBZ0MsU0FBUSxxQkFBcUI7SUFBbkU7O1FBQ1ksZUFBVSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBb0JyRDs7V0FFRztRQUNhLGlCQUFZLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDaEYsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3RDLENBQUM7S0FtQ0g7SUEzREM7Ozs7T0FJRztJQUNILElBQWMsVUFBVTtRQUN0QixPQUFPO1lBQ0wsVUFBVSxFQUFFLEtBQUs7WUFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztZQUM5QixnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztZQUU1QyxRQUFRLEVBQUU7Z0JBQ1IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNwQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7YUFDaEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQVVEOzs7O09BSUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFjLFVBQVU7UUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxTQUFTLENBQUMsS0FBWTtRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDOUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkYsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlCLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBbUIsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsrR0EvRFUsK0JBQStCO21HQUEvQiwrQkFBK0IsOEtBSC9CLENBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxDQUFDOztBQUcvQiwrQkFBK0I7SUFYM0MsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0dBV3ZCLCtCQUErQixDQWdFM0M7OzRGQWhFWSwrQkFBK0I7a0JBVjNDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLElBQUksRUFBRTt3QkFDSixpQkFBaUIsRUFBRSxvQkFBb0I7d0JBQ3ZDLG9CQUFvQixFQUFFLGFBQWE7cUJBQ3BDO29CQUNELFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsQ0FBQztvQkFDMUMsY0FBYyxFQUFFLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaXRoRGlzYWJsZWRTdGF0ZSwgV2l0aFRhYkluZGV4IH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IElucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgTmd4TWFza0NvbmZpZywgTmd4TWFza1BpcGUsIHByb3ZpZGVOZ3hNYXNrIH0gZnJvbSAnbmd4LW1hc2snO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZyb21FdmVudCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUaW1lcGlja2VyU2VydmljZSB9IGZyb20gJy4uL3RpbWVwaWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUSU1FUElDS0VSX0NPTlRST0wgfSBmcm9tICcuLi90aW1lcGlja2VyLnRva2VuJztcbmltcG9ydCB7IHByb2Nlc3NJbnB1dFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvbmd4LW1hc2staGVscGVyJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gZW5oYW5jZSBhIHN0YW5kYXJkIGlucHV0IGVsZW1lbnQgZm9yIHRpbWUgcGlja2luZywgaW50ZWdyYXRpbmcgbWFzayBmdW5jdGlvbmFsaXR5IGZvciB0aW1lIGZvcm1hdC5cbiAqIEl0IGF1dG9tYXRpY2FsbHkgYWRhcHRzIHRvIGxvY2FsZSBzZXR0aW5ncyBwcm92aWRlZCBieSB0aGUgZW5jbG9zaW5nIGBUaW1lcGlja2VyQ29tcG9uZW50YCB0byBkaXNwbGF5IHRpbWUgaW4gdGhlIGFwcHJvcHJpYXRlIGZvcm1hdC5cbiAqXG4gKiBAZXh0ZW5kcyB7SW5wdXRDb250cm9sRGlyZWN0aXZlfVxuICovXG5AQ1NTQ29tcG9uZW50KCd0aW1lcGlja2VyX19jb250cm9sJylcbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2lucHV0W29keFRpbWVwaWNrZXJDb250cm9sXScsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ2lzUmVhZG9ubHkgfHwgbnVsbCcsXG4gICAgJ1thdHRyLnBsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcicsXG4gIH0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVOZ3hNYXNrKCksIE5neE1hc2tQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtXaXRoVGFiSW5kZXgsIFdpdGhEaXNhYmxlZFN0YXRlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSBleHRlbmRzIElucHV0Q29udHJvbERpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZXBpY2tlciA9IGluamVjdChUSU1FUElDS0VSX0NPTlRST0wpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVwaWNrZXJTZXJ2aWNlID0gaW5qZWN0KFRpbWVwaWNrZXJTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5neE1hc2tQaXBlID0gaW5qZWN0KE5neE1hc2tQaXBlKTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIG1hc2sgYXBwbGllZCB0byB0aGUgdGltZXBpY2tlciBpbnB1dC4gQWRqdXN0cyBiYXNlZCBvbiBsb2NhbGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQYXJ0aWFsPE5neE1hc2tDb25maWc+fSBUaGUgbWFzayBjb25maWd1cmF0aW9uIGZvciB0aGUgdGltZXBpY2tlciBpbnB1dC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgbWFza0NvbmZpZygpOiBQYXJ0aWFsPE5neE1hc2tDb25maWc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWRhdGlvbjogZmFsc2UsXG4gICAgICBhcG06IHRoaXMudGltZXBpY2tlci51c2VMb2NhbGUsXG4gICAgICBsZWFkWmVyb0RhdGVUaW1lOiAhdGhpcy50aW1lcGlja2VyLnVzZUxvY2FsZSxcblxuICAgICAgcGF0dGVybnM6IHtcbiAgICAgICAgQTogeyBwYXR0ZXJuOiBuZXcgUmVnRXhwKCdbQWFQcF0nKSB9LFxuICAgICAgICBNOiB7IHBhdHRlcm46IG5ldyBSZWdFeHAoJ00nKSB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbSBvZiB2YWx1ZSBjaGFuZ2VzIGZvciB0aGUgaW5wdXQgZWxlbWVudCwgYXBwbHlpbmcgdGhlIG1hc2sgYW5kIHByb2Nlc3NpbmcgdGhlIGlucHV0IGJhc2VkIG9uIGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSB2YWx1ZUNoYW5nZSQgPSBmcm9tRXZlbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdpbnB1dCcpLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBtYXAoKGV2ZW50KSA9PiB0aGlzLmFwcGx5TWFzayhldmVudCkpLFxuICApO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0IGJhc2VkIG9uIGxvY2FsZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50aW1lcGlja2VyU2VydmljZS5nZXRQbGFjZWhvbGRlcih0aGlzLnRpbWVwaWNrZXIudXNlTG9jYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgaW5wdXQgaXMgcmVhZG9ubHksIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcGFyZW50IHRpbWVwaWNrZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCBzaG91bGQgYmUgcmVhZG9ubHk7IG90aGVyd2lzZSwgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lcGlja2VyLmlzUmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGltZSBmb3JtYXQgbWFzayB0byB0aGUgaW5wdXQgdmFsdWUsIHRyYW5zZm9ybWluZyBhbmQgcmV0dXJuaW5nIHRoZSBtYXNrZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIGlucHV0IGV2ZW50IHRyaWdnZXJpbmcgdGhlIG1hc2sgYXBwbGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBtYXNrZWQgaW5wdXQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5TWFzayhldmVudDogRXZlbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hc2sgPSB0aGlzLnRpbWVwaWNrZXIudXNlTG9jYWxlID8gJ0hoOm0wIEFNJyA6ICdIaDptMCc7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5uZ3hNYXNrUGlwZS50cmFuc2Zvcm0odGhpcy5uYXRpdmVFbGVtZW50VmFsdWUsIG1hc2ssIHRoaXMubWFza0NvbmZpZyk7XG4gICAgaWYgKHRoaXMudGltZXBpY2tlci51c2VMb2NhbGUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc0lucHV0VmFsdWUodmFsdWUsIGV2ZW50IGFzIElucHV0RXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLm5hdGl2ZUVsZW1lbnRWYWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl19
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RpbWVwaWNrZXIvc3JjL2xpYi9kaXJlY3RpdmVzL3RpbWVwaWNrZXItaW5wdXQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRXpEOzs7OztHQUtHO0FBWUksSUFBTSwrQkFBK0IsR0FBckMsTUFBTSwrQkFBZ0MsU0FBUSxxQkFBcUI7SUFBbkU7O1FBQ1ksZUFBVSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7S0FrQzdGO0lBaENDOzs7O09BSUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYyxVQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLFNBQWtCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTztRQUNuQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzlDLFNBQVMsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzdHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3ZHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7K0dBcENVLCtCQUErQjttR0FBL0IsK0JBQStCLDhLQUgvQixDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDOztBQUd2QywrQkFBK0I7SUFYM0MsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0dBV3ZCLCtCQUErQixDQXFDM0M7OzRGQXJDWSwrQkFBK0I7a0JBVjNDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLElBQUksRUFBRTt3QkFDSixpQkFBaUIsRUFBRSxvQkFBb0I7d0JBQ3ZDLG9CQUFvQixFQUFFLGFBQWE7cUJBQ3BDO29CQUNELFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUNsRCxjQUFjLEVBQUUsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3BFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpdGhEaXNhYmxlZFN0YXRlLCBXaXRoVGFiSW5kZXggfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgSW5wdXRDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9jdXN0b20tZm9ybS1jb250cm9sJztcbmltcG9ydCB7IGluaXROZ3hNYXNrLCBuZ3hNYXNrUHJvdmlkZXJDb25maWcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2RhdGUtaW5wdXQnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IE5neE1hc2tEaXJlY3RpdmUsIHByb3ZpZGVOZ3hNYXNrIH0gZnJvbSAnbmd4LW1hc2snO1xuaW1wb3J0IHsgVGltZXBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi90aW1lcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVElNRVBJQ0tFUl9DT05UUk9MIH0gZnJvbSAnLi4vdGltZXBpY2tlci50b2tlbic7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRvIGVuaGFuY2UgYSBzdGFuZGFyZCBpbnB1dCBlbGVtZW50IGZvciB0aW1lIHBpY2tpbmcsIGludGVncmF0aW5nIG1hc2sgZnVuY3Rpb25hbGl0eSBmb3IgdGltZSBmb3JtYXQuXG4gKiBJdCBhdXRvbWF0aWNhbGx5IGFkYXB0cyB0byBsb2NhbGUgc2V0dGluZ3MgcHJvdmlkZWQgYnkgdGhlIGVuY2xvc2luZyBgVGltZXBpY2tlckNvbXBvbmVudGAgdG8gZGlzcGxheSB0aW1lIGluIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQuXG4gKlxuICogQGV4dGVuZHMge0lucHV0Q29udHJvbERpcmVjdGl2ZX1cbiAqL1xuQENTU0NvbXBvbmVudCgndGltZXBpY2tlcl9fY29udHJvbCcpXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpbnB1dFtvZHhUaW1lcGlja2VyQ29udHJvbF0nLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnJlYWRvbmx5XSc6ICdpc1JlYWRvbmx5IHx8IG51bGwnLFxuICAgICdbYXR0ci5wbGFjZWhvbGRlcl0nOiAncGxhY2Vob2xkZXInLFxuICB9LFxuICBwcm92aWRlcnM6IFtwcm92aWRlTmd4TWFzayhuZ3hNYXNrUHJvdmlkZXJDb25maWcpXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtXaXRoVGFiSW5kZXgsIFdpdGhEaXNhYmxlZFN0YXRlLCBOZ3hNYXNrRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSBleHRlbmRzIElucHV0Q29udHJvbERpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZXBpY2tlciA9IGluamVjdChUSU1FUElDS0VSX0NPTlRST0wpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVwaWNrZXJTZXJ2aWNlID0gaW5qZWN0KFRpbWVwaWNrZXJTZXJ2aWNlKTtcbiAgcHVibGljIHJlYWRvbmx5IG5neE1hc2tEaXJlY3RpdmUgPSBpbmplY3QoTmd4TWFza0RpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0IGJhc2VkIG9uIGxvY2FsZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50aW1lcGlja2VyU2VydmljZS51c2VMb2NhbGUoKSA/ICctLTotLSAtLScgOiAnLS06LS0nO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGltZXBpY2tlciBpbnB1dCBpcyByZWFkb25seSwgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBwYXJlbnQgdGltZXBpY2tlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHNob3VsZCBiZSByZWFkb25seTsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVwaWNrZXIuaXNSZWFkb25seTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aW1lIGZvcm1hdCBtYXNrIHRvIHRoZSBpbnB1dCB2YWx1ZSwgdHJhbnNmb3JtaW5nIGFuZCByZXR1cm5pbmcgdGhlIG1hc2tlZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnQgdHJpZ2dlcmluZyB0aGUgbWFzayBhcHBsaWNhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG1hc2tlZCBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBhcHBseU1hc2sodXNlTG9jYWxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5neE1hc2tEaXJlY3RpdmUpIHJldHVybjtcbiAgICBjb25zdCBtYXNrID0gdXNlTG9jYWxlID8gJ0hoOm0wIEFNJyA6ICdIaDptMCc7XG4gICAgdXNlTG9jYWxlICE9PSB0aGlzLm5neE1hc2tEaXJlY3RpdmUuX21hc2tTZXJ2aWNlLmFwbSAmJiAodGhpcy5uZ3hNYXNrRGlyZWN0aXZlLl9tYXNrU2VydmljZS5hcG0gPSB1c2VMb2NhbGUpO1xuICAgIGlmIChPYmplY3QuaGFzT3duKHRoaXMubmd4TWFza0RpcmVjdGl2ZSwgJ19tYXNrVmFsdWUnKSAmJiB0aGlzLm5neE1hc2tEaXJlY3RpdmVbJ19tYXNrVmFsdWUnXSAhPT0gbWFzaykge1xuICAgICAgaW5pdE5neE1hc2sodGhpcy5uZ3hNYXNrRGlyZWN0aXZlLCBtYXNrKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -31,8 +31,10 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
31
31
  * @default false
32
32
  */
33
33
  set useLocale(val) {
34
+ this.timepickerService.useLocale.set(val);
35
+ this.dateField?.applyMask(val);
34
36
  if (this.value && this.dateField) {
35
- const time = this.timepickerService.getLocalizedTimeFormat(this.value, val);
37
+ const time = this.timepickerService.getLocalizedTimeFormat(this.value);
36
38
  this.updateValue(time);
37
39
  this.dateField.nativeElementValue = time;
38
40
  }
@@ -128,8 +130,9 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
128
130
  */
129
131
  writeValue(value) {
130
132
  super.writeValue(value);
131
- if (value === null || this.timepickerService.isValidTime(value))
133
+ if (value === null || this.timepickerService.isValidTime(value)) {
132
134
  this.updateInputValue();
135
+ }
133
136
  }
134
137
  onOpen() {
135
138
  this.keyManager = new ActiveDescendantKeyManager(this.options).withHomeAndEnd();
@@ -147,7 +150,17 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
147
150
  }
148
151
  }
149
152
  handleDateFieldChanges() {
150
- this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((time) => this.updateValue(time ?? null));
153
+ this.dateField?.applyMask(this.useLocale);
154
+ this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe((time) => {
155
+ const normalized = typeof time === 'string' ? time.trim() : '';
156
+ if (!normalized) {
157
+ this.updateValue(null);
158
+ return;
159
+ }
160
+ if (this.timepickerService.is12HourFormat(normalized) === this._useLocale) {
161
+ this.updateValue(this.timepickerService.getLocalizedTimeFormat(normalized));
162
+ }
163
+ });
151
164
  }
152
165
  resetValue(e) {
153
166
  e.stopImmediatePropagation();
@@ -182,7 +195,7 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
182
195
  updateInputValue() {
183
196
  if (!this.dateField)
184
197
  return;
185
- this.dateField.nativeElementValue = this.timepickerService.getLocalizedTimeFormat(this.value, this.useLocale);
198
+ this.dateField.nativeElementValue = this.timepickerService.getLocalizedTimeFormat(this.value);
186
199
  }
187
200
  scrollToActiveOption(option, _opts = {}) {
188
201
  if (isFunction(option.element.nativeElement.scrollIntoView)) {
@@ -192,7 +205,7 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
192
205
  setOption(option) {
193
206
  if (!option || option.disabled)
194
207
  return;
195
- const time = this.timepickerService.getLocalizedTimeFormat(option.getLabel(), this.useLocale);
208
+ const time = this.timepickerService.getLocalizedTimeFormat(option.getLabel());
196
209
  this.dateField && (this.dateField.nativeElementValue = time);
197
210
  this.updateValue(time);
198
211
  }
@@ -204,6 +217,7 @@ let TimepickerComponent = class TimepickerComponent extends CustomFormControl {
204
217
  provide: TIMEPICKER_CONTROL,
205
218
  useExisting: forwardRef(() => TimepickerComponent),
206
219
  },
220
+ TimepickerService,
207
221
  ], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "dateField", first: true, predicate: TimepickerInputControlDirective, descendants: true }, { propertyName: "options", predicate: TimepickerOptionComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"odx-timepicker__wrapper\">\n <input [value]=\"value\" odxTimepickerControl type=\"text\" />\n</div>\n\n<odx-action-group class=\"odx-timepicker__trigger-wrapper odx-no-margin\">\n @if (clearable() && value) {\n <button class=\"odx-timepicker__clear\" odxButton size=\"small\" aria-label=\"Reset time\" (click)=\"resetValue($event)\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n class=\"odx-timepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n aria-label=\"Select time\"\n [odxDropdown]=\"timeList\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, position: 'bottom-start' }\"\n [odxDropdownTriggerElement]=\"dropdownTrigger.element.nativeElement\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n (odxDropdownAfterOpen)=\"onOpen()\"\n >\n <odx-icon name=\"chevron-down\" />\n </button>\n</odx-action-group>\n\n<ng-template #timeList>\n <div class=\"odx-timepicker__option-list\" role=\"listbox\">\n @for (time of timeStampsList; track $index) {\n <odx-timepicker-option [value]=\"time\" [disabled]=\"!inTimeRange(time)\" (selected)=\"timeSelected($event)\">{{ time }}</odx-timepicker-option>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i1.DisabledController, selector: "[disabled]", inputs: ["disabled"] }, { kind: "directive", type: i2.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: TimepickerOptionComponent, selector: "odx-timepicker-option", outputs: ["selected"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "directive", type: TimepickerInputControlDirective, selector: "input[odxTimepickerControl]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
208
222
  };
209
223
  TimepickerComponent = __decorate([
@@ -220,6 +234,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
220
234
  provide: TIMEPICKER_CONTROL,
221
235
  useExisting: forwardRef(() => TimepickerComponent),
222
236
  },
237
+ TimepickerService,
223
238
  ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [A11yModule, ActionGroupComponent, ButtonComponent, DropdownModule, TimepickerOptionComponent, IconComponent, TimepickerInputControlDirective], host: {
224
239
  '[attr.readonly]': 'readonlyController?.readonly || null',
225
240
  }, template: "<div class=\"odx-timepicker__wrapper\">\n <input [value]=\"value\" odxTimepickerControl type=\"text\" />\n</div>\n\n<odx-action-group class=\"odx-timepicker__trigger-wrapper odx-no-margin\">\n @if (clearable() && value) {\n <button class=\"odx-timepicker__clear\" odxButton size=\"small\" aria-label=\"Reset time\" (click)=\"resetValue($event)\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n class=\"odx-timepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n aria-label=\"Select time\"\n [odxDropdown]=\"timeList\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, position: 'bottom-start' }\"\n [odxDropdownTriggerElement]=\"dropdownTrigger.element.nativeElement\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n (odxDropdownAfterOpen)=\"onOpen()\"\n >\n <odx-icon name=\"chevron-down\" />\n </button>\n</odx-action-group>\n\n<ng-template #timeList>\n <div class=\"odx-timepicker__option-list\" role=\"listbox\">\n @for (time of timeStampsList; track $index) {\n <odx-timepicker-option [value]=\"time\" [disabled]=\"!inTimeRange(time)\" (selected)=\"timeSelected($event)\">{{ time }}</odx-timepicker-option>\n }\n </div>\n</ng-template>\n" }]
@@ -249,4 +264,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
249
264
  type: HostListener,
250
265
  args: ['keydown', ['$event']]
251
266
  }] } });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFD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O3VCQUFDLGlCQUFpQjtnQkFJbEIsT0FBTztzQkFEaEIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtnQkFZL0QsU0FBUztzQkFEbkIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFrQy9CLElBQUk7c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBVTlCLEdBQUc7c0JBRFQsS0FBSztnQkFVQyxHQUFHO3NCQURULEtBQUs7Z0JBU0MsU0FBUztzQkFEZixTQUFTO3VCQUFDLCtCQUErQjtnQkFxRWhDLHFCQUFxQjtzQkFGOUIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUNoQyxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUsIEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXNhYmxlZENvbnRyb2xsZXIsIFJlYWRvbmx5Q29udHJvbGxlciB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDdXN0b21Gb3JtQ29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBPcHRpb25Db250cm9sIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9vcHRpb24tY29udHJvbCc7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUsIERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIGlzRnVuY3Rpb24sIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGltZXBpY2tlci1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdGltZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUaW1lcGlja2VyU2VydmljZSB9IGZyb20gJy4vdGltZXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRJTUVQSUNLRVJfQ09OVFJPTCB9IGZyb20gJy4vdGltZXBpY2tlci50b2tlbic7XG5pbXBvcnQgeyBnZW5lcmF0ZVRpbWVTdGFtcHMgfSBmcm9tICcuL3V0aWxzL2dlbmVyYXRlLXRpbWUtc3RhbXBzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdGltZSBwaWNrZXIgY29tcG9uZW50IGFsbG93aW5nIHVzZXJzIHRvIHNlbGVjdCBhIHRpbWUgZnJvbSBhIGRyb3Bkb3duIGxpc3QuXG4gKiBUaGlzIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhciBmb3JtcyBhbmQgc3VwcG9ydHMgY3VzdG9taXphdGlvbiBmb3IgbG9jYWxlLCB0aW1lIHJhbmdlLCBhbmQgc3RlcCBpbnRlcnZhbHMuXG4gKlxuICogQHNlZSB7Q3VzdG9tRm9ybUNvbnRyb2x9XG4gKi9cbkBDU1NDb21wb25lbnQoJ3RpbWVwaWNrZXInKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LXRpbWVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJ3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBEaXNhYmxlZENvbnRyb2xsZXIuY29ubmVjdCgpLFxuICAgIFJlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogVElNRVBJQ0tFUl9DT05UUk9MLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZXBpY2tlckNvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVwaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDdXN0b21Gb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVwaWNrZXJTZXJ2aWNlID0gaW5qZWN0KFRpbWVwaWNrZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfdXNlTG9jYWxlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBrZXlNYW5hZ2VyPzogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8T3B0aW9uQ29udHJvbDxzdHJpbmc+PjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICBAVmlld0NoaWxkKERyb3Bkb3duRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd24/OiBEcm9wZG93bkRpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkcmVuKFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIHsgZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6IHRydWUgfSlcbiAgcHJvdGVjdGVkIG9wdGlvbnMhOiBRdWVyeUxpc3Q8VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudD47XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgc2hvdWxkIHVzZSBsb2NhbGUtc3BlY2lmaWMgdGltZSBmb3JtYXRzIEFNL1BNLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IHVzZUxvY2FsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmRhdGVGaWVsZCkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0TG9jYWxpemVkVGltZUZvcm1hdCh0aGlzLnZhbHVlLCB2YWwpO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aW1lKTtcbiAgICAgIHRoaXMuZGF0ZUZpZWxkLm5hdGl2ZUVsZW1lbnRWYWx1ZSA9IHRpbWU7XG4gICAgfVxuICAgIHRoaXMuX3VzZUxvY2FsZSA9IHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGxvY2FsZSBpcyBiZWluZyB1c2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgbG9jYWxlIGlzIGJlaW5nIHVzZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVzZUxvY2FsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlTG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBzZWxlY3Qgd2lsbCBkaXNwbGF5IGEgcmVzZXQgYnV0dG9uLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBjbGVhcmFibGUgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBzdGVwIGludGVydmFsIGJldHdlZW4gdGltZSBvcHRpb25zIGluIG1pbnV0ZXMuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDMwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc3RlcCA9IDMwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gdGltZSB2YWx1ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZCAoJzA1OjAwJyBvciAnMDU6MDAgQU0nKS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJzAwOjAwJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG1pbiA9ICcwMDowMCc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSB0aW1lIHZhbHVlIHRoYXQgY2FuIGJlIHNlbGVjdGVkICgnMjI6MDAnIG9yICcxMDowMCBQTScpLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnMjM6NTknXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4ID0gJzIzOjU5JztcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGl2ZSBmb3IgdGhlIHRpbWVwaWNrZXIgaW5wdXQgY29udHJvbC5cbiAgICpcbiAgICogQHR5cGUge1RpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgfCB1bmRlZmluZWR9XG4gICAqL1xuICBAVmlld0NoaWxkKFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUpXG4gIHB1YmxpYyBkYXRlRmllbGQ/OiBUaW1lcGlja2VySW5wdXRDb250cm9sRGlyZWN0aXZlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG51bGwpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZURhdGVGaWVsZENoYW5nZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHRpbWUgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1RpbWVwaWNrZXJPcHRpb25Db21wb25lbnR9IG9wdGlvbiAtIFRoZSB0aW1lIG9wdGlvbiB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzVGltZU9wdGlvblNlbGVjdGVkKG9wdGlvbjogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBvcHRpb24udmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgc2VsZWN0aW9uIG9mIGEgdGltZSBvcHRpb24gZnJvbSB0aGUgZHJvcGRvd24sIHVwZGF0aW5nIHRoZSBpbnB1dCBmaWVsZCBhbmQgY2xvc2luZyB0aGUgZHJvcGRvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCB8IHVuZGVmaW5lZH0gb3B0aW9uIC0gVGhlIHNlbGVjdGVkIHRpbWUgb3B0aW9uIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyB0aW1lU2VsZWN0ZWQob3B0aW9uPzogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2V0T3B0aW9uKG9wdGlvbik7XG4gICAgdGhpcy5kcm9wZG93bj8uaXNPcGVuICYmIHRoaXMuZHJvcGRvd24/LmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdGltZSBpcyB3aXRoaW4gdGhlIGFsbG93ZWQgdGltZSByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWUgLSBUaGUgdGltZSB0byBjaGVjaywgaW4gJ0hIOm1tJyBvciAnSEg6bW0gQU0vUE0nIGZvcm1hdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRpbWUgaXMgd2l0aGluIHRoZSByYW5nZTsgb3RoZXJ3aXNlLCBmYWxzZS5cbiAgICovXG4gIHB1YmxpYyBpblRpbWVSYW5nZSh0aW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lcGlja2VyU2VydmljZS5tYXhWYWxpZGF0aW9uKHRpbWUsIHRoaXMubWF4KSAmJiB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLm1pblZhbGlkYXRpb24odGltZSwgdGhpcy5taW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgbGlzdCBvZiB0aW1lIG9wdGlvbnMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgc3RlcCBpbnRlcnZhbCBhbmQgbG9jYWxlIHNldHRpbmdzIEFNL1BNLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFuIGFycmF5IG9mIHRpbWUgc3RyaW5ncyBpbiAnSEg6bW0nIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGltZVN0YW1wc0xpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBnZW5lcmF0ZVRpbWVTdGFtcHModGhpcy5zdGVwLCB0aGlzLnVzZUxvY2FsZSk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgZWxlbWVudC5cbiAgICogUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHZhbHVlIC0gVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHRoaXMudGltZXBpY2tlclNlcnZpY2UuaXNWYWxpZFRpbWUodmFsdWUpKSB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE9wdGlvbkNvbnRyb2w8c3RyaW5nPj4odGhpcy5vcHRpb25zKS53aXRoSG9tZUFuZEVuZCgpO1xuICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uQmFzZWRPbkN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRyb2xsZXJFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmtleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtIGFzIFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQ7XG4gICAgYWN0aXZlT3B0aW9uICYmIHRoaXMuc2Nyb2xsVG9BY3RpdmVPcHRpb24oYWN0aXZlT3B0aW9uLCB7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJykge1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNldE9wdGlvbihhY3RpdmVPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVEYXRlRmllbGRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZpZWxkPy52YWx1ZUNoYW5nZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHRpbWUpID0+IHRoaXMudXBkYXRlVmFsdWUodGltZSA/PyBudWxsKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRWYWx1ZShlOiBFdmVudCk6IHZvaWQge1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlT3B0aW9uQmFzZWRPbkN1cnJlbnRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmlzU2VsZWN0ZWQpO1xuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlT3B0aW9uKGlzU2VsZWN0ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2YXRlTmVhcmVzdFRpbWVPcHRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVPcHRpb24ob3B0aW9uOiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyICYmIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG9wdGlvbik7XG4gICAgdGhpcy5zY3JvbGxUb0FjdGl2ZU9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZU5lYXJlc3RUaW1lT3B0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgaXNOZWFyZXN0ID0gdGhpcy5maW5kTmVhcmVzdFRpbWVPcHRpb24oY3VycmVudERhdGUpO1xuICAgICAgaWYgKGlzTmVhcmVzdCkge1xuICAgICAgICB0aGlzLmFjdGl2YXRlT3B0aW9uKGlzTmVhcmVzdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTmVhcmVzdFRpbWVPcHRpb24oY3VycmVudERhdGU6IERhdGUpOiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdmFpbGFibGVUaW1lU2xvdHMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uZGlzYWJsZWQpO1xuICAgIGNvbnN0IG5lYXJlc3RUaW1lVmFsdWUgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmZpbmRDbG9zZXN0RGF0ZShcbiAgICAgIGF2YWlsYWJsZVRpbWVTbG90cy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKSBhcyBzdHJpbmdbXSxcbiAgICAgIGAke2N1cnJlbnREYXRlLmdldEhvdXJzKCl9OiR7Y3VycmVudERhdGUuZ2V0TWludXRlcygpfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBhdmFpbGFibGVUaW1lU2xvdHMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IG5lYXJlc3RUaW1lVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRlRmllbGQpIHJldHVybjtcbiAgICB0aGlzLmRhdGVGaWVsZC5uYXRpdmVFbGVtZW50VmFsdWUgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldExvY2FsaXplZFRpbWVGb3JtYXQodGhpcy52YWx1ZSwgdGhpcy51c2VMb2NhbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0FjdGl2ZU9wdGlvbihvcHRpb246IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIF9vcHRzOiBTY3JvbGxJbnRvVmlld09wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcpKSB7XG4gICAgICBvcHRpb24uZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInLCAuLi5fb3B0cyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbihvcHRpb24/OiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgdGltZSA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0TG9jYWxpemVkVGltZUZvcm1hdChvcHRpb24uZ2V0TGFiZWwoKSwgdGhpcy51c2VMb2NhbGUpO1xuICAgIHRoaXMuZGF0ZUZpZWxkICYmICh0aGlzLmRhdGVGaWVsZC5uYXRpdmVFbGVtZW50VmFsdWUgPSB0aW1lKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRpbWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX3dyYXBwZXJcIj5cbiAgPGlucHV0IFt2YWx1ZV09XCJ2YWx1ZVwiIG9keFRpbWVwaWNrZXJDb250cm9sIHR5cGU9XCJ0ZXh0XCIgLz5cbjwvZGl2PlxuXG48b2R4LWFjdGlvbi1ncm91cCBjbGFzcz1cIm9keC10aW1lcGlja2VyX190cmlnZ2VyLXdyYXBwZXIgb2R4LW5vLW1hcmdpblwiPlxuICBAaWYgKGNsZWFyYWJsZSgpICYmIHZhbHVlKSB7XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm9keC10aW1lcGlja2VyX19jbGVhclwiIG9keEJ1dHRvbiBzaXplPVwic21hbGxcIiBhcmlhLWxhYmVsPVwiUmVzZXQgdGltZVwiIChjbGljayk9XCJyZXNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDxvZHgtaWNvbiBuYW1lPVwiY2xvc2VcIiBpY29uU2V0PVwiY29yZVwiIC8+XG4gICAgPC9idXR0b24+XG4gIH1cbiAgPGJ1dHRvblxuICAgICNkcm9wZG93blRyaWdnZXJcbiAgICBjbGFzcz1cIm9keC10aW1lcGlja2VyX190cmlnZ2VyXCJcbiAgICBvZHhCdXR0b25cbiAgICBzaXplPVwic21hbGxcIlxuICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgYXJpYS1sYWJlbD1cIlNlbGVjdCB0aW1lXCJcbiAgICBbb2R4RHJvcGRvd25dPVwidGltZUxpc3RcIlxuICAgIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwieyBtYXRjaFJlZmVyZW5jZVdpZHRoOiB0cnVlLCBwb3NpdGlvbjogJ2JvdHRvbS1zdGFydCcgfVwiXG4gICAgW29keERyb3Bkb3duVHJpZ2dlckVsZW1lbnRdPVwiZHJvcGRvd25UcmlnZ2VyLmVsZW1lbnQubmF0aXZlRWxlbWVudFwiXG4gICAgW29keERyb3Bkb3duUmVmZXJlbmNlRWxlbWVudF09XCJlbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIChvZHhEcm9wZG93bkJlZm9yZUNsb3NlKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAob2R4RHJvcGRvd25BZnRlck9wZW4pPVwib25PcGVuKClcIlxuICA+XG4gICAgPG9keC1pY29uIG5hbWU9XCJjaGV2cm9uLWRvd25cIiAvPlxuICA8L2J1dHRvbj5cbjwvb2R4LWFjdGlvbi1ncm91cD5cblxuPG5nLXRlbXBsYXRlICN0aW1lTGlzdD5cbiAgPGRpdiBjbGFzcz1cIm9keC10aW1lcGlja2VyX19vcHRpb24tbGlzdFwiIHJvbGU9XCJsaXN0Ym94XCI+XG4gICAgQGZvciAodGltZSBvZiB0aW1lU3RhbXBzTGlzdDsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8b2R4LXRpbWVwaWNrZXItb3B0aW9uIFt2YWx1ZV09XCJ0aW1lXCIgW2Rpc2FibGVkXT1cIiFpblRpbWVSYW5nZSh0aW1lKVwiIChzZWxlY3RlZCk9XCJ0aW1lU2VsZWN0ZWQoJGV2ZW50KVwiPnt7IHRpbWUgfX08L29keC10aW1lcGlja2VyLW9wdGlvbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFD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IjpbImltcG9ydCB7IEExMXlNb2R1bGUsIEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXNhYmxlZENvbnRyb2xsZXIsIFJlYWRvbmx5Q29udHJvbGxlciB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDdXN0b21Gb3JtQ29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBPcHRpb25Db250cm9sIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9vcHRpb24tY29udHJvbCc7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUsIERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIGlzRnVuY3Rpb24sIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGltZXBpY2tlci1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdGltZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUaW1lcGlja2VyU2VydmljZSB9IGZyb20gJy4vdGltZXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRJTUVQSUNLRVJfQ09OVFJPTCB9IGZyb20gJy4vdGltZXBpY2tlci50b2tlbic7XG5pbXBvcnQgeyBnZW5lcmF0ZVRpbWVTdGFtcHMgfSBmcm9tICcuL3V0aWxzL2dlbmVyYXRlLXRpbWUtc3RhbXBzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdGltZSBwaWNrZXIgY29tcG9uZW50IGFsbG93aW5nIHVzZXJzIHRvIHNlbGVjdCBhIHRpbWUgZnJvbSBhIGRyb3Bkb3duIGxpc3QuXG4gKiBUaGlzIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggQW5ndWxhciBmb3JtcyBhbmQgc3VwcG9ydHMgY3VzdG9taXphdGlvbiBmb3IgbG9jYWxlLCB0aW1lIHJhbmdlLCBhbmQgc3RlcCBpbnRlcnZhbHMuXG4gKlxuICogQHNlZSB7Q3VzdG9tRm9ybUNvbnRyb2x9XG4gKi9cbkBDU1NDb21wb25lbnQoJ3RpbWVwaWNrZXInKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LXRpbWVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJ3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBEaXNhYmxlZENvbnRyb2xsZXIuY29ubmVjdCgpLFxuICAgIFJlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogVElNRVBJQ0tFUl9DT05UUk9MLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZXBpY2tlckNvbXBvbmVudCksXG4gICAgfSxcbiAgICBUaW1lcGlja2VyU2VydmljZSxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBEcm9wZG93bk1vZHVsZSwgVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVwaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDdXN0b21Gb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVwaWNrZXJTZXJ2aWNlID0gaW5qZWN0KFRpbWVwaWNrZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfdXNlTG9jYWxlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBrZXlNYW5hZ2VyPzogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8T3B0aW9uQ29udHJvbDxzdHJpbmc+PjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICBAVmlld0NoaWxkKERyb3Bkb3duRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd24/OiBEcm9wZG93bkRpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkcmVuKFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIHsgZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6IHRydWUgfSlcbiAgcHJvdGVjdGVkIG9wdGlvbnMhOiBRdWVyeUxpc3Q8VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudD47XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgc2hvdWxkIHVzZSBsb2NhbGUtc3BlY2lmaWMgdGltZSBmb3JtYXRzIEFNL1BNLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IHVzZUxvY2FsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLnVzZUxvY2FsZS5zZXQodmFsKTtcbiAgICB0aGlzLmRhdGVGaWVsZD8uYXBwbHlNYXNrKHZhbCk7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy5kYXRlRmllbGQpIHtcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldExvY2FsaXplZFRpbWVGb3JtYXQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHRpbWUpO1xuICAgICAgdGhpcy5kYXRlRmllbGQubmF0aXZlRWxlbWVudFZhbHVlID0gdGltZTtcbiAgICB9XG4gICAgdGhpcy5fdXNlTG9jYWxlID0gdmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgbG9jYWxlIGlzIGJlaW5nIHVzZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBsb2NhbGUgaXMgYmVpbmcgdXNlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdXNlTG9jYWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl91c2VMb2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHNlbGVjdCB3aWxsIGRpc3BsYXkgYSByZXNldCBidXR0b24uXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIGNsZWFyYWJsZSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIHN0ZXAgaW50ZXJ2YWwgYmV0d2VlbiB0aW1lIG9wdGlvbnMgaW4gbWludXRlcy5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMzBcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBzdGVwID0gMzA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWluaW11bSB0aW1lIHZhbHVlIHRoYXQgY2FuIGJlIHNlbGVjdGVkICgnMDU6MDAnIG9yICcwNTowMCBBTScpLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnMDA6MDAnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluID0gJzAwOjAwJztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHRpbWUgdmFsdWUgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgKCcyMjowMCcgb3IgJzEwOjAwIFBNJykuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcyMzo1OSdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXggPSAnMjM6NTknO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aXZlIGZvciB0aGUgdGltZXBpY2tlciBpbnB1dCBjb250cm9sLlxuICAgKlxuICAgKiBAdHlwZSB7VGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBWaWV3Q2hpbGQoVGltZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSlcbiAgcHVibGljIGRhdGVGaWVsZD86IFRpbWVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlRGF0ZUZpZWxkQ2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdGltZSBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGltZXBpY2tlck9wdGlvbkNvbXBvbmVudH0gb3B0aW9uIC0gVGhlIHRpbWUgb3B0aW9uIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNUaW1lT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBzZWxlY3Rpb24gb2YgYSB0aW1lIG9wdGlvbiBmcm9tIHRoZSBkcm9wZG93biwgdXBkYXRpbmcgdGhlIGlucHV0IGZpZWxkIGFuZCBjbG9zaW5nIHRoZSBkcm9wZG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50IHwgdW5kZWZpbmVkfSBvcHRpb24gLSBUaGUgc2VsZWN0ZWQgdGltZSBvcHRpb24gY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHRpbWVTZWxlY3RlZChvcHRpb24/OiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZXRPcHRpb24ob3B0aW9uKTtcbiAgICB0aGlzLmRyb3Bkb3duPy5pc09wZW4gJiYgdGhpcy5kcm9wZG93bj8uY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0aW1lIGlzIHdpdGhpbiB0aGUgYWxsb3dlZCB0aW1lIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZSAtIFRoZSB0aW1lIHRvIGNoZWNrLCBpbiAnSEg6bW0nIG9yICdISDptbSBBTS9QTScgZm9ybWF0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGltZSBpcyB3aXRoaW4gdGhlIHJhbmdlOyBvdGhlcndpc2UsIGZhbHNlLlxuICAgKi9cbiAgcHVibGljIGluVGltZVJhbmdlKHRpbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLm1heFZhbGlkYXRpb24odGltZSwgdGhpcy5tYXgpICYmIHRoaXMudGltZXBpY2tlclNlcnZpY2UubWluVmFsaWRhdGlvbih0aW1lLCB0aGlzLm1pbik7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBsaXN0IG9mIHRpbWUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBzdGVwIGludGVydmFsIGFuZCBsb2NhbGUgc2V0dGluZ3MgQU0vUE0uXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2YgdGltZSBzdHJpbmdzIGluICdISDptbScgZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIGdldCB0aW1lU3RhbXBzTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlVGltZVN0YW1wcyh0aGlzLnN0ZXAsIHRoaXMudXNlTG9jYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBlbGVtZW50LlxuICAgKiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdGhpcy50aW1lcGlja2VyU2VydmljZS5pc1ZhbGlkVGltZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE9wdGlvbkNvbnRyb2w8c3RyaW5nPj4odGhpcy5vcHRpb25zKS53aXRoSG9tZUFuZEVuZCgpO1xuICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uQmFzZWRPbkN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRyb2xsZXJFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkpIHJldHVybjtcbiAgICB0aGlzLmtleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtIGFzIFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQ7XG4gICAgYWN0aXZlT3B0aW9uICYmIHRoaXMuc2Nyb2xsVG9BY3RpdmVPcHRpb24oYWN0aXZlT3B0aW9uLCB7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJykge1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNldE9wdGlvbihhY3RpdmVPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVEYXRlRmllbGRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZpZWxkPy5hcHBseU1hc2sodGhpcy51c2VMb2NhbGUpO1xuICAgIHRoaXMuZGF0ZUZpZWxkPy52YWx1ZUNoYW5nZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHRpbWUpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0eXBlb2YgdGltZSA9PT0gJ3N0cmluZycgPyB0aW1lLnRyaW0oKSA6ICcnO1xuICAgICAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmlzMTJIb3VyRm9ybWF0KG5vcm1hbGl6ZWQpID09PSB0aGlzLl91c2VMb2NhbGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldExvY2FsaXplZFRpbWVGb3JtYXQobm9ybWFsaXplZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0VmFsdWUoZTogRXZlbnQpOiB2b2lkIHtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZU9wdGlvbkJhc2VkT25DdXJyZW50VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5pc1NlbGVjdGVkKTtcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU9wdGlvbihpc1NlbGVjdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmF0ZU5lYXJlc3RUaW1lT3B0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlT3B0aW9uKG9wdGlvbjogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5TWFuYWdlciAmJiB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShvcHRpb24pO1xuICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVOZWFyZXN0VGltZU9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzTmVhcmVzdCA9IHRoaXMuZmluZE5lYXJlc3RUaW1lT3B0aW9uKGN1cnJlbnREYXRlKTtcbiAgICAgIGlmIChpc05lYXJlc3QpIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZU9wdGlvbihpc05lYXJlc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZE5lYXJlc3RUaW1lT3B0aW9uKGN1cnJlbnREYXRlOiBEYXRlKTogVGltZXBpY2tlck9wdGlvbkNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXZhaWxhYmxlVGltZVNsb3RzID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmRpc2FibGVkKTtcbiAgICBjb25zdCBuZWFyZXN0VGltZVZhbHVlID0gdGhpcy50aW1lcGlja2VyU2VydmljZS5maW5kQ2xvc2VzdERhdGUoXG4gICAgICBhdmFpbGFibGVUaW1lU2xvdHMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSkgYXMgc3RyaW5nW10sXG4gICAgICBgJHtjdXJyZW50RGF0ZS5nZXRIb3VycygpfToke2N1cnJlbnREYXRlLmdldE1pbnV0ZXMoKX1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlVGltZVNsb3RzLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBuZWFyZXN0VGltZVZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW5wdXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUZpZWxkKSByZXR1cm47XG4gICAgdGhpcy5kYXRlRmllbGQubmF0aXZlRWxlbWVudFZhbHVlID0gdGhpcy50aW1lcGlja2VyU2VydmljZS5nZXRMb2NhbGl6ZWRUaW1lRm9ybWF0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0FjdGl2ZU9wdGlvbihvcHRpb246IFRpbWVwaWNrZXJPcHRpb25Db21wb25lbnQsIF9vcHRzOiBTY3JvbGxJbnRvVmlld09wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcpKSB7XG4gICAgICBvcHRpb24uZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInLCAuLi5fb3B0cyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbihvcHRpb24/OiBUaW1lcGlja2VyT3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgdGltZSA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0TG9jYWxpemVkVGltZUZvcm1hdChvcHRpb24uZ2V0TGFiZWwoKSk7XG4gICAgdGhpcy5kYXRlRmllbGQgJiYgKHRoaXMuZGF0ZUZpZWxkLm5hdGl2ZUVsZW1lbnRWYWx1ZSA9IHRpbWUpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGltZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvZHgtdGltZXBpY2tlcl9fd3JhcHBlclwiPlxuICA8aW5wdXQgW3ZhbHVlXT1cInZhbHVlXCIgb2R4VGltZXBpY2tlckNvbnRyb2wgdHlwZT1cInRleHRcIiAvPlxuPC9kaXY+XG5cbjxvZHgtYWN0aW9uLWdyb3VwIGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX3RyaWdnZXItd3JhcHBlciBvZHgtbm8tbWFyZ2luXCI+XG4gIEBpZiAoY2xlYXJhYmxlKCkgJiYgdmFsdWUpIHtcbiAgICA8YnV0dG9uIGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX2NsZWFyXCIgb2R4QnV0dG9uIHNpemU9XCJzbWFsbFwiIGFyaWEtbGFiZWw9XCJSZXNldCB0aW1lXCIgKGNsaWNrKT1cInJlc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPG9keC1pY29uIG5hbWU9XCJjbG9zZVwiIGljb25TZXQ9XCJjb3JlXCIgLz5cbiAgICA8L2J1dHRvbj5cbiAgfVxuICA8YnV0dG9uXG4gICAgI2Ryb3Bkb3duVHJpZ2dlclxuICAgIGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX3RyaWdnZXJcIlxuICAgIG9keEJ1dHRvblxuICAgIHNpemU9XCJzbWFsbFwiXG4gICAgdmFyaWFudD1cImdob3N0XCJcbiAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHRpbWVcIlxuICAgIFtvZHhEcm9wZG93bl09XCJ0aW1lTGlzdFwiXG4gICAgW29keERyb3Bkb3duT3B0aW9uc109XCJ7IG1hdGNoUmVmZXJlbmNlV2lkdGg6IHRydWUsIHBvc2l0aW9uOiAnYm90dG9tLXN0YXJ0JyB9XCJcbiAgICBbb2R4RHJvcGRvd25UcmlnZ2VyRWxlbWVudF09XCJkcm9wZG93blRyaWdnZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50XCJcbiAgICBbb2R4RHJvcGRvd25SZWZlcmVuY2VFbGVtZW50XT1cImVsZW1lbnQubmF0aXZlRWxlbWVudFwiXG4gICAgKG9keERyb3Bkb3duQmVmb3JlQ2xvc2UpPVwib25Ub3VjaGVkKClcIlxuICAgIChvZHhEcm9wZG93bkFmdGVyT3Blbik9XCJvbk9wZW4oKVwiXG4gID5cbiAgICA8b2R4LWljb24gbmFtZT1cImNoZXZyb24tZG93blwiIC8+XG4gIDwvYnV0dG9uPlxuPC9vZHgtYWN0aW9uLWdyb3VwPlxuXG48bmctdGVtcGxhdGUgI3RpbWVMaXN0PlxuICA8ZGl2IGNsYXNzPVwib2R4LXRpbWVwaWNrZXJfX29wdGlvbi1saXN0XCIgcm9sZT1cImxpc3Rib3hcIj5cbiAgICBAZm9yICh0aW1lIG9mIHRpbWVTdGFtcHNMaXN0OyB0cmFjayAkaW5kZXgpIHtcbiAgICAgIDxvZHgtdGltZXBpY2tlci1vcHRpb24gW3ZhbHVlXT1cInRpbWVcIiBbZGlzYWJsZWRdPVwiIWluVGltZVJhbmdlKHRpbWUpXCIgKHNlbGVjdGVkKT1cInRpbWVTZWxlY3RlZCgkZXZlbnQpXCI+e3sgdGltZSB9fTwvb2R4LXRpbWVwaWNrZXItb3B0aW9uPlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,4 +1,4 @@
1
- import { Injectable, inject } from '@angular/core';
1
+ import { Injectable, inject, signal } from '@angular/core';
2
2
  import { WindowRef } from '@odx/angular';
3
3
  import { isAfter, isBefore, isEqual } from 'date-fns';
4
4
  import * as i0 from "@angular/core";
@@ -9,14 +9,13 @@ import * as i0 from "@angular/core";
9
9
  export class TimepickerService {
10
10
  constructor() {
11
11
  this.windowRef = inject(WindowRef);
12
+ this.useLocale = signal(false);
12
13
  }
13
14
  /**
14
- * Generates a placeholder string for time input fields.
15
- *
16
- * @param {boolean} [apm=false] - Specifies if the placeholder should include AM/PM notation.
17
- * @returns {string} The placeholder string.
15
+ * @deprecated Will be removed in a future major version. Use `useLocale` signal instead.
16
+ * Generates a placeholder string for time input fields, preserving legacy API.
18
17
  */
19
- getPlaceholder(apm = false) {
18
+ getPlaceholder(apm = this.useLocale()) {
20
19
  return apm ? '--:-- --' : '--:--';
21
20
  }
22
21
  /**
@@ -38,11 +37,15 @@ export class TimepickerService {
38
37
  * @returns {time is string} True if the value is a valid time string, false otherwise.
39
38
  */
40
39
  isValidTime(time) {
41
- if (!time || typeof time !== 'string')
40
+ if (typeof time !== 'string')
41
+ return false;
42
+ const trimmedTime = time.trim();
43
+ if (!trimmedTime)
42
44
  return false;
43
- // Matches "HH:mm" (24h) or "HH:mm AM/PM" (12h)
44
- const regex = /^([01]\d|2[0-3]):([0-5]\d)(\s?(AM|PM|am|pm))?$/;
45
- return regex.test(time.trim());
45
+ return Boolean(this.parseTimeString(trimmedTime.toUpperCase()));
46
+ }
47
+ is12HourFormat(value) {
48
+ return this.isValidTime(value) && !!this.parseTimeString(value.toUpperCase())?.hour12;
46
49
  }
47
50
  /**
48
51
  * Validates if the given time is greater than or equal to a minimum time constraint.
@@ -83,19 +86,43 @@ export class TimepickerService {
83
86
  * @param {boolean} [hour12=false] - Specifies if the output should use 12-hour format with AM/PM notation.
84
87
  * @returns {string} The formatted time string, or an empty string if the input time is invalid.
85
88
  */
86
- getLocalizedTimeFormat(time, hour12 = false) {
89
+ getLocalizedTimeFormat(time, hour12) {
87
90
  if (!this.isValidTime(time))
88
91
  return '';
89
- const locale = hour12 ? 'en-US' : 'en-GB';
92
+ const shouldUseHour12 = typeof hour12 === 'boolean' ? hour12 : this.useLocale();
93
+ const locale = shouldUseHour12 ? 'en-US' : 'en-GB';
90
94
  const [date] = this.convertToDates([time]);
91
95
  return new this.windowRef.nativeWindow.Intl.DateTimeFormat(locale, {
92
96
  hour: '2-digit',
93
97
  minute: '2-digit',
94
- hour12,
98
+ hour12: shouldUseHour12,
95
99
  }).format(date);
96
100
  }
97
101
  convertToDates(times) {
98
- return times.map((time) => new Date(`${time} 2022-12-19`));
102
+ return times.map((time) => {
103
+ if (typeof time !== 'string')
104
+ return new Date(NaN);
105
+ const parsed = this.parseTimeString(time.toUpperCase());
106
+ if (!parsed)
107
+ return new Date(NaN);
108
+ const { hours, minutes } = parsed;
109
+ return new Date(2022, 11, 19, hours, minutes, 0, 0);
110
+ });
111
+ }
112
+ parseTimeString(time) {
113
+ const match = time.trim().match(/^([01]?\d|2[0-3]):([0-5]\d)(?:\s?(AM|PM))?$/);
114
+ if (!match)
115
+ return null;
116
+ let hours = Number(match[1]);
117
+ const minutes = Number(match[2]);
118
+ const period = match[3]?.toUpperCase();
119
+ if (period) {
120
+ if (period === 'PM' && hours < 12)
121
+ hours += 12;
122
+ if (period === 'AM' && hours === 12)
123
+ hours = 0;
124
+ }
125
+ return { hours, minutes, hour12: Boolean(period) };
99
126
  }
100
127
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimepickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
101
128
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimepickerService, providedIn: 'root' }); }
@@ -104,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
104
131
  type: Injectable,
105
132
  args: [{ providedIn: 'root' }]
106
133
  }] });
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGltZXBpY2tlci9zcmMvbGliL3RpbWVwaWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFFdEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVtQixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBK0ZoRDtJQTdGQzs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxHQUFHLEdBQUcsS0FBSztRQUMvQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWEsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUM1QyxNQUFNLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxPQUFPLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksV0FBVyxDQUFDLElBQWE7UUFDOUIsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEQsK0NBQStDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLGdEQUFnRCxDQUFDO1FBQy9ELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQzVDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxlQUFlLENBQUMsVUFBb0IsRUFBRSxVQUFrQjtRQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0QsT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHNCQUFzQixDQUFDLElBQWEsRUFBRSxNQUFNLEdBQUcsS0FBSztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDakUsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNO1NBQ1AsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWU7UUFDcEMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDOytHQS9GVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQURKLE1BQU07OzRGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNBZnRlciwgaXNCZWZvcmUsIGlzRXF1YWwgfSBmcm9tICdkYXRlLWZucyc7XG5cbi8qKlxuICogU2VydmljZSB0byBwcm92aWRlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aW1lcGlja2VyIGNvbXBvbmVudHMsIGluY2x1ZGluZyB2YWxpZGF0aW9uLCBwbGFjZWhvbGRlciBnZW5lcmF0aW9uLCBhbmQgZmluZGluZyB0aGUgY2xvc2VzdCB0aW1lLlxuICogSXQgYWxzbyBoYW5kbGVzIGxvY2FsZS1iYXNlZCB0aW1lIGZvcm1hdHRpbmcuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVGltZXBpY2tlclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBwbGFjZWhvbGRlciBzdHJpbmcgZm9yIHRpbWUgaW5wdXQgZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcG09ZmFsc2VdIC0gU3BlY2lmaWVzIGlmIHRoZSBwbGFjZWhvbGRlciBzaG91bGQgaW5jbHVkZSBBTS9QTSBub3RhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHBsYWNlaG9sZGVyIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBnZXRQbGFjZWhvbGRlcihhcG0gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwbSA/ICctLTotLSAtLScgOiAnLS06LS0nO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYSBtYXhpbXVtIHRpbWUgY29uc3RyYWludC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWUgLSBUaGUgdGltZSB0byB2YWxpZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1heCAtIFRoZSBtYXhpbXVtIGFsbG93YWJsZSB0aW1lLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGltZSBpcyB2YWxpZCAoaS5lLiwgbm90IGFmdGVyIG1heCksIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBtYXhWYWxpZGF0aW9uKHRpbWU6IHN0cmluZywgbWF4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBbdGFyZ2V0VmFsdWUsIG1heFZhbHVlXSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RpbWUsIG1heF0pO1xuICAgIHJldHVybiBpc0JlZm9yZSh0YXJnZXRWYWx1ZSwgbWF4VmFsdWUpIHx8IGlzRXF1YWwodGFyZ2V0VmFsdWUsIG1heFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGEgdmFsaWQgdGltZSBzdHJpbmcgaW4gSEg6bW0gb3IgSEg6bW0gQU0vUE0gZm9ybWF0LlxuICAgKiBUaGlzIG1ldGhvZCBhbHNvIGFjdHMgYXMgYSB0eXBlIGd1YXJkLlxuICAgKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHRpbWUgLSBUaGUgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHt0aW1lIGlzIHN0cmluZ30gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCB0aW1lIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzVmFsaWRUaW1lKHRpbWU6IHVua25vd24pOiB0aW1lIGlzIHN0cmluZyB7XG4gICAgaWYgKCF0aW1lIHx8IHR5cGVvZiB0aW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIE1hdGNoZXMgXCJISDptbVwiICgyNGgpIG9yIFwiSEg6bW0gQU0vUE1cIiAoMTJoKVxuICAgIGNvbnN0IHJlZ2V4ID0gL14oWzAxXVxcZHwyWzAtM10pOihbMC01XVxcZCkoXFxzPyhBTXxQTXxhbXxwbSkpPyQvO1xuICAgIHJldHVybiByZWdleC50ZXN0KHRpbWUudHJpbSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgaWYgdGhlIGdpdmVuIHRpbWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGEgbWluaW11bSB0aW1lIGNvbnN0cmFpbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lIC0gVGhlIHRpbWUgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtaW4gLSBUaGUgbWluaW11bSBhbGxvd2FibGUgdGltZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRpbWUgaXMgdmFsaWQgKGkuZS4sIG5vdCBiZWZvcmUgbWluKSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIG1pblZhbGlkYXRpb24odGltZTogc3RyaW5nLCBtaW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFt0YXJnZXRWYWx1ZSwgbWluVmFsdWVdID0gdGhpcy5jb252ZXJ0VG9EYXRlcyhbdGltZSwgbWluXSk7XG4gICAgcmV0dXJuIGlzQWZ0ZXIodGFyZ2V0VmFsdWUsIG1pblZhbHVlKSB8fCBpc0VxdWFsKHRhcmdldFZhbHVlLCBtaW5WYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGNsb3Nlc3QgdGltZSB0byBhIHRhcmdldCB0aW1lIGZyb20gYSBsaXN0IG9mIHRpbWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB0aW1lU3RhbXBzIC0gVGhlIGxpc3Qgb2YgdGltZSBzdHJpbmdzIHRvIHNlYXJjaCB0aHJvdWdoIChlLmcuLCBbXCIxMDowMFwiLCBcIjEwOjMwXCIsIFwiMTE6MDBcIl0pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0VGltZSAtIFRoZSB0YXJnZXQgdGltZSBzdHJpbmcgdG8gZmluZCB0aGUgY2xvc2VzdCBtYXRjaCBmb3IgKGUuZy4sIFwiMTA6MzVcIikuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjbG9zZXN0IHRpbWUgc3RyaW5nIGZyb20gdGhlIGxpc3QgdG8gdGhlIHRhcmdldCwgZm9ybWF0dGVkIGFjY29yZGluZyB0byBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZmluZENsb3Nlc3REYXRlKHRpbWVTdGFtcHM6IHN0cmluZ1tdLCB0YXJnZXRUaW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IFt0YXJnZXRdID0gdGhpcy5jb252ZXJ0VG9EYXRlcyhbdGFyZ2V0VGltZV0pO1xuICAgIGNvbnN0IGRhdGVzQXJyYXkgPSB0aGlzLmNvbnZlcnRUb0RhdGVzKHRpbWVTdGFtcHMpO1xuXG4gICAgaWYgKGRhdGVzQXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5nZXRMb2NhbGl6ZWRUaW1lRm9ybWF0KHRhcmdldFRpbWUpO1xuXG4gICAgY29uc3QgY2xvc2VzdERhdGUgPSBkYXRlc0FycmF5LnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgcHJldkRpZmYgPSBNYXRoLmFicyhwcmV2LmdldFRpbWUoKSAtIHRhcmdldC5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgY3VyckRpZmYgPSBNYXRoLmFicyhjdXJyLmdldFRpbWUoKSAtIHRhcmdldC5nZXRUaW1lKCkpO1xuICAgICAgcmV0dXJuIGN1cnJEaWZmIDwgcHJldkRpZmYgPyBjdXJyIDogcHJldjtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhvdXJzID0gY2xvc2VzdERhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbWludXRlcyA9IGNsb3Nlc3REYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkVGltZUZvcm1hdChgJHtob3Vyc306JHttaW51dGVzfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSB0aW1lIHN0cmluZyB0byBhIGxvY2FsaXplZCB0aW1lIGZvcm1hdCB1c2luZyBJbnRsLkRhdGVUaW1lRm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHRpbWUgLSBUaGUgdGltZSBzdHJpbmcgdG8gZm9ybWF0IChlLmcuLCBcIjE0OjMwXCIpLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3VyMTI9ZmFsc2VdIC0gU3BlY2lmaWVzIGlmIHRoZSBvdXRwdXQgc2hvdWxkIHVzZSAxMi1ob3VyIGZvcm1hdCB3aXRoIEFNL1BNIG5vdGF0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IHRpbWUgaXMgaW52YWxpZC5cbiAgICovXG4gIHB1YmxpYyBnZXRMb2NhbGl6ZWRUaW1lRm9ybWF0KHRpbWU6IHVua25vd24sIGhvdXIxMiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFRpbWUodGltZSkpIHJldHVybiAnJztcbiAgICBjb25zdCBsb2NhbGUgPSBob3VyMTIgPyAnZW4tVVMnIDogJ2VuLUdCJztcbiAgICBjb25zdCBbZGF0ZV0gPSB0aGlzLmNvbnZlcnRUb0RhdGVzKFt0aW1lXSk7XG4gICAgcmV0dXJuIG5ldyB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHtcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgaG91cjEyLFxuICAgIH0pLmZvcm1hdChkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRGF0ZXModGltZXM6IHN0cmluZ1tdKTogRGF0ZVtdIHtcbiAgICByZXR1cm4gdGltZXMubWFwKCh0aW1lKSA9PiBuZXcgRGF0ZShgJHt0aW1lfSAyMDIyLTEyLTE5YCkpO1xuICB9XG59XG4iXX0=
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGltZXBpY2tlci9zcmMvbGliL3RpbWVwaWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRXREOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFbUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4QyxjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBd0hsQztJQXRIQzs7O09BR0c7SUFDSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDNUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakUsT0FBTyxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxJQUFhO1FBQzlCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQWE7UUFDakMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN4RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQzVDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxlQUFlLENBQUMsVUFBb0IsRUFBRSxVQUFrQjtRQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0QsT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHNCQUFzQixDQUFDLElBQWEsRUFBRSxNQUFnQjtRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGVBQWUsR0FBRyxPQUFPLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hGLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUNqRSxJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxlQUFlO1NBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFlO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtnQkFBRSxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNsQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFZO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRXZDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7Z0JBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3JELENBQUM7K0dBMUhVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IGlzQWZ0ZXIsIGlzQmVmb3JlLCBpc0VxdWFsIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gcHJvdmlkZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGltZXBpY2tlciBjb21wb25lbnRzLCBpbmNsdWRpbmcgdmFsaWRhdGlvbiwgcGxhY2Vob2xkZXIgZ2VuZXJhdGlvbiwgYW5kIGZpbmRpbmcgdGhlIGNsb3Nlc3QgdGltZS5cbiAqIEl0IGFsc28gaGFuZGxlcyBsb2NhbGUtYmFzZWQgdGltZSBmb3JtYXR0aW5nLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRpbWVwaWNrZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcblxuICBwdWJsaWMgdXNlTG9jYWxlID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24uIFVzZSBgdXNlTG9jYWxlYCBzaWduYWwgaW5zdGVhZC5cbiAgICogR2VuZXJhdGVzIGEgcGxhY2Vob2xkZXIgc3RyaW5nIGZvciB0aW1lIGlucHV0IGZpZWxkcywgcHJlc2VydmluZyBsZWdhY3kgQVBJLlxuICAgKi9cbiAgcHVibGljIGdldFBsYWNlaG9sZGVyKGFwbSA9IHRoaXMudXNlTG9jYWxlKCkpOiBzdHJpbmcge1xuICAgIHJldHVybiBhcG0gPyAnLS06LS0gLS0nIDogJy0tOi0tJztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgaWYgdGhlIGdpdmVuIHRpbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGEgbWF4aW11bSB0aW1lIGNvbnN0cmFpbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aW1lIC0gVGhlIHRpbWUgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXggLSBUaGUgbWF4aW11bSBhbGxvd2FibGUgdGltZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRpbWUgaXMgdmFsaWQgKGkuZS4sIG5vdCBhZnRlciBtYXgpLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgbWF4VmFsaWRhdGlvbih0aW1lOiBzdHJpbmcsIG1heDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3RhcmdldFZhbHVlLCBtYXhWYWx1ZV0gPSB0aGlzLmNvbnZlcnRUb0RhdGVzKFt0aW1lLCBtYXhdKTtcbiAgICByZXR1cm4gaXNCZWZvcmUodGFyZ2V0VmFsdWUsIG1heFZhbHVlKSB8fCBpc0VxdWFsKHRhcmdldFZhbHVlLCBtYXhWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhIHZhbGlkIHRpbWUgc3RyaW5nIGluIEhIOm1tIG9yIEhIOm1tIEFNL1BNIGZvcm1hdC5cbiAgICogVGhpcyBtZXRob2QgYWxzbyBhY3RzIGFzIGEgdHlwZSBndWFyZC5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSB0aW1lIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlLlxuICAgKiBAcmV0dXJucyB7dGltZSBpcyBzdHJpbmd9IFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgdGltZSBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc1ZhbGlkVGltZSh0aW1lOiB1bmtub3duKTogdGltZSBpcyBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdGltZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0cmltbWVkVGltZSA9IHRpbWUudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZFRpbWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcnNlVGltZVN0cmluZyh0cmltbWVkVGltZS50b1VwcGVyQ2FzZSgpKSk7XG4gIH1cblxuICBwdWJsaWMgaXMxMkhvdXJGb3JtYXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRUaW1lKHZhbHVlKSAmJiAhIXRoaXMucGFyc2VUaW1lU3RyaW5nKHZhbHVlLnRvVXBwZXJDYXNlKCkpPy5ob3VyMTI7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBnaXZlbiB0aW1lIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhIG1pbmltdW0gdGltZSBjb25zdHJhaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZSAtIFRoZSB0aW1lIHRvIHZhbGlkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWluIC0gVGhlIG1pbmltdW0gYWxsb3dhYmxlIHRpbWUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB0aW1lIGlzIHZhbGlkIChpLmUuLCBub3QgYmVmb3JlIG1pbiksIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBtaW5WYWxpZGF0aW9uKHRpbWU6IHN0cmluZywgbWluOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBbdGFyZ2V0VmFsdWUsIG1pblZhbHVlXSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RpbWUsIG1pbl0pO1xuICAgIHJldHVybiBpc0FmdGVyKHRhcmdldFZhbHVlLCBtaW5WYWx1ZSkgfHwgaXNFcXVhbCh0YXJnZXRWYWx1ZSwgbWluVmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjbG9zZXN0IHRpbWUgdG8gYSB0YXJnZXQgdGltZSBmcm9tIGEgbGlzdCBvZiB0aW1lcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdGltZVN0YW1wcyAtIFRoZSBsaXN0IG9mIHRpbWUgc3RyaW5ncyB0byBzZWFyY2ggdGhyb3VnaCAoZS5nLiwgW1wiMTA6MDBcIiwgXCIxMDozMFwiLCBcIjExOjAwXCJdKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFRpbWUgLSBUaGUgdGFyZ2V0IHRpbWUgc3RyaW5nIHRvIGZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2ggZm9yIChlLmcuLCBcIjEwOjM1XCIpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2xvc2VzdCB0aW1lIHN0cmluZyBmcm9tIHRoZSBsaXN0IHRvIHRoZSB0YXJnZXQsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gbG9jYWxlLlxuICAgKi9cbiAgcHVibGljIGZpbmRDbG9zZXN0RGF0ZSh0aW1lU3RhbXBzOiBzdHJpbmdbXSwgdGFyZ2V0VGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBbdGFyZ2V0XSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RhcmdldFRpbWVdKTtcbiAgICBjb25zdCBkYXRlc0FycmF5ID0gdGhpcy5jb252ZXJ0VG9EYXRlcyh0aW1lU3RhbXBzKTtcblxuICAgIGlmIChkYXRlc0FycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkVGltZUZvcm1hdCh0YXJnZXRUaW1lKTtcblxuICAgIGNvbnN0IGNsb3Nlc3REYXRlID0gZGF0ZXNBcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IHByZXZEaWZmID0gTWF0aC5hYnMocHJldi5nZXRUaW1lKCkgLSB0YXJnZXQuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IGN1cnJEaWZmID0gTWF0aC5hYnMoY3Vyci5nZXRUaW1lKCkgLSB0YXJnZXQuZ2V0VGltZSgpKTtcbiAgICAgIHJldHVybiBjdXJyRGlmZiA8IHByZXZEaWZmID8gY3VyciA6IHByZXY7XG4gICAgfSk7XG5cbiAgICBjb25zdCBob3VycyA9IGNsb3Nlc3REYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBjbG9zZXN0RGF0ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXplZFRpbWVGb3JtYXQoYCR7aG91cnN9OiR7bWludXRlc31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgdGltZSBzdHJpbmcgdG8gYSBsb2NhbGl6ZWQgdGltZSBmb3JtYXQgdXNpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5cbiAgICpcbiAgICogQHBhcmFtIHt1bmtub3dufSB0aW1lIC0gVGhlIHRpbWUgc3RyaW5nIHRvIGZvcm1hdCAoZS5nLiwgXCIxNDozMFwiKS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG91cjEyPWZhbHNlXSAtIFNwZWNpZmllcyBpZiB0aGUgb3V0cHV0IHNob3VsZCB1c2UgMTItaG91ciBmb3JtYXQgd2l0aCBBTS9QTSBub3RhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB0aW1lIHN0cmluZywgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBpbnB1dCB0aW1lIGlzIGludmFsaWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxpemVkVGltZUZvcm1hdCh0aW1lOiB1bmtub3duLCBob3VyMTI/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFRpbWUodGltZSkpIHJldHVybiAnJztcbiAgICBjb25zdCBzaG91bGRVc2VIb3VyMTIgPSB0eXBlb2YgaG91cjEyID09PSAnYm9vbGVhbicgPyBob3VyMTIgOiB0aGlzLnVzZUxvY2FsZSgpO1xuICAgIGNvbnN0IGxvY2FsZSA9IHNob3VsZFVzZUhvdXIxMiA/ICdlbi1VUycgOiAnZW4tR0InO1xuICAgIGNvbnN0IFtkYXRlXSA9IHRoaXMuY29udmVydFRvRGF0ZXMoW3RpbWVdKTtcbiAgICByZXR1cm4gbmV3IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5JbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwge1xuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBob3VyMTI6IHNob3VsZFVzZUhvdXIxMixcbiAgICB9KS5mb3JtYXQoZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0RhdGVzKHRpbWVzOiBzdHJpbmdbXSk6IERhdGVbXSB7XG4gICAgcmV0dXJuIHRpbWVzLm1hcCgodGltZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlVGltZVN0cmluZyh0aW1lLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgICAgY29uc3QgeyBob3VycywgbWludXRlcyB9ID0gcGFyc2VkO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKDIwMjIsIDExLCAxOSwgaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRpbWVTdHJpbmcodGltZTogc3RyaW5nKTogeyBob3VyczogbnVtYmVyOyBtaW51dGVzOiBudW1iZXI7IGhvdXIxMjogYm9vbGVhbiB9IHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSB0aW1lLnRyaW0oKS5tYXRjaCgvXihbMDFdP1xcZHwyWzAtM10pOihbMC01XVxcZCkoPzpcXHM/KEFNfFBNKSk/JC8pO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGhvdXJzID0gTnVtYmVyKG1hdGNoWzFdKTtcbiAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKG1hdGNoWzJdKTtcbiAgICBjb25zdCBwZXJpb2QgPSBtYXRjaFszXT8udG9VcHBlckNhc2UoKTtcblxuICAgIGlmIChwZXJpb2QpIHtcbiAgICAgIGlmIChwZXJpb2QgPT09ICdQTScgJiYgaG91cnMgPCAxMikgaG91cnMgKz0gMTI7XG4gICAgICBpZiAocGVyaW9kID09PSAnQU0nICYmIGhvdXJzID09PSAxMikgaG91cnMgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGhvdXJzLCBtaW51dGVzLCBob3VyMTI6IEJvb2xlYW4ocGVyaW9kKSB9O1xuICB9XG59XG4iXX0=
@@ -1,5 +1,6 @@
1
- import { createConfigTokens } from '@odx/angular/utils';
1
+ import { createConfigTokens, isFunction } from '@odx/angular/utils';
2
2
  import { toDate, isValid } from 'date-fns';
3
+ import { initialConfig } from 'ngx-mask';
3
4
 
4
5
  const InputDateOrder = {
5
6
  DMY: 'DMY',
@@ -94,9 +95,29 @@ function getDateInputValueAsDate(config, value) {
94
95
  return isValid(date) ? date : null;
95
96
  }
96
97
 
98
+ function initNgxMask(ngxMask = undefined, mask) {
99
+ if (!ngxMask)
100
+ return;
101
+ if (!Object.hasOwn(ngxMask, '_maskValue')) {
102
+ throw new Error('[DatepickerInputControlDirective] initNgxMask: ngx-mask internal API changed, mask signal not available.');
103
+ }
104
+ const maskSignal = ngxMask['_maskValue'];
105
+ isFunction(maskSignal.set) && maskSignal.set(mask);
106
+ ngxMask._maskService.maskExpression = mask;
107
+ }
108
+ const ngxMaskProviderConfig = {
109
+ validation: false,
110
+ leadZeroDateTime: true,
111
+ patterns: {
112
+ ...initialConfig.patterns,
113
+ A: { pattern: new RegExp('[AaPp]') },
114
+ M: { pattern: new RegExp('[mM]') },
115
+ },
116
+ };
117
+
97
118
  /**
98
119
  * Generated bundle index. Do not edit.
99
120
  */
100
121
 
101
- export { DateConfig, DateDefaultConfig, DateInputFormat, DateInputMask, InputDateOrder, getDateInputFormat, getDateInputMask, getDateInputValueAsDate, injectDateConfig, provideDateConfig };
122
+ export { DateConfig, DateDefaultConfig, DateInputFormat, DateInputMask, InputDateOrder, getDateInputFormat, getDateInputMask, getDateInputValueAsDate, initNgxMask, injectDateConfig, ngxMaskProviderConfig, provideDateConfig };
102
123
  //# sourceMappingURL=odx-angular-cdk-date-input.mjs.map