cmat 0.0.15 → 0.0.17
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.
- package/README.md +2 -2
- package/components/custom-formly/public-api.d.ts +1 -0
- package/components/custom-formly/types/button/button.component.d.ts +19 -3
- package/components/custom-formly/types/cascade/cascade.component.d.ts +3 -2
- package/components/custom-formly/types/checklist/checklist.component.d.ts +3 -2
- package/components/custom-formly/types/chips/chips.component.d.ts +3 -2
- package/components/custom-formly/types/date-range/date-range.component.d.ts +3 -2
- package/components/custom-formly/types/datepicker/datepicker.component.d.ts +3 -2
- package/components/custom-formly/types/multicheckbox/multicheckbox.component.d.ts +3 -2
- package/components/custom-formly/types/number/number.component.d.ts +3 -2
- package/components/custom-formly/types/quill/quill.component.d.ts +3 -2
- package/components/custom-formly/types/radio/radio.component.d.ts +3 -2
- package/components/custom-formly/types/rating/rating.component.d.ts +3 -2
- package/components/custom-formly/types/repeat/repeat.component.d.ts +3 -2
- package/components/custom-formly/types/select/select.component.d.ts +3 -2
- package/components/custom-formly/types/select-tree/select-tree.component.d.ts +2 -2
- package/components/custom-formly/types/stepper/stepper.type.d.ts +2 -2
- package/components/custom-formly/types/table/table.component.d.ts +11 -5
- package/components/custom-formly/types/tags/tags.component.d.ts +3 -2
- package/components/custom-formly/types/upload/upload.component.d.ts +3 -2
- package/components/custom-formly/wrappers/form-field/form-field.component.d.ts +25 -0
- package/components/material-datetimepicker/datetimepicker.d.ts +4 -3
- package/components/select-search/select-search.component.d.ts +2 -1
- package/components/upload/upload-queue/upload-queue.component.d.ts +3 -2
- package/esm2022/animations/dropdown.mjs +1 -1
- package/esm2022/components/adapter/dayjs-date-adapter.mjs +4 -4
- package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +4 -4
- package/esm2022/components/adapter/native-datetime-adapter.mjs +4 -4
- package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +4 -4
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +4 -4
- package/esm2022/components/breadcrumb/breadcrumb.service.mjs +5 -5
- package/esm2022/components/card/card.component.mjs +5 -5
- package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +5 -5
- package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +6 -6
- package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +5 -5
- package/esm2022/components/cascade/options.interface.mjs +1 -1
- package/esm2022/components/chip-input/chip-input.component.mjs +6 -7
- package/esm2022/components/custom-formly/extension/addons.extension.mjs +2 -2
- package/esm2022/components/custom-formly/public-api.mjs +2 -1
- package/esm2022/components/custom-formly/types/button/button.component.mjs +57 -15
- package/esm2022/components/custom-formly/types/cascade/cascade.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/chips/chips.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/color-picker/color-picker.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/date-range/date-range.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/datepicker/datepicker.component.mjs +5 -5
- package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/number/number.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/quill/quill.component.mjs +6 -6
- package/esm2022/components/custom-formly/types/radio/radio.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/rating/rating.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/select/select.component.mjs +16 -15
- package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +1 -1
- package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/table/table.component.mjs +28 -14
- package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/tags/tags.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +4 -4
- package/esm2022/components/custom-formly/types/upload/upload.component.mjs +4 -4
- package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +4 -4
- package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +4 -4
- package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +4 -4
- package/esm2022/components/custom-formly/wrappers/form-field/form-field.component.mjs +47 -0
- package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +4 -4
- package/esm2022/components/date-range/date-range.component.mjs +6 -6
- package/esm2022/components/drawer/drawer.component.mjs +4 -4
- package/esm2022/components/drawer/drawer.service.mjs +4 -4
- package/esm2022/components/fullscreen/fullscreen.component.mjs +4 -4
- package/esm2022/components/highlight/highlight.component.mjs +4 -4
- package/esm2022/components/highlight/highlight.service.mjs +4 -4
- package/esm2022/components/json-editor/json-editor.component.mjs +6 -6
- package/esm2022/components/masonry/masonry.component.mjs +4 -4
- package/esm2022/components/material-color-picker/material-color-picker.component.mjs +5 -5
- package/esm2022/components/material-datetimepicker/calendar-body.mjs +5 -5
- package/esm2022/components/material-datetimepicker/calendar.mjs +5 -5
- package/esm2022/components/material-datetimepicker/clock.mjs +5 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +4 -4
- package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +4 -4
- package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +8 -8
- package/esm2022/components/material-datetimepicker/datetimepicker.mjs +14 -11
- package/esm2022/components/material-datetimepicker/month-view.mjs +5 -5
- package/esm2022/components/material-datetimepicker/multi-year-view.mjs +4 -4
- package/esm2022/components/material-datetimepicker/time.mjs +8 -8
- package/esm2022/components/material-datetimepicker/year-view.mjs +4 -4
- package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +5 -5
- package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +4 -4
- package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +4 -4
- package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +4 -4
- package/esm2022/components/navigation/horizontal/horizontal.component.mjs +4 -4
- package/esm2022/components/navigation/navigation.service.mjs +4 -4
- package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +4 -4
- package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +5 -5
- package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +5 -5
- package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +4 -4
- package/esm2022/components/navigation/vertical/components/group/group.component.mjs +4 -4
- package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +4 -4
- package/esm2022/components/navigation/vertical/vertical.component.mjs +4 -4
- package/esm2022/components/pagination/pagination.component.mjs +5 -5
- package/esm2022/components/pagination/pagination.directive.mjs +4 -4
- package/esm2022/components/pagination/pagination.pipe.mjs +4 -4
- package/esm2022/components/pagination/pagination.service.mjs +4 -4
- package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +5 -5
- package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +4 -4
- package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +5 -5
- package/esm2022/components/popover/popover-trigger.mjs +4 -4
- package/esm2022/components/popover/popover.component.mjs +4 -4
- package/esm2022/components/popover/popover.target.mjs +4 -4
- package/esm2022/components/progress-bar/progress-bar.component.mjs +5 -5
- package/esm2022/components/rating/rating.component.mjs +5 -5
- package/esm2022/components/select-search/select-no-entries-found.directive.mjs +4 -4
- package/esm2022/components/select-search/select-search-clear.directive.mjs +4 -4
- package/esm2022/components/select-search/select-search.component.mjs +6 -6
- package/esm2022/components/select-tree/select-tree.component.mjs +6 -6
- package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +11 -11
- package/esm2022/components/timeline/timeline.component.mjs +4 -4
- package/esm2022/components/toast/toast-modal.component.mjs +5 -5
- package/esm2022/components/toast/toast.component.mjs +4 -4
- package/esm2022/components/toast/toast.service.mjs +4 -4
- package/esm2022/components/transfer-picker/filter/filter.component.mjs +5 -5
- package/esm2022/components/transfer-picker/search/search.component.mjs +5 -5
- package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +5 -5
- package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +5 -5
- package/esm2022/components/transfer-picker/transfer-picker.component.mjs +5 -5
- package/esm2022/components/transfer-picker/transfer-picker.service.mjs +4 -4
- package/esm2022/components/upload/files.util.service.mjs +4 -4
- package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +13 -12
- package/esm2022/components/upload/upload.component.mjs +4 -4
- package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +4 -4
- package/esm2022/directives/animate-on-scroll/scroll.service.mjs +4 -4
- package/esm2022/directives/autofocus/autofocus.directive.mjs +4 -4
- package/esm2022/directives/debounce/abstract-debounce.directive.mjs +4 -4
- package/esm2022/directives/debounce/debounce-click.directive.mjs +4 -4
- package/esm2022/directives/debounce/debounce-keyup.directive.mjs +4 -4
- package/esm2022/directives/digit-only/digit-only.directive.mjs +10 -10
- package/esm2022/directives/digit-only/mask.directive.mjs +5 -5
- package/esm2022/directives/equal-validator/equal-validator.directive.mjs +4 -4
- package/esm2022/lib/mock-api/mock-api.interceptor.mjs +4 -4
- package/esm2022/lib/mock-api/mock-api.service.mjs +4 -4
- package/esm2022/pipes/bytes/bytes.pipe.mjs +4 -4
- package/esm2022/pipes/date-format/date-format.pipe.mjs +7 -5
- package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +4 -4
- package/esm2022/pipes/group-by/group-by.pipe.mjs +4 -4
- package/esm2022/pipes/keys/keys.pipe.mjs +4 -4
- package/esm2022/pipes/secure/secure-pipe.mjs +4 -4
- package/esm2022/pipes/uppercase/uppercase.pipe.mjs +4 -4
- package/esm2022/services/alert/alert.service.mjs +4 -4
- package/esm2022/services/config/config.service.mjs +4 -4
- package/esm2022/services/config/urlStateConfig.service.mjs +4 -4
- package/esm2022/services/confirmation/confirmation.service.mjs +4 -4
- package/esm2022/services/confirmation/dialog/dialog.component.mjs +5 -5
- package/esm2022/services/data/data.service.mjs +6 -6
- package/esm2022/services/loading/loading.interceptor.mjs +5 -5
- package/esm2022/services/loading/loading.service.mjs +4 -4
- package/esm2022/services/local-storage/local-storage.service.mjs +4 -4
- package/esm2022/services/media-watcher/media-watcher.service.mjs +4 -4
- package/esm2022/services/platform/platform.service.mjs +4 -4
- package/esm2022/services/splash-screen/splash-screen.service.mjs +4 -4
- package/esm2022/services/title/title.service.mjs +4 -4
- package/esm2022/services/translation/translation.service.mjs +5 -5
- package/esm2022/services/utils/utils.service.mjs +40 -7
- package/fesm2022/cmat-animations.mjs.map +1 -1
- package/fesm2022/cmat-components-adapter.mjs +9 -9
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +10 -10
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -4
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-cascade.mjs +13 -13
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +5 -6
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-custom-formly.mjs +235 -142
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
- package/fesm2022/cmat-components-date-range.mjs +5 -5
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +6 -6
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +3 -3
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +6 -6
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-json-editor.mjs +5 -5
- package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-masonry.mjs +3 -3
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +4 -4
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +55 -52
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +42 -42
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-pagination.mjs +13 -13
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +11 -11
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +9 -9
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +4 -4
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +4 -4
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +11 -11
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-tree.mjs +5 -5
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-timeline.mjs +13 -13
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +10 -10
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +23 -23
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-upload.mjs +18 -17
- package/fesm2022/cmat-components-upload.mjs.map +1 -1
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
- package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
- package/fesm2022/cmat-directives-debounce.mjs +9 -9
- package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
- package/fesm2022/cmat-directives-digit-only.mjs +13 -13
- package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
- package/fesm2022/cmat-pipes-date-format.mjs +6 -4
- package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
- package/fesm2022/cmat-pipes-secure.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
- package/fesm2022/cmat-services-alert.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +6 -6
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +7 -7
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +5 -5
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-loading.mjs +7 -7
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
- package/fesm2022/cmat-services-media-watcher.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +3 -3
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +4 -4
- package/fesm2022/cmat-services-translation.mjs.map +1 -1
- package/fesm2022/cmat-services-utils.mjs +39 -6
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/icons/material-icons/material-solid.svg +3585 -3585
- package/package.json +67 -67
- package/pipes/date-format/date-format.pipe.d.ts +1 -1
- package/services/data/data.service.d.ts +1 -1
- package/services/utils/utils.service.d.ts +4 -0
- package/styles/overrides/angular-material.scss +6 -0
|
@@ -4,11 +4,11 @@ import { FieldWrapper } from '@ngx-formly/core';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/material/card";
|
|
6
6
|
export class CmatCardWrapperComponent extends FieldWrapper {
|
|
7
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
8
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatCardWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: CmatCardWrapperComponent, isStandalone: true, selector: "cmat-card-wrapper", usesInheritance: true, ngImport: i0, template: "<mat-card class=\"dark:bg-white dark:bg-opacity-5\">\r\n @if(props.label){\r\n <mat-card-title class=\"p-4\">{{ props.label }}</mat-card-title>\r\n }\r\n \r\n <mat-card-content>\r\n <ng-container #fieldComponent></ng-container>\r\n </mat-card-content> \r\n</mat-card>", dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatCardWrapperComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
12
|
args: [{ selector: 'cmat-card-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatCardModule], template: "<mat-card class=\"dark:bg-white dark:bg-opacity-5\">\r\n @if(props.label){\r\n <mat-card-title class=\"p-4\">{{ props.label }}</mat-card-title>\r\n }\r\n \r\n <mat-card-content>\r\n <ng-container #fieldComponent></ng-container>\r\n </mat-card-content> \r\n</mat-card>" }]
|
|
13
13
|
}] });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvY3VzdG9tLWZvcm1seS93cmFwcGVycy9jYXJkL2NhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL2N1c3RvbS1mb3JtbHkvd3JhcHBlcnMvY2FyZC9jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBU2hELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxZQUFZOytHQUE3Qyx3QkFBd0I7bUdBQXhCLHdCQUF3QixvR0NYckMsNlNBUVcsMkNEQ0UsYUFBYTs7NEZBRWIsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNJLG1CQUFtQixtQkFFWix1QkFBdUIsQ0FBQyxNQUFNLGNBQ3BDLElBQUksV0FDUCxDQUFDLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xyXG5pbXBvcnQgeyBGaWVsZFdyYXBwZXIgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjbWF0LWNhcmQtd3JhcHBlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICAgIGltcG9ydHM6W01hdENhcmRNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0Q2FyZFdyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFdyYXBwZXIge31cclxuIiwiPG1hdC1jYXJkIGNsYXNzPVwiZGFyazpiZy13aGl0ZSBkYXJrOmJnLW9wYWNpdHktNVwiPlxyXG4gICAgQGlmKHByb3BzLmxhYmVsKXtcclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGUgY2xhc3M9XCJwLTRcIj57eyBwcm9wcy5sYWJlbCB9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICB9XHJcbiAgICBcclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgI2ZpZWxkQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PiAgICBcclxuPC9tYXQtY2FyZD4iXX0=
|
|
@@ -4,11 +4,11 @@ import { FieldWrapper } from '@ngx-formly/core';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/material/expansion";
|
|
6
6
|
export class CmatExpansionWrapperComponent extends FieldWrapper {
|
|
7
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
8
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatExpansionWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: CmatExpansionWrapperComponent, isStandalone: true, selector: "cmat-expansion-wrapper", usesInheritance: true, ngImport: i0, template: "<mat-expansion-panel [expanded]=\"true\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ to.label }}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{ to.description }}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-template #fieldComponent matExpansionPanelContent></ng-template>\r\n</mat-expansion-panel>", dependencies: [{ kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i1.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "directive", type: i1.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatExpansionWrapperComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
12
|
args: [{ selector: 'cmat-expansion-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatExpansionModule], template: "<mat-expansion-panel [expanded]=\"true\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ to.label }}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{ to.description }}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <ng-template #fieldComponent matExpansionPanelContent></ng-template>\r\n</mat-expansion-panel>" }]
|
|
13
13
|
}] });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9jdXN0b20tZm9ybWx5L3dyYXBwZXJzL2V4cGFuc2lvbi9leHBhbnNpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL2N1c3RvbS1mb3JtbHkvd3JhcHBlcnMvZXhwYW5zaW9uL2V4cGFuc2lvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBU2hELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxZQUFZOytHQUFsRCw2QkFBNkI7bUdBQTdCLDZCQUE2Qix5R0NYMUMsOFpBVXNCLDJDRERULGtCQUFrQjs7NEZBRWxCLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDSSx3QkFBd0IsbUJBRWpCLHVCQUF1QixDQUFDLE1BQU0sY0FDcEMsSUFBSSxXQUNQLENBQUMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IEZpZWxkV3JhcHBlciB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NtYXQtZXhwYW5zaW9uLXdyYXBwZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V4cGFuc2lvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICAgIGltcG9ydHM6W01hdEV4cGFuc2lvbk1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXRFeHBhbnNpb25XcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgRmllbGRXcmFwcGVyIHt9XHJcbiIsIjxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJ0cnVlXCI+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAge3sgdG8ubGFiZWwgfX1cclxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICB7eyB0by5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZmllbGRDb21wb25lbnQgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PjwvbmctdGVtcGxhdGU+XHJcbjwvbWF0LWV4cGFuc2lvbi1wYW5lbD4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { MatFormField, MatFormFieldModule } from '@angular/material/form-field';
|
|
5
|
+
import { FieldWrapper, FormlyModule, ɵdefineHiddenProp as defineHiddenProp } from '@ngx-formly/core';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/cdk/a11y";
|
|
8
|
+
import * as i2 from "@angular/material/form-field";
|
|
9
|
+
import * as i3 from "@angular/common";
|
|
10
|
+
import * as i4 from "@ngx-formly/core";
|
|
11
|
+
export class CmatFormFieldWrapperComponent extends FieldWrapper {
|
|
12
|
+
constructor(renderer, elementRef, focusMonitor) {
|
|
13
|
+
super();
|
|
14
|
+
this.renderer = renderer;
|
|
15
|
+
this.elementRef = elementRef;
|
|
16
|
+
this.focusMonitor = focusMonitor;
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
defineHiddenProp(this.field, '_formField', this.formField);
|
|
20
|
+
this.focusMonitor.monitor(this.elementRef, true).subscribe((origin) => {
|
|
21
|
+
if (!origin && this.field.focus) {
|
|
22
|
+
this.field.focus = false;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
ngAfterViewInit() {
|
|
27
|
+
// temporary fix for https://github.com/angular/material2/issues/7891
|
|
28
|
+
if (this.formField.appearance !== 'outline' && this.props.hideFieldUnderline === true) {
|
|
29
|
+
const underlineElement = this.formField._elementRef.nativeElement.querySelector('.mat-form-field-underline');
|
|
30
|
+
underlineElement && this.renderer.removeChild(underlineElement.parentNode, underlineElement);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
ngOnDestroy() {
|
|
34
|
+
delete this.field._formField;
|
|
35
|
+
this.focusMonitor.stopMonitoring(this.elementRef);
|
|
36
|
+
}
|
|
37
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatFormFieldWrapperComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: CmatFormFieldWrapperComponent, isStandalone: true, selector: "cmat-form-field-wrapper", viewQueries: [{ propertyName: "formField", first: true, predicate: MatFormField, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field [hideRequiredMarker]=\"true\" [floatLabel]=\"$any(props.floatLabel)\" [appearance]=\"$any(props.appearance)\"\r\n [subscriptSizing]=\"$any(props.subscriptSizing)\" [color]=\"props.color ?? 'primary'\">\r\n <ng-container #fieldComponent></ng-container>\r\n @if(props.label && props.hideLabel !== true){\r\n <mat-label>\r\n {{ props.label }}\r\n @if(props.required && props.hideRequiredMarker !== true){\r\n <span aria-hidden=\"true\" class=\"mat-form-field-required-marker mat-mdc-form-field-required-marker\">*</span>\r\n }\r\n </mat-label>\r\n }\r\n\r\n @if(props.textPrefix){\r\n <ng-container matTextPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.textPrefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.prefix){\r\n <ng-container matPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.prefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.textSuffix){\r\n <ng-container matTextSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.textSuffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.suffix){\r\n <ng-container matSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.suffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.showValidationMessage){\r\n <mat-error>\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </mat-error>\r\n }\r\n\r\n @if(props.description || props.hintStart){\r\n <mat-hint>\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.description || props.hintStart }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n\r\n @if(props.hintEnd){\r\n <mat-hint align=\"end\">\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.hintEnd }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n</mat-form-field>\r\n\r\n<ng-template #stringOrTemplate let-content=\"content\">\r\n @if(!content.createEmbeddedView){\r\n <ng-container>{{ content }}</ng-container>\r\n }@else {\r\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n }\r\n</ng-template>", styles: ["cmat-form-field-wrapper .mat-mdc-form-field,cmat-form-field-wrapper .mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatFormFieldWrapperComponent, decorators: [{
|
|
41
|
+
type: Component,
|
|
42
|
+
args: [{ selector: 'cmat-form-field-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [MatFormFieldModule, ReactiveFormsModule, CommonModule, FormlyModule], template: "<mat-form-field [hideRequiredMarker]=\"true\" [floatLabel]=\"$any(props.floatLabel)\" [appearance]=\"$any(props.appearance)\"\r\n [subscriptSizing]=\"$any(props.subscriptSizing)\" [color]=\"props.color ?? 'primary'\">\r\n <ng-container #fieldComponent></ng-container>\r\n @if(props.label && props.hideLabel !== true){\r\n <mat-label>\r\n {{ props.label }}\r\n @if(props.required && props.hideRequiredMarker !== true){\r\n <span aria-hidden=\"true\" class=\"mat-form-field-required-marker mat-mdc-form-field-required-marker\">*</span>\r\n }\r\n </mat-label>\r\n }\r\n\r\n @if(props.textPrefix){\r\n <ng-container matTextPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.textPrefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.prefix){\r\n <ng-container matPrefix>\r\n <ng-container [ngTemplateOutlet]=\"props.prefix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.textSuffix){\r\n <ng-container matTextSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.textSuffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.suffix){\r\n <ng-container matSuffix>\r\n <ng-container [ngTemplateOutlet]=\"props.suffix\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n </ng-container>\r\n }\r\n\r\n @if(props.showValidationMessage){\r\n <mat-error>\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </mat-error>\r\n }\r\n\r\n @if(props.description || props.hintStart){\r\n <mat-hint>\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.description || props.hintStart }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n\r\n @if(props.hintEnd){\r\n <mat-hint align=\"end\">\r\n <ng-container [ngTemplateOutlet]=\"stringOrTemplate\" [ngTemplateOutletContext]=\"{ content: props.hintEnd }\">\r\n </ng-container>\r\n </mat-hint>\r\n }\r\n</mat-form-field>\r\n\r\n<ng-template #stringOrTemplate let-content=\"content\">\r\n @if(!content.createEmbeddedView){\r\n <ng-container>{{ content }}</ng-container>\r\n }@else {\r\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\r\n }\r\n</ng-template>", styles: ["cmat-form-field-wrapper .mat-mdc-form-field,cmat-form-field-wrapper .mat-form-field{width:100%}\n"] }]
|
|
43
|
+
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.FocusMonitor }], propDecorators: { formField: [{
|
|
44
|
+
type: ViewChild,
|
|
45
|
+
args: [MatFormField, { static: true }]
|
|
46
|
+
}] } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvY3VzdG9tLWZvcm1seS93cmFwcGVycy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL2N1c3RvbS1mb3JtbHkvd3JhcHBlcnMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBNEMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFKLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFxQixZQUFZLEVBQUMsaUJBQWlCLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7O0FBb0J2SCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsWUFBa0M7SUFJakYsWUFBb0IsUUFBbUIsRUFBVSxVQUFzQixFQUFVLFlBQTBCO1FBQ3ZHLEtBQUssRUFBRSxDQUFDO1FBRFEsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUUzRyxDQUFDO0lBRUQsUUFBUTtRQUNKLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzdCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlO1FBQ1gscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0csZ0JBQWdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDakcsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEQsQ0FBQzsrR0E1QlEsNkJBQTZCO21HQUE3Qiw2QkFBNkIsOEhBRTNCLFlBQVkscUZDM0IzQixtK0VBK0RjLDBKRHhDQSxrQkFBa0IsaXVCQUFFLG1CQUFtQiw4QkFBRSxZQUFZLHFNQUFDLFlBQVk7OzRGQUVuRSw2QkFBNkI7a0JBVHpDLFNBQVM7K0JBQ0kseUJBQXlCLG1CQUVsQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUVoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUCxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBQyxZQUFZLENBQUM7a0lBSWxDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBGaWVsZFdyYXBwZXIsIEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlNb2R1bGUsybVkZWZpbmVIaWRkZW5Qcm9wIGFzIGRlZmluZUhpZGRlblByb3AgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgRm9ybWx5RmllbGRQcm9wcywgRm9ybWx5V3JhcHBlckZvcm1GaWVsZCB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsL2Zvcm0tZmllbGQvZm9ybS1maWVsZC53cmFwcGVyJztcclxuXHJcbmludGVyZmFjZSBNYXRGb3JtbHlGaWVsZENvbmZpZyBleHRlbmRzIEZvcm1seUZpZWxkQ29uZmlnPEN1c3RvbUZvcm1GaWVsZFByb3BzPiB7XHJcbiAgICBfZm9ybUZpZWxkPzogRm9ybWx5V3JhcHBlckZvcm1GaWVsZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Gb3JtRmllbGRQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xyXG4gICAgc2hvd1ZhbGlkYXRpb25NZXNzYWdlPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NtYXQtZm9ybS1maWVsZC13cmFwcGVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1maWVsZC53cmFwcGVyLnNjc3MnXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW01hdEZvcm1GaWVsZE1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlLEZvcm1seU1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXRGb3JtRmllbGRXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgRmllbGRXcmFwcGVyPE1hdEZvcm1seUZpZWxkQ29uZmlnPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZCwgeyBzdGF0aWM6IHRydWUgfSkgZm9ybUZpZWxkITogTWF0Rm9ybUZpZWxkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBkZWZpbmVIaWRkZW5Qcm9wKHRoaXMuZmllbGQsICdfZm9ybUZpZWxkJywgdGhpcy5mb3JtRmllbGQpO1xyXG4gICAgICAgIHRoaXMuZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5lbGVtZW50UmVmLCB0cnVlKS5zdWJzY3JpYmUoKG9yaWdpbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIW9yaWdpbiAmJiB0aGlzLmZpZWxkLmZvY3VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLmZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gdGVtcG9yYXJ5IGZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvbWF0ZXJpYWwyL2lzc3Vlcy83ODkxXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkLmFwcGVhcmFuY2UgIT09ICdvdXRsaW5lJyAmJiB0aGlzLnByb3BzLmhpZGVGaWVsZFVuZGVybGluZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB1bmRlcmxpbmVFbGVtZW50ID0gdGhpcy5mb3JtRmllbGQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lJyk7XHJcbiAgICAgICAgICAgIHVuZGVybGluZUVsZW1lbnQgJiYgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh1bmRlcmxpbmVFbGVtZW50LnBhcmVudE5vZGUsIHVuZGVybGluZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5maWVsZC5fZm9ybUZpZWxkO1xyXG4gICAgICAgIHRoaXMuZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxlbWVudFJlZik7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsIjxtYXQtZm9ybS1maWVsZCBbaGlkZVJlcXVpcmVkTWFya2VyXT1cInRydWVcIiBbZmxvYXRMYWJlbF09XCIkYW55KHByb3BzLmZsb2F0TGFiZWwpXCIgW2FwcGVhcmFuY2VdPVwiJGFueShwcm9wcy5hcHBlYXJhbmNlKVwiXHJcbiAgICBbc3Vic2NyaXB0U2l6aW5nXT1cIiRhbnkocHJvcHMuc3Vic2NyaXB0U2l6aW5nKVwiIFtjb2xvcl09XCJwcm9wcy5jb2xvciA/PyAncHJpbWFyeSdcIj5cclxuICAgIDxuZy1jb250YWluZXIgI2ZpZWxkQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxyXG4gICAgQGlmKHByb3BzLmxhYmVsICYmIHByb3BzLmhpZGVMYWJlbCAhPT0gdHJ1ZSl7XHJcbiAgICA8bWF0LWxhYmVsPlxyXG4gICAgICAgIHt7IHByb3BzLmxhYmVsIH19XHJcbiAgICAgICAgQGlmKHByb3BzLnJlcXVpcmVkICYmIHByb3BzLmhpZGVSZXF1aXJlZE1hcmtlciAhPT0gdHJ1ZSl7XHJcbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIgbWF0LW1kYy1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlclwiPio8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgPC9tYXQtbGFiZWw+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmKHByb3BzLnRleHRQcmVmaXgpe1xyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRUZXh0UHJlZml4PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJvcHMudGV4dFByZWZpeFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYocHJvcHMucHJlZml4KXtcclxuICAgIDxuZy1jb250YWluZXIgbWF0UHJlZml4PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicHJvcHMucHJlZml4XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG5cclxuICAgIEBpZihwcm9wcy50ZXh0U3VmZml4KXtcclxuICAgIDxuZy1jb250YWluZXIgbWF0VGV4dFN1ZmZpeD5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb3BzLnRleHRTdWZmaXhcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmKHByb3BzLnN1ZmZpeCl7XHJcbiAgICA8bmctY29udGFpbmVyIG1hdFN1ZmZpeD5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb3BzLnN1ZmZpeFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYocHJvcHMuc2hvd1ZhbGlkYXRpb25NZXNzYWdlKXtcclxuICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgPGZvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2UgW2ZpZWxkXT1cImZpZWxkXCI+PC9mb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlPlxyXG4gICAgPC9tYXQtZXJyb3I+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmKHByb3BzLmRlc2NyaXB0aW9uIHx8IHByb3BzLmhpbnRTdGFydCl7XHJcbiAgICA8bWF0LWhpbnQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdHJpbmdPclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29udGVudDogcHJvcHMuZGVzY3JpcHRpb24gfHwgcHJvcHMuaGludFN0YXJ0IH1cIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LWhpbnQ+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmKHByb3BzLmhpbnRFbmQpe1xyXG4gICAgPG1hdC1oaW50IGFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdHJpbmdPclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29udGVudDogcHJvcHMuaGludEVuZCB9XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC1oaW50PlxyXG4gICAgfVxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzdHJpbmdPclRlbXBsYXRlIGxldC1jb250ZW50PVwiY29udGVudFwiPlxyXG4gICAgQGlmKCFjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyl7XHJcbiAgICA8bmctY29udGFpbmVyPnt7IGNvbnRlbnQgfX08L25nLWNvbnRhaW5lcj5cclxuICAgIH1AZWxzZSB7XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -2,11 +2,11 @@ import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
|
2
2
|
import { FieldWrapper } from '@ngx-formly/core';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class CmatPanelWrapperComponent extends FieldWrapper {
|
|
5
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
6
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatPanelWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
6
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: CmatPanelWrapperComponent, isStandalone: true, selector: "cmat-panel-wrapper", usesInheritance: true, ngImport: i0, template: "<h3 class=\"px-2\">{{ to.label }}</h3>\r\n<div>\r\n <ng-container #fieldComponent></ng-container>\r\n</div>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7
7
|
}
|
|
8
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatPanelWrapperComponent, decorators: [{
|
|
9
9
|
type: Component,
|
|
10
10
|
args: [{ selector: 'cmat-panel-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [], template: "<h3 class=\"px-2\">{{ to.label }}</h3>\r\n<div>\r\n <ng-container #fieldComponent></ng-container>\r\n</div>" }]
|
|
11
11
|
}] });
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL2N1c3RvbS1mb3JtbHkvd3JhcHBlcnMvcGFuZWwvcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL2N1c3RvbS1mb3JtbHkvd3JhcHBlcnMvcGFuZWwvcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBU2hELE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxZQUFZOytHQUE5Qyx5QkFBeUI7bUdBQXpCLHlCQUF5QixxR0NWdEMsZ0hBR007OzRGRE9PLHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBRWIsdUJBQXVCLENBQUMsTUFBTSxjQUNwQyxJQUFJLFdBQ1AsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmllbGRXcmFwcGVyIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1wYW5lbC13cmFwcGVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICAgIGltcG9ydHM6W11cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXRQYW5lbFdyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFdyYXBwZXIge31cclxuIiwiPGgzIGNsYXNzPVwicHgtMlwiPnt7IHRvLmxhYmVsIH19PC9oMz5cclxuPGRpdj5cclxuICAgIDxuZy1jb250YWluZXIgI2ZpZWxkQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=
|
|
@@ -510,16 +510,16 @@ export class CmatDateRangeComponent {
|
|
|
510
510
|
// If meridiem doesn't exist, create a moment using 24-hours format and return in
|
|
511
511
|
return dayjs(value, 'HH:mm').second(0);
|
|
512
512
|
}
|
|
513
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
514
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
513
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDateRangeComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
514
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: CmatDateRangeComponent, isStandalone: true, selector: "cmat-date-range", inputs: { readonly: "readonly", dateFormat: "dateFormat", timeFormat: "timeFormat", timeRange: "timeRange", range: "range" }, outputs: { rangeChanged: "rangeChanged" }, providers: [
|
|
515
515
|
{
|
|
516
516
|
provide: NG_VALUE_ACCESSOR,
|
|
517
517
|
useExisting: forwardRef(() => CmatDateRangeComponent),
|
|
518
518
|
multi: true
|
|
519
519
|
}
|
|
520
|
-
], viewQueries: [{ propertyName: "_matMonthView1", first: true, predicate: ["matMonthView1"], descendants: true }, { propertyName: "_matMonthView2", first: true, predicate: ["matMonthView2"], descendants: true }, { propertyName: "_pickerPanelOrigin", first: true, predicate: ["pickerPanelOrigin"], descendants: true, read: ElementRef }, { propertyName: "_pickerPanel", first: true, predicate: ["pickerPanel"], descendants: true }], exportAs: ["cmatDateRange"], ngImport: i0, template: "<div #pickerPanelOrigin role=\"presentation\" class=\"range\" (click)=\"openPickerPanel()\">\n\n <div class=\"start\">\n <div class=\"date\">{{range.startDate}}</div>\n @if (range.startTime) {\n <div class=\"time\">{{range.startTime}}</div>\n }\n </div>\n\n <div class=\"separator\">-</div>\n\n <div class=\"end\">\n <div class=\"date\">{{range.endDate}}</div>\n @if (range.endTime) {\n <div class=\"time\">{{range.endTime}}</div>\n }\n </div>\n\n</div>\n\n<ng-template #pickerPanel>\n\n <!-- Start -->\n <div class=\"start\">\n\n <div class=\"month\">\n <div class=\"month-header\">\n <button type=\"button\" class=\"previous-button\" mat-icon-button tabindex=\"1\" (click)=\"prev()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-left'\"></mat-icon>\n </button>\n <div class=\"month-label\">{{getMonthLabel(1)}}</div>\n </div>\n <mat-month-view #matMonthView1 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\n [(activeDate)]=\"activeDates.month1\" (click)=\"$event.stopImmediatePropagation()\"\n (selectedChange)=\"onSelectedDateChange($event)\">\n </mat-month-view>\n </div>\n\n @if (timeRange) {\n <mat-form-field class=\"time start-time\">\n <input matInput tabindex=\"3\" [autocomplete]=\"'off'\" [formControl]=\"startTimeFormControl\"\n (blur)=\"updateStartTime($event)\">\n <mat-label>\u5F00\u59CB\u65F6\u95F4</mat-label>\n </mat-form-field>\n }\n\n </div>\n\n <!-- End -->\n <div class=\"end\">\n\n <div class=\"month\">\n <div class=\"month-header\">\n <div class=\"month-label\">{{getMonthLabel(2)}}</div>\n <button type=\"button\" class=\"next-button\" mat-icon-button tabindex=\"2\" (click)=\"next()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-right'\"></mat-icon>\n </button>\n </div>\n <mat-month-view #matMonthView2 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\n [(activeDate)]=\"activeDates.month2\" (click)=\"$event.stopImmediatePropagation()\"\n (selectedChange)=\"onSelectedDateChange($event)\">\n </mat-month-view>\n </div>\n\n @if (timeRange) {\n <mat-form-field class=\"time end-time\">\n <input matInput tabindex=\"4\" [formControl]=\"endTimeFormControl\" (blur)=\"updateEndTime($event)\">\n <mat-label>\u7ED3\u675F\u65F6\u95F4</mat-label>\n </mat-form-field>\n }\n\n </div>\n\n </ng-template>", styles: ["cmat-date-range{display:flex}cmat-date-range .range{display:flex;width:100%;align-items:center;height:48px;min-height:48px;max-height:48px;cursor:pointer}cmat-date-range .range .start,cmat-date-range .range .end{display:flex;align-items:center;height:100%;padding:0 16px;border-radius:6px;border-width:1px;line-height:1}cmat-date-range .range .date{white-space:nowrap}cmat-date-range .range .date+.time{margin-left:8px}cmat-date-range .range .time{white-space:nowrap}cmat-date-range .separator{margin:0 8px}.cmat-date-range-panel{border-radius:4px;padding:24px}.cmat-date-range-panel .start,.cmat-date-range-panel .end{display:flex;flex-direction:column}.cmat-date-range-panel .start .month,.cmat-date-range-panel .end .month{max-width:196px;min-width:196px;width:196px}.cmat-date-range-panel .start .month .month-header,.cmat-date-range-panel .end .month .month-header{position:relative;display:flex;align-items:center;justify-content:center;height:32px;margin-bottom:16px}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .next-button{position:absolute;width:24px!important;height:24px!important;min-height:24px!important;max-height:24px!important;line-height:24px!important}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .previous-button{left:0}.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .next-button{right:0}.cmat-date-range-panel .start .month .month-header .month-label,.cmat-date-range-panel .end .month .month-header .month-label{font-weight:500}.cmat-date-range-panel .start .month mat-month-view,.cmat-date-range-panel .end .month mat-month-view{display:flex;min-height:188px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table{width:100%;border-collapse:collapse}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true]{display:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true]{visibility:hidden;pointer-events:none;opacity:0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content{background-color:transparent!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today{border:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell{width:28px!important;height:28px!important;padding:2px!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before{content:\"\";position:absolute;inset:2px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before{border-radius:999px 0 0 999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before{right:2px;border-radius:999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before{border-radius:0 999px 999px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content{position:relative;top:0;left:0;width:24px;height:24px;font-size:12px}.cmat-date-range-panel .time{width:100%;max-width:196px}.cmat-date-range-panel .start{align-items:flex-start;margin-right:20px}.cmat-date-range-panel .start .month .month-label{margin-left:8px}.cmat-date-range-panel .end{align-items:flex-end;margin-left:20px}.cmat-date-range-panel .end .month .month-label{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatMonthView, selector: "mat-month-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName", "activeDrag"], outputs: ["selectedChange", "_userSelection", "dragStarted", "dragEnded", "activeDateChange"], exportAs: ["matMonthView"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
520
|
+
], viewQueries: [{ propertyName: "_matMonthView1", first: true, predicate: ["matMonthView1"], descendants: true }, { propertyName: "_matMonthView2", first: true, predicate: ["matMonthView2"], descendants: true }, { propertyName: "_pickerPanelOrigin", first: true, predicate: ["pickerPanelOrigin"], descendants: true, read: ElementRef }, { propertyName: "_pickerPanel", first: true, predicate: ["pickerPanel"], descendants: true }], exportAs: ["cmatDateRange"], ngImport: i0, template: "<div #pickerPanelOrigin role=\"presentation\" class=\"range\" (click)=\"openPickerPanel()\">\r\n\r\n <div class=\"start\">\r\n <div class=\"date\">{{range.startDate}}</div>\r\n @if (range.startTime) {\r\n <div class=\"time\">{{range.startTime}}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"separator\">-</div>\r\n\r\n <div class=\"end\">\r\n <div class=\"date\">{{range.endDate}}</div>\r\n @if (range.endTime) {\r\n <div class=\"time\">{{range.endTime}}</div>\r\n }\r\n </div>\r\n\r\n</div>\r\n\r\n<ng-template #pickerPanel>\r\n\r\n <!-- Start -->\r\n <div class=\"start\">\r\n\r\n <div class=\"month\">\r\n <div class=\"month-header\">\r\n <button type=\"button\" class=\"previous-button\" mat-icon-button tabindex=\"1\" (click)=\"prev()\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-left'\"></mat-icon>\r\n </button>\r\n <div class=\"month-label\">{{getMonthLabel(1)}}</div>\r\n </div>\r\n <mat-month-view #matMonthView1 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\r\n [(activeDate)]=\"activeDates.month1\" (click)=\"$event.stopImmediatePropagation()\"\r\n (selectedChange)=\"onSelectedDateChange($event)\">\r\n </mat-month-view>\r\n </div>\r\n\r\n @if (timeRange) {\r\n <mat-form-field class=\"time start-time\">\r\n <input matInput tabindex=\"3\" [autocomplete]=\"'off'\" [formControl]=\"startTimeFormControl\"\r\n (blur)=\"updateStartTime($event)\">\r\n <mat-label>\u5F00\u59CB\u65F6\u95F4</mat-label>\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n\r\n <!-- End -->\r\n <div class=\"end\">\r\n\r\n <div class=\"month\">\r\n <div class=\"month-header\">\r\n <div class=\"month-label\">{{getMonthLabel(2)}}</div>\r\n <button type=\"button\" class=\"next-button\" mat-icon-button tabindex=\"2\" (click)=\"next()\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-right'\"></mat-icon>\r\n </button>\r\n </div>\r\n <mat-month-view #matMonthView2 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\r\n [(activeDate)]=\"activeDates.month2\" (click)=\"$event.stopImmediatePropagation()\"\r\n (selectedChange)=\"onSelectedDateChange($event)\">\r\n </mat-month-view>\r\n </div>\r\n\r\n @if (timeRange) {\r\n <mat-form-field class=\"time end-time\">\r\n <input matInput tabindex=\"4\" [formControl]=\"endTimeFormControl\" (blur)=\"updateEndTime($event)\">\r\n <mat-label>\u7ED3\u675F\u65F6\u95F4</mat-label>\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n\r\n </ng-template>", styles: ["cmat-date-range{display:flex}cmat-date-range .range{display:flex;width:100%;align-items:center;height:48px;min-height:48px;max-height:48px;cursor:pointer}cmat-date-range .range .start,cmat-date-range .range .end{display:flex;align-items:center;height:100%;padding:0 16px;border-radius:6px;border-width:1px;line-height:1}cmat-date-range .range .date{white-space:nowrap}cmat-date-range .range .date+.time{margin-left:8px}cmat-date-range .range .time{white-space:nowrap}cmat-date-range .separator{margin:0 8px}.cmat-date-range-panel{border-radius:4px;padding:24px}.cmat-date-range-panel .start,.cmat-date-range-panel .end{display:flex;flex-direction:column}.cmat-date-range-panel .start .month,.cmat-date-range-panel .end .month{max-width:196px;min-width:196px;width:196px}.cmat-date-range-panel .start .month .month-header,.cmat-date-range-panel .end .month .month-header{position:relative;display:flex;align-items:center;justify-content:center;height:32px;margin-bottom:16px}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .next-button{position:absolute;width:24px!important;height:24px!important;min-height:24px!important;max-height:24px!important;line-height:24px!important}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .previous-button{left:0}.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .next-button{right:0}.cmat-date-range-panel .start .month .month-header .month-label,.cmat-date-range-panel .end .month .month-header .month-label{font-weight:500}.cmat-date-range-panel .start .month mat-month-view,.cmat-date-range-panel .end .month mat-month-view{display:flex;min-height:188px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table{width:100%;border-collapse:collapse}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true]{display:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true]{visibility:hidden;pointer-events:none;opacity:0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content{background-color:transparent!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today{border:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell{width:28px!important;height:28px!important;padding:2px!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before{content:\"\";position:absolute;inset:2px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before{border-radius:999px 0 0 999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before{right:2px;border-radius:999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before{border-radius:0 999px 999px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content{position:relative;top:0;left:0;width:24px;height:24px;font-size:12px}.cmat-date-range-panel .time{width:100%;max-width:196px}.cmat-date-range-panel .start{align-items:flex-start;margin-right:20px}.cmat-date-range-panel .start .month .month-label{margin-left:8px}.cmat-date-range-panel .end{align-items:flex-end;margin-left:20px}.cmat-date-range-panel .end .month .month-label{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i5.MatMonthView, selector: "mat-month-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName", "activeDrag"], outputs: ["selectedChange", "_userSelection", "dragStarted", "dragEnded", "activeDateChange"], exportAs: ["matMonthView"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
521
521
|
}
|
|
522
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
522
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CmatDateRangeComponent, decorators: [{
|
|
523
523
|
type: Component,
|
|
524
524
|
args: [{ selector: 'cmat-date-range', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatDateRange', providers: [
|
|
525
525
|
{
|
|
@@ -529,7 +529,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
529
529
|
}
|
|
530
530
|
], standalone: true, imports: [FormsModule, ReactiveFormsModule, MatButtonModule, MatIconModule,
|
|
531
531
|
MatDatepickerModule, MatFormFieldModule,
|
|
532
|
-
MatInputModule], template: "<div #pickerPanelOrigin role=\"presentation\" class=\"range\" (click)=\"openPickerPanel()\">\n\n <div class=\"start\">\n <div class=\"date\">{{range.startDate}}</div>\n @if (range.startTime) {\n <div class=\"time\">{{range.startTime}}</div>\n }\n </div>\n\n <div class=\"separator\">-</div>\n\n <div class=\"end\">\n <div class=\"date\">{{range.endDate}}</div>\n @if (range.endTime) {\n <div class=\"time\">{{range.endTime}}</div>\n }\n </div>\n\n</div>\n\n<ng-template #pickerPanel>\n\n <!-- Start -->\n <div class=\"start\">\n\n <div class=\"month\">\n <div class=\"month-header\">\n <button type=\"button\" class=\"previous-button\" mat-icon-button tabindex=\"1\" (click)=\"prev()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-left'\"></mat-icon>\n </button>\n <div class=\"month-label\">{{getMonthLabel(1)}}</div>\n </div>\n <mat-month-view #matMonthView1 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\n [(activeDate)]=\"activeDates.month1\" (click)=\"$event.stopImmediatePropagation()\"\n (selectedChange)=\"onSelectedDateChange($event)\">\n </mat-month-view>\n </div>\n\n @if (timeRange) {\n <mat-form-field class=\"time start-time\">\n <input matInput tabindex=\"3\" [autocomplete]=\"'off'\" [formControl]=\"startTimeFormControl\"\n (blur)=\"updateStartTime($event)\">\n <mat-label>\u5F00\u59CB\u65F6\u95F4</mat-label>\n </mat-form-field>\n }\n\n </div>\n\n <!-- End -->\n <div class=\"end\">\n\n <div class=\"month\">\n <div class=\"month-header\">\n <div class=\"month-label\">{{getMonthLabel(2)}}</div>\n <button type=\"button\" class=\"next-button\" mat-icon-button tabindex=\"2\" (click)=\"next()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-right'\"></mat-icon>\n </button>\n </div>\n <mat-month-view #matMonthView2 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\n [(activeDate)]=\"activeDates.month2\" (click)=\"$event.stopImmediatePropagation()\"\n (selectedChange)=\"onSelectedDateChange($event)\">\n </mat-month-view>\n </div>\n\n @if (timeRange) {\n <mat-form-field class=\"time end-time\">\n <input matInput tabindex=\"4\" [formControl]=\"endTimeFormControl\" (blur)=\"updateEndTime($event)\">\n <mat-label>\u7ED3\u675F\u65F6\u95F4</mat-label>\n </mat-form-field>\n }\n\n </div>\n\n </ng-template>", styles: ["cmat-date-range{display:flex}cmat-date-range .range{display:flex;width:100%;align-items:center;height:48px;min-height:48px;max-height:48px;cursor:pointer}cmat-date-range .range .start,cmat-date-range .range .end{display:flex;align-items:center;height:100%;padding:0 16px;border-radius:6px;border-width:1px;line-height:1}cmat-date-range .range .date{white-space:nowrap}cmat-date-range .range .date+.time{margin-left:8px}cmat-date-range .range .time{white-space:nowrap}cmat-date-range .separator{margin:0 8px}.cmat-date-range-panel{border-radius:4px;padding:24px}.cmat-date-range-panel .start,.cmat-date-range-panel .end{display:flex;flex-direction:column}.cmat-date-range-panel .start .month,.cmat-date-range-panel .end .month{max-width:196px;min-width:196px;width:196px}.cmat-date-range-panel .start .month .month-header,.cmat-date-range-panel .end .month .month-header{position:relative;display:flex;align-items:center;justify-content:center;height:32px;margin-bottom:16px}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .next-button{position:absolute;width:24px!important;height:24px!important;min-height:24px!important;max-height:24px!important;line-height:24px!important}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .previous-button{left:0}.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .next-button{right:0}.cmat-date-range-panel .start .month .month-header .month-label,.cmat-date-range-panel .end .month .month-header .month-label{font-weight:500}.cmat-date-range-panel .start .month mat-month-view,.cmat-date-range-panel .end .month mat-month-view{display:flex;min-height:188px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table{width:100%;border-collapse:collapse}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true]{display:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true]{visibility:hidden;pointer-events:none;opacity:0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content{background-color:transparent!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today{border:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell{width:28px!important;height:28px!important;padding:2px!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before{content:\"\";position:absolute;inset:2px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before{border-radius:999px 0 0 999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before{right:2px;border-radius:999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before{border-radius:0 999px 999px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content{position:relative;top:0;left:0;width:24px;height:24px;font-size:12px}.cmat-date-range-panel .time{width:100%;max-width:196px}.cmat-date-range-panel .start{align-items:flex-start;margin-right:20px}.cmat-date-range-panel .start .month .month-label{margin-left:8px}.cmat-date-range-panel .end{align-items:flex-end;margin-left:20px}.cmat-date-range-panel .end .month .month-label{margin-right:8px}\n"] }]
|
|
532
|
+
MatInputModule], template: "<div #pickerPanelOrigin role=\"presentation\" class=\"range\" (click)=\"openPickerPanel()\">\r\n\r\n <div class=\"start\">\r\n <div class=\"date\">{{range.startDate}}</div>\r\n @if (range.startTime) {\r\n <div class=\"time\">{{range.startTime}}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"separator\">-</div>\r\n\r\n <div class=\"end\">\r\n <div class=\"date\">{{range.endDate}}</div>\r\n @if (range.endTime) {\r\n <div class=\"time\">{{range.endTime}}</div>\r\n }\r\n </div>\r\n\r\n</div>\r\n\r\n<ng-template #pickerPanel>\r\n\r\n <!-- Start -->\r\n <div class=\"start\">\r\n\r\n <div class=\"month\">\r\n <div class=\"month-header\">\r\n <button type=\"button\" class=\"previous-button\" mat-icon-button tabindex=\"1\" (click)=\"prev()\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-left'\"></mat-icon>\r\n </button>\r\n <div class=\"month-label\">{{getMonthLabel(1)}}</div>\r\n </div>\r\n <mat-month-view #matMonthView1 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\r\n [(activeDate)]=\"activeDates.month1\" (click)=\"$event.stopImmediatePropagation()\"\r\n (selectedChange)=\"onSelectedDateChange($event)\">\r\n </mat-month-view>\r\n </div>\r\n\r\n @if (timeRange) {\r\n <mat-form-field class=\"time start-time\">\r\n <input matInput tabindex=\"3\" [autocomplete]=\"'off'\" [formControl]=\"startTimeFormControl\"\r\n (blur)=\"updateStartTime($event)\">\r\n <mat-label>\u5F00\u59CB\u65F6\u95F4</mat-label>\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n\r\n <!-- End -->\r\n <div class=\"end\">\r\n\r\n <div class=\"month\">\r\n <div class=\"month-header\">\r\n <div class=\"month-label\">{{getMonthLabel(2)}}</div>\r\n <button type=\"button\" class=\"next-button\" mat-icon-button tabindex=\"2\" (click)=\"next()\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:chevron-right'\"></mat-icon>\r\n </button>\r\n </div>\r\n <mat-month-view #matMonthView2 [dateFilter]=\"dateFilter()\" [dateClass]=\"dateClass()\"\r\n [(activeDate)]=\"activeDates.month2\" (click)=\"$event.stopImmediatePropagation()\"\r\n (selectedChange)=\"onSelectedDateChange($event)\">\r\n </mat-month-view>\r\n </div>\r\n\r\n @if (timeRange) {\r\n <mat-form-field class=\"time end-time\">\r\n <input matInput tabindex=\"4\" [formControl]=\"endTimeFormControl\" (blur)=\"updateEndTime($event)\">\r\n <mat-label>\u7ED3\u675F\u65F6\u95F4</mat-label>\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n\r\n </ng-template>", styles: ["cmat-date-range{display:flex}cmat-date-range .range{display:flex;width:100%;align-items:center;height:48px;min-height:48px;max-height:48px;cursor:pointer}cmat-date-range .range .start,cmat-date-range .range .end{display:flex;align-items:center;height:100%;padding:0 16px;border-radius:6px;border-width:1px;line-height:1}cmat-date-range .range .date{white-space:nowrap}cmat-date-range .range .date+.time{margin-left:8px}cmat-date-range .range .time{white-space:nowrap}cmat-date-range .separator{margin:0 8px}.cmat-date-range-panel{border-radius:4px;padding:24px}.cmat-date-range-panel .start,.cmat-date-range-panel .end{display:flex;flex-direction:column}.cmat-date-range-panel .start .month,.cmat-date-range-panel .end .month{max-width:196px;min-width:196px;width:196px}.cmat-date-range-panel .start .month .month-header,.cmat-date-range-panel .end .month .month-header{position:relative;display:flex;align-items:center;justify-content:center;height:32px;margin-bottom:16px}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .next-button{position:absolute;width:24px!important;height:24px!important;min-height:24px!important;max-height:24px!important;line-height:24px!important}.cmat-date-range-panel .start .month .month-header .previous-button,.cmat-date-range-panel .end .month .month-header .previous-button{left:0}.cmat-date-range-panel .start .month .month-header .next-button,.cmat-date-range-panel .end .month .month-header .next-button{right:0}.cmat-date-range-panel .start .month .month-header .month-label,.cmat-date-range-panel .end .month .month-header .month-label{font-weight:500}.cmat-date-range-panel .start .month mat-month-view,.cmat-date-range-panel .end .month mat-month-view{display:flex;min-height:188px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table{width:100%;border-collapse:collapse}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr[aria-hidden=true]{display:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true],.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr:first-child td:first-child[aria-hidden=true]{visibility:hidden;pointer-events:none;opacity:0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody tr td .mat-calendar-body-cell-content{background-color:transparent!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-today{border:none!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell{width:28px!important;height:28px!important;padding:2px!important}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range:before{content:\"\";position:absolute;inset:2px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start:before{border-radius:999px 0 0 999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-start.cmat-date-range-end:before{right:2px;border-radius:999px}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell.cmat-date-range.cmat-date-range-end:before{border-radius:0 999px 999px 0}.cmat-date-range-panel .start .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content,.cmat-date-range-panel .end .month mat-month-view .mat-calendar-table tbody .mat-calendar-body-cell .mat-calendar-body-cell-content{position:relative;top:0;left:0;width:24px;height:24px;font-size:12px}.cmat-date-range-panel .time{width:100%;max-width:196px}.cmat-date-range-panel .start{align-items:flex-start;margin-right:20px}.cmat-date-range-panel .start .month .month-label{margin-left:8px}.cmat-date-range-panel .end{align-items:flex-end;margin-left:20px}.cmat-date-range-panel .end .month .month-label{margin-right:8px}\n"] }]
|
|
533
533
|
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { rangeChanged: [{
|
|
534
534
|
type: Output
|
|
535
535
|
}], _matMonthView1: [{
|
|
@@ -555,4 +555,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
555
555
|
}], range: [{
|
|
556
556
|
type: Input
|
|
557
557
|
}] } });
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvZGF0ZS1yYW5nZS9kYXRlLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9kYXRlLXJhbmdlL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM04sT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQTJDLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQXNCL0IsTUFBTSxPQUFPLHNCQUFzQjtJQTRCL0IsWUFDWSxRQUFpQixFQUNqQixpQkFBbUMs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b250ZW50IjpbImltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3JzLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2FsZW5kYXJDZWxsQ3NzQ2xhc3NlcywgTWF0TW9udGhWaWV3LCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgZGF5anMsIHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1kYXRlLXJhbmdlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGV4cG9ydEFzOiAnY21hdERhdGVSYW5nZScsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbWF0RGF0ZVJhbmdlQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSxNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIFxyXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgXHJcbiAgICAgICAgTWF0SW5wdXRNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RGF0ZVJhbmdlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJhbmdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfT4oKTtcclxuICAgIEBWaWV3Q2hpbGQoJ21hdE1vbnRoVmlldzEnKSBwcml2YXRlIF9tYXRNb250aFZpZXcxOiBNYXRNb250aFZpZXc8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ21hdE1vbnRoVmlldzInKSBwcml2YXRlIF9tYXRNb250aFZpZXcyOiBNYXRNb250aFZpZXc8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3BpY2tlclBhbmVsT3JpZ2luJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgX3BpY2tlclBhbmVsT3JpZ2luOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncGlja2VyUGFuZWwnKSBwcml2YXRlIF9waWNrZXJQYW5lbDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBhY3RpdmVEYXRlczogeyBtb250aDE6IERheWpzIHwgbnVsbDsgbW9udGgyOiBEYXlqcyB8IG51bGwgfSA9IHtcclxuICAgICAgICBtb250aDE6IG51bGwsXHJcbiAgICAgICAgbW9udGgyOiBudWxsXHJcbiAgICB9O1xyXG4gICAgc2V0V2hpY2hEYXRlOiAnc3RhcnQnIHwgJ2VuZCcgPSAnc3RhcnQnO1xyXG4gICAgc3RhcnRUaW1lRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xyXG4gICAgZW5kVGltZUZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcclxuICAgIHByaXZhdGUgX2RhdGVGb3JtYXQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XHJcbiAgICBwcml2YXRlIF9wcm9ncmFtbWF0aWNDaGFuZ2UhOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfcmFuZ2U6IHsgc3RhcnQ6IERheWpzIHwgbnVsbDsgZW5kOiBEYXlqcyB8IG51bGwgfSA9IHtcclxuICAgICAgICBzdGFydDogbnVsbCxcclxuICAgICAgICBlbmQ6IG51bGxcclxuICAgIH07XHJcbiAgICBwcml2YXRlIF90aW1lRm9ybWF0OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF90aW1lUmFuZ2U6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9yZWFkb25seTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVSZWdFeHA6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oMFswLTldfDFbMC05XXwyWzAtNF18WzAtOV0pOihbMC01XVswLTldKShBfCg/OkFNKXxQfCg/OlBNKSk/JCcsICdpJyk7XHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXHJcbiAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgICkge1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xyXG5cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSAoKTogdm9pZCA9PiB7IH07XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHsgfTtcclxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQgPSAnWVlZWS9NTS9ERCc7XHJcbiAgICAgICAgdGhpcy50aW1lRm9ybWF0ID0gJzEyJzsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCByZWFkb25seSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVGb3JtYXQ7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGRhdGVGb3JtYXQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZVxyXG4gICAgICAgIGlmICh0aGlzLl9kYXRlRm9ybWF0ID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWVcclxuICAgICAgICB0aGlzLl9kYXRlRm9ybWF0ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXR0ZXIgJiBnZXR0ZXIgZm9yIHRpbWVGb3JtYXQgaW5wdXQgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgdGltZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90aW1lRm9ybWF0O1xyXG4gICAgfVxyXG4gICAgQElucHV0KClcclxuICAgIHNldCB0aW1lRm9ybWF0KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWVcclxuICAgICAgICBpZiAodGhpcy5fdGltZUZvcm1hdCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IGZvcm1hdCBiYXNlZCBvbiB0aGUgdGltZSBmb3JtYXQgaW5wdXRcclxuICAgICAgICB0aGlzLl90aW1lRm9ybWF0ID0gdmFsdWUgPT09ICcxMicgPyAnaGg6bW1BJyA6ICdISDptbSc7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHRlciAmIGdldHRlciBmb3IgdGltZVJhbmdlIGlucHV0ICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IHRpbWVSYW5nZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGltZVJhbmdlO1xyXG4gICAgfVxyXG4gICAgQElucHV0KClcclxuICAgIHNldCB0aW1lUmFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWVcclxuICAgICAgICBpZiAodGhpcy5fdGltZVJhbmdlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWVcclxuICAgICAgICB0aGlzLl90aW1lUmFuZ2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgcmFuZ2UgdHVybmVkIG9mZi4uLlxyXG4gICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5fcmFuZ2Uuc3RhcnQgJiYgdGhpcy5fcmFuZ2UuZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fcmFuZ2Uuc3RhcnQuY2xvbmUoKS5zdGFydE9mKCdkYXknKSxcclxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkuZW5kT2YoJ2RheScpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0dGVyICYgZ2V0dGVyIGZvciByYW5nZSBpbnB1dCAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCByYW5nZSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlIHN0YXJ0IGFuZCBlbmRcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLl9yYW5nZS5lbmQuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHJhbmdlIG9iamVjdFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlOiBzdGFydC5jbG9uZSgpLmZvcm1hdCh0aGlzLmRhdGVGb3JtYXQpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lOiB0aGlzLnRpbWVSYW5nZSA/IHN0YXJ0LmNsb25lKCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZW5kRGF0ZTogZW5kLmNsb25lKCkuZm9ybWF0KHRoaXMuZGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgICAgICBlbmRUaW1lOiB0aGlzLnRpbWVSYW5nZSA/IGVuZC5jbG9uZSgpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpIDogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IHJhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IGFuZCBoYXMgJ3N0YXJ0JyBhbmQgJ2VuZCcgdmFsdWVzXHJcbiAgICAgICAgaWYgKCF2YWx1ZS5zdGFydCB8fCAhdmFsdWUuZW5kKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JhbmdlIGlucHV0IG11c3QgaGF2ZSBcInN0YXJ0XCIgYW5kIFwiZW5kXCIgcHJvcGVydGllcyEnKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBzZXR0aW5nIGFuIGluZGl2aWR1YWwgZGF0ZSBvciBib3RoIG9mIHRoZW1cclxuICAgICAgICBjb25zdCB3aGljaERhdGUgPSB2YWx1ZS53aGljaERhdGUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgLy8gR2V0IHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGFzIG1vbWVudFxyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZGF5anModmFsdWUuc3RhcnQpO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IGRheWpzKHZhbHVlLmVuZCk7XHJcblxyXG4gICAgICAgIC8vIElmIHdlIGFyZSBvbmx5IHNldHRpbmcgdGhlIHN0YXJ0IGRhdGUuLi5cclxuICAgICAgICBpZiAod2hpY2hEYXRlID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICB0aGlzLl9yYW5nZS5zdGFydCA9IHN0YXJ0LmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgZW5kIGRhdGUuLi5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JhbmdlLmVuZCAmJiB0aGlzLl9yYW5nZS5zdGFydC5pc0FmdGVyKHRoaXMuX3JhbmdlLmVuZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZW5kIGRhdGUgdG8gdGhlIHN0YXJ0IGRhdGUgYnV0IGtlZXAgdGhlIGVuZCBkYXRlJ3MgdGltZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHN0YXJ0LmNsb25lKCkuaG91cih0aGlzLl9yYW5nZS5lbmQuaG91cigpKS5taW51dGUodGhpcy5fcmFuZ2UuZW5kLm1pbnV0ZSgpKS5zZWNvbmQodGhpcy5fcmFuZ2UuZW5kLnNlY29uZCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUZXN0IHRoaXMgbmV3IGVuZCBkYXRlIHRvIHNlZSBpZiBpdCdzIGFoZWFkIG9mIHRoZSBzdGFydCBkYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2Uuc3RhcnQuaXNCZWZvcmUoZW5kRGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzLCBzZXQgdGhlIG5ldyBlbmQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlLmVuZCA9IGVuZERhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgZW5kIGRhdGUgc2FtZSBhcyB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlLmVuZCA9IHN0YXJ0LmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIHdlIGFyZSBvbmx5IHNldHRpbmcgdGhlIGVuZCBkYXRlLi4uXHJcbiAgICAgICAgaWYgKHdoaWNoRGF0ZSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBlbmQgZGF0ZVxyXG4gICAgICAgICAgICB0aGlzLl9yYW5nZS5lbmQgPSBlbmQuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBzZWxlY3RlZCBlbmQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUuLi5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JhbmdlLnN0YXJ0Py5pc0FmdGVyKHRoaXMuX3JhbmdlLmVuZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgZW5kIGRhdGUgYnV0IGtlZXAgdGhlIHN0YXJ0IGRhdGUncyB0aW1lXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBlbmQuY2xvbmUoKS5ob3VyKHRoaXMuX3JhbmdlLnN0YXJ0LmhvdXIoKSkubWludXRlKHRoaXMuX3JhbmdlLnN0YXJ0Lm1pbnV0ZSgpKS5zZWNvbmQodGhpcy5fcmFuZ2Uuc3RhcnQuc2Vjb25kKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRlc3QgdGhpcyBuZXcgZW5kIGRhdGUgdG8gc2VlIGlmIGl0J3MgYWhlYWQgb2YgdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZS5lbmQuaXNBZnRlcihzdGFydERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncywgc2V0IHRoZSBuZXcgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlLnN0YXJ0ID0gc3RhcnREYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgdGhlIHN0YXJ0IGRhdGUgc2FtZSBhcyB0aGUgZW5kIGRhdGVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZS5zdGFydCA9IGVuZC5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB3ZSBhcmUgc2V0dGluZyBib3RoIGRhdGVzLi4uXHJcbiAgICAgICAgaWYgKCF3aGljaERhdGUpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCBkYXRlXHJcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlLnN0YXJ0ID0gc3RhcnQuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBzdGFydCBkYXRlIGlzIGJlZm9yZSB0aGUgZW5kIGRhdGUsIHNldCB0aGUgZW5kIGRhdGUgYXMgbm9ybWFsLlxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgZW5kIGRhdGUsIHNldCB0aGUgZW5kIGRhdGUgc2FtZSBhcyB0aGUgc3RhcnQgZGF0ZS5cclxuICAgICAgICAgICAgdGhpcy5fcmFuZ2UuZW5kID0gc3RhcnQuaXNCZWZvcmUoZW5kKSA/IGVuZC5jbG9uZSgpIDogc3RhcnQuY2xvbmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gUHJlcGFyZSBhbm90aGVyIHJhbmdlIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBJU08gZm9ybWF0dGVkIHJhbmdlIGRhdGVzXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX3JhbmdlLnN0YXJ0LmNsb25lKCkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gRW1pdCB0aGUgcmFuZ2UgY2hhbmdlZCBldmVudCB3aXRoIHRoZSByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlQ2hhbmdlZC5lbWl0KHJhbmdlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgd2l0aCB0aGUgcmFuZ2UgaWYgdGhlIGNoYW5nZSB3YXMgbm90IGEgcHJvZ3JhbW1hdGljIGNoYW5nZVxyXG4gICAgICAgICAgICAvLyBCZWNhdXNlIHByb2dyYW1tYXRpYyBjaGFuZ2VzIHRyaWdnZXIgd3JpdGVWYWx1ZSB3aGljaCB0cmlnZ2VycyBvbkNoYW5nZSBhbmQgb25Ub3VjaGVkXHJcbiAgICAgICAgICAgIC8vIGludGVybmFsbHkgY2F1c2luZyB0aGVtIHRvIHRyaWdnZXIgdHdpY2Ugd2hpY2ggYnJlYWtzIHRoZSBmb3JtJ3MgcHJpc3RpbmUgYW5kIHRvdWNoZWRcclxuICAgICAgICAgICAgLy8gc3RhdHVzZXMuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblRvdWNoZWQocmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UocmFuZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGFjdGl2ZSBkYXRlc1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVzID0ge1xyXG4gICAgICAgICAgICAgICAgbW9udGgxOiB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLFxyXG4gICAgICAgICAgICAgICAgbW9udGgyOiB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0IHRoZSB0aW1lIGZvcm0gY29udHJvbHNcclxuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLmZvcm1hdCh0aGlzLl90aW1lRm9ybWF0KS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRUaW1lRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkuZm9ybWF0KHRoaXMuX3RpbWVGb3JtYXQpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUnVuIG5nQWZ0ZXJDb250ZW50SW5pdCBvbiBtb250aCB2aWV3cyB0byB0cmlnZ2VyXHJcbiAgICAgICAgLy8gcmUtcmVuZGVyIG9uIG1vbnRoIHZpZXdzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZVxyXG4gICAgICAgIGlmICh0aGlzLl9tYXRNb250aFZpZXcxICYmIHRoaXMuX21hdE1vbnRoVmlldzIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWF0TW9udGhWaWV3MS5uZ0FmdGVyQ29udGVudEluaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5fbWF0TW9udGhWaWV3Mi5uZ0FmdGVyQ29udGVudEluaXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHRoZSBwcm9ncmFtbWF0aWMgY2hhbmdlIHN0YXR1c1xyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1tYXRpY0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEAgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCBvbiBjaGFuZ2VcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm5cclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCBvbiBibHVyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZuXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdyaXRlIHRvIHZpZXcgZnJvbSBtb2RlbCB3aGVuIHRoZSBmb3JtIG1vZGVsIGNoYW5nZXMgcHJvZ3JhbW1hdGljYWxseVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByYW5nZVxyXG4gICAgICovXHJcbiAgICB3cml0ZVZhbHVlKHJhbmdlOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgICAgICAvLyBTZXQgdGhpcyBjaGFuZ2UgYXMgYSBwcm9ncmFtbWF0aWMgb25lXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHRoZSByYW5nZVxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50XHJcbiAgICAgICAgdGhpcy5faW5pdCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbiBkZXN0cm95XHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQodm9pZCAwKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG5cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlID0gKCk6IHZvaWQgPT4geyB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiB0aGUgcGlja2VyIHBhbmVsXHJcbiAgICAgKi9cclxuICAgIG9wZW5QaWNrZXJQYW5lbCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkb25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGhlIG92ZXJsYXlcclxuICAgICAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY21hdC1kYXRlLXJhbmdlLXBhbmVsJyxcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJycsXHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpXHJcbiAgICAgICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9waWNrZXJQYW5lbE9yaWdpbilcclxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiA4XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiAtOFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBhIHBvcnRhbCBmcm9tIHRoZSB0ZW1wbGF0ZVxyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuX3BpY2tlclBhbmVsLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtcclxuXHJcbiAgICAgICAgLy8gT24gYmFja2Ryb3AgY2xpY2tcclxuICAgICAgICBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGVtcGxhdGUgcG9ydGFsIGV4aXN0cyBhbmQgYXR0YWNoZWQuLi5cclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlUG9ydGFsPy5pc0F0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEZXRhY2ggaXRcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlUG9ydGFsLmRldGFjaCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBvdmVybGF5IGV4aXN0cyBhbmQgYXR0YWNoZWQuLi5cclxuICAgICAgICAgICAgaWYgKG92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIERldGFjaCBpdFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVJlZi5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEF0dGFjaCB0aGUgcG9ydGFsIHRvIHRoZSBvdmVybGF5XHJcbiAgICAgICAgb3ZlcmxheVJlZi5hdHRhY2godGVtcGxhdGVQb3J0YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IG1vbnRoIGxhYmVsXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG1vbnRoXHJcbiAgICAgKi9cclxuICAgIGdldE1vbnRoTGFiZWwobW9udGg6IG51bWJlcik6IHN0cmluZyB8IHZvaWQge1xyXG4gICAgICAgIGlmIChtb250aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlcy5tb250aDE/LmNsb25lKCkuZm9ybWF0KCdZWVlZIE1NTU0nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMj8uY2xvbmUoKS5mb3JtYXQoJ1lZWVkgTU1NTScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0ZSBjbGFzcyBmdW5jdGlvbiB0byBhZGQvcmVtb3ZlIGNsYXNzIG5hbWVzIHRvIGNhbGVuZGFyIGRheXNcclxuICAgICAqL1xyXG4gICAgZGF0ZUNsYXNzKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIChkYXRlOiBEYXlqcyk6IE1hdENhbGVuZGFyQ2VsbENzc0NsYXNzZXMgfCB2b2lkID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRlIGlzIGJvdGggc3RhcnQgYW5kIGVuZCBkYXRlLi4uXHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzU2FtZSh0aGlzLl9yYW5nZS5zdGFydCwgJ2RheScpICYmIGRhdGUuaXNTYW1lKHRoaXMuX3JhbmdlLmVuZCwgJ2RheScpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWydjbWF0LWRhdGUtcmFuZ2UnLCAnY21hdC1kYXRlLXJhbmdlLXN0YXJ0JywgJ2NtYXQtZGF0ZS1yYW5nZS1lbmQnXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGUgaXMgdGhlIHN0YXJ0IGRhdGUuLi5cclxuICAgICAgICAgICAgaWYgKGRhdGUuaXNTYW1lKHRoaXMuX3JhbmdlLnN0YXJ0LCAnZGF5JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbJ2NtYXQtZGF0ZS1yYW5nZScsICdjbWF0LWRhdGUtcmFuZ2Utc3RhcnQnXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGUgaXMgdGhlIGVuZCBkYXRlLi4uXHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzU2FtZSh0aGlzLl9yYW5nZS5lbmQsICdkYXknKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnY21hdC1kYXRlLXJhbmdlJywgJ2NtYXQtZGF0ZS1yYW5nZS1lbmQnXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGUgaXMgaW4gYmV0d2VlbiBzdGFydCBhbmQgZW5kIGRhdGVzLi4uXHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzQmV0d2Vlbih0aGlzLl9yYW5nZS5zdGFydCwgdGhpcy5fcmFuZ2UuZW5kLCAnZGF5JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbJ2NtYXQtZGF0ZS1yYW5nZScsICdjbWF0LWRhdGUtcmFuZ2UtbWlkJ107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGUgZmlsdGVyIHRvIGVuYWJsZS9kaXNhYmxlIGNhbGVuZGFyIGRheXNcclxuICAgICAqL1xyXG4gICAgZGF0ZUZpbHRlcigpOiBhbnkge1xyXG4gICAgICAgIC8vIElmIHdlIGFyZSBzZWxlY3RpbmcgdGhlIGVuZCBkYXRlLCBkaXNhYmxlIGFsbCB0aGUgZGF0ZXMgdGhhdCBjb21lcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgICByZXR1cm4gKGRhdGU6IERheWpzKTogYm9vbGVhbiA9PiAhKHRoaXMuc2V0V2hpY2hEYXRlID09PSAnZW5kJyAmJiBkYXRlLmlzQmVmb3JlKHRoaXMuX3JhbmdlLnN0YXJ0LCAnZGF5JykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT24gc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGF0ZVxyXG4gICAgICovXHJcbiAgICBvblNlbGVjdGVkRGF0ZUNoYW5nZShkYXRlOiBEYXlqcyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJhbmdlIG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCBuZXdSYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX3JhbmdlLmVuZC5jbG9uZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB3aGljaERhdGU6ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBSZXBsYWNlIGVpdGhlciB0aGUgc3RhcnQgb3IgdGhlIGVuZCBkYXRlIHdpdGggdGhlIG5ldyBvbmVcclxuICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHdoaWNoIGRhdGUgd2UgYXJlIHNldHRpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0V2hpY2hEYXRlID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdSYW5nZS5zdGFydCA9IGRheWpzKG5ld1JhbmdlLnN0YXJ0KS55ZWFyKGRhdGUueWVhcigpKS5tb250aChkYXRlLm1vbnRoKCkpLmRhdGUoZGF0ZS5kYXRlKCkpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdSYW5nZS5lbmQgPSBkYXlqcyhuZXdSYW5nZS5lbmQpLnllYXIoZGF0ZS55ZWFyKCkpLm1vbnRoKGRhdGUubW9udGgoKSkuZGF0ZShkYXRlLmRhdGUoKSkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSB3aGljaCBkYXRlIHRvIHRoZSBuZXcgcmFuZ2Ugb2JqZWN0XHJcbiAgICAgICAgICAgIG5ld1JhbmdlLndoaWNoRGF0ZSA9IHRoaXMuc2V0V2hpY2hEYXRlO1xyXG5cclxuICAgICAgICAgICAgLy8gU3dpdGNoIHdoaWNoIGRhdGUgdG8gc2V0IG9uIHRoZSBuZXh0IHJ1blxyXG4gICAgICAgICAgICB0aGlzLnNldFdoaWNoRGF0ZSA9IHRoaXMuc2V0V2hpY2hEYXRlID09PSAnc3RhcnQnID8gJ2VuZCcgOiAnc3RhcnQnO1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0IHRoZSByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlID0gbmV3UmFuZ2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHbyB0byBwcmV2aW91cyBtb250aCBvbiBib3RoIHZpZXdzXHJcbiAgICAgKi9cclxuICAgIHByZXYoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlcy5tb250aDEgPSBkYXlqcyh0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMSkuc3VidHJhY3QoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlcy5tb250aDIgPSBkYXlqcyh0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMikuc3VidHJhY3QoMSwgJ21vbnRoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHbyB0byBuZXh0IG1vbnRoIG9uIGJvdGggdmlld3NcclxuICAgICAqL1xyXG4gICAgbmV4dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMSA9IGRheWpzKHRoaXMuYWN0aXZlRGF0ZXMubW9udGgxKS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlcy5tb250aDIgPSBkYXlqcyh0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMikuYWRkKDEsICdtb250aCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBzdGFydCB0aW1lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVN0YXJ0VGltZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gUGFyc2UgdGhlIHRpbWVcclxuICAgICAgICBjb25zdCBwYXJzZWRUaW1lID0gdGhpcy5fcGFyc2VUaW1lKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIEdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHZhbHVlIGlmIHRoZSBmb3JtIGNvbnRyb2wgaXMgbm90IHZhbGlkXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRUaW1lRm9ybUNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2Uuc3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIHRoZSB0aW1lICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fcmFuZ2Uuc3RhcnQuY2xvbmUoKS5mb3JtYXQodGhpcy5fdGltZUZvcm1hdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSB0aW1lXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZUZvcm1Db250cm9sLnNldFZhbHVlKHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHJhbmdlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgdGltZSB0byB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLmhvdXIocGFyc2VkVGltZS5ob3VyKCkpLm1pbnV0ZShwYXJzZWRUaW1lLm1pbnV0ZSgpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgY3VycmVudCBlbmQgZGF0ZSxcclxuICAgICAgICAgICAgLy8gdXNlIHRoZSBlbmQgZGF0ZSdzIHRpbWUgYW5kIHNldCB0aGUgc3RhcnQgZGF0ZSBhZ2FpblxyXG4gICAgICAgICAgICBpZiAoc3RhcnREYXRlLmlzQWZ0ZXIodGhpcy5fcmFuZ2UuZW5kKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRGF0ZUhvdXJzID0gdGhpcy5fcmFuZ2UuZW5kLmhvdXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGVNaW51dGVzID0gdGhpcy5fcmFuZ2UuZW5kLm1pbnV0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlLmhvdXIoZW5kRGF0ZUhvdXJzKS5taW51dGUoZW5kRGF0ZU1pbnV0ZXMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBldmVyeXRoaW5nIGlzIG9rYXksIHNldCB0aGUgbmV3IGRhdGVcclxuICAgICAgICAgICAgdGhpcy5yYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGUudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHdoaWNoRGF0ZTogJ3N0YXJ0J1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBlbmQgdGltZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVFbmRUaW1lKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyBQYXJzZSB0aGUgdGltZVxyXG4gICAgICAgIGNvbnN0IHBhcnNlZFRpbWUgPSB0aGlzLl9wYXJzZVRpbWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gR28gYmFjayB0byB0aGUgcHJldmlvdXMgdmFsdWUgaWYgdGhlIGZvcm0gY29udHJvbCBpcyBub3QgdmFsaWRcclxuICAgICAgICBpZiAodGhpcy5lbmRUaW1lRm9ybUNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2UuZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgdGltZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX3JhbmdlLmVuZC5jbG9uZSgpLmZvcm1hdCh0aGlzLl90aW1lRm9ybWF0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHRpbWVcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kVGltZUZvcm1Db250cm9sLnNldFZhbHVlKHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHJhbmdlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgdGltZSB0byB0aGUgZW5kIGRhdGVcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuX3JhbmdlLmVuZC5jbG9uZSgpLmhvdXIocGFyc2VkVGltZS5ob3VyKCkpLm1pbnV0ZShwYXJzZWRUaW1lLm1pbnV0ZSgpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgZW5kIGRhdGUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHN0YXJ0IGRhdGUsXHJcbiAgICAgICAgICAgIC8vIHVzZSB0aGUgc3RhcnQgZGF0ZSdzIHRpbWUgYW5kIHNldCB0aGUgZW5kIGRhdGUgYWdhaW5cclxuICAgICAgICAgICAgaWYgKGVuZERhdGUuaXNCZWZvcmUodGhpcy5fcmFuZ2Uuc3RhcnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGVIb3VycyA9IHRoaXMuX3JhbmdlLnN0YXJ0LmhvdXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZU1pbnV0ZXMgPSB0aGlzLl9yYW5nZS5zdGFydC5taW51dGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGVuZCBkYXRlXHJcbiAgICAgICAgICAgICAgICBlbmREYXRlLmhvdXIoc3RhcnREYXRlSG91cnMpLm1pbnV0ZShzdGFydERhdGVNaW51dGVzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgZXZlcnl0aGluZyBpcyBva2F5LCBzZXQgdGhlIG5ldyBkYXRlXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fcmFuZ2Uuc3RhcnQuY2xvbmUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZW5kOiBlbmREYXRlLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB3aGljaERhdGU6ICdlbmQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZVxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gU3RhcnQgYW5kIGVuZCB0aW1lIGZvcm0gY29udHJvbHNcclxuICAgICAgICB0aGlzLnN0YXJ0VGltZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuX3RpbWVSZWdFeHApXSk7XHJcbiAgICAgICAgdGhpcy5lbmRUaW1lRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5fdGltZVJlZ0V4cCldKTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHJhbmdlXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJhbmdlID0ge1xyXG4gICAgICAgICAgICBzdGFydDogZGF5anMoKS5zdGFydE9mKCdkYXknKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICBlbmQ6IGRheWpzKCkuYWRkKDEsICdkYXknKS5lbmRPZignZGF5JykudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB0aW1lIHJhbmdlXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRpbWVSYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgdGhlIHRpbWUgZnJvbSB0aGUgaW5wdXRzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9wYXJzZVRpbWUodmFsdWU6IHN0cmluZyk6IERheWpzIHtcclxuICAgICAgICAvLyBQYXJzZSB0aGUgdGltZSB1c2luZyB0aGUgdGltZSByZWdleHBcclxuICAgICAgICBjb25zdCB0aW1lQXJyID0gdmFsdWUuc3BsaXQodGhpcy5fdGltZVJlZ0V4cCkuZmlsdGVyKHBhcnQgPT4gcGFydCAhPT0gJycpO1xyXG5cclxuICAgICAgICAvLyBHZXQgdGhlIG1lcmlkaWVtXHJcbiAgICAgICAgY29uc3QgbWVyaWRpZW0gPSB0aW1lQXJyWzJdIHx8IG51bGw7XHJcblxyXG4gICAgICAgIC8vIElmIG1lcmlkaWVtIGV4aXN0cy4uLlxyXG4gICAgICAgIGlmIChtZXJpZGllbSkge1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBtb21lbnQgdXNpbmcgMTItaG91cnMgZm9ybWF0IGFuZCByZXR1cm4gaXRcclxuICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbHVlLCAnaGg6bW1BJykuc2Vjb25kKDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgbWVyaWRpZW0gZG9lc24ndCBleGlzdCwgY3JlYXRlIGEgbW9tZW50IHVzaW5nIDI0LWhvdXJzIGZvcm1hdCBhbmQgcmV0dXJuIGluXHJcbiAgICAgICAgcmV0dXJuIGRheWpzKHZhbHVlLCAnSEg6bW0nKS5zZWNvbmQoMCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAjcGlja2VyUGFuZWxPcmlnaW4gcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwicmFuZ2VcIiAoY2xpY2spPVwib3BlblBpY2tlclBhbmVsKClcIj5cblxuICA8ZGl2IGNsYXNzPVwic3RhcnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPnt7cmFuZ2Uuc3RhcnREYXRlfX08L2Rpdj5cbiAgICBAaWYgKHJhbmdlLnN0YXJ0VGltZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj57e3JhbmdlLnN0YXJ0VGltZX19PC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+LTwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJlbmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPnt7cmFuZ2UuZW5kRGF0ZX19PC9kaXY+XG4gICAgQGlmIChyYW5nZS5lbmRUaW1lKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZVwiPnt7cmFuZ2UuZW5kVGltZX19PC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGlja2VyUGFuZWw+XG5cbiAgPCEtLSBTdGFydCAtLT5cbiAgPGRpdiBjbGFzcz1cInN0YXJ0XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibW9udGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1oZWFkZXJcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmV2aW91cy1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gdGFiaW5kZXg9XCIxXCIgKGNsaWNrKT1cInByZXYoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX291dGxpbmU6Y2hldnJvbi1sZWZ0J1wiPjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtbGFiZWxcIj57e2dldE1vbnRoTGFiZWwoMSl9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bWF0LW1vbnRoLXZpZXcgI21hdE1vbnRoVmlldzEgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlcigpXCIgW2RhdGVDbGFzc109XCJkYXRlQ2xhc3MoKVwiXG4gICAgICAgIFsoYWN0aXZlRGF0ZSldPVwiYWN0aXZlRGF0ZXMubW9udGgxXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJvblNlbGVjdGVkRGF0ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L21hdC1tb250aC12aWV3PlxuICAgIDwvZGl2PlxuXG4gICAgQGlmICh0aW1lUmFuZ2UpIHtcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInRpbWUgc3RhcnQtdGltZVwiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdGFiaW5kZXg9XCIzXCIgW2F1dG9jb21wbGV0ZV09XCInb2ZmJ1wiIFtmb3JtQ29udHJvbF09XCJzdGFydFRpbWVGb3JtQ29udHJvbFwiXG4gICAgICAgICAgKGJsdXIpPVwidXBkYXRlU3RhcnRUaW1lKCRldmVudClcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPuW8gOWni+aXtumXtDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgfVxuXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZW5kXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb250aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLWxhYmVsXCI+e3tnZXRNb250aExhYmVsKDIpfX08L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5leHQtYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIHRhYmluZGV4PVwiMlwiIChjbGljayk9XCJuZXh0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX291dGxpbmU6Y2hldnJvbi1yaWdodCdcIj48L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1tb250aC12aWV3ICNtYXRNb250aFZpZXcyIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXIoKVwiIFtkYXRlQ2xhc3NdPVwiZGF0ZUNsYXNzKClcIlxuICAgICAgICAgIFsoYWN0aXZlRGF0ZSldPVwiYWN0aXZlRGF0ZXMubW9udGgyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPC9tYXQtbW9udGgtdmlldz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHRpbWVSYW5nZSkge1xuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0aW1lIGVuZC10aW1lXCI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHRhYmluZGV4PVwiNFwiIFtmb3JtQ29udHJvbF09XCJlbmRUaW1lRm9ybUNvbnRyb2xcIiAoYmx1cik9XCJ1cGRhdGVFbmRUaW1lKCRldmVudClcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPue7k+adn+aXtumXtDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgfVxuXG4gICAgPC9kaXY+XG5cbiAgPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
558
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvZGF0ZS1yYW5nZS9kYXRlLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9kYXRlLXJhbmdlL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM04sT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQTJDLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQXNCL0IsTUFBTSxPQUFPLHNCQUFzQjtJQTRCL0IsWUFDWSxRQUFpQixFQUNqQixpQkFBbUMs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b250ZW50IjpbImltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3JzLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2FsZW5kYXJDZWxsQ3NzQ2xhc3NlcywgTWF0TW9udGhWaWV3LCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgZGF5anMsIHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1kYXRlLXJhbmdlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGV4cG9ydEFzOiAnY21hdERhdGVSYW5nZScsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbWF0RGF0ZVJhbmdlQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSxNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIFxyXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgXHJcbiAgICAgICAgTWF0SW5wdXRNb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0RGF0ZVJhbmdlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHJhbmdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfT4oKTtcclxuICAgIEBWaWV3Q2hpbGQoJ21hdE1vbnRoVmlldzEnKSBwcml2YXRlIF9tYXRNb250aFZpZXcxOiBNYXRNb250aFZpZXc8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ21hdE1vbnRoVmlldzInKSBwcml2YXRlIF9tYXRNb250aFZpZXcyOiBNYXRNb250aFZpZXc8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3BpY2tlclBhbmVsT3JpZ2luJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgX3BpY2tlclBhbmVsT3JpZ2luOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncGlja2VyUGFuZWwnKSBwcml2YXRlIF9waWNrZXJQYW5lbDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBhY3RpdmVEYXRlczogeyBtb250aDE6IERheWpzIHwgbnVsbDsgbW9udGgyOiBEYXlqcyB8IG51bGwgfSA9IHtcclxuICAgICAgICBtb250aDE6IG51bGwsXHJcbiAgICAgICAgbW9udGgyOiBudWxsXHJcbiAgICB9O1xyXG4gICAgc2V0V2hpY2hEYXRlOiAnc3RhcnQnIHwgJ2VuZCcgPSAnc3RhcnQnO1xyXG4gICAgc3RhcnRUaW1lRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xyXG4gICAgZW5kVGltZUZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcclxuICAgIHByaXZhdGUgX2RhdGVGb3JtYXQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XHJcbiAgICBwcml2YXRlIF9wcm9ncmFtbWF0aWNDaGFuZ2UhOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfcmFuZ2U6IHsgc3RhcnQ6IERheWpzIHwgbnVsbDsgZW5kOiBEYXlqcyB8IG51bGwgfSA9IHtcclxuICAgICAgICBzdGFydDogbnVsbCxcclxuICAgICAgICBlbmQ6IG51bGxcclxuICAgIH07XHJcbiAgICBwcml2YXRlIF90aW1lRm9ybWF0OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF90aW1lUmFuZ2U6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9yZWFkb25seTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVSZWdFeHA6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oMFswLTldfDFbMC05XXwyWzAtNF18WzAtOV0pOihbMC01XVswLTldKShBfCg/OkFNKXxQfCg/OlBNKSk/JCcsICdpJyk7XHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXHJcbiAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgICkge1xyXG4gICAgICAgIGRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xyXG5cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSAoKTogdm9pZCA9PiB7IH07XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHsgfTtcclxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQgPSAnWVlZWS9NTS9ERCc7XHJcbiAgICAgICAgdGhpcy50aW1lRm9ybWF0ID0gJzEyJzsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCByZWFkb25seSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVGb3JtYXQ7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGRhdGVGb3JtYXQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZVxyXG4gICAgICAgIGlmICh0aGlzLl9kYXRlRm9ybWF0ID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWVcclxuICAgICAgICB0aGlzLl9kYXRlRm9ybWF0ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXR0ZXIgJiBnZXR0ZXIgZm9yIHRpbWVGb3JtYXQgaW5wdXQgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgICBnZXQgdGltZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90aW1lRm9ybWF0O1xyXG4gICAgfVxyXG4gICAgQElucHV0KClcclxuICAgIHNldCB0aW1lRm9ybWF0KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWVcclxuICAgICAgICBpZiAodGhpcy5fdGltZUZvcm1hdCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IGZvcm1hdCBiYXNlZCBvbiB0aGUgdGltZSBmb3JtYXQgaW5wdXRcclxuICAgICAgICB0aGlzLl90aW1lRm9ybWF0ID0gdmFsdWUgPT09ICcxMicgPyAnaGg6bW1BJyA6ICdISDptbSc7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHRlciAmIGdldHRlciBmb3IgdGltZVJhbmdlIGlucHV0ICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xyXG4gICAgZ2V0IHRpbWVSYW5nZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGltZVJhbmdlO1xyXG4gICAgfVxyXG4gICAgQElucHV0KClcclxuICAgIHNldCB0aW1lUmFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWVcclxuICAgICAgICBpZiAodGhpcy5fdGltZVJhbmdlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWVcclxuICAgICAgICB0aGlzLl90aW1lUmFuZ2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgcmFuZ2UgdHVybmVkIG9mZi4uLlxyXG4gICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5fcmFuZ2Uuc3RhcnQgJiYgdGhpcy5fcmFuZ2UuZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fcmFuZ2Uuc3RhcnQuY2xvbmUoKS5zdGFydE9mKCdkYXknKSxcclxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkuZW5kT2YoJ2RheScpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0dGVyICYgZ2V0dGVyIGZvciByYW5nZSBpbnB1dCAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICAgIGdldCByYW5nZSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlIHN0YXJ0IGFuZCBlbmRcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLl9yYW5nZS5lbmQuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJ1aWxkIGFuZCByZXR1cm4gdGhlIHJhbmdlIG9iamVjdFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlOiBzdGFydC5jbG9uZSgpLmZvcm1hdCh0aGlzLmRhdGVGb3JtYXQpLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lOiB0aGlzLnRpbWVSYW5nZSA/IHN0YXJ0LmNsb25lKCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZW5kRGF0ZTogZW5kLmNsb25lKCkuZm9ybWF0KHRoaXMuZGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgICAgICBlbmRUaW1lOiB0aGlzLnRpbWVSYW5nZSA/IGVuZC5jbG9uZSgpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpIDogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IHJhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IGFuZCBoYXMgJ3N0YXJ0JyBhbmQgJ2VuZCcgdmFsdWVzXHJcbiAgICAgICAgaWYgKCF2YWx1ZS5zdGFydCB8fCAhdmFsdWUuZW5kKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JhbmdlIGlucHV0IG11c3QgaGF2ZSBcInN0YXJ0XCIgYW5kIFwiZW5kXCIgcHJvcGVydGllcyEnKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBzZXR0aW5nIGFuIGluZGl2aWR1YWwgZGF0ZSBvciBib3RoIG9mIHRoZW1cclxuICAgICAgICBjb25zdCB3aGljaERhdGUgPSB2YWx1ZS53aGljaERhdGUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgLy8gR2V0IHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGFzIG1vbWVudFxyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZGF5anModmFsdWUuc3RhcnQpO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IGRheWpzKHZhbHVlLmVuZCk7XHJcblxyXG4gICAgICAgIC8vIElmIHdlIGFyZSBvbmx5IHNldHRpbmcgdGhlIHN0YXJ0IGRhdGUuLi5cclxuICAgICAgICBpZiAod2hpY2hEYXRlID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICB0aGlzLl9yYW5nZS5zdGFydCA9IHN0YXJ0LmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgZW5kIGRhdGUuLi5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JhbmdlLmVuZCAmJiB0aGlzLl9yYW5nZS5zdGFydC5pc0FmdGVyKHRoaXMuX3JhbmdlLmVuZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZW5kIGRhdGUgdG8gdGhlIHN0YXJ0IGRhdGUgYnV0IGtlZXAgdGhlIGVuZCBkYXRlJ3MgdGltZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHN0YXJ0LmNsb25lKCkuaG91cih0aGlzLl9yYW5nZS5lbmQuaG91cigpKS5taW51dGUodGhpcy5fcmFuZ2UuZW5kLm1pbnV0ZSgpKS5zZWNvbmQodGhpcy5fcmFuZ2UuZW5kLnNlY29uZCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUZXN0IHRoaXMgbmV3IGVuZCBkYXRlIHRvIHNlZSBpZiBpdCdzIGFoZWFkIG9mIHRoZSBzdGFydCBkYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2Uuc3RhcnQuaXNCZWZvcmUoZW5kRGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzLCBzZXQgdGhlIG5ldyBlbmQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlLmVuZCA9IGVuZERhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgZW5kIGRhdGUgc2FtZSBhcyB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlLmVuZCA9IHN0YXJ0LmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIHdlIGFyZSBvbmx5IHNldHRpbmcgdGhlIGVuZCBkYXRlLi4uXHJcbiAgICAgICAgaWYgKHdoaWNoRGF0ZSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBlbmQgZGF0ZVxyXG4gICAgICAgICAgICB0aGlzLl9yYW5nZS5lbmQgPSBlbmQuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBzZWxlY3RlZCBlbmQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUuLi5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JhbmdlLnN0YXJ0Py5pc0FmdGVyKHRoaXMuX3JhbmdlLmVuZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgZW5kIGRhdGUgYnV0IGtlZXAgdGhlIHN0YXJ0IGRhdGUncyB0aW1lXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBlbmQuY2xvbmUoKS5ob3VyKHRoaXMuX3JhbmdlLnN0YXJ0LmhvdXIoKSkubWludXRlKHRoaXMuX3JhbmdlLnN0YXJ0Lm1pbnV0ZSgpKS5zZWNvbmQodGhpcy5fcmFuZ2Uuc3RhcnQuc2Vjb25kKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRlc3QgdGhpcyBuZXcgZW5kIGRhdGUgdG8gc2VlIGlmIGl0J3MgYWhlYWQgb2YgdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZS5lbmQuaXNBZnRlcihzdGFydERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncywgc2V0IHRoZSBuZXcgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlLnN0YXJ0ID0gc3RhcnREYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgdGhlIHN0YXJ0IGRhdGUgc2FtZSBhcyB0aGUgZW5kIGRhdGVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZS5zdGFydCA9IGVuZC5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB3ZSBhcmUgc2V0dGluZyBib3RoIGRhdGVzLi4uXHJcbiAgICAgICAgaWYgKCF3aGljaERhdGUpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCBkYXRlXHJcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlLnN0YXJ0ID0gc3RhcnQuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBzdGFydCBkYXRlIGlzIGJlZm9yZSB0aGUgZW5kIGRhdGUsIHNldCB0aGUgZW5kIGRhdGUgYXMgbm9ybWFsLlxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgZW5kIGRhdGUsIHNldCB0aGUgZW5kIGRhdGUgc2FtZSBhcyB0aGUgc3RhcnQgZGF0ZS5cclxuICAgICAgICAgICAgdGhpcy5fcmFuZ2UuZW5kID0gc3RhcnQuaXNCZWZvcmUoZW5kKSA/IGVuZC5jbG9uZSgpIDogc3RhcnQuY2xvbmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gUHJlcGFyZSBhbm90aGVyIHJhbmdlIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBJU08gZm9ybWF0dGVkIHJhbmdlIGRhdGVzXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX3JhbmdlLnN0YXJ0LmNsb25lKCkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gRW1pdCB0aGUgcmFuZ2UgY2hhbmdlZCBldmVudCB3aXRoIHRoZSByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlQ2hhbmdlZC5lbWl0KHJhbmdlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgd2l0aCB0aGUgcmFuZ2UgaWYgdGhlIGNoYW5nZSB3YXMgbm90IGEgcHJvZ3JhbW1hdGljIGNoYW5nZVxyXG4gICAgICAgICAgICAvLyBCZWNhdXNlIHByb2dyYW1tYXRpYyBjaGFuZ2VzIHRyaWdnZXIgd3JpdGVWYWx1ZSB3aGljaCB0cmlnZ2VycyBvbkNoYW5nZSBhbmQgb25Ub3VjaGVkXHJcbiAgICAgICAgICAgIC8vIGludGVybmFsbHkgY2F1c2luZyB0aGVtIHRvIHRyaWdnZXIgdHdpY2Ugd2hpY2ggYnJlYWtzIHRoZSBmb3JtJ3MgcHJpc3RpbmUgYW5kIHRvdWNoZWRcclxuICAgICAgICAgICAgLy8gc3RhdHVzZXMuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblRvdWNoZWQocmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UocmFuZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGFjdGl2ZSBkYXRlc1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVzID0ge1xyXG4gICAgICAgICAgICAgICAgbW9udGgxOiB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLFxyXG4gICAgICAgICAgICAgICAgbW9udGgyOiB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0IHRoZSB0aW1lIGZvcm0gY29udHJvbHNcclxuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLmZvcm1hdCh0aGlzLl90aW1lRm9ybWF0KS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRUaW1lRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkuZm9ybWF0KHRoaXMuX3RpbWVGb3JtYXQpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUnVuIG5nQWZ0ZXJDb250ZW50SW5pdCBvbiBtb250aCB2aWV3cyB0byB0cmlnZ2VyXHJcbiAgICAgICAgLy8gcmUtcmVuZGVyIG9uIG1vbnRoIHZpZXdzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZVxyXG4gICAgICAgIGlmICh0aGlzLl9tYXRNb250aFZpZXcxICYmIHRoaXMuX21hdE1vbnRoVmlldzIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWF0TW9udGhWaWV3MS5uZ0FmdGVyQ29udGVudEluaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5fbWF0TW9udGhWaWV3Mi5uZ0FmdGVyQ29udGVudEluaXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHRoZSBwcm9ncmFtbWF0aWMgY2hhbmdlIHN0YXR1c1xyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1tYXRpY0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEAgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCBvbiBjaGFuZ2VcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm5cclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCBvbiBibHVyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZuXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdyaXRlIHRvIHZpZXcgZnJvbSBtb2RlbCB3aGVuIHRoZSBmb3JtIG1vZGVsIGNoYW5nZXMgcHJvZ3JhbW1hdGljYWxseVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByYW5nZVxyXG4gICAgICovXHJcbiAgICB3cml0ZVZhbHVlKHJhbmdlOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgICAgICAvLyBTZXQgdGhpcyBjaGFuZ2UgYXMgYSBwcm9ncmFtbWF0aWMgb25lXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHRoZSByYW5nZVxyXG4gICAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50XHJcbiAgICAgICAgdGhpcy5faW5pdCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPbiBkZXN0cm95XHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQodm9pZCAwKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG5cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlID0gKCk6IHZvaWQgPT4geyB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiB0aGUgcGlja2VyIHBhbmVsXHJcbiAgICAgKi9cclxuICAgIG9wZW5QaWNrZXJQYW5lbCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkb25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGhlIG92ZXJsYXlcclxuICAgICAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY21hdC1kYXRlLXJhbmdlLXBhbmVsJyxcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJycsXHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpXHJcbiAgICAgICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9waWNrZXJQYW5lbE9yaWdpbilcclxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiA4XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiAtOFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBhIHBvcnRhbCBmcm9tIHRoZSB0ZW1wbGF0ZVxyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuX3BpY2tlclBhbmVsLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtcclxuXHJcbiAgICAgICAgLy8gT24gYmFja2Ryb3AgY2xpY2tcclxuICAgICAgICBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGVtcGxhdGUgcG9ydGFsIGV4aXN0cyBhbmQgYXR0YWNoZWQuLi5cclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlUG9ydGFsPy5pc0F0dGFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEZXRhY2ggaXRcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlUG9ydGFsLmRldGFjaCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBvdmVybGF5IGV4aXN0cyBhbmQgYXR0YWNoZWQuLi5cclxuICAgICAgICAgICAgaWYgKG92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIERldGFjaCBpdFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVJlZi5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEF0dGFjaCB0aGUgcG9ydGFsIHRvIHRoZSBvdmVybGF5XHJcbiAgICAgICAgb3ZlcmxheVJlZi5hdHRhY2godGVtcGxhdGVQb3J0YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IG1vbnRoIGxhYmVsXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG1vbnRoXHJcbiAgICAgKi9cclxuICAgIGdldE1vbnRoTGFiZWwobW9udGg6IG51bWJlcik6IHN0cmluZyB8IHZvaWQge1xyXG4gICAgICAgIGlmIChtb250aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlcy5tb250aDE/LmNsb25lKCkuZm9ybWF0KCdZWVlZIE1NTU0nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMj8uY2xvbmUoKS5mb3JtYXQoJ1lZWVkgTU1NTScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0ZSBjbGFzcyBmdW5jdGlvbiB0byBhZGQvcmVtb3ZlIGNsYXNzIG5hbWVzIHRvIGNhbGVuZGFyIGRheXNcclxuICAgICAqL1xyXG4gICAgZGF0ZUNsYXNzKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIChkYXRlOiBEYXlqcyk6IE1hdENhbGVuZGFyQ2VsbENzc0NsYXNzZXMgfCB2b2lkID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRlIGlzIGJvdGggc3RhcnQgYW5kIGVuZCBkYXRlLi4uXHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzU2FtZSh0aGlzLl9yYW5nZS5zdGFydCwgJ2RheScpICYmIGRhdGUuaXNTYW1lKHRoaXMuX3JhbmdlLmVuZCwgJ2RheScpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWydjbWF0LWRhdGUtcmFuZ2UnLCAnY21hdC1kYXRlLXJhbmdlLXN0YXJ0JywgJ2NtYXQtZGF0ZS1yYW5nZS1lbmQnXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGUgaXMgdGhlIHN0YXJ0IGRhdGUuLi5cclxuICAgICAgICAgICAgaWYgKGRhdGUuaXNTYW1lKHRoaXMuX3JhbmdlLnN0YXJ0LCAnZGF5JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbJ2NtYXQtZGF0ZS1yYW5nZScsICdjbWF0LWRhdGUtcmFuZ2Utc3RhcnQnXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGUgaXMgdGhlIGVuZCBkYXRlLi4uXHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzU2FtZSh0aGlzLl9yYW5nZS5lbmQsICdkYXknKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnY21hdC1kYXRlLXJhbmdlJywgJ2NtYXQtZGF0ZS1yYW5nZS1lbmQnXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGUgaXMgaW4gYmV0d2VlbiBzdGFydCBhbmQgZW5kIGRhdGVzLi4uXHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzQmV0d2Vlbih0aGlzLl9yYW5nZS5zdGFydCwgdGhpcy5fcmFuZ2UuZW5kLCAnZGF5JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbJ2NtYXQtZGF0ZS1yYW5nZScsICdjbWF0LWRhdGUtcmFuZ2UtbWlkJ107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGUgZmlsdGVyIHRvIGVuYWJsZS9kaXNhYmxlIGNhbGVuZGFyIGRheXNcclxuICAgICAqL1xyXG4gICAgZGF0ZUZpbHRlcigpOiBhbnkge1xyXG4gICAgICAgIC8vIElmIHdlIGFyZSBzZWxlY3RpbmcgdGhlIGVuZCBkYXRlLCBkaXNhYmxlIGFsbCB0aGUgZGF0ZXMgdGhhdCBjb21lcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGVcclxuICAgICAgICByZXR1cm4gKGRhdGU6IERheWpzKTogYm9vbGVhbiA9PiAhKHRoaXMuc2V0V2hpY2hEYXRlID09PSAnZW5kJyAmJiBkYXRlLmlzQmVmb3JlKHRoaXMuX3JhbmdlLnN0YXJ0LCAnZGF5JykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT24gc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGF0ZVxyXG4gICAgICovXHJcbiAgICBvblNlbGVjdGVkRGF0ZUNoYW5nZShkYXRlOiBEYXlqcyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJhbmdlIG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCBuZXdSYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX3JhbmdlLmVuZC5jbG9uZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB3aGljaERhdGU6ICcnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBSZXBsYWNlIGVpdGhlciB0aGUgc3RhcnQgb3IgdGhlIGVuZCBkYXRlIHdpdGggdGhlIG5ldyBvbmVcclxuICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHdoaWNoIGRhdGUgd2UgYXJlIHNldHRpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0V2hpY2hEYXRlID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdSYW5nZS5zdGFydCA9IGRheWpzKG5ld1JhbmdlLnN0YXJ0KS55ZWFyKGRhdGUueWVhcigpKS5tb250aChkYXRlLm1vbnRoKCkpLmRhdGUoZGF0ZS5kYXRlKCkpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdSYW5nZS5lbmQgPSBkYXlqcyhuZXdSYW5nZS5lbmQpLnllYXIoZGF0ZS55ZWFyKCkpLm1vbnRoKGRhdGUubW9udGgoKSkuZGF0ZShkYXRlLmRhdGUoKSkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSB3aGljaCBkYXRlIHRvIHRoZSBuZXcgcmFuZ2Ugb2JqZWN0XHJcbiAgICAgICAgICAgIG5ld1JhbmdlLndoaWNoRGF0ZSA9IHRoaXMuc2V0V2hpY2hEYXRlO1xyXG5cclxuICAgICAgICAgICAgLy8gU3dpdGNoIHdoaWNoIGRhdGUgdG8gc2V0IG9uIHRoZSBuZXh0IHJ1blxyXG4gICAgICAgICAgICB0aGlzLnNldFdoaWNoRGF0ZSA9IHRoaXMuc2V0V2hpY2hEYXRlID09PSAnc3RhcnQnID8gJ2VuZCcgOiAnc3RhcnQnO1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0IHRoZSByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnJhbmdlID0gbmV3UmFuZ2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHbyB0byBwcmV2aW91cyBtb250aCBvbiBib3RoIHZpZXdzXHJcbiAgICAgKi9cclxuICAgIHByZXYoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlcy5tb250aDEgPSBkYXlqcyh0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMSkuc3VidHJhY3QoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlcy5tb250aDIgPSBkYXlqcyh0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMikuc3VidHJhY3QoMSwgJ21vbnRoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHbyB0byBuZXh0IG1vbnRoIG9uIGJvdGggdmlld3NcclxuICAgICAqL1xyXG4gICAgbmV4dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMSA9IGRheWpzKHRoaXMuYWN0aXZlRGF0ZXMubW9udGgxKS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlcy5tb250aDIgPSBkYXlqcyh0aGlzLmFjdGl2ZURhdGVzLm1vbnRoMikuYWRkKDEsICdtb250aCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBzdGFydCB0aW1lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVN0YXJ0VGltZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gUGFyc2UgdGhlIHRpbWVcclxuICAgICAgICBjb25zdCBwYXJzZWRUaW1lID0gdGhpcy5fcGFyc2VUaW1lKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIEdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHZhbHVlIGlmIHRoZSBmb3JtIGNvbnRyb2wgaXMgbm90IHZhbGlkXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRUaW1lRm9ybUNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2Uuc3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIHRoZSB0aW1lICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fcmFuZ2Uuc3RhcnQuY2xvbmUoKS5mb3JtYXQodGhpcy5fdGltZUZvcm1hdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSB0aW1lXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZUZvcm1Db250cm9sLnNldFZhbHVlKHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHJhbmdlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgdGltZSB0byB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLl9yYW5nZS5zdGFydC5jbG9uZSgpLmhvdXIocGFyc2VkVGltZS5ob3VyKCkpLm1pbnV0ZShwYXJzZWRUaW1lLm1pbnV0ZSgpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgc3RhcnQgZGF0ZSBpcyBhZnRlciB0aGUgY3VycmVudCBlbmQgZGF0ZSxcclxuICAgICAgICAgICAgLy8gdXNlIHRoZSBlbmQgZGF0ZSdzIHRpbWUgYW5kIHNldCB0aGUgc3RhcnQgZGF0ZSBhZ2FpblxyXG4gICAgICAgICAgICBpZiAoc3RhcnREYXRlLmlzQWZ0ZXIodGhpcy5fcmFuZ2UuZW5kKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRGF0ZUhvdXJzID0gdGhpcy5fcmFuZ2UuZW5kLmhvdXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGVNaW51dGVzID0gdGhpcy5fcmFuZ2UuZW5kLm1pbnV0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlLmhvdXIoZW5kRGF0ZUhvdXJzKS5taW51dGUoZW5kRGF0ZU1pbnV0ZXMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBldmVyeXRoaW5nIGlzIG9rYXksIHNldCB0aGUgbmV3IGRhdGVcclxuICAgICAgICAgICAgdGhpcy5yYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGUudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcmFuZ2UuZW5kLmNsb25lKCkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHdoaWNoRGF0ZTogJ3N0YXJ0J1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSBlbmQgdGltZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVFbmRUaW1lKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyBQYXJzZSB0aGUgdGltZVxyXG4gICAgICAgIGNvbnN0IHBhcnNlZFRpbWUgPSB0aGlzLl9wYXJzZVRpbWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gR28gYmFjayB0byB0aGUgcHJldmlvdXMgdmFsdWUgaWYgdGhlIGZvcm0gY29udHJvbCBpcyBub3QgdmFsaWRcclxuICAgICAgICBpZiAodGhpcy5lbmRUaW1lRm9ybUNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2UuZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgdGltZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX3JhbmdlLmVuZC5jbG9uZSgpLmZvcm1hdCh0aGlzLl90aW1lRm9ybWF0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHRpbWVcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kVGltZUZvcm1Db250cm9sLnNldFZhbHVlKHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHJhbmdlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yYW5nZS5zdGFydCAmJiB0aGlzLl9yYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgdGltZSB0byB0aGUgZW5kIGRhdGVcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuX3JhbmdlLmVuZC5jbG9uZSgpLmhvdXIocGFyc2VkVGltZS5ob3VyKCkpLm1pbnV0ZShwYXJzZWRUaW1lLm1pbnV0ZSgpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgZW5kIGRhdGUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHN0YXJ0IGRhdGUsXHJcbiAgICAgICAgICAgIC8vIHVzZSB0aGUgc3RhcnQgZGF0ZSdzIHRpbWUgYW5kIHNldCB0aGUgZW5kIGRhdGUgYWdhaW5cclxuICAgICAgICAgICAgaWYgKGVuZERhdGUuaXNCZWZvcmUodGhpcy5fcmFuZ2Uuc3RhcnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGVIb3VycyA9IHRoaXMuX3JhbmdlLnN0YXJ0LmhvdXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZU1pbnV0ZXMgPSB0aGlzLl9yYW5nZS5zdGFydC5taW51dGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGVuZCBkYXRlXHJcbiAgICAgICAgICAgICAgICBlbmREYXRlLmhvdXIoc3RhcnREYXRlSG91cnMpLm1pbnV0ZShzdGFydERhdGVNaW51dGVzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgZXZlcnl0aGluZyBpcyBva2F5LCBzZXQgdGhlIG5ldyBkYXRlXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fcmFuZ2Uuc3RhcnQuY2xvbmUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZW5kOiBlbmREYXRlLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB3aGljaERhdGU6ICdlbmQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZVxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gU3RhcnQgYW5kIGVuZCB0aW1lIGZvcm0gY29udHJvbHNcclxuICAgICAgICB0aGlzLnN0YXJ0VGltZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuX3RpbWVSZWdFeHApXSk7XHJcbiAgICAgICAgdGhpcy5lbmRUaW1lRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5fdGltZVJlZ0V4cCldKTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHJhbmdlXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJhbmdlID0ge1xyXG4gICAgICAgICAgICBzdGFydDogZGF5anMoKS5zdGFydE9mKCdkYXknKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICBlbmQ6IGRheWpzKCkuYWRkKDEsICdkYXknKS5lbmRPZignZGF5JykudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB0aW1lIHJhbmdlXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbW1hdGljQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRpbWVSYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgdGhlIHRpbWUgZnJvbSB0aGUgaW5wdXRzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9wYXJzZVRpbWUodmFsdWU6IHN0cmluZyk6IERheWpzIHtcclxuICAgICAgICAvLyBQYXJzZSB0aGUgdGltZSB1c2luZyB0aGUgdGltZSByZWdleHBcclxuICAgICAgICBjb25zdCB0aW1lQXJyID0gdmFsdWUuc3BsaXQodGhpcy5fdGltZVJlZ0V4cCkuZmlsdGVyKHBhcnQgPT4gcGFydCAhPT0gJycpO1xyXG5cclxuICAgICAgICAvLyBHZXQgdGhlIG1lcmlkaWVtXHJcbiAgICAgICAgY29uc3QgbWVyaWRpZW0gPSB0aW1lQXJyWzJdIHx8IG51bGw7XHJcblxyXG4gICAgICAgIC8vIElmIG1lcmlkaWVtIGV4aXN0cy4uLlxyXG4gICAgICAgIGlmIChtZXJpZGllbSkge1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBtb21lbnQgdXNpbmcgMTItaG91cnMgZm9ybWF0IGFuZCByZXR1cm4gaXRcclxuICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbHVlLCAnaGg6bW1BJykuc2Vjb25kKDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgbWVyaWRpZW0gZG9lc24ndCBleGlzdCwgY3JlYXRlIGEgbW9tZW50IHVzaW5nIDI0LWhvdXJzIGZvcm1hdCBhbmQgcmV0dXJuIGluXHJcbiAgICAgICAgcmV0dXJuIGRheWpzKHZhbHVlLCAnSEg6bW0nKS5zZWNvbmQoMCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAjcGlja2VyUGFuZWxPcmlnaW4gcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwicmFuZ2VcIiAoY2xpY2spPVwib3BlblBpY2tlclBhbmVsKClcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInN0YXJ0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPnt7cmFuZ2Uuc3RhcnREYXRlfX08L2Rpdj5cclxuICAgIEBpZiAocmFuZ2Uuc3RhcnRUaW1lKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lXCI+e3tyYW5nZS5zdGFydFRpbWV9fTwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+LTwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZW5kXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPnt7cmFuZ2UuZW5kRGF0ZX19PC9kaXY+XHJcbiAgICBAaWYgKHJhbmdlLmVuZFRpbWUpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj57e3JhbmdlLmVuZFRpbWV9fTwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3BpY2tlclBhbmVsPlxyXG5cclxuICA8IS0tIFN0YXJ0IC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJzdGFydFwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb250aFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9udGgtaGVhZGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmV2aW91cy1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gdGFiaW5kZXg9XCIxXCIgKGNsaWNrKT1cInByZXYoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTpjaGV2cm9uLWxlZnQnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtbGFiZWxcIj57e2dldE1vbnRoTGFiZWwoMSl9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1tb250aC12aWV3ICNtYXRNb250aFZpZXcxIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXIoKVwiIFtkYXRlQ2xhc3NdPVwiZGF0ZUNsYXNzKClcIlxyXG4gICAgICAgIFsoYWN0aXZlRGF0ZSldPVwiYWN0aXZlRGF0ZXMubW9udGgxXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRlQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgPC9tYXQtbW9udGgtdmlldz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZiAodGltZVJhbmdlKSB7XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInRpbWUgc3RhcnQtdGltZVwiPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0YWJpbmRleD1cIjNcIiBbYXV0b2NvbXBsZXRlXT1cIidvZmYnXCIgW2Zvcm1Db250cm9sXT1cInN0YXJ0VGltZUZvcm1Db250cm9sXCJcclxuICAgICAgICAgIChibHVyKT1cInVwZGF0ZVN0YXJ0VGltZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPuW8gOWni+aXtumXtDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIH1cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEVuZCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJlbmRcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb250aFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1sYWJlbFwiPnt7Z2V0TW9udGhMYWJlbCgyKX19PC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5leHQtYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIHRhYmluZGV4PVwiMlwiIChjbGljayk9XCJuZXh0KClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTpjaGV2cm9uLXJpZ2h0J1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LW1vbnRoLXZpZXcgI21hdE1vbnRoVmlldzIgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlcigpXCIgW2RhdGVDbGFzc109XCJkYXRlQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVzLm1vbnRoMlwiIChjbGljayk9XCIkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRlQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICA8L21hdC1tb250aC12aWV3PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIEBpZiAodGltZVJhbmdlKSB7XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidGltZSBlbmQtdGltZVwiPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHRhYmluZGV4PVwiNFwiIFtmb3JtQ29udHJvbF09XCJlbmRUaW1lRm9ybUNvbnRyb2xcIiAoYmx1cik9XCJ1cGRhdGVFbmRUaW1lKCRldmVudClcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+57uT5p2f5pe26Ze0PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgfVxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L25nLXRlbXBsYXRlPiJdfQ==
|