@mtna/web-form-angular 1.0.1 → 1.0.2-SNAPSHOT.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_index.scss +18 -16
- package/bundles/mtna-web-form-angular.umd.js +6683 -4919
- package/bundles/mtna-web-form-angular.umd.js.map +1 -1
- package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.component.js +30 -0
- package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.module.js +21 -0
- package/esm2015/lib/components/acknowledge-dialog/index.js +3 -0
- package/esm2015/lib/components/base-items/base-form-item-control.component.js +42 -0
- package/esm2015/lib/components/base-items/base-form-item.component.js +53 -0
- package/esm2015/lib/components/base-items/base-group-item.component.js +30 -0
- package/esm2015/lib/components/base-items/base-parent-value-item.component.js +43 -0
- package/esm2015/lib/components/base-items/base-section-item.component.js +29 -0
- package/esm2015/lib/components/base-items/base-single-selection-parent-value-item.component.js +62 -0
- package/esm2015/lib/components/base-items/base-value-item.component.js +41 -0
- package/esm2015/lib/components/base-items/index.js +7 -0
- package/esm2015/lib/components/form/form.component.js +250 -0
- package/esm2015/lib/components/form/form.module.js +60 -0
- package/esm2015/lib/components/form/index.js +3 -0
- package/esm2015/lib/{form → components/form-disabler}/form-disabler.component.js +1 -1
- package/esm2015/lib/components/form-disabler/form-disabler.module.js +18 -0
- package/esm2015/lib/components/form-disabler/index.js +3 -0
- package/esm2015/lib/components/form-item/form-item.component.js +128 -0
- package/esm2015/lib/components/form-item/form-item.module.js +42 -0
- package/esm2015/lib/components/form-item/index.js +3 -0
- package/esm2015/lib/components/form-item-component-provider/form-item-component-provider.js +8 -0
- package/esm2015/lib/components/form-item-component-provider/form-item-injected-components.js +120 -0
- package/esm2015/lib/components/form-item-component-provider/index.js +3 -0
- package/esm2015/lib/components/form-item-dialog/form-item-dialog.component.js +29 -0
- package/esm2015/lib/components/form-item-dialog/form-item-dialog.module.js +20 -0
- package/esm2015/lib/components/form-item-dialog/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/boolean/boolean.component.js +34 -0
- package/esm2015/lib/components/form-item-impl/boolean/boolean.module.js +45 -0
- package/esm2015/lib/components/form-item-impl/boolean/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/checkbox/checkbox.component.js +91 -0
- package/esm2015/lib/components/form-item-impl/checkbox/checkbox.module.js +65 -0
- package/esm2015/lib/components/form-item-impl/checkbox/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/date/date.component.js +92 -0
- package/esm2015/lib/components/form-item-impl/date/date.module.js +53 -0
- package/esm2015/lib/components/form-item-impl/date/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +31 -0
- package/esm2015/lib/components/form-item-impl/date-range/date-range.module.js +45 -0
- package/esm2015/lib/components/form-item-impl/date-range/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/dropdown/dropdown.component.js +29 -0
- package/esm2015/lib/components/form-item-impl/dropdown/dropdown.module.js +59 -0
- package/esm2015/lib/components/form-item-impl/dropdown/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/file-upload/file-upload.component.js +56 -0
- package/esm2015/lib/components/form-item-impl/file-upload/file-upload.module.js +49 -0
- package/esm2015/lib/components/form-item-impl/file-upload/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/form-group/form-group.component.js +50 -0
- package/esm2015/lib/components/form-item-impl/form-group/form-group.module.js +49 -0
- package/esm2015/lib/components/form-item-impl/form-group/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/form-section/form-section.component.js +23 -0
- package/esm2015/lib/components/form-item-impl/form-section/form-section.module.js +23 -0
- package/esm2015/lib/components/form-item-impl/form-section/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.component.js +56 -0
- package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.module.js +52 -0
- package/esm2015/lib/components/form-item-impl/i18n-input/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/index.js +23 -0
- package/esm2015/lib/components/form-item-impl/input/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/input/input.component.js +45 -0
- package/esm2015/lib/components/form-item-impl/input/input.module.js +52 -0
- package/esm2015/lib/components/form-item-impl/multiple-choice/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +25 -0
- package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.module.js +49 -0
- package/esm2015/lib/components/form-item-impl/ordered-list/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/ordered-list/ordered-list-item.component.js +21 -0
- package/esm2015/lib/components/form-item-impl/ordered-list/ordered-list-item.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item/repeatable-item.component.js +23 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item/repeatable-item.module.js +18 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item-container/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.js +57 -0
- package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.js +57 -0
- package/esm2015/lib/components/form-item-impl/search/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/search/resource-search.component.js +56 -0
- package/esm2015/lib/components/form-item-impl/search/resource-search.module.js +22 -0
- package/esm2015/lib/components/form-item-impl/table-item/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/table-item/table-item.component.js +27 -0
- package/esm2015/lib/components/form-item-impl/table-item/table-item.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/text/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/text/text.component.js +20 -0
- package/esm2015/lib/components/form-item-impl/text/text.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/title/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/title/title.component.js +19 -0
- package/esm2015/lib/components/form-item-impl/title/title.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/unordered-list/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/unordered-list/unordered-list-item.component.js +21 -0
- package/esm2015/lib/components/form-item-impl/unordered-list/unordered-list-item.module.js +20 -0
- package/esm2015/lib/components/form-item-impl/year-quarter/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.component.js +166 -0
- package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.module.js +55 -0
- package/esm2015/lib/components/form-item-impl/year-quarter-range/index.js +3 -0
- package/esm2015/lib/components/form-item-impl/year-quarter-range/year-quarter-range.component.js +39 -0
- package/esm2015/lib/components/form-item-impl/year-quarter-range/year-quarter-range.module.js +22 -0
- package/esm2015/lib/components/form-item-injector/form-item-injector.component.js +163 -0
- package/esm2015/lib/components/form-item-injector/form-item-injector.module.js +18 -0
- package/esm2015/lib/components/form-item-injector/index.js +3 -0
- package/esm2015/lib/components/form-stepper/form-step/form-step.component.js +68 -0
- package/esm2015/lib/components/form-stepper/form-step/index.js +2 -0
- package/esm2015/lib/components/form-stepper/form-step-group/form-step-group.component.js +53 -0
- package/esm2015/lib/components/form-stepper/form-step-group/index.js +2 -0
- package/esm2015/lib/components/form-stepper/form-stepper/form-stepper.component.js +59 -0
- package/esm2015/lib/components/form-stepper/form-stepper/index.js +2 -0
- package/esm2015/lib/components/form-stepper/form-stepper.module.js +56 -0
- package/esm2015/lib/components/form-stepper/index.js +5 -0
- package/esm2015/lib/components/index.js +13 -0
- package/esm2015/lib/components/item-header/index.js +3 -0
- package/esm2015/lib/components/item-header/item-header.component.js +71 -0
- package/esm2015/lib/components/item-header/item-header.module.js +19 -0
- package/esm2015/lib/components/step-card/index.js +3 -0
- package/esm2015/lib/{step-card → components/step-card}/step-card.component.js +2 -2
- package/esm2015/lib/components/step-card/step-card.module.js +23 -0
- package/esm2015/lib/directives/base-form-item-control.directive.js +58 -0
- package/esm2015/lib/directives/base-parent-item-control.directive.js +42 -0
- package/esm2015/lib/directives/base-single-selection-parent.directive.js +53 -0
- package/esm2015/lib/{form → directives}/form-item.directive.js +1 -1
- package/esm2015/lib/directives/index.js +5 -0
- package/esm2015/lib/models/api-config.js +3 -0
- package/esm2015/lib/models/base-form-item.model.js +2 -0
- package/esm2015/lib/{groups → models}/form-item-dialog-data.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/base-form-step.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/form-step-group.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/form-step.model.js +1 -1
- package/esm2015/lib/{form-stepper/models → models/form-stepper}/index.js +1 -1
- package/esm2015/lib/models/index.js +7 -0
- package/esm2015/lib/models/toggle-form-item-data.model.js +2 -0
- package/esm2015/lib/models/white-list.model.js +11 -0
- package/esm2015/lib/pipes/coerce-date-item.pipe.js +37 -0
- package/esm2015/lib/pipes/coerce-form-control.pipe.js +36 -0
- package/esm2015/lib/pipes/coerce-form-group.pipe.js +47 -0
- package/esm2015/lib/pipes/coerce-form-item.pipe.js +36 -0
- package/esm2015/lib/pipes/date-quarter.pipe.js +55 -0
- package/esm2015/lib/pipes/form-step-group.pipe.js +32 -0
- package/esm2015/lib/pipes/get-auto-complete.pipe.js +54 -0
- package/esm2015/lib/pipes/get-available-quarters.pipe.js +41 -0
- package/esm2015/lib/pipes/get-form-control-error.pipe.js +32 -0
- package/esm2015/lib/pipes/get-list-icon.pipe.js +65 -0
- package/esm2015/lib/pipes/get-object-type.pipe.js +29 -0
- package/esm2015/lib/pipes/get-selected-option.pipe.js +32 -0
- package/esm2015/lib/pipes/index.js +15 -0
- package/esm2015/lib/pipes/items-with-value.pipe.js +42 -0
- package/esm2015/lib/pipes/sanitize-html.pipe.js +35 -0
- package/esm2015/lib/services/api.service.js +67 -0
- package/esm2015/lib/services/dialog.service.js +47 -0
- package/esm2015/lib/services/form-manager.service.js +465 -0
- package/esm2015/lib/services/index.js +7 -0
- package/esm2015/lib/services/ng-form.service.js +150 -0
- package/esm2015/lib/services/resource-search-selection.service.js +24 -0
- package/esm2015/lib/services/ui.service.js +333 -0
- package/esm2015/lib/utilities/animations.js +8 -0
- package/esm2015/lib/utilities/find-form-control.js +29 -0
- package/esm2015/lib/utilities/find-form-item.js +25 -0
- package/esm2015/lib/utilities/flatten-steps.js +10 -0
- package/esm2015/lib/utilities/form-step.util.js +28 -0
- package/esm2015/lib/utilities/generate-form-steps.js +38 -0
- package/esm2015/lib/utilities/get-item-class-suffix.js +17 -0
- package/esm2015/lib/utilities/index.js +13 -0
- package/esm2015/lib/utilities/is-form-control.js +5 -0
- package/esm2015/lib/utilities/is-form-group.js +6 -0
- package/esm2015/lib/utilities/serializer-util.js +396 -0
- package/esm2015/lib/utilities/update-step-status.js +38 -0
- package/esm2015/lib/validators/index.js +3 -0
- package/esm2015/lib/validators/instant-validation-result-error-state-matcher.js +23 -0
- package/esm2015/lib/validators/validation-result-validator.js +19 -0
- package/esm2015/public-api.js +8 -10
- package/fesm2015/mtna-web-form-angular.js +4180 -3443
- package/fesm2015/mtna-web-form-angular.js.map +1 -1
- package/lib/components/acknowledge-dialog/acknowledge-dialog.component.d.ts +13 -0
- package/lib/components/acknowledge-dialog/acknowledge-dialog.module.d.ts +11 -0
- package/lib/components/acknowledge-dialog/index.d.ts +2 -0
- package/lib/components/base-items/base-form-item-control.component.d.ts +19 -0
- package/lib/components/base-items/base-form-item.component.d.ts +27 -0
- package/lib/components/base-items/base-group-item.component.d.ts +12 -0
- package/lib/components/base-items/base-parent-value-item.component.d.ts +17 -0
- package/lib/components/base-items/base-section-item.component.d.ts +13 -0
- package/lib/components/base-items/base-single-selection-parent-value-item.component.d.ts +19 -0
- package/lib/components/base-items/base-value-item.component.d.ts +17 -0
- package/lib/components/base-items/index.d.ts +6 -0
- package/lib/{form → components/form}/form.component.d.ts +2 -2
- package/lib/components/form/form.module.d.ts +16 -0
- package/lib/components/form/index.d.ts +2 -0
- package/lib/components/form-disabler/form-disabler.module.d.ts +8 -0
- package/lib/components/form-disabler/index.d.ts +2 -0
- package/lib/components/form-item/form-item.component.d.ts +54 -0
- package/lib/components/form-item/form-item.module.d.ts +13 -0
- package/lib/components/form-item/index.d.ts +2 -0
- package/lib/components/form-item-component-provider/form-item-component-provider.d.ts +4 -0
- package/lib/components/form-item-component-provider/form-item-injected-components.d.ts +2 -0
- package/lib/components/form-item-component-provider/index.d.ts +2 -0
- package/lib/components/form-item-dialog/form-item-dialog.component.d.ts +13 -0
- package/lib/components/form-item-dialog/form-item-dialog.module.d.ts +10 -0
- package/lib/components/form-item-dialog/index.d.ts +2 -0
- package/lib/components/form-item-impl/boolean/boolean.component.d.ts +18 -0
- package/lib/components/form-item-impl/boolean/boolean.module.d.ts +13 -0
- package/lib/components/form-item-impl/boolean/index.d.ts +2 -0
- package/lib/components/form-item-impl/checkbox/checkbox.component.d.ts +29 -0
- package/lib/components/form-item-impl/checkbox/checkbox.module.d.ts +18 -0
- package/lib/components/form-item-impl/checkbox/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/date}/date.component.d.ts +8 -8
- package/lib/components/form-item-impl/date/date.module.d.ts +15 -0
- package/lib/components/form-item-impl/date/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/date-range}/date-range.component.d.ts +2 -2
- package/lib/components/form-item-impl/date-range/date-range.module.d.ts +13 -0
- package/lib/components/form-item-impl/date-range/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/dropdown}/dropdown.component.d.ts +2 -4
- package/lib/components/form-item-impl/dropdown/dropdown.module.d.ts +17 -0
- package/lib/components/form-item-impl/dropdown/index.d.ts +2 -0
- package/lib/components/form-item-impl/file-upload/file-upload.component.d.ts +19 -0
- package/lib/components/form-item-impl/file-upload/file-upload.module.d.ts +14 -0
- package/lib/{file-upload → components/form-item-impl/file-upload}/index.d.ts +1 -0
- package/lib/components/form-item-impl/form-group/form-group.component.d.ts +17 -0
- package/lib/components/form-item-impl/form-group/form-group.module.d.ts +14 -0
- package/lib/components/form-item-impl/form-group/index.d.ts +2 -0
- package/lib/components/form-item-impl/form-section/form-section.component.d.ts +7 -0
- package/lib/components/form-item-impl/form-section/form-section.module.d.ts +13 -0
- package/lib/components/form-item-impl/form-section/index.d.ts +2 -0
- package/lib/components/form-item-impl/i18n-input/i18n-input.component.d.ts +13 -0
- package/lib/components/form-item-impl/i18n-input/i18n-input.module.d.ts +15 -0
- package/lib/components/form-item-impl/i18n-input/index.d.ts +2 -0
- package/lib/components/form-item-impl/index.d.ts +21 -0
- package/lib/components/form-item-impl/input/index.d.ts +2 -0
- package/lib/components/form-item-impl/input/input.component.d.ts +12 -0
- package/lib/components/form-item-impl/input/input.module.d.ts +15 -0
- package/lib/components/form-item-impl/multiple-choice/index.d.ts +2 -0
- package/lib/components/form-item-impl/multiple-choice/multiple-choice.component.d.ts +7 -0
- package/lib/components/form-item-impl/multiple-choice/multiple-choice.module.d.ts +14 -0
- package/lib/components/form-item-impl/ordered-list/index.d.ts +2 -0
- package/lib/components/form-item-impl/ordered-list/ordered-list-item.component.d.ts +7 -0
- package/lib/components/form-item-impl/ordered-list/ordered-list-item.module.d.ts +10 -0
- package/lib/{groups → components/form-item-impl/repeatable-item}/index.d.ts +1 -1
- package/lib/components/form-item-impl/repeatable-item/repeatable-item.component.d.ts +5 -0
- package/lib/components/form-item-impl/repeatable-item/repeatable-item.module.d.ts +8 -0
- package/lib/components/form-item-impl/repeatable-item-container/index.d.ts +2 -0
- package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.d.ts +14 -0
- package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.d.ts +16 -0
- package/lib/components/form-item-impl/search/index.d.ts +2 -0
- package/lib/components/form-item-impl/search/resource-search.component.d.ts +16 -0
- package/lib/components/form-item-impl/search/resource-search.module.d.ts +12 -0
- package/lib/components/form-item-impl/table-item/index.d.ts +2 -0
- package/lib/components/form-item-impl/table-item/table-item.component.d.ts +9 -0
- package/lib/components/form-item-impl/table-item/table-item.module.d.ts +10 -0
- package/lib/components/form-item-impl/text/index.d.ts +2 -0
- package/lib/components/form-item-impl/text/text.component.d.ts +7 -0
- package/lib/components/form-item-impl/text/text.module.d.ts +10 -0
- package/lib/components/form-item-impl/title/_title-theme.scss +28 -0
- package/lib/components/form-item-impl/title/index.d.ts +2 -0
- package/lib/components/form-item-impl/title/title.component.d.ts +7 -0
- package/lib/components/form-item-impl/title/title.module.d.ts +10 -0
- package/lib/components/form-item-impl/unordered-list/index.d.ts +2 -0
- package/lib/components/form-item-impl/unordered-list/unordered-list-item.component.d.ts +7 -0
- package/lib/components/form-item-impl/unordered-list/unordered-list-item.module.d.ts +10 -0
- package/lib/components/form-item-impl/year-quarter/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/year-quarter}/year-quarter.component.d.ts +9 -7
- package/lib/components/form-item-impl/year-quarter/year-quarter.module.d.ts +16 -0
- package/lib/components/form-item-impl/year-quarter-range/index.d.ts +2 -0
- package/lib/{form-item-controls → components/form-item-impl/year-quarter-range}/year-quarter-range.component.d.ts +6 -2
- package/lib/components/form-item-impl/year-quarter-range/year-quarter-range.module.d.ts +12 -0
- package/lib/components/form-item-injector/form-item-injector.component.d.ts +52 -0
- package/lib/components/form-item-injector/form-item-injector.module.d.ts +8 -0
- package/lib/components/form-item-injector/index.d.ts +2 -0
- package/lib/{form-stepper → components/form-stepper/form-step}/form-step.component.d.ts +1 -1
- package/lib/components/form-stepper/form-step/index.d.ts +1 -0
- package/lib/{form-stepper → components/form-stepper/form-step-group}/form-step-group.component.d.ts +1 -1
- package/lib/components/form-stepper/form-step-group/index.d.ts +1 -0
- package/lib/{form-stepper → components/form-stepper/form-stepper}/form-stepper.component.d.ts +1 -2
- package/lib/components/form-stepper/form-stepper/index.d.ts +1 -0
- package/lib/components/form-stepper/form-stepper.module.d.ts +18 -0
- package/lib/components/form-stepper/index.d.ts +4 -0
- package/lib/components/index.d.ts +12 -0
- package/lib/{item-header → components/item-header}/index.d.ts +1 -0
- package/lib/{item-header → components/item-header}/item-header.component.d.ts +3 -3
- package/lib/components/item-header/item-header.module.d.ts +9 -0
- package/lib/{step-card → components/step-card}/index.d.ts +1 -0
- package/lib/{step-card → components/step-card}/step-card.component.d.ts +1 -1
- package/lib/components/step-card/step-card.module.d.ts +13 -0
- package/lib/core/_all-color.scss +15 -15
- package/lib/core/_all-theme.scss +15 -18
- package/lib/core/_all-typography.scss +15 -15
- package/lib/core/_core-theme.scss +0 -18
- package/lib/{form-item-controls → directives}/base-single-selection-parent.directive.d.ts +1 -1
- package/lib/directives/index.d.ts +4 -0
- package/lib/models/index.d.ts +6 -0
- package/lib/models/toggle-form-item-data.model.d.ts +7 -0
- package/lib/pipes/coerce-date-item.pipe.d.ts +17 -0
- package/lib/pipes/coerce-form-control.pipe.d.ts +13 -0
- package/lib/{core/pipes → pipes}/coerce-form-group.pipe.d.ts +5 -0
- package/lib/pipes/coerce-form-item.pipe.d.ts +14 -0
- package/lib/pipes/date-quarter.pipe.d.ts +12 -0
- package/lib/{form-stepper → pipes}/form-step-group.pipe.d.ts +6 -1
- package/lib/pipes/get-auto-complete.pipe.d.ts +12 -0
- package/lib/{core/pipes → pipes}/get-available-quarters.pipe.d.ts +5 -0
- package/lib/pipes/get-form-control-error.pipe.d.ts +19 -0
- package/lib/pipes/get-list-icon.pipe.d.ts +12 -0
- package/lib/pipes/get-object-type.pipe.d.ts +12 -0
- package/lib/{core/pipes → pipes}/get-selected-option.pipe.d.ts +5 -0
- package/lib/pipes/index.d.ts +14 -0
- package/lib/{core/pipes → pipes}/items-with-value.pipe.d.ts +5 -0
- package/lib/{core/pipes → pipes}/sanitize-html.pipe.d.ts +5 -0
- package/lib/{core/services → services}/api.service.d.ts +1 -1
- package/lib/services/dialog.service.d.ts +21 -0
- package/lib/{core/services → services}/form-manager.service.d.ts +1 -1
- package/lib/{core/services → services}/index.d.ts +2 -0
- package/lib/services/resource-search-selection.service.d.ts +10 -0
- package/lib/{core/services → services}/ui.service.d.ts +1 -1
- package/lib/{core/utilities → utilities}/flatten-steps.d.ts +1 -1
- package/lib/{form-stepper → utilities}/form-step.util.d.ts +1 -1
- package/lib/{core/utilities → utilities}/generate-form-steps.d.ts +1 -1
- package/lib/utilities/get-item-class-suffix.d.ts +1 -0
- package/lib/{core/utilities → utilities}/index.d.ts +4 -0
- package/lib/utilities/is-form-control.d.ts +2 -0
- package/lib/{core/utilities → utilities}/update-step-status.d.ts +1 -1
- package/package.json +3 -1
- package/public-api.d.ts +7 -9
- package/esm2015/lib/core/animations.js +0 -8
- package/esm2015/lib/core/api-config.js +0 -3
- package/esm2015/lib/core/index.js +0 -7
- package/esm2015/lib/core/pipes/coerce-date-item.pipe.js +0 -23
- package/esm2015/lib/core/pipes/coerce-form-group.pipe.js +0 -35
- package/esm2015/lib/core/pipes/date-quarter.pipe.js +0 -43
- package/esm2015/lib/core/pipes/get-auto-complete.pipe.js +0 -42
- package/esm2015/lib/core/pipes/get-available-quarters.pipe.js +0 -29
- package/esm2015/lib/core/pipes/get-form-control-error.pipe.js +0 -20
- package/esm2015/lib/core/pipes/get-list-icon.pipe.js +0 -53
- package/esm2015/lib/core/pipes/get-object-type.pipe.js +0 -17
- package/esm2015/lib/core/pipes/get-selected-option.pipe.js +0 -20
- package/esm2015/lib/core/pipes/index.js +0 -71
- package/esm2015/lib/core/pipes/items-with-value.pipe.js +0 -30
- package/esm2015/lib/core/pipes/sanitize-html.pipe.js +0 -23
- package/esm2015/lib/core/services/api.service.js +0 -67
- package/esm2015/lib/core/services/form-manager.service.js +0 -465
- package/esm2015/lib/core/services/index.js +0 -5
- package/esm2015/lib/core/services/ng-form.service.js +0 -150
- package/esm2015/lib/core/services/ui.service.js +0 -333
- package/esm2015/lib/core/utilities/find-form-control.js +0 -29
- package/esm2015/lib/core/utilities/find-form-item.js +0 -25
- package/esm2015/lib/core/utilities/flatten-steps.js +0 -10
- package/esm2015/lib/core/utilities/generate-form-steps.js +0 -38
- package/esm2015/lib/core/utilities/index.js +0 -9
- package/esm2015/lib/core/utilities/is-form-group.js +0 -6
- package/esm2015/lib/core/utilities/serializer-util.js +0 -358
- package/esm2015/lib/core/utilities/update-step-status.js +0 -38
- package/esm2015/lib/core/validators/index.js +0 -3
- package/esm2015/lib/core/validators/instant-validation-result-error-state-matcher.js +0 -23
- package/esm2015/lib/core/validators/validation-result-validator.js +0 -19
- package/esm2015/lib/file-upload/file-upload.component.js +0 -66
- package/esm2015/lib/file-upload/index.js +0 -2
- package/esm2015/lib/form/base-form-item.model.js +0 -2
- package/esm2015/lib/form/form.component.js +0 -250
- package/esm2015/lib/form/form.module.js +0 -214
- package/esm2015/lib/form/index.js +0 -5
- package/esm2015/lib/form/white-list.model.js +0 -11
- package/esm2015/lib/form-item-controls/base-form-item-control.directive.js +0 -58
- package/esm2015/lib/form-item-controls/base-parent-item-control.directive.js +0 -42
- package/esm2015/lib/form-item-controls/base-single-selection-parent.directive.js +0 -53
- package/esm2015/lib/form-item-controls/date-range.component.js +0 -84
- package/esm2015/lib/form-item-controls/date.component.js +0 -134
- package/esm2015/lib/form-item-controls/dropdown.component.js +0 -109
- package/esm2015/lib/form-item-controls/index.js +0 -8
- package/esm2015/lib/form-item-controls/input.component.js +0 -149
- package/esm2015/lib/form-item-controls/year-quarter-range.component.js +0 -75
- package/esm2015/lib/form-item-controls/year-quarter.component.js +0 -228
- package/esm2015/lib/form-stepper/form-step-group.component.js +0 -95
- package/esm2015/lib/form-stepper/form-step-group.pipe.js +0 -20
- package/esm2015/lib/form-stepper/form-step.component.js +0 -110
- package/esm2015/lib/form-stepper/form-step.util.js +0 -28
- package/esm2015/lib/form-stepper/form-stepper.component.js +0 -115
- package/esm2015/lib/form-stepper/form-stepper.module.js +0 -53
- package/esm2015/lib/form-stepper/index.js +0 -8
- package/esm2015/lib/groups/group-components.js +0 -646
- package/esm2015/lib/groups/index.js +0 -3
- package/esm2015/lib/groups/repeatable-item.component.js +0 -23
- package/esm2015/lib/item-header/index.js +0 -2
- package/esm2015/lib/item-header/item-header.component.js +0 -108
- package/esm2015/lib/static-form-items/index.js +0 -3
- package/esm2015/lib/static-form-items/ordered-list-item.js +0 -50
- package/esm2015/lib/static-form-items/unordered-list-item.js +0 -52
- package/esm2015/lib/step-card/index.js +0 -2
- package/lib/_index.scss +0 -24
- package/lib/core/index.d.ts +0 -6
- package/lib/core/pipes/coerce-date-item.pipe.d.ts +0 -11
- package/lib/core/pipes/date-quarter.pipe.d.ts +0 -7
- package/lib/core/pipes/get-auto-complete.pipe.d.ts +0 -7
- package/lib/core/pipes/get-form-control-error.pipe.d.ts +0 -14
- package/lib/core/pipes/get-list-icon.pipe.d.ts +0 -7
- package/lib/core/pipes/get-object-type.pipe.d.ts +0 -7
- package/lib/core/pipes/index.d.ts +0 -28
- package/lib/file-upload/file-upload.component.d.ts +0 -23
- package/lib/form/form.module.d.ts +0 -52
- package/lib/form/index.d.ts +0 -4
- package/lib/form-item-controls/index.d.ts +0 -7
- package/lib/form-item-controls/input.component.d.ts +0 -14
- package/lib/form-stepper/form-stepper.module.d.ts +0 -18
- package/lib/form-stepper/index.d.ts +0 -7
- package/lib/groups/group-components.d.ts +0 -221
- package/lib/groups/repeatable-item.component.d.ts +0 -5
- package/lib/static-form-items/index.d.ts +0 -2
- package/lib/static-form-items/ordered-list-item.d.ts +0 -11
- package/lib/static-form-items/unordered-list-item.d.ts +0 -11
- /package/lib/{form → components/form-disabler}/form-disabler.component.d.ts +0 -0
- /package/lib/{groups → components/form-item-impl/checkbox}/_checkbox-theme.scss +0 -0
- /package/lib/{form-item-controls → components/form-item-impl/date}/_date-item-theme.scss +0 -0
- /package/lib/{groups → components/form-item-impl/form-group}/_form-group-theme.scss +0 -0
- /package/lib/{groups → components/form-item-impl/multiple-choice}/_multiple-choice-theme.scss +0 -0
- /package/lib/{groups/_repeatable-item-theme.scss → components/form-item-impl/repeatable-item-container/_repeatable-item-container-theme.scss} +0 -0
- /package/lib/{form-item-controls → components/form-item-impl/year-quarter}/_year-quarter-item-theme.scss +0 -0
- /package/lib/{form-stepper → components/form-stepper/form-step-group}/_form-step-group-theme.scss +0 -0
- /package/lib/{form-stepper → components/form-stepper/form-stepper}/_form-stepper-theme.scss +0 -0
- /package/lib/{item-header → components/item-header}/_item-header-theme.scss +0 -0
- /package/lib/{step-card → components/step-card}/_step-card-theme.scss +0 -0
- /package/lib/{form-item-controls → core}/_form-control-theme.scss +0 -0
- /package/lib/{form-item-controls → directives}/base-form-item-control.directive.d.ts +0 -0
- /package/lib/{form-item-controls → directives}/base-parent-item-control.directive.d.ts +0 -0
- /package/lib/{form → directives}/form-item.directive.d.ts +0 -0
- /package/lib/{core → models}/api-config.d.ts +0 -0
- /package/lib/{form → models}/base-form-item.model.d.ts +0 -0
- /package/lib/{groups → models}/form-item-dialog-data.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/base-form-step.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/form-step-group.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/form-step.model.d.ts +0 -0
- /package/lib/{form-stepper/models → models/form-stepper}/index.d.ts +0 -0
- /package/lib/{form → models}/white-list.model.d.ts +0 -0
- /package/lib/{core/services → services}/ng-form.service.d.ts +0 -0
- /package/lib/{core → utilities}/animations.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/find-form-control.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/find-form-item.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/is-form-group.d.ts +0 -0
- /package/lib/{core/utilities → utilities}/serializer-util.d.ts +0 -0
- /package/lib/{core/validators → validators}/index.d.ts +0 -0
- /package/lib/{core/validators → validators}/instant-validation-result-error-state-matcher.d.ts +0 -0
- /package/lib/{core/validators → validators}/validation-result-validator.d.ts +0 -0
|
@@ -1,646 +0,0 @@
|
|
|
1
|
-
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Injectable, Input, Optional, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
3
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
-
import { isKey } from '@mtna/core-ts';
|
|
5
|
-
import { DROPDOWN_ITEM_ID, FORM_ITEM_GROUP_IMPL_ID, isConditionalItem, MtnaWfFormItemChange, PARAGRAPH_ANSWER_ITEM_ID, SECTION_ID, SHORT_ANSWER_ITEM_ID, TEXT_ITEM_ID, TITLE_ITEM_ID, } from '@mtna/web-form-ts';
|
|
6
|
-
import { Subject } from 'rxjs';
|
|
7
|
-
import { takeUntil } from 'rxjs/operators';
|
|
8
|
-
import { COMPLEX_STANDARD, MTNA_WF_EXPAND_COLLAPSE } from '../core/animations';
|
|
9
|
-
import { BaseParentItemControl } from '../form-item-controls/base-parent-item-control.directive';
|
|
10
|
-
import { BaseSingleSelectionParent } from '../form-item-controls/base-single-selection-parent.directive';
|
|
11
|
-
import { MtnaWfFormItemDirective } from '../form/form-item.directive';
|
|
12
|
-
import { MTNA_WF_ITEM_WHITELIST } from '../form/white-list.model';
|
|
13
|
-
import { MtnaWfFormItemDialogData } from './form-item-dialog-data.model';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "@angular/material/dialog";
|
|
16
|
-
import * as i2 from "@angular/material/button";
|
|
17
|
-
import * as i3 from "@angular/common";
|
|
18
|
-
import * as i4 from "./form-item-dialog-data.model";
|
|
19
|
-
import * as i5 from "../core/services/ui.service";
|
|
20
|
-
import * as i6 from "@mtna/pojo-social-angular";
|
|
21
|
-
import * as i7 from "@mtna/core-angular";
|
|
22
|
-
import * as i8 from "../core/pipes/get-object-type.pipe";
|
|
23
|
-
import * as i9 from "../step-card/step-card.component";
|
|
24
|
-
import * as i10 from "@angular/material/divider";
|
|
25
|
-
import * as i11 from "../item-header/item-header.component";
|
|
26
|
-
import * as i12 from "@angular/material/list";
|
|
27
|
-
import * as i13 from "@angular/forms";
|
|
28
|
-
import * as i14 from "@angular/flex-layout/extended";
|
|
29
|
-
import * as i15 from "../core/pipes/items-with-value.pipe";
|
|
30
|
-
import * as i16 from "../core/services/form-manager.service";
|
|
31
|
-
import * as i17 from "./repeatable-item.component";
|
|
32
|
-
import * as i18 from "@angular/material/icon";
|
|
33
|
-
import * as i19 from "@angular/material/tooltip";
|
|
34
|
-
import * as i20 from "@angular/material/table";
|
|
35
|
-
import * as i21 from "../form-item-controls/date.component";
|
|
36
|
-
import * as i22 from "../form-item-controls/date-range.component";
|
|
37
|
-
import * as i23 from "../form-item-controls/year-quarter-range.component";
|
|
38
|
-
import * as i24 from "../form-item-controls/dropdown.component";
|
|
39
|
-
import * as i25 from "../file-upload/file-upload.component";
|
|
40
|
-
import * as i26 from "../static-form-items/unordered-list-item";
|
|
41
|
-
import * as i27 from "../static-form-items/ordered-list-item";
|
|
42
|
-
import * as i28 from "../form-item-controls/input.component";
|
|
43
|
-
import * as i29 from "../form/form-item.directive";
|
|
44
|
-
import * as i30 from "../core/pipes/sanitize-html.pipe";
|
|
45
|
-
import * as i31 from "../core/pipes/coerce-date-item.pipe";
|
|
46
|
-
import * as i32 from "@angular/material/radio";
|
|
47
|
-
import * as i33 from "@angular/material/form-field";
|
|
48
|
-
import * as i34 from "../core/pipes/get-form-control-error.pipe";
|
|
49
|
-
import * as i35 from "@angular/material/slide-toggle";
|
|
50
|
-
import * as i36 from "@angular/material/checkbox";
|
|
51
|
-
export class MtnaWfDialogService {
|
|
52
|
-
constructor(dialog) {
|
|
53
|
-
this.dialog = dialog;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Display the acknowledgement the user agreed to for a given option.
|
|
57
|
-
* @param acknowledgementItem The {@link Section} that represents the acknowledgement text to display to the user.
|
|
58
|
-
*/
|
|
59
|
-
showAcknowledgement(acknowledgementItem) {
|
|
60
|
-
this.dialog.open(MtnaWfFormItemDialogComponent, {
|
|
61
|
-
closeOnNavigation: true,
|
|
62
|
-
data: new MtnaWfFormItemDialogData(acknowledgementItem.items, acknowledgementItem.title.value || 'Acknowledgement'),
|
|
63
|
-
disableClose: false,
|
|
64
|
-
hasBackdrop: true,
|
|
65
|
-
maxWidth: '500px',
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Show some text in a dialog that the user needs to "acknowledge" before they can make a certain selection.
|
|
70
|
-
* @param acknowledgementItem The {@link Section} that represents the text displayed to the user for acknowledgement.
|
|
71
|
-
* @returns Whether the user acknowledges (agrees).
|
|
72
|
-
*/
|
|
73
|
-
verifyAcknowledgement(acknowledgementItem) {
|
|
74
|
-
return this.dialog
|
|
75
|
-
.open(MtnaWfAcknowledgeDialogComponent, {
|
|
76
|
-
closeOnNavigation: true,
|
|
77
|
-
data: new MtnaWfFormItemDialogData(acknowledgementItem.items, acknowledgementItem.title.value || 'Acknowledgement'),
|
|
78
|
-
disableClose: true,
|
|
79
|
-
hasBackdrop: true,
|
|
80
|
-
maxWidth: '500px',
|
|
81
|
-
})
|
|
82
|
-
.afterClosed();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
MtnaWfDialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfDialogService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
86
|
-
MtnaWfDialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfDialogService, providedIn: 'root' });
|
|
87
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfDialogService, decorators: [{
|
|
88
|
-
type: Injectable,
|
|
89
|
-
args: [{ providedIn: 'root' }]
|
|
90
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
|
|
91
|
-
/*
|
|
92
|
-
* Due to the recursive nature of these form components, we had to combine all the TS into a single file.
|
|
93
|
-
* Perhaps when we refactor this in the future to use dynamic components, this can be avoided.
|
|
94
|
-
* Read more about the errors if they are not in the same file here: https://angular.io/errors/NG3003
|
|
95
|
-
*/
|
|
96
|
-
// TODO: refactor, reduce code in here. mixins
|
|
97
|
-
/**
|
|
98
|
-
* A dialog that renders a form item that represents something the user needs to acknowledge.
|
|
99
|
-
*/
|
|
100
|
-
export class MtnaWfAcknowledgeDialogComponent {
|
|
101
|
-
constructor(data, dialogRef) {
|
|
102
|
-
this.data = data;
|
|
103
|
-
this.dialogRef = dialogRef;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
MtnaWfAcknowledgeDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfAcknowledgeDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
-
MtnaWfAcknowledgeDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfAcknowledgeDialogComponent, selector: "mtna-wf-acknowledge-dialog", ngImport: i0, template: "<h2 *ngIf=\"data.title as title\" mat-dialog-title>{{ title }}</h2>\n<mat-dialog-content>\n <mtna-wf-item *ngFor=\"let item of data.formItems\" [item]=\"item\" [readonly]=\"true\"></mtna-wf-item>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>CANCEL</button>\n <button [mat-dialog-close]=\"true\" color=\"accent\" mat-raised-button>ACKNOWLEDGE</button>\n</mat-dialog-actions>\n", components: [{ type: i0.forwardRef(function () { return MtnaWfFormItemComponent; }), selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }, { type: i0.forwardRef(function () { return i2.MatButton; }), selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i1.MatDialogTitle; }), selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i0.forwardRef(function () { return i1.MatDialogContent; }), selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i0.forwardRef(function () { return i3.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i1.MatDialogActions; }), selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i0.forwardRef(function () { return i1.MatDialogClose; }), selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
108
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfAcknowledgeDialogComponent, decorators: [{
|
|
109
|
-
type: Component,
|
|
110
|
-
args: [{
|
|
111
|
-
selector: 'mtna-wf-acknowledge-dialog',
|
|
112
|
-
templateUrl: 'acknowledge-dialog.component.html',
|
|
113
|
-
}]
|
|
114
|
-
}], ctorParameters: function () { return [{ type: i4.MtnaWfFormItemDialogData, decorators: [{
|
|
115
|
-
type: Inject,
|
|
116
|
-
args: [MAT_DIALOG_DATA]
|
|
117
|
-
}] }, { type: i1.MatDialogRef }]; } });
|
|
118
|
-
/**
|
|
119
|
-
* Component that wraps an MtnaForm item.
|
|
120
|
-
*
|
|
121
|
-
* ChangeDetectionStrategy.OnPush was not working as of 9/19/2018.
|
|
122
|
-
* Dynamic components in the ValueItemComponent were not being initialized (ngOnInit was never called).
|
|
123
|
-
*
|
|
124
|
-
* @export
|
|
125
|
-
*/
|
|
126
|
-
export class MtnaWfFormItemComponent {
|
|
127
|
-
constructor(_elementRef, uiService) {
|
|
128
|
-
this._elementRef = _elementRef;
|
|
129
|
-
this.uiService = uiService;
|
|
130
|
-
this.visible = true;
|
|
131
|
-
this.readonly = false;
|
|
132
|
-
this.parentIds = new Array();
|
|
133
|
-
this.focusedSection = new EventEmitter();
|
|
134
|
-
this.indicatorStatus = 'INACTIVE';
|
|
135
|
-
}
|
|
136
|
-
get elementId() {
|
|
137
|
-
return this.item ? this.item.instanceId : '';
|
|
138
|
-
}
|
|
139
|
-
ngOnInit() {
|
|
140
|
-
if (isConditionalItem(this.item)) {
|
|
141
|
-
this.visible = !this.item.hideOnDisable || !this.item.disabled;
|
|
142
|
-
}
|
|
143
|
-
this.uiService.registerSelf(this);
|
|
144
|
-
this._elementRef.nativeElement.classList.add(`mtna-wf-${getItemClassSuffix(this.item.itemId)}`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
MtnaWfFormItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormItemComponent, deps: [{ token: i0.ElementRef }, { token: i5.MtnaWfUIService }], target: i0.ɵɵFactoryTarget.Component });
|
|
148
|
-
MtnaWfFormItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: { item: "item", readonly: "readonly", control: "control", parentIds: "parentIds", step: "step" }, outputs: { focusedSection: "focusedSection" }, host: { properties: { "@mtnaWfExpandCollapse": "this.visible", "attr.id": "this.elementId" } }, ngImport: i0, template: "<mtna-annotations-indicator\n *ngIf=\"item.annotationEnabled\"\n [annotatableId]=\"item.annotatableId\"\n color=\"primary\"\n [count]=\"annotations$ | async\"\n (status)=\"indicatorStatus = $event\"\n></mtna-annotations-indicator>\n\n<ng-container [ngSwitch]=\"item.itemId | getObjectType\">\n <mtna-wf-section\n *ngSwitchCase=\"'sectionimpl'\"\n [control]=\"$any(control)\"\n [item]=\"$any(item)\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE'\"\n [parentIds]=\"parentIds.concat(item.instanceId)\"\n [readonly]=\"readonly\"\n [step]=\"step\"\n (focused)=\"focusedSection.emit($event)\"\n ></mtna-wf-section>\n\n <mtna-wf-group\n *ngSwitchCase=\"'formitemgroupimpl'\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"$any(control)\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && (!!item.descriptiveText || !!item.questionText)\"\n [parentIds]=\"parentIds.concat(item.instanceId)\"\n [readonly]=\"readonly\"\n ></mtna-wf-group>\n\n <mtna-wf-repeatable-item-container\n *ngSwitchCase=\"'repeatableitem'\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"$any(control)\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && (!!item.descriptiveText || !!item.questionText)\"\n [parentIds]=\"parentIds.concat(item.instanceId)\"\n [readonly]=\"readonly\"\n ></mtna-wf-repeatable-item-container>\n\n <mtna-wf-value-item\n *ngSwitchDefault\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"control\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && (!!item.descriptiveText || !!item.questionText)\"\n [parentIds]=\"parentIds.concat(item.instanceId)\"\n [readonly]=\"readonly\"\n ></mtna-wf-value-item>\n</ng-container>\n", styles: ["mtna-wf-item{display:block;position:relative}mtna-wf-item mtna-annotations-indicator{position:absolute;top:0;right:0;z-index:2}\n"], components: [{ type: i0.forwardRef(function () { return i6.MtnaAnnotationsIndicatorComponent; }), selector: "mtna-annotations-indicator", inputs: ["color", "annotatableId", "annotatableItemName", "count"], outputs: ["status"] }, { type: i0.forwardRef(function () { return MtnaWfFormSectionComponent; }), selector: "mtna-wf-section", inputs: ["indicatorStatus", "item", "readonly", "step", "control", "parentIds"], outputs: ["focused"] }, { type: i0.forwardRef(function () { return MtnaWfFormGroupComponent; }), selector: "mtna-wf-group", inputs: ["control", "indicatorStatus", "item", "parentIds", "readonly"] }, { type: i0.forwardRef(function () { return RepeatableItemContainerComponent; }), selector: "mtna-wf-repeatable-item-container", inputs: ["indicatorStatus", "item", "control", "parentIds", "readonly"] }, { type: i0.forwardRef(function () { return ValueItemComponent; }), selector: "mtna-wf-value-item", inputs: ["control", "inList", "indicatorStatus", "item", "parentIds", "readonly"] }], directives: [{ type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i3.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i0.forwardRef(function () { return i3.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i0.forwardRef(function () { return i7.MtnaHighlightDirective; }), selector: "[mtnaHighlight]", inputs: ["mtnaHighlight", "mtnaHighlightColor"], exportAs: ["mtnaHighlight"] }, { type: i0.forwardRef(function () { return i3.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }], pipes: { "async": i0.forwardRef(function () { return i3.AsyncPipe; }), "getObjectType": i0.forwardRef(function () { return i8.GetObjectTypePipe; }) }, animations: [MTNA_WF_EXPAND_COLLAPSE], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
149
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormItemComponent, decorators: [{
|
|
150
|
-
type: Component,
|
|
151
|
-
args: [{
|
|
152
|
-
selector: 'mtna-wf-item',
|
|
153
|
-
templateUrl: './form-item.component.html',
|
|
154
|
-
styleUrls: ['./form-item.component.scss'],
|
|
155
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
156
|
-
encapsulation: ViewEncapsulation.None,
|
|
157
|
-
animations: [MTNA_WF_EXPAND_COLLAPSE],
|
|
158
|
-
}]
|
|
159
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i5.MtnaWfUIService }]; }, propDecorators: { visible: [{
|
|
160
|
-
type: HostBinding,
|
|
161
|
-
args: ['@mtnaWfExpandCollapse']
|
|
162
|
-
}], elementId: [{
|
|
163
|
-
type: HostBinding,
|
|
164
|
-
args: ['attr.id']
|
|
165
|
-
}], item: [{
|
|
166
|
-
type: Input
|
|
167
|
-
}], readonly: [{
|
|
168
|
-
type: Input
|
|
169
|
-
}], control: [{
|
|
170
|
-
type: Input
|
|
171
|
-
}], parentIds: [{
|
|
172
|
-
type: Input
|
|
173
|
-
}], step: [{
|
|
174
|
-
type: Input
|
|
175
|
-
}], focusedSection: [{
|
|
176
|
-
type: Output
|
|
177
|
-
}] } });
|
|
178
|
-
function getItemClassSuffix(itemId) {
|
|
179
|
-
// FIXME: surely there is a stronger/better way
|
|
180
|
-
switch (itemId) {
|
|
181
|
-
case FORM_ITEM_GROUP_IMPL_ID:
|
|
182
|
-
return 'group';
|
|
183
|
-
case SECTION_ID:
|
|
184
|
-
return 'section';
|
|
185
|
-
case TEXT_ITEM_ID:
|
|
186
|
-
return 'text';
|
|
187
|
-
case TITLE_ITEM_ID:
|
|
188
|
-
return 'title';
|
|
189
|
-
default:
|
|
190
|
-
return 'item';
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* A dialog that renders a form item.
|
|
195
|
-
*/
|
|
196
|
-
export class MtnaWfFormItemDialogComponent {
|
|
197
|
-
constructor(data, dialogRef) {
|
|
198
|
-
this.data = data;
|
|
199
|
-
this.dialogRef = dialogRef;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
MtnaWfFormItemDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormItemDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
203
|
-
MtnaWfFormItemDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormItemDialogComponent, selector: "mtna-wf-form-item-dialog", ngImport: i0, template: "<h2 *ngIf=\"data.title as title\" mat-dialog-title>{{ title }}</h2>\n<mat-dialog-content>\n <mtna-wf-item *ngFor=\"let item of data.formItems\" [item]=\"item\" [readonly]=\"true\"></mtna-wf-item>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close>Close</button>\n</mat-dialog-actions>\n", components: [{ type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
204
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormItemDialogComponent, decorators: [{
|
|
205
|
-
type: Component,
|
|
206
|
-
args: [{
|
|
207
|
-
selector: 'mtna-wf-form-item-dialog',
|
|
208
|
-
templateUrl: 'form-item-dialog.component.html',
|
|
209
|
-
}]
|
|
210
|
-
}], ctorParameters: function () { return [{ type: i4.MtnaWfFormItemDialogData, decorators: [{
|
|
211
|
-
type: Inject,
|
|
212
|
-
args: [MAT_DIALOG_DATA]
|
|
213
|
-
}] }, { type: i1.MatDialogRef }]; } });
|
|
214
|
-
export class MtnaWfFormSectionComponent {
|
|
215
|
-
constructor() {
|
|
216
|
-
this.indicatorStatus = 'INACTIVE';
|
|
217
|
-
this.readonly = false;
|
|
218
|
-
this.parentIds = new Array();
|
|
219
|
-
this.focused = new EventEmitter();
|
|
220
|
-
}
|
|
221
|
-
_trackByInstanceId(index, item) {
|
|
222
|
-
return item.instanceId;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
MtnaWfFormSectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
226
|
-
MtnaWfFormSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormSectionComponent, selector: "mtna-wf-section", inputs: { indicatorStatus: "indicatorStatus", item: "item", readonly: "readonly", step: "step", control: "control", parentIds: "parentIds" }, outputs: { focused: "focused" }, ngImport: i0, template: "<mtna-wf-step-card [step]=\"step\" [subtitle]=\"item.descriptiveText\" (focused)=\"focused.emit($event)\">\n <div cardContent>\n <ng-container *ngFor=\"let subItem of item.items; trackBy: _trackByInstanceId\">\n <mat-divider\n *ngIf=\"(subItem.itemId | getObjectType) === 'formitemgroupimpl' && item.items.indexOf(subItem) !== 0\"\n class=\"section-item-divider\"\n [inset]=\"true\"\n ></mat-divider>\n\n <mtna-wf-item\n [item]=\"subItem\"\n [readonly]=\"readonly\"\n [parentIds]=\"parentIds\"\n [control]=\"!!control && !!control.controls ? control.controls[subItem.instanceId] : undefined\"\n (focusedSection)=\"focused.emit($event)\"\n ></mtna-wf-item>\n </ng-container>\n </div>\n</mtna-wf-step-card>\n", styles: [":host{display:block}mat-divider.mat-divider-horizontal.mat-divider-inset.section-item-divider{margin-top:8px;margin-bottom:8px}\n"], components: [{ type: i9.MtnaWfStepCardComponent, selector: "mtna-wf-step-card", inputs: ["color", "step", "subtitle"], outputs: ["focused"] }, { type: i10.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "getObjectType": i8.GetObjectTypePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
227
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormSectionComponent, decorators: [{
|
|
228
|
-
type: Component,
|
|
229
|
-
args: [{
|
|
230
|
-
selector: 'mtna-wf-section',
|
|
231
|
-
templateUrl: './form-section.component.html',
|
|
232
|
-
styleUrls: ['./form-section.component.scss'],
|
|
233
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
234
|
-
}]
|
|
235
|
-
}], propDecorators: { indicatorStatus: [{
|
|
236
|
-
type: Input
|
|
237
|
-
}], item: [{
|
|
238
|
-
type: Input
|
|
239
|
-
}], readonly: [{
|
|
240
|
-
type: Input
|
|
241
|
-
}], step: [{
|
|
242
|
-
type: Input
|
|
243
|
-
}], control: [{
|
|
244
|
-
type: Input
|
|
245
|
-
}], parentIds: [{
|
|
246
|
-
type: Input
|
|
247
|
-
}], focused: [{
|
|
248
|
-
type: Output
|
|
249
|
-
}] } });
|
|
250
|
-
export class MtnaWfFormGroupComponent {
|
|
251
|
-
constructor() {
|
|
252
|
-
this.indicatorStatus = 'INACTIVE';
|
|
253
|
-
this.parentIds = [];
|
|
254
|
-
this.readonly = false;
|
|
255
|
-
this.fullWidth = {
|
|
256
|
-
[PARAGRAPH_ANSWER_ITEM_ID]: true,
|
|
257
|
-
[FORM_ITEM_GROUP_IMPL_ID]: true,
|
|
258
|
-
[TEXT_ITEM_ID]: true,
|
|
259
|
-
[TITLE_ITEM_ID]: true,
|
|
260
|
-
};
|
|
261
|
-
/**
|
|
262
|
-
* If form is readonly & all child items are one of the specified types below,
|
|
263
|
-
* we want to display this group's child items in a mat-list
|
|
264
|
-
*/
|
|
265
|
-
this.inList = false;
|
|
266
|
-
}
|
|
267
|
-
get item() {
|
|
268
|
-
return this._item;
|
|
269
|
-
}
|
|
270
|
-
set item(item) {
|
|
271
|
-
this._item = item;
|
|
272
|
-
if (this.item) {
|
|
273
|
-
// A list item can only display a heading line & a small text line
|
|
274
|
-
// Compatible items should be items with short labels/headers & values
|
|
275
|
-
// Items with multiple options, or potential nested items should not be included
|
|
276
|
-
this.inList = this.item.items.every((i) => i.itemId === SHORT_ANSWER_ITEM_ID || i.itemId === DROPDOWN_ITEM_ID);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
_trackByInstanceId(index, section) {
|
|
280
|
-
return section.instanceId;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
MtnaWfFormGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
284
|
-
MtnaWfFormGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfFormGroupComponent, selector: "mtna-wf-group", inputs: { control: "control", indicatorStatus: "indicatorStatus", item: "item", parentIds: "parentIds", readonly: "readonly" }, ngImport: i0, template: "<ng-container *ngIf=\"item && control\">\n <mtna-wf-item-header\n *ngIf=\"!!item.questionText || !!item.descriptiveText\"\n [descriptiveText]=\"item.descriptiveText\"\n [disabled]=\"control.disabled\"\n [questionText]=\"item.questionText\"\n [required]=\"item.required\"\n ></mtna-wf-item-header>\n <ng-template #fullLayout>\n <div\n class=\"item-group-container\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && !item.questionText && !item.descriptiveText\"\n [formGroup]=\"control\"\n [ngClass]=\"item.layout\"\n >\n <mtna-wf-item\n *ngFor=\"let subItem of item.items; trackBy: _trackByInstanceId\"\n [class.row-item]=\"item.layout === 'ROW' && !fullWidth[subItem.itemId]\"\n [ngClass.lt-md]=\"'width-100'\"\n [item]=\"subItem\"\n [control]=\"control.controls[subItem.instanceId]\"\n [parentIds]=\"parentIds\"\n [readonly]=\"readonly\"\n ></mtna-wf-item>\n </div>\n </ng-template>\n\n <!-- When readonly, && all child items should be displayed in a mat-list-->\n <mat-list *ngIf=\"readonly && inList; else fullLayout\" [ngClass]=\"item.layout\">\n <mtna-wf-value-item\n *ngFor=\"let subItem of item.items | mtnaWfItemsWithValue; trackBy: _trackByInstanceId\"\n [class.row-item]=\"item.layout === 'ROW'\"\n [ngClass.lt-md]=\"'width-100'\"\n [item]=\"subItem\"\n [inList]=\"true\"\n [parentIds]=\"parentIds\"\n [readonly]=\"true\"\n ></mtna-wf-value-item>\n </mat-list>\n</ng-container>\n", styles: ["mtna-annotations-indicator+mtna-wf-group .item-group-container{padding-top:24px}mtna-wf-group .mtna-wf-group-header{margin-top:1rem}mtna-wf-group .mtna-wf-group-description{margin-bottom:1rem}mtna-wf-group mat-list mat-list-item [mat-line]{letter-spacing:.5px}mtna-wf-group mtna-wf-multiple-choice-item{display:block}mtna-wf-group .item-group-container>.mtna-wf-group{margin-top:1rem}mtna-wf-group .item-group-container>mtna-wf-item.mtna-wf-title~mtna-wf-item:not(.mtna-wf-title):not(.row-item){padding-left:16px}mtna-wf-group .item-group-container>mtna-wf-item.mtna-wf-title~mtna-wf-item:not(.mtna-wf-title):not(.row-item).width-100{width:calc(100% - 16px)}mtna-wf-group .item-group-container>mtna-wf-item:first-of-type{margin-top:0}mtna-wf-group .item-group-container.ROW>mtna-wf-item{margin-top:0}mtna-wf-group .item-group-container.ROW>*{display:block}mtna-wf-group .item-group-container .row-item{width:calc(50% - 16px);display:inline-block;margin:0 8px}mtna-wf-group .item-group-container .width-100{width:100%}mtna-wf-group .item-group-container .width-100.row-item{width:calc(100% - 16px)}mtna-wf-group mtna-wf-item-header+.item-group-container{padding:.35em .75em .625em}mtna-wf-group mtna-wf-item-header+.item-group-container>mtna-wf-item{margin-top:0}\n"], components: [{ type: i0.forwardRef(function () { return i11.ItemHeaderComponent; }), selector: "mtna-wf-item-header", inputs: ["descriptiveText", "disabled", "hideRequiredMarker", "invalid", "questionText", "required"] }, { type: i0.forwardRef(function () { return MtnaWfFormItemComponent; }), selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }, { type: i0.forwardRef(function () { return i12.MatList; }), selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { type: i0.forwardRef(function () { return ValueItemComponent; }), selector: "mtna-wf-value-item", inputs: ["control", "inList", "indicatorStatus", "item", "parentIds", "readonly"] }], directives: [{ type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i7.MtnaHighlightDirective; }), selector: "[mtnaHighlight]", inputs: ["mtnaHighlight", "mtnaHighlightColor"], exportAs: ["mtnaHighlight"] }, { type: i0.forwardRef(function () { return i13.NgControlStatusGroup; }), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i0.forwardRef(function () { return i13.FormGroupDirective; }), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i0.forwardRef(function () { return i3.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i14.DefaultClassDirective; }), selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i0.forwardRef(function () { return i3.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "mtnaWfItemsWithValue": i0.forwardRef(function () { return i15.MtnaWfItemsWithValuePipe; }) }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
285
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfFormGroupComponent, decorators: [{
|
|
286
|
-
type: Component,
|
|
287
|
-
args: [{
|
|
288
|
-
selector: 'mtna-wf-group',
|
|
289
|
-
templateUrl: './form-group.component.html',
|
|
290
|
-
styleUrls: ['./form-group.component.scss'],
|
|
291
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
292
|
-
encapsulation: ViewEncapsulation.None,
|
|
293
|
-
}]
|
|
294
|
-
}], propDecorators: { control: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}], indicatorStatus: [{
|
|
297
|
-
type: Input
|
|
298
|
-
}], item: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], parentIds: [{
|
|
301
|
-
type: Input
|
|
302
|
-
}], readonly: [{
|
|
303
|
-
type: Input
|
|
304
|
-
}] } });
|
|
305
|
-
export class RepeatableItemContainerComponent {
|
|
306
|
-
constructor(manager) {
|
|
307
|
-
this.manager = manager;
|
|
308
|
-
this.indicatorStatus = 'INACTIVE';
|
|
309
|
-
this.parentIds = new Array();
|
|
310
|
-
this.readonly = false;
|
|
311
|
-
}
|
|
312
|
-
addItem() {
|
|
313
|
-
this.manager.changeMtnaFormItem(new MtnaWfFormItemChange(this.item.repeatableTemplateId, this.parentIds, 'ADD'));
|
|
314
|
-
}
|
|
315
|
-
removeItem(item) {
|
|
316
|
-
const conditionChanges = this.manager.generateConditionChangeArray(item, 'REMOVE');
|
|
317
|
-
this.manager.changeMtnaFormItem(new MtnaWfFormItemChange(item.instanceId, this.parentIds, 'REMOVE', conditionChanges));
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
RepeatableItemContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RepeatableItemContainerComponent, deps: [{ token: i16.MtnaWfManagerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
321
|
-
RepeatableItemContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RepeatableItemContainerComponent, selector: "mtna-wf-repeatable-item-container", inputs: { indicatorStatus: "indicatorStatus", item: "item", control: "control", parentIds: "parentIds", readonly: "readonly" }, ngImport: i0, template: "<mtna-wf-item-header\n *ngIf=\"!!item.questionText || !!item.descriptiveText\"\n [descriptiveText]=\"item.descriptiveText\"\n [disabled]=\"control?.disabled || false\"\n [questionText]=\"item.questionText\"\n [required]=\"item.required\"\n></mtna-wf-item-header>\n<section [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && !item.questionText && !item.descriptiveText\">\n <mtna-wf-repeatable-item\n @repeatItemExpandCollapse\n *ngFor=\"let subitem of item.items; let first = first; trackBy: 'instanceId' | mtnaTrackByProperty\"\n >\n <button\n *ngIf=\"!readonly && item.items.length > item.minOccurrences\"\n mat-icon-button\n class=\"item-remove-button\"\n color=\"warn\"\n (click)=\"removeItem(subitem)\"\n matTooltip=\"Remove Item\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n <mtna-wf-item\n [item]=\"subitem\"\n [control]=\"!!control && !!control.controls ? control.controls[subitem.instanceId] : undefined\"\n [readonly]=\"readonly\"\n [parentIds]=\"parentIds\"\n ></mtna-wf-item>\n </mtna-wf-repeatable-item>\n</section>\n<button *ngIf=\"!readonly\" mat-raised-button (click)=\"addItem()\" class=\"new-item-button\" color=\"primary\">\n {{ item.additionalText || 'ADD' | uppercase }}\n</button>\n", styles: ["mtna-wf-repeatable-item-container{display:block}mtna-wf-repeatable-item-container>section>mtna-wf-repeatable-item{position:relative;padding:16px;border-style:dashed;border-width:4px;border-radius:4px;display:inline-block;margin:8px;max-width:100%}mtna-wf-repeatable-item-container>section>mtna-wf-repeatable-item .item-remove-button{position:absolute;top:-22px;left:-22px}mtna-wf-repeatable-item-container>section>mtna-wf-repeatable-item>mtna-wf-item:first-child{margin-top:0}mtna-wf-repeatable-item-container .new-item-button{margin-left:.75em}mtna-wf-repeatable-item-container>section{padding-left:.75em}mtna-wf-repeatable-item-container>section,mtna-wf-repeatable-item-container .new-item-button{margin-top:16px}\n"], components: [{ type: i11.ItemHeaderComponent, selector: "mtna-wf-item-header", inputs: ["descriptiveText", "disabled", "hideRequiredMarker", "invalid", "questionText", "required"] }, { type: i17.RepeatableItemComponent, selector: "mtna-wf-repeatable-item" }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i18.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MtnaHighlightDirective, selector: "[mtnaHighlight]", inputs: ["mtnaHighlight", "mtnaHighlightColor"], exportAs: ["mtnaHighlight"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i19.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "mtnaTrackByProperty": i7.MtnaTrackByPropertyPipe, "uppercase": i3.UpperCasePipe }, animations: [
|
|
322
|
-
trigger('repeatItemExpandCollapse', [
|
|
323
|
-
state('in', style({ height: '*', margin: '*', opacity: 1 })),
|
|
324
|
-
state('void', style({ height: 0, margin: 0, opacity: 0, visibility: 'hidden' })),
|
|
325
|
-
transition(':enter', [animate(COMPLEX_STANDARD, style({ height: '*', margin: '*', opacity: 1 }))]),
|
|
326
|
-
transition(':leave', animate(COMPLEX_STANDARD)),
|
|
327
|
-
]),
|
|
328
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
329
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RepeatableItemContainerComponent, decorators: [{
|
|
330
|
-
type: Component,
|
|
331
|
-
args: [{
|
|
332
|
-
selector: 'mtna-wf-repeatable-item-container',
|
|
333
|
-
templateUrl: 'repeatable-item-container.component.html',
|
|
334
|
-
styleUrls: [`repeatable-item-container.component.scss`],
|
|
335
|
-
animations: [
|
|
336
|
-
trigger('repeatItemExpandCollapse', [
|
|
337
|
-
state('in', style({ height: '*', margin: '*', opacity: 1 })),
|
|
338
|
-
state('void', style({ height: 0, margin: 0, opacity: 0, visibility: 'hidden' })),
|
|
339
|
-
transition(':enter', [animate(COMPLEX_STANDARD, style({ height: '*', margin: '*', opacity: 1 }))]),
|
|
340
|
-
transition(':leave', animate(COMPLEX_STANDARD)),
|
|
341
|
-
]),
|
|
342
|
-
],
|
|
343
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
344
|
-
encapsulation: ViewEncapsulation.None,
|
|
345
|
-
}]
|
|
346
|
-
}], ctorParameters: function () { return [{ type: i16.MtnaWfManagerService }]; }, propDecorators: { indicatorStatus: [{
|
|
347
|
-
type: Input
|
|
348
|
-
}], item: [{
|
|
349
|
-
type: Input
|
|
350
|
-
}], control: [{
|
|
351
|
-
type: Input
|
|
352
|
-
}], parentIds: [{
|
|
353
|
-
type: Input
|
|
354
|
-
}], readonly: [{
|
|
355
|
-
type: Input
|
|
356
|
-
}] } });
|
|
357
|
-
export class MtnaWfTableFormItemComponent {
|
|
358
|
-
constructor() {
|
|
359
|
-
this.indicatorStatus = 'INACTIVE';
|
|
360
|
-
this.readonly = false;
|
|
361
|
-
this.parentIds = new Array();
|
|
362
|
-
}
|
|
363
|
-
_trackByTableRow(index, row) {
|
|
364
|
-
return row.items
|
|
365
|
-
.filter((i) => !!i)
|
|
366
|
-
.map((item) => item.instanceId)
|
|
367
|
-
.join('');
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
MtnaWfTableFormItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfTableFormItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
371
|
-
MtnaWfTableFormItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfTableFormItemComponent, selector: "mtna-wf-table-item", inputs: { indicatorStatus: "indicatorStatus", item: "item", control: "control", readonly: "readonly", parentIds: "parentIds" }, ngImport: i0, template: "<table mat-table [dataSource]=\"item.tableRows\" [trackBy]=\"_trackByTableRow\">\n <ng-container *ngFor=\"let header of item.headers; let index = index\" [matColumnDef]=\"header\">\n <th mat-header-cell *matHeaderCellDef>{{ header }}</th>\n\n <td mat-cell *matCellDef=\"let rowItem\">\n <mtna-wf-item\n *ngIf=\"!!rowItem.items[index]\"\n [control]=\"!!control && !!control.controls ? control.controls[rowItem.items[index].instanceId] : undefined\"\n [item]=\"rowItem.items[index]\"\n [readonly]=\"readonly\"\n [parentIds]=\"parentIds\"\n ></mtna-wf-item>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"item.headers\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: item.headers\"></tr>\n</table>\n", styles: ["mtna-wf-table-item .mat-table{width:100%}mtna-wf-table-item .mat-table tbody tr td.mat-cell{padding:8px;vertical-align:top}mtna-wf-table-item .mat-table tbody tr td mtna-wf-group>.group{flex-direction:column;place-content:start start;align-items:start;justify-content:start}mtna-wf-table-item .mat-table tbody tr td mtna-wf-group>.group *{margin-top:0;margin-bottom:0}mtna-wf-table-item .mat-table tbody tr td mtna-wf-boolean-item>.mat-slide-toggle{margin-bottom:8px;margin-top:8px}mtna-wf-table-item .mat-table tbody tr td mtna-wf-repeatable-item-container .repeat-item-container:not(:first-of-type){margin-top:8px}mtna-wf-table-item .mat-table tbody tr td mtna-wf-repeatable-item-container .new-item-button{margin:8px 0}\n"], components: [{ type: i20.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }, { type: i20.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i20.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i20.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i20.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i20.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i20.MatCellDef, selector: "[matCellDef]" }, { type: i20.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i20.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i20.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfTableFormItemComponent, decorators: [{
|
|
373
|
-
type: Component,
|
|
374
|
-
args: [{
|
|
375
|
-
selector: 'mtna-wf-table-item',
|
|
376
|
-
templateUrl: 'table-item.component.html',
|
|
377
|
-
styleUrls: ['table-item.component.scss'],
|
|
378
|
-
encapsulation: ViewEncapsulation.None,
|
|
379
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
380
|
-
}]
|
|
381
|
-
}], propDecorators: { indicatorStatus: [{
|
|
382
|
-
type: Input
|
|
383
|
-
}], item: [{
|
|
384
|
-
type: Input
|
|
385
|
-
}], control: [{
|
|
386
|
-
type: Input
|
|
387
|
-
}], readonly: [{
|
|
388
|
-
type: Input
|
|
389
|
-
}], parentIds: [{
|
|
390
|
-
type: Input
|
|
391
|
-
}] } });
|
|
392
|
-
export class ValueItemComponent {
|
|
393
|
-
constructor(cdf, cfResolver, formManager, logger, whiteList) {
|
|
394
|
-
this.cdf = cdf;
|
|
395
|
-
this.cfResolver = cfResolver;
|
|
396
|
-
this.formManager = formManager;
|
|
397
|
-
this.logger = logger;
|
|
398
|
-
this.whiteList = whiteList;
|
|
399
|
-
this.inList = false;
|
|
400
|
-
this.indicatorStatus = 'INACTIVE';
|
|
401
|
-
this.parentIds = new Array();
|
|
402
|
-
this.readonly = false;
|
|
403
|
-
/** The list of pre-existing(non-dynamic) item types
|
|
404
|
-
* If this item's itemId does not match one of the following, then
|
|
405
|
-
* this item is a dynamic component registered by the client application
|
|
406
|
-
* & requires the ComponentFactory to create the component.
|
|
407
|
-
*/
|
|
408
|
-
this.fixedItemTypes = [
|
|
409
|
-
'booleanitem',
|
|
410
|
-
'bulletedlistitem',
|
|
411
|
-
'checkboxitem',
|
|
412
|
-
'dateitem',
|
|
413
|
-
'daterangeitem',
|
|
414
|
-
'decimalansweritem',
|
|
415
|
-
'documentationitem',
|
|
416
|
-
'dropdownitem',
|
|
417
|
-
'fileuploaditem',
|
|
418
|
-
'multiplechoiceitem',
|
|
419
|
-
'numberedlistitem',
|
|
420
|
-
'offsetdaterangeitem',
|
|
421
|
-
'paragraphansweritem',
|
|
422
|
-
'shortansweritem',
|
|
423
|
-
'tableitem',
|
|
424
|
-
'textitem',
|
|
425
|
-
'titleitem',
|
|
426
|
-
'wholenumberansweritem',
|
|
427
|
-
'yearquarterrangeitem',
|
|
428
|
-
];
|
|
429
|
-
}
|
|
430
|
-
/**
|
|
431
|
-
* Sets a value on the control for any components that only emit a value &
|
|
432
|
-
* do not directly manipulate their control themselves, i.e. a FileUploadItem
|
|
433
|
-
*
|
|
434
|
-
* @param item the value to be set on the control
|
|
435
|
-
*/
|
|
436
|
-
setValue(item) {
|
|
437
|
-
var _a, _b;
|
|
438
|
-
(_a = this.control) === null || _a === void 0 ? void 0 : _a.markAsDirty();
|
|
439
|
-
(_b = this.control) === null || _b === void 0 ? void 0 : _b.setValue(item);
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Renders a dynamic component from a relevant type in the FormService (registered)components;
|
|
443
|
-
* ONLY if the item type(using itemId) does not match one of the existing fixedItemTypes
|
|
444
|
-
*
|
|
445
|
-
*/
|
|
446
|
-
ngAfterViewInit() {
|
|
447
|
-
var _a, _b;
|
|
448
|
-
// Trim the itemId down to the relevant type
|
|
449
|
-
const newId = this.item.itemId.toLowerCase().split('.');
|
|
450
|
-
const type = newId[newId.length - 1];
|
|
451
|
-
// Check if type is not one of the fixedItemTypes
|
|
452
|
-
if (!this.fixedItemTypes.some((i) => i === type)) {
|
|
453
|
-
// Retrieve a relevant component type
|
|
454
|
-
const component = this.formManager.getDynamicComponent(type);
|
|
455
|
-
// if a type is returned, instantiate the component and set the input values, then mark
|
|
456
|
-
// the value item for changeDetection check
|
|
457
|
-
if (component) {
|
|
458
|
-
const componentFactory = this.cfResolver.resolveComponentFactory(component);
|
|
459
|
-
this.componentRef = (_a = this.itemHost) === null || _a === void 0 ? void 0 : _a.viewContainerRef.createComponent(componentFactory);
|
|
460
|
-
const instance = (_b = this.componentRef) === null || _b === void 0 ? void 0 : _b.instance;
|
|
461
|
-
if (instance) {
|
|
462
|
-
for (const input of componentFactory.inputs) {
|
|
463
|
-
const propName = input.propName;
|
|
464
|
-
// Forcefully assign every input from this to instance
|
|
465
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
466
|
-
instance[propName] = this[propName];
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
// Dynamic Component won't fire ngOnInit unless we detectChanges
|
|
470
|
-
this.cdf.detectChanges();
|
|
471
|
-
}
|
|
472
|
-
else if (!this.whiteList || !this.whiteList.itemTypes || !this.whiteList.itemTypes.some((t) => t === type)) {
|
|
473
|
-
this.logger.error(`No Component Found for ${type} - Ensure any dynamic components were registered in the service, or use the MtnaWfItemWhiteList to ignore this item.`);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
ngOnChanges(changes) {
|
|
478
|
-
if (this.componentRef) {
|
|
479
|
-
for (const prop in changes) {
|
|
480
|
-
if (Object.prototype.hasOwnProperty.call(changes, prop)) {
|
|
481
|
-
const change = changes[prop];
|
|
482
|
-
if (!change.firstChange && isKey(this.componentRef.instance, prop)) {
|
|
483
|
-
this.componentRef.instance[prop] = change.currentValue;
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* Used to destroy the componentRef to a dynamic component, if it was rendered.
|
|
491
|
-
*
|
|
492
|
-
*/
|
|
493
|
-
ngOnDestroy() {
|
|
494
|
-
if (this.componentRef) {
|
|
495
|
-
this.componentRef.destroy();
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
ValueItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ValueItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i16.MtnaWfManagerService }, { token: i7.MtnaLogger }, { token: MTNA_WF_ITEM_WHITELIST, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
500
|
-
ValueItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ValueItemComponent, selector: "mtna-wf-value-item", inputs: { control: "control", inList: "inList", indicatorStatus: "indicatorStatus", item: "item", parentIds: "parentIds", readonly: "readonly" }, viewQueries: [{ propertyName: "itemHost", first: true, predicate: MtnaWfFormItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"item.itemId | getObjectType\">\n <h3 *ngSwitchCase=\"'titleitem'\" class=\"mtna-wf-title-item\" [mtnaHighlight]=\"indicatorStatus === 'ACTIVE'\">{{ item.value }}</h3>\n <p\n *ngSwitchCase=\"'textitem'\"\n [innerHTML]=\"$any(item.value) | mtnaWfSanitizeHtml\"\n class=\"mtna-wf-text-item\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE'\"\n ></p>\n\n <mtna-wf-boolean-item\n *ngSwitchCase=\"'booleanitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"$any(control)\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE'\"\n [parentIds]=\"parentIds\"\n [readonly]=\"readonly\"\n ></mtna-wf-boolean-item>\n\n <mtna-wf-checkbox-item\n *ngSwitchCase=\"'checkboxitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"$any(control)\"\n [parentIds]=\"parentIds\"\n [readonly]=\"readonly\"\n ></mtna-wf-checkbox-item>\n\n <ng-container *ngSwitchCase=\"'dateitem'\">\n <mtna-wf-date-item\n *ngIf=\"item | coerceDateItem as dateItem\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [format]=\"dateItem.format\"\n [item]=\"dateItem\"\n [control]=\"$any(control)\"\n [readonly]=\"readonly\"\n ></mtna-wf-date-item>\n </ng-container>\n\n <mtna-wf-date-range\n *ngSwitchCase=\"'offsetdaterangeitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"$any(control)\"\n [readonly]=\"readonly\"\n ></mtna-wf-date-range>\n\n <mtna-wf-year-quarter-range-item\n *ngSwitchCase=\"'yearquarterrangeitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"$any(control)\"\n [readonly]=\"readonly\"\n ></mtna-wf-year-quarter-range-item>\n\n <mtna-wf-dropdown-item\n *ngSwitchCase=\"'dropdownitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [inList]=\"inList\"\n [control]=\"$any(control)\"\n [readonly]=\"readonly\"\n ></mtna-wf-dropdown-item>\n\n <mtna-wf-file-upload-item\n *ngSwitchCase=\"'fileuploaditem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [readonly]=\"readonly\"\n (file)=\"setValue($event)\"\n ></mtna-wf-file-upload-item>\n\n <mtna-wf-unordered-list-item\n *ngSwitchCase=\"'bulletedlistitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n ></mtna-wf-unordered-list-item>\n\n <mtna-wf-ordered-list-item\n *ngSwitchCase=\"'numberedlistitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n ></mtna-wf-ordered-list-item>\n\n <mtna-wf-multiple-choice-item\n *ngSwitchCase=\"'multiplechoiceitem'\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [control]=\"$any(control)\"\n [parentIds]=\"parentIds\"\n [readonly]=\"readonly\"\n ></mtna-wf-multiple-choice-item>\n\n <mtna-wf-input-item\n *ngSwitchCase=\"'shortansweritem'\"\n mtnaWfShortAnswerItem\n [control]=\"$any(control)\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [inList]=\"inList\"\n [item]=\"$any(item)\"\n [readonly]=\"readonly\"\n ></mtna-wf-input-item>\n\n <mtna-wf-input-item\n *ngSwitchCase=\"'paragraphansweritem'\"\n mtnaWfParagraphItem\n [control]=\"$any(control)\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [inList]=\"inList\"\n [item]=\"$any(item)\"\n [readonly]=\"readonly\"\n ></mtna-wf-input-item>\n\n <mtna-wf-table-item\n *ngSwitchCase=\"'tableitem'\"\n [control]=\"$any(control)\"\n [indicatorStatus]=\"indicatorStatus\"\n [item]=\"$any(item)\"\n [readonly]=\"readonly\"\n [parentIds]=\"parentIds\"\n ></mtna-wf-table-item>\n\n <mtna-wf-input-item\n *ngSwitchCase=\"'decimalansweritem'\"\n mtnaWfDecimalItem\n [control]=\"$any(control)\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [inList]=\"inList\"\n [item]=\"$any(item)\"\n [readonly]=\"readonly\"\n ></mtna-wf-input-item>\n\n <mtna-wf-input-item\n *ngSwitchCase=\"'wholenumberansweritem'\"\n mtnaWfWholeNumberItem\n [control]=\"$any(control)\"\n [header]=\"itemHeader\"\n [indicatorStatus]=\"indicatorStatus\"\n [inList]=\"inList\"\n [item]=\"$any(item)\"\n [readonly]=\"readonly\"\n ></mtna-wf-input-item>\n\n <!-- DYNAMIC COMPONENT CONTAINER -->\n <ng-template *ngSwitchDefault formItemHost></ng-template>\n</ng-container>\n\n<ng-template #itemHeader let-hideRequiredMarker>\n <mtna-wf-item-header\n *ngIf=\"!!item.questionText || !!item.descriptiveText\"\n [descriptiveText]=\"item.descriptiveText\"\n [disabled]=\"control?.disabled\"\n [hideRequiredMarker]=\"hideRequiredMarker\"\n [invalid]=\"control?.invalid && (control?.dirty || control?.touched)\"\n [questionText]=\"item.questionText\"\n [required]=\"item.required\"\n ></mtna-wf-item-header>\n</ng-template>\n", components: [{ type: i0.forwardRef(function () { return MtnaWfBooleanComponent; }), selector: "mtna-wf-boolean-item" }, { type: i0.forwardRef(function () { return MtnaWfCheckboxComponent; }), selector: "mtna-wf-checkbox-item", inputs: ["color"] }, { type: i0.forwardRef(function () { return i21.MtnaWfDateComponent; }), selector: "mtna-wf-date-item", inputs: ["format", "rangeLimits"] }, { type: i0.forwardRef(function () { return i22.MtnaWfDateRangeComponent; }), selector: "mtna-wf-date-range" }, { type: i0.forwardRef(function () { return i23.MtnaWfYearQuarterRangeComponent; }), selector: "mtna-wf-year-quarter-range-item" }, { type: i0.forwardRef(function () { return i24.MtnaWfDropdownComponent; }), selector: "mtna-wf-dropdown-item" }, { type: i0.forwardRef(function () { return i25.MtnaWfFileUploadComponent; }), selector: "mtna-wf-file-upload-item", inputs: ["header", "indicatorStatus", "item", "readonly"], outputs: ["file"] }, { type: i0.forwardRef(function () { return i26.MtnaWfUnorderedListItemComponent; }), selector: "mtna-wf-unordered-list-item", inputs: ["header", "indicatorStatus", "item"] }, { type: i0.forwardRef(function () { return i27.MtnaWfOrderedListItemComponent; }), selector: "mtna-wf-ordered-list-item", inputs: ["header", "indicatorStatus", "item"] }, { type: i0.forwardRef(function () { return MtnaWfMultipleChoiceComponent; }), selector: "mtna-wf-multiple-choice-item" }, { type: i0.forwardRef(function () { return i28.MtnaWfInputComponent; }), selector: "mtna-wf-input-item[mtnaWfDecimalItem],\n mtna-wf-input-item[mtnaWfParagraphItem],\n mtna-wf-input-item[mtnaWfShortAnswerItem],\n mtna-wf-input-item[mtnaWfWholeNumberItem]," }, { type: i0.forwardRef(function () { return MtnaWfTableFormItemComponent; }), selector: "mtna-wf-table-item", inputs: ["indicatorStatus", "item", "control", "readonly", "parentIds"] }, { type: i0.forwardRef(function () { return i11.ItemHeaderComponent; }), selector: "mtna-wf-item-header", inputs: ["descriptiveText", "disabled", "hideRequiredMarker", "invalid", "questionText", "required"] }], directives: [{ type: i0.forwardRef(function () { return i3.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i0.forwardRef(function () { return i3.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i0.forwardRef(function () { return i7.MtnaHighlightDirective; }), selector: "[mtnaHighlight]", inputs: ["mtnaHighlight", "mtnaHighlightColor"], exportAs: ["mtnaHighlight"] }, { type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i3.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { type: i0.forwardRef(function () { return i29.MtnaWfFormItemDirective; }), selector: "[formItemHost]" }], pipes: { "getObjectType": i0.forwardRef(function () { return i8.GetObjectTypePipe; }), "mtnaWfSanitizeHtml": i0.forwardRef(function () { return i30.MtnaWfSanitizeHtmlPipe; }), "coerceDateItem": i0.forwardRef(function () { return i31.CoerceDateItemPipe; }) }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
501
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ValueItemComponent, decorators: [{
|
|
502
|
-
type: Component,
|
|
503
|
-
args: [{
|
|
504
|
-
selector: 'mtna-wf-value-item',
|
|
505
|
-
templateUrl: './value-item.component.html',
|
|
506
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
507
|
-
}]
|
|
508
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i16.MtnaWfManagerService }, { type: i7.MtnaLogger }, { type: undefined, decorators: [{
|
|
509
|
-
type: Optional
|
|
510
|
-
}, {
|
|
511
|
-
type: Inject,
|
|
512
|
-
args: [MTNA_WF_ITEM_WHITELIST]
|
|
513
|
-
}] }]; }, propDecorators: { itemHost: [{
|
|
514
|
-
type: ViewChild,
|
|
515
|
-
args: [MtnaWfFormItemDirective]
|
|
516
|
-
}], control: [{
|
|
517
|
-
type: Input
|
|
518
|
-
}], inList: [{
|
|
519
|
-
type: Input
|
|
520
|
-
}], indicatorStatus: [{
|
|
521
|
-
type: Input
|
|
522
|
-
}], item: [{
|
|
523
|
-
type: Input
|
|
524
|
-
}], parentIds: [{
|
|
525
|
-
type: Input
|
|
526
|
-
}], readonly: [{
|
|
527
|
-
type: Input
|
|
528
|
-
}] } });
|
|
529
|
-
export class MtnaWfMultipleChoiceComponent extends BaseSingleSelectionParent {
|
|
530
|
-
constructor(uiService) {
|
|
531
|
-
super(uiService);
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
MtnaWfMultipleChoiceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfMultipleChoiceComponent, deps: [{ token: i5.MtnaWfUIService }], target: i0.ɵɵFactoryTarget.Component });
|
|
535
|
-
MtnaWfMultipleChoiceComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfMultipleChoiceComponent, selector: "mtna-wf-multiple-choice-item", usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"header\"></ng-container>\n<ng-container *ngIf=\"control\">\n <div class=\"mtna-wf-error-container\">\n <ng-container *ngIf=\"control.invalid && (control.dirty || control.touched)\">\n <mat-error *ngFor=\"let error of control.errors | keyvalue\">\n {{ error | mtnaWfGetControlError : item }}\n </mat-error>\n </ng-container>\n </div>\n <mat-radio-group class=\"control-item-content\" [formControl]=\"control\" (change)=\"selectionChange($event)\">\n <ng-container *ngFor=\"let opt of item.options; trackBy: _trackByOptionId\">\n <mat-radio-button [disableRipple]=\"readonly\" [value]=\"opt.option.id\">{{ opt.option.name }}</mat-radio-button>\n <mtna-wf-item\n *ngIf=\"item.optionItemMap[opt.option.id] as subItem\"\n [item]=\"subItem\"\n [control]=\"!!controlWrapper && !!controlWrapper.controls ? controlWrapper.controls[subItem.instanceId] : undefined\"\n [parentIds]=\"parentIds.concat(opt.option.id)\"\n [readonly]=\"readonly\"\n ></mtna-wf-item>\n </ng-container>\n </mat-radio-group>\n</ng-container>\n", styles: [".mtna-wf-control-item .mat-form-field{width:100%}.mtna-wf-control-item .mtna-wf-error-container{font-size:75%;line-height:1;min-height:1em;margin-top:-.75rem}.mtna-wf-control-item .control-item-content{padding:.35em .75em .625em}.mtna-wf-control-item .mtna-wf-item-header~:not(.mtna-wf-error-container):not(.mat-list){padding-left:.75em}.mtna-wf-control-item .mtna-wf-item-header~:not(.mtna-wf-error-container):not(.mat-list).mat-form-field{width:calc(100% - .75em)}\n", "mtna-wf-multiple-choice-item .mat-radio-group{display:inline-block;max-width:100%;width:100%}mtna-wf-multiple-choice-item .mat-radio-button{display:block;max-width:100%}mtna-wf-multiple-choice-item .mat-radio-button:not(:last-of-type){margin-bottom:4px}mtna-wf-multiple-choice-item .mat-radio-button .mat-radio-label{white-space:normal}mtna-wf-multiple-choice-item .mat-radio-button+mtna-wf-item{padding-left:28px;margin-top:0}mtna-wf-multiple-choice-item.read-only .mat-radio-button .mat-radio-label{cursor:default}\n"], components: [{ type: i32.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }], directives: [{ type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i33.MatError, selector: "mat-error", inputs: ["id"] }, { type: i32.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "keyvalue": i3.KeyValuePipe, "mtnaWfGetControlError": i34.MtnaGetFormControlErrorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
536
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfMultipleChoiceComponent, decorators: [{
|
|
537
|
-
type: Component,
|
|
538
|
-
args: [{
|
|
539
|
-
selector: 'mtna-wf-multiple-choice-item',
|
|
540
|
-
templateUrl: 'multiple-choice.component.html',
|
|
541
|
-
styleUrls: [
|
|
542
|
-
`../form-item-controls/form-control.scss`,
|
|
543
|
-
'multiple-choice.component.scss',
|
|
544
|
-
],
|
|
545
|
-
encapsulation: ViewEncapsulation.None,
|
|
546
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
547
|
-
}]
|
|
548
|
-
}], ctorParameters: function () { return [{ type: i5.MtnaWfUIService }]; } });
|
|
549
|
-
export class MtnaWfBooleanComponent extends BaseParentItemControl {
|
|
550
|
-
constructor(uiService) {
|
|
551
|
-
super();
|
|
552
|
-
this.uiService = uiService;
|
|
553
|
-
}
|
|
554
|
-
toggleChange(change) {
|
|
555
|
-
this.uiService.toggleFormItems(this.item.option.enabledItems, this.item.option.disabledItems, change.checked, this.item.instanceId);
|
|
556
|
-
}
|
|
557
|
-
_trackByInstanceId(index, item) {
|
|
558
|
-
return item.value.instanceId;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
MtnaWfBooleanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfBooleanComponent, deps: [{ token: i5.MtnaWfUIService }], target: i0.ɵɵFactoryTarget.Component });
|
|
562
|
-
MtnaWfBooleanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfBooleanComponent, selector: "mtna-wf-boolean-item", usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"header\"></ng-container>\n<mat-slide-toggle *ngIf=\"control\" [formControl]=\"control\" (change)=\"toggleChange($event)\">{{ item.option.option.name }}</mat-slide-toggle>\n<ng-container *ngIf=\"!!item.optionItemMap\">\n <mtna-wf-item\n *ngFor=\"let f of item.optionItemMap | keyvalue; trackBy: _trackByInstanceId\"\n [item]=\"f.value\"\n [control]=\"!!controlWrapper && controlWrapper.controls ? controlWrapper.controls[f.value.instanceId] : undefined\"\n [parentIds]=\"parentIds\"\n [readonly]=\"readonly\"\n ></mtna-wf-item>\n <ng-container> </ng-container\n></ng-container>\n", styles: [".mtna-wf-control-item .mat-form-field{width:100%}.mtna-wf-control-item .mtna-wf-error-container{font-size:75%;line-height:1;min-height:1em;margin-top:-.75rem}.mtna-wf-control-item .control-item-content{padding:.35em .75em .625em}.mtna-wf-control-item .mtna-wf-item-header~:not(.mtna-wf-error-container):not(.mat-list){padding-left:.75em}.mtna-wf-control-item .mtna-wf-item-header~:not(.mtna-wf-error-container):not(.mat-list).mat-form-field{width:calc(100% - .75em)}\n", "mtna-annotations-indicator+mtna-wf-value-item>mtna-wf-boolean-item{padding-right:24px}mtna-wf-boolean-item{display:block}mtna-wf-boolean-item .mat-slide-toggle{margin:4px 0}mtna-wf-boolean-item .mat-slide-toggle+mtna-wf-item{margin-top:0}mtna-wf-boolean-item .mat-slide-toggle~mtna-wf-item{padding-left:18px}mtna-wf-boolean-item.read-only .mat-slide-toggle.mat-disabled{opacity:.8}mtna-wf-boolean-item.read-only .mat-slide-toggle .mat-slide-toggle-label,mtna-wf-boolean-item.read-only .mat-slide-toggle .mat-slide-toggle-label .mat-slide-toggle-bar .mat-slide-toggle-thumb-container{cursor:default}mtna-wf-boolean-item .mat-slide-toggle{height:auto;min-height:24px}mtna-wf-boolean-item .mat-slide-toggle>.mat-slide-toggle-label>.mat-slide-toggle-content{white-space:normal}\n"], components: [{ type: i35.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }], directives: [{ type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "keyvalue": i3.KeyValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
563
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfBooleanComponent, decorators: [{
|
|
564
|
-
type: Component,
|
|
565
|
-
args: [{
|
|
566
|
-
selector: 'mtna-wf-boolean-item',
|
|
567
|
-
templateUrl: 'boolean.component.html',
|
|
568
|
-
styleUrls: [
|
|
569
|
-
`../form-item-controls/form-control.scss`,
|
|
570
|
-
'boolean.component.scss',
|
|
571
|
-
],
|
|
572
|
-
encapsulation: ViewEncapsulation.None,
|
|
573
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
574
|
-
}]
|
|
575
|
-
}], ctorParameters: function () { return [{ type: i5.MtnaWfUIService }]; } });
|
|
576
|
-
export class MtnaWfCheckboxComponent extends BaseParentItemControl {
|
|
577
|
-
constructor(dialogService, uiService) {
|
|
578
|
-
super();
|
|
579
|
-
this.dialogService = dialogService;
|
|
580
|
-
this.uiService = uiService;
|
|
581
|
-
this.destroyed$ = new Subject();
|
|
582
|
-
}
|
|
583
|
-
handleChange(change, index) {
|
|
584
|
-
var _a;
|
|
585
|
-
const option = this.item.options[index];
|
|
586
|
-
const formControl = (_a = this.control) === null || _a === void 0 ? void 0 : _a.controls[index];
|
|
587
|
-
// If the user is trying to make a selection with something that has an acknowledgement,
|
|
588
|
-
// show the acknowledge dialog first to get their consent.
|
|
589
|
-
// Note: we don't need to show the acknowledgement if the user is unchecking the box.
|
|
590
|
-
if (option.acknowledgement && (formControl === null || formControl === void 0 ? void 0 : formControl.value)) {
|
|
591
|
-
// Revert the checkbox to an unchecked state until they agree to the acknowledgement
|
|
592
|
-
formControl === null || formControl === void 0 ? void 0 : formControl.setValue(false);
|
|
593
|
-
this.dialogService
|
|
594
|
-
.verifyAcknowledgement(option.acknowledgement)
|
|
595
|
-
.pipe(takeUntil(this.destroyed$))
|
|
596
|
-
.subscribe((acknowledged) => {
|
|
597
|
-
if (acknowledged) {
|
|
598
|
-
formControl === null || formControl === void 0 ? void 0 : formControl.setValue(true);
|
|
599
|
-
this.uiService.toggleFormItems(option.enabledItems, option.disabledItems, change.checked, this.item.instanceId);
|
|
600
|
-
}
|
|
601
|
-
});
|
|
602
|
-
}
|
|
603
|
-
else {
|
|
604
|
-
this.uiService.toggleFormItems(option.enabledItems, option.disabledItems, change.checked, this.item.instanceId);
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
ngOnDestroy() {
|
|
608
|
-
this.destroyed$.next();
|
|
609
|
-
this.destroyed$.complete();
|
|
610
|
-
}
|
|
611
|
-
/**
|
|
612
|
-
* Display what the user already acknowledged for a given option.
|
|
613
|
-
* @param event the browser event when the button was invoked
|
|
614
|
-
* @param acknowledgementItem The form item that represents the acknowledgement text to display to the user.
|
|
615
|
-
* */
|
|
616
|
-
showAcknowledgement(event, acknowledgementItem) {
|
|
617
|
-
event.stopPropagation();
|
|
618
|
-
event.preventDefault();
|
|
619
|
-
this.dialogService.showAcknowledgement(acknowledgementItem);
|
|
620
|
-
}
|
|
621
|
-
/**
|
|
622
|
-
* Stop a browser event from propagating
|
|
623
|
-
* @param event the event to stop
|
|
624
|
-
*/
|
|
625
|
-
stopEventPropagation(event) {
|
|
626
|
-
event.stopPropagation();
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
MtnaWfCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfCheckboxComponent, deps: [{ token: MtnaWfDialogService }, { token: i5.MtnaWfUIService }], target: i0.ɵɵFactoryTarget.Component });
|
|
630
|
-
MtnaWfCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MtnaWfCheckboxComponent, selector: "mtna-wf-checkbox-item", inputs: { color: "color" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"header\"></ng-container>\n<div *ngIf=\"hasItemHeader\" class=\"mtna-wf-error-container\">\n <ng-container *ngIf=\"control?.invalid && (control?.dirty || control?.touched)\">\n <mat-error *ngFor=\"let error of control?.errors | keyvalue\">\n {{ error | mtnaWfGetControlError : item }}\n </mat-error>\n </ng-container>\n</div>\n<fieldset\n class=\"control-item-content\"\n [class.single-option]=\"item.options?.length === 1\"\n [mtnaHighlight]=\"indicatorStatus === 'ACTIVE' && !hasItemHeader\"\n>\n <ng-container *ngFor=\"let opt of item.options; let i = index; trackBy: _trackByOptionId\">\n <mat-checkbox\n *ngIf=\"!!control && !!control.controls && !!control.controls[i]\"\n [disableRipple]=\"readonly\"\n [formControl]=\"$any(control.controls[i])\"\n [color]=\"color\"\n (change)=\"handleChange($event, i)\"\n >{{ opt.option.name }}\n <button\n *ngIf=\"opt.acknowledgement && control.controls[i].value\"\n aria-label=\"Acknowledged. Click to view the agreement.\"\n class=\"acknowledge-verification-button\"\n mat-icon-button\n matTooltip=\"Acknowledged. Click to view the agreement.\"\n matTooltipShowDelay=\"800\"\n (click)=\"showAcknowledgement($event, opt.acknowledgement)\"\n (mousedown)=\"stopEventPropagation($event)\"\n (touchstart)=\"stopEventPropagation($event)\"\n >\n <mat-icon>verified</mat-icon>\n </button>\n </mat-checkbox>\n <ng-container *ngIf=\"item.optionItemMap[opt.option.id]\">\n <mtna-wf-item\n *ngIf=\"item.optionItemMap[opt.option.id] as subItem\"\n [item]=\"subItem\"\n [control]=\"!!controlWrapper && controlWrapper.controls ? controlWrapper.controls[subItem.instanceId] : undefined\"\n [readonly]=\"readonly\"\n [parentIds]=\"parentIds.concat(opt.option.id)\"\n ></mtna-wf-item>\n </ng-container>\n </ng-container>\n</fieldset>\n", styles: [".mtna-wf-control-item .mat-form-field{width:100%}.mtna-wf-control-item .mtna-wf-error-container{font-size:75%;line-height:1;min-height:1em;margin-top:-.75rem}.mtna-wf-control-item .control-item-content{padding:.35em .75em .625em}.mtna-wf-control-item .mtna-wf-item-header~:not(.mtna-wf-error-container):not(.mat-list){padding-left:.75em}.mtna-wf-control-item .mtna-wf-item-header~:not(.mtna-wf-error-container):not(.mat-list).mat-form-field{width:calc(100% - .75em)}\n", "mtna-wf-checkbox-item{display:flex;flex-direction:column;position:relative}mtna-wf-checkbox-item .mat-checkbox{display:block}mtna-wf-checkbox-item .mat-checkbox>.mat-checkbox-layout{display:block}mtna-wf-checkbox-item .mat-checkbox>.mat-checkbox-layout>.mat-checkbox-label{white-space:normal}mtna-wf-checkbox-item .mat-checkbox .acknowledge-verification-button{vertical-align:top;width:18px;height:18px;line-height:18px;margin-left:4px}mtna-wf-checkbox-item .mat-checkbox .acknowledge-verification-button .mat-icon{width:18px;height:18px;line-height:18px;font-size:18px}mtna-wf-checkbox-item fieldset{border:none;margin:0}mtna-wf-checkbox-item fieldset.control-item-content.single-option{padding:0}mtna-wf-checkbox-item .mat-checkbox+mtna-wf-item{margin-top:0;padding-left:24px}mtna-wf-checkbox-item.read-only .mat-checkbox{cursor:default}\n"], components: [{ type: i36.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i18.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: MtnaWfFormItemComponent, selector: "mtna-wf-item", inputs: ["item", "readonly", "control", "parentIds", "step"], outputs: ["focusedSection"] }], directives: [{ type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i33.MatError, selector: "mat-error", inputs: ["id"] }, { type: i7.MtnaHighlightDirective, selector: "[mtnaHighlight]", inputs: ["mtnaHighlight", "mtnaHighlightColor"], exportAs: ["mtnaHighlight"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i19.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "keyvalue": i3.KeyValuePipe, "mtnaWfGetControlError": i34.MtnaGetFormControlErrorPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
631
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfCheckboxComponent, decorators: [{
|
|
632
|
-
type: Component,
|
|
633
|
-
args: [{
|
|
634
|
-
selector: 'mtna-wf-checkbox-item',
|
|
635
|
-
templateUrl: 'checkbox.component.html',
|
|
636
|
-
styleUrls: [
|
|
637
|
-
`../form-item-controls/form-control.scss`,
|
|
638
|
-
'checkbox.component.scss',
|
|
639
|
-
],
|
|
640
|
-
encapsulation: ViewEncapsulation.None,
|
|
641
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
642
|
-
}]
|
|
643
|
-
}], ctorParameters: function () { return [{ type: MtnaWfDialogService }, { type: i5.MtnaWfUIService }]; }, propDecorators: { color: [{
|
|
644
|
-
type: Input
|
|
645
|
-
}] } });
|
|
646
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY29tcG9uZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9ncm91cHMvZ3JvdXAtY29tcG9uZW50cy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9ncm91cHMvYWNrbm93bGVkZ2UtZGlhbG9nLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2dyb3Vwcy9mb3JtLWl0ZW0uY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZ3JvdXBzL2Zvcm0taXRlbS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvZ3JvdXBzL2Zvcm0tc2VjdGlvbi5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9ncm91cHMvZm9ybS1ncm91cC5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9ncm91cHMvcmVwZWF0YWJsZS1pdGVtLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9ncm91cHMvdGFibGUtaXRlbS5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9ncm91cHMvdmFsdWUtaXRlbS5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9ncm91cHMvbXVsdGlwbGUtY2hvaWNlLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2dyb3Vwcy9ib29sZWFuLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL2dyb3Vwcy9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUlULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxlQUFlLEVBQTJCLE1BQU0sMEJBQTBCLENBQUM7QUFHcEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0QyxPQUFPLEVBR0wsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUd2QixpQkFBaUIsRUFDakIsb0JBQW9CLEVBRXBCLHdCQUF3QixFQUd4QixVQUFVLEVBQ1Ysb0JBQW9CLEVBR3BCLFlBQVksRUFDWixhQUFhLEdBRWQsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwREFBMEQsQ0FB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RCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztTQUlLO0lBQ0wsbUJBQW1CLENBQUMsS0FBWSxFQUFFLG1CQUE0QjtRQUM1RCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CLENBQUMsS0FBWTtRQUMvQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7cUhBdkRVLHVCQUF1QixrQkFLQyxtQkFBbUI7eUdBTDNDLHVCQUF1QixnSFcvZnBDLG04REE4Q0EsK2lFWCtGYSx1QkFBdUI7NEZBa1h2Qix1QkFBdUI7a0JBVm5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLHlCQUF5QjtvQkFDdEMsU0FBUyxFQUFFO3dCQUNULHlDQUF5Qzt3QkFDekMseUJBQXlCO3FCQUMxQjtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzBEQU1vQyxtQkFBbUIsd0RBSjdDLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuXG5pbXBvcnQgeyBpc0tleSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHsgQ2FuRGVzdHJveU5vdGlmeSwgTXRuYUxvZ2dlciB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5pbXBvcnQgeyBBbm5vdGF0aW9uSW5kaWNhdG9yU3RhdHVzLCBJbmRpY2F0b3JTdGF0dXNSZXBlYXRlciB9IGZyb20gJ0BtdG5hL3Bvam8tc29jaWFsLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQm9vbGVhbkl0ZW0sXG4gIENoZWNrYm94SXRlbSxcbiAgRFJPUERPV05fSVRFTV9JRCxcbiAgRk9STV9JVEVNX0dST1VQX0lNUExfSUQsXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwSW1wbCxcbiAgaXNDb25kaXRpb25hbEl0ZW0sXG4gIE10bmFXZkZvcm1JdGVtQ2hhbmdlLFxuICBNdWx0aXBsZUNob2ljZUl0ZW0sXG4gIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRCxcbiAgUmVwZWF0YWJsZUl0ZW0sXG4gIFNlY3Rpb24sXG4gIFNFQ1RJT05fSUQsXG4gIFNIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlUm93SXRlbSxcbiAgVEVYVF9JVEVNX0lELFxuICBUSVRMRV9JVEVNX0lELFxuICBWYWx1ZUl0ZW0sXG59IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDT01QTEVYX1NUQU5EQVJELCBNVE5BX1dGX0VYUEFORF9DT0xMQVBTRSB9IGZyb20gJy4uL2NvcmUvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXRuYVdmVUlTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy91aS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VQYXJlbnRJdGVtQ29udHJvbCB9IGZyb20gJy4uL2Zvcm0taXRlbS1jb250cm9scy9iYXNlLXBhcmVudC1pdGVtLWNvbnRyb2wuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhc2VTaW5nbGVTZWxlY3Rpb25QYXJlbnQgfSBmcm9tICcuLi9mb3JtLWl0ZW0tY29udHJvbHMvYmFzZS1zaW5nbGUtc2VsZWN0aW9uLXBhcmVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTXRuYVdmRm9ybUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtL2Zvcm0taXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRm9ybVN0ZXAgfSBmcm9tICcuLi9mb3JtLXN0ZXBwZXIvbW9kZWxzL2Zvcm0tc3RlcC5tb2RlbCc7XG5pbXBvcnQgeyBNVE5BX1dGX0lURU1fV0hJVEVMSVNULCBNdG5hV2ZJdGVtV2hpdGVMaXN0IH0gZnJvbSAnLi4vZm9ybS93aGl0ZS1saXN0Lm1vZGVsJztcbmltcG9ydCB7IE10bmFXZkZvcm1JdGVtRGlhbG9nRGF0YSB9IGZyb20gJy4vZm9ybS1pdGVtLWRpYWxvZy1kYXRhLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZEaWFsb2dTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgYWNrbm93bGVkZ2VtZW50IHRoZSB1c2VyIGFncmVlZCB0byBmb3IgYSBnaXZlbiBvcHRpb24uXG4gICAqIEBwYXJhbSBhY2tub3dsZWRnZW1lbnRJdGVtIFRoZSB7QGxpbmsgU2VjdGlvbn0gdGhhdCByZXByZXNlbnRzIHRoZSBhY2tub3dsZWRnZW1lbnQgdGV4dCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgc2hvd0Fja25vd2xlZGdlbWVudChhY2tub3dsZWRnZW1lbnRJdGVtOiBTZWN0aW9uKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihNdG5hV2ZGb3JtSXRlbURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICBkYXRhOiBuZXcgTXRuYVdmRm9ybUl0ZW1EaWFsb2dEYXRhKGFja25vd2xlZGdlbWVudEl0ZW0uaXRlbXMsIGFja25vd2xlZGdlbWVudEl0ZW0udGl0bGUudmFsdWUgfHwgJ0Fja25vd2xlZGdlbWVudCcpLFxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgbWF4V2lkdGg6ICc1MDBweCcsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBzb21lIHRleHQgaW4gYSBkaWFsb2cgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBcImFja25vd2xlZGdlXCIgYmVmb3JlIHRoZXkgY2FuIG1ha2UgYSBjZXJ0YWluIHNlbGVjdGlvbi5cbiAgICogQHBhcmFtIGFja25vd2xlZGdlbWVudEl0ZW0gVGhlIHtAbGluayBTZWN0aW9ufSB0aGF0IHJlcHJlc2VudHMgdGhlIHRleHQgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciBhY2tub3dsZWRnZW1lbnQuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHVzZXIgYWNrbm93bGVkZ2VzIChhZ3JlZXMpLlxuICAgKi9cbiAgdmVyaWZ5QWNrbm93bGVkZ2VtZW50KGFja25vd2xlZGdlbWVudEl0ZW06IFNlY3Rpb24pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dcbiAgICAgIC5vcGVuKE10bmFXZkFja25vd2xlZGdlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICBkYXRhOiBuZXcgTXRuYVdmRm9ybUl0ZW1EaWFsb2dEYXRhKGFja25vd2xlZGdlbWVudEl0ZW0uaXRlbXMsIGFja25vd2xlZGdlbWVudEl0ZW0udGl0bGUudmFsdWUgfHwgJ0Fja25vd2xlZGdlbWVudCcpLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBtYXhXaWR0aDogJzUwMHB4JyxcbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKTtcbiAgfVxufVxuXG4vKlxuICogRHVlIHRvIHRoZSByZWN1cnNpdmUgbmF0dXJlIG9mIHRoZXNlIGZvcm0gY29tcG9uZW50cywgd2UgaGFkIHRvIGNvbWJpbmUgYWxsIHRoZSBUUyBpbnRvIGEgc2luZ2xlIGZpbGUuXG4gKiBQZXJoYXBzIHdoZW4gd2UgcmVmYWN0b3IgdGhpcyBpbiB0aGUgZnV0dXJlIHRvIHVzZSBkeW5hbWljIGNvbXBvbmVudHMsIHRoaXMgY2FuIGJlIGF2b2lkZWQuXG4gKiBSZWFkIG1vcmUgYWJvdXQgdGhlIGVycm9ycyBpZiB0aGV5IGFyZSBub3QgaW4gdGhlIHNhbWUgZmlsZSBoZXJlOiBodHRwczovL2FuZ3VsYXIuaW8vZXJyb3JzL05HMzAwM1xuICovXG5cbi8vIFRPRE86IHJlZmFjdG9yLCByZWR1Y2UgY29kZSBpbiBoZXJlLiBtaXhpbnNcblxuLyoqXG4gKiBBIGRpYWxvZyB0aGF0IHJlbmRlcnMgYSBmb3JtIGl0ZW0gdGhhdCByZXByZXNlbnRzIHNvbWV0aGluZyB0aGUgdXNlciBuZWVkcyB0byBhY2tub3dsZWRnZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXRuYS13Zi1hY2tub3dsZWRnZS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJ2Fja25vd2xlZGdlLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIE10bmFXZkFja25vd2xlZGdlRGlhbG9nQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBNdG5hV2ZGb3JtSXRlbURpYWxvZ0RhdGEsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE10bmFXZkFja25vd2xlZGdlRGlhbG9nQ29tcG9uZW50LCBib29sZWFuPlxuICApIHt9XG59XG5cbi8qKlxuICogQ29tcG9uZW50IHRoYXQgd3JhcHMgYW4gTXRuYUZvcm0gaXRlbS5cbiAqXG4gKiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2ggd2FzIG5vdCB3b3JraW5nIGFzIG9mIDkvMTkvMjAxOC5cbiAqIER5bmFtaWMgY29tcG9uZW50cyBpbiB0aGUgVmFsdWVJdGVtQ29tcG9uZW50IHdlcmUgbm90IGJlaW5nIGluaXRpYWxpemVkIChuZ09uSW5pdCB3YXMgbmV2ZXIgY2FsbGVkKS5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ210bmEtd2YtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFtNVE5BX1dGX0VYUEFORF9DT0xMQVBTRV0sXG59KVxuZXhwb3J0IGNsYXNzIE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQEhvc3RCaW5kaW5nKCdAbXRuYVdmRXhwYW5kQ29sbGFwc2UnKSB2aXNpYmxlID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICBnZXQgZWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbSA/IHRoaXMuaXRlbS5pbnN0YW5jZUlkIDogJyc7XG4gIH1cblxuICBASW5wdXQoKSBpdGVtITogRm9ybUl0ZW07XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHBhcmVudElkcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIHN0ZXA6IEZvcm1TdGVwIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgZm9jdXNlZFNlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1TdGVwPigpO1xuXG4gIGFubm90YXRpb25zJD86IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIGluZGljYXRvclN0YXR1czogQW5ub3RhdGlvbkluZGljYXRvclN0YXR1cyA9ICdJTkFDVElWRSc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSB1aVNlcnZpY2U6IE10bmFXZlVJU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0odGhpcy5pdGVtKSkge1xuICAgICAgdGhpcy52aXNpYmxlID0gIXRoaXMuaXRlbS5oaWRlT25EaXNhYmxlIHx8ICF0aGlzLml0ZW0uZGlzYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMudWlTZXJ2aWNlLnJlZ2lzdGVyU2VsZih0aGlzKTtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBtdG5hLXdmLSR7Z2V0SXRlbUNsYXNzU3VmZml4KHRoaXMuaXRlbS5pdGVtSWQpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW1DbGFzc1N1ZmZpeChpdGVtSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEZJWE1FOiBzdXJlbHkgdGhlcmUgaXMgYSBzdHJvbmdlci9iZXR0ZXIgd2F5XG4gIHN3aXRjaCAoaXRlbUlkKSB7XG4gICAgY2FzZSBGT1JNX0lURU1fR1JPVVBfSU1QTF9JRDpcbiAgICAgIHJldHVybiAnZ3JvdXAnO1xuICAgIGNhc2UgU0VDVElPTl9JRDpcbiAgICAgIHJldHVybiAnc2VjdGlvbic7XG4gICAgY2FzZSBURVhUX0lURU1fSUQ6XG4gICAgICByZXR1cm4gJ3RleHQnO1xuICAgIGNhc2UgVElUTEVfSVRFTV9JRDpcbiAgICAgIHJldHVybiAndGl0bGUnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2l0ZW0nO1xuICB9XG59XG5cbi8qKlxuICogQSBkaWFsb2cgdGhhdCByZW5kZXJzIGEgZm9ybSBpdGVtLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLWZvcm0taXRlbS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJ2Zvcm0taXRlbS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGb3JtSXRlbURpYWxvZ0NvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogTXRuYVdmRm9ybUl0ZW1EaWFsb2dEYXRhLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxNdG5hV2ZGb3JtSXRlbURpYWxvZ0NvbXBvbmVudD5cbiAgKSB7fVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLXNlY3Rpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1zZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGb3JtU2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEluZGljYXRvclN0YXR1c1JlcGVhdGVyIHtcbiAgQElucHV0KCkgaW5kaWNhdG9yU3RhdHVzOiBBbm5vdGF0aW9uSW5kaWNhdG9yU3RhdHVzID0gJ0lOQUNUSVZFJztcbiAgQElucHV0KCkgaXRlbSE6IFNlY3Rpb247XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0ZXA6IEZvcm1TdGVwIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgQElucHV0KCkgY29udHJvbDogRm9ybUdyb3VwIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgcGFyZW50SWRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBAT3V0cHV0KCkgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVN0ZXA+KCk7XG5cbiAgX3RyYWNrQnlJbnN0YW5jZUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IEZvcm1JdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaW5zdGFuY2VJZDtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZGb3JtR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBJbmRpY2F0b3JTdGF0dXNSZXBlYXRlciB7XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEZvcm1Hcm91cCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGluZGljYXRvclN0YXR1czogQW5ub3RhdGlvbkluZGljYXRvclN0YXR1cyA9ICdJTkFDVElWRSc7XG5cbiAgQElucHV0KClcbiAgZ2V0IGl0ZW0oKTogRm9ybUl0ZW1Hcm91cEltcGwgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbTtcbiAgfVxuXG4gIHNldCBpdGVtKGl0ZW06IEZvcm1JdGVtR3JvdXBJbXBsIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2l0ZW0gPSBpdGVtO1xuXG4gICAgaWYgKHRoaXMuaXRlbSkge1xuICAgICAgLy8gQSBsaXN0IGl0ZW0gY2FuIG9ubHkgZGlzcGxheSBhIGhlYWRpbmcgbGluZSAmIGEgc21hbGwgdGV4dCBsaW5lXG4gICAgICAvLyBDb21wYXRpYmxlIGl0ZW1zIHNob3VsZCBiZSBpdGVtcyB3aXRoIHNob3J0IGxhYmVscy9oZWFkZXJzICYgdmFsdWVzXG4gICAgICAvLyBJdGVtcyB3aXRoIG11bHRpcGxlIG9wdGlvbnMsIG9yIHBvdGVudGlhbCBuZXN0ZWQgaXRlbXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZFxuICAgICAgdGhpcy5pbkxpc3QgPSB0aGlzLml0ZW0uaXRlbXMuZXZlcnkoKGkpID0+IGkuaXRlbUlkID09PSBTSE9SVF9BTlNXRVJfSVRFTV9JRCB8fCBpLml0ZW1JZCA9PT0gRFJPUERPV05fSVRFTV9JRCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXRlbTogRm9ybUl0ZW1Hcm91cEltcGwgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIHBhcmVudElkczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIGZ1bGxXaWR0aDogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcbiAgICBbUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lEXTogdHJ1ZSxcbiAgICBbRk9STV9JVEVNX0dST1VQX0lNUExfSURdOiB0cnVlLFxuICAgIFtURVhUX0lURU1fSURdOiB0cnVlLFxuICAgIFtUSVRMRV9JVEVNX0lEXTogdHJ1ZSxcbiAgfTtcblxuICAvKipcbiAgICogSWYgZm9ybSBpcyByZWFkb25seSAmIGFsbCBjaGlsZCBpdGVtcyBhcmUgb25lIG9mIHRoZSBzcGVjaWZpZWQgdHlwZXMgYmVsb3csXG4gICAqIHdlIHdhbnQgdG8gZGlzcGxheSB0aGlzIGdyb3VwJ3MgY2hpbGQgaXRlbXMgaW4gYSBtYXQtbGlzdFxuICAgKi9cbiAgaW5MaXN0ID0gZmFsc2U7XG5cbiAgX3RyYWNrQnlJbnN0YW5jZUlkKGluZGV4OiBudW1iZXIsIHNlY3Rpb246IEZvcm1JdGVtKSB7XG4gICAgcmV0dXJuIHNlY3Rpb24uaW5zdGFuY2VJZDtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLXJlcGVhdGFibGUtaXRlbS1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJ3JlcGVhdGFibGUtaXRlbS1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtgcmVwZWF0YWJsZS1pdGVtLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc2BdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcigncmVwZWF0SXRlbUV4cGFuZENvbGxhcHNlJywgW1xuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoeyBoZWlnaHQ6ICcqJywgbWFyZ2luOiAnKicsIG9wYWNpdHk6IDEgfSkpLFxuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IGhlaWdodDogMCwgbWFyZ2luOiAwLCBvcGFjaXR5OiAwLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbYW5pbWF0ZShDT01QTEVYX1NUQU5EQVJELCBzdHlsZSh7IGhlaWdodDogJyonLCBtYXJnaW46ICcqJywgb3BhY2l0eTogMSB9KSldKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIGFuaW1hdGUoQ09NUExFWF9TVEFOREFSRCkpLFxuICAgIF0pLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVwZWF0YWJsZUl0ZW1Db250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBJbmRpY2F0b3JTdGF0dXNSZXBlYXRlciB7XG4gIEBJbnB1dCgpIGluZGljYXRvclN0YXR1czogQW5ub3RhdGlvbkluZGljYXRvclN0YXR1cyA9ICdJTkFDVElWRSc7XG4gIEBJbnB1dCgpIGl0ZW0hOiBSZXBlYXRhYmxlSXRlbTtcbiAgQElucHV0KCkgY29udHJvbDogRm9ybUdyb3VwIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgcGFyZW50SWRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hbmFnZXI6IE10bmFXZk1hbmFnZXJTZXJ2aWNlKSB7fVxuXG4gIGFkZEl0ZW0oKSB7XG4gICAgdGhpcy5tYW5hZ2VyLmNoYW5nZU10bmFGb3JtSXRlbShuZXcgTXRuYVdmRm9ybUl0ZW1DaGFuZ2UodGhpcy5pdGVtLnJlcGVhdGFibGVUZW1wbGF0ZUlkLCB0aGlzLnBhcmVudElkcywgJ0FERCcpKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oaXRlbTogRm9ybUl0ZW0pIHtcbiAgICBjb25zdCBjb25kaXRpb25DaGFuZ2VzID0gdGhpcy5tYW5hZ2VyLmdlbmVyYXRlQ29uZGl0aW9uQ2hhbmdlQXJyYXkoaXRlbSwgJ1JFTU9WRScpO1xuICAgIHRoaXMubWFuYWdlci5jaGFuZ2VNdG5hRm9ybUl0ZW0obmV3IE10bmFXZkZvcm1JdGVtQ2hhbmdlKGl0ZW0uaW5zdGFuY2VJZCwgdGhpcy5wYXJlbnRJZHMsICdSRU1PVkUnLCBjb25kaXRpb25DaGFuZ2VzKSk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXRuYS13Zi10YWJsZS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICd0YWJsZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3RhYmxlLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE10bmFXZlRhYmxlRm9ybUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBJbmRpY2F0b3JTdGF0dXNSZXBlYXRlciB7XG4gIEBJbnB1dCgpIGluZGljYXRvclN0YXR1czogQW5ub3RhdGlvbkluZGljYXRvclN0YXR1cyA9ICdJTkFDVElWRSc7XG4gIEBJbnB1dCgpIGl0ZW0hOiBUYWJsZUl0ZW07XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEZvcm1Hcm91cCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhcmVudElkcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgX3RyYWNrQnlUYWJsZVJvdyhpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93SXRlbSkge1xuICAgIHJldHVybiByb3cuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGkpID0+ICEhaSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uaW5zdGFuY2VJZClcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxufVxuXG5pbXBvcnQgdHlwZSB7IEJhc2VGb3JtSXRlbSB9IGZyb20gJy4uL2Zvcm0vYmFzZS1mb3JtLWl0ZW0ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLXZhbHVlLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdmFsdWUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBWYWx1ZUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBJbmRpY2F0b3JTdGF0dXNSZXBlYXRlciwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKiogdGhlIGNvbnRhaW5lciBmb3IgYWRkaW5nIGR5bmFtaWMgZm9ybSBpdGVtcyAqL1xuICBAVmlld0NoaWxkKE10bmFXZkZvcm1JdGVtRGlyZWN0aXZlKSBpdGVtSG9zdDogTXRuYVdmRm9ybUl0ZW1EaXJlY3RpdmUgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGluTGlzdCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbmRpY2F0b3JTdGF0dXM6IEFubm90YXRpb25JbmRpY2F0b3JTdGF0dXMgPSAnSU5BQ1RJVkUnO1xuICBASW5wdXQoKSBpdGVtITogVmFsdWVJdGVtPHVua25vd24+O1xuICBASW5wdXQoKSBwYXJlbnRJZHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIC8qKiB0aGUgcmVmZXJlbmNlIHRvIGEgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50ICovXG4gIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPEJhc2VGb3JtSXRlbT4gfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBUaGUgbGlzdCBvZiBwcmUtZXhpc3Rpbmcobm9uLWR5bmFtaWMpIGl0ZW0gdHlwZXNcbiAgICogSWYgdGhpcyBpdGVtJ3MgaXRlbUlkIGRvZXMgbm90IG1hdGNoIG9uZSBvZiB0aGUgZm9sbG93aW5nLCB0aGVuXG4gICAqIHRoaXMgaXRlbSBpcyBhIGR5bmFtaWMgY29tcG9uZW50IHJlZ2lzdGVyZWQgYnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvblxuICAgKiAmIHJlcXVpcmVzIHRoZSBDb21wb25lbnRGYWN0b3J5IHRvIGNyZWF0ZSB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgZml4ZWRJdGVtVHlwZXMgPSBbXG4gICAgJ2Jvb2xlYW5pdGVtJyxcbiAgICAnYnVsbGV0ZWRsaXN0aXRlbScsXG4gICAgJ2NoZWNrYm94aXRlbScsXG4gICAgJ2RhdGVpdGVtJyxcbiAgICAnZGF0ZXJhbmdlaXRlbScsXG4gICAgJ2RlY2ltYWxhbnN3ZXJpdGVtJyxcbiAgICAnZG9jdW1lbnRhdGlvbml0ZW0nLFxuICAgICdkcm9wZG93bml0ZW0nLFxuICAgICdmaWxldXBsb2FkaXRlbScsXG4gICAgJ211bHRpcGxlY2hvaWNlaXRlbScsXG4gICAgJ251bWJlcmVkbGlzdGl0ZW0nLFxuICAgICdvZmZzZXRkYXRlcmFuZ2VpdGVtJyxcbiAgICAncGFyYWdyYXBoYW5zd2VyaXRlbScsXG4gICAgJ3Nob3J0YW5zd2VyaXRlbScsXG4gICAgJ3RhYmxlaXRlbScsXG4gICAgJ3RleHRpdGVtJyxcbiAgICAndGl0bGVpdGVtJyxcbiAgICAnd2hvbGVudW1iZXJhbnN3ZXJpdGVtJyxcbiAgICAneWVhcnF1YXJ0ZXJyYW5nZWl0ZW0nLFxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNmUmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGZvcm1NYW5hZ2VyOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTXRuYUxvZ2dlcixcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoTVROQV9XRl9JVEVNX1dISVRFTElTVClcbiAgICBwcml2YXRlIHdoaXRlTGlzdDogTXRuYVdmSXRlbVdoaXRlTGlzdFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFNldHMgYSB2YWx1ZSBvbiB0aGUgY29udHJvbCBmb3IgYW55IGNvbXBvbmVudHMgdGhhdCBvbmx5IGVtaXQgYSB2YWx1ZSAmXG4gICAqIGRvIG5vdCBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZWlyIGNvbnRyb2wgdGhlbXNlbHZlcywgaS5lLiBhIEZpbGVVcGxvYWRJdGVtXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIHRoZSB2YWx1ZSB0byBiZSBzZXQgb24gdGhlIGNvbnRyb2xcbiAgICovXG4gIHNldFZhbHVlKGl0ZW06IHVua25vd24pIHtcbiAgICB0aGlzLmNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZShpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgZHluYW1pYyBjb21wb25lbnQgZnJvbSBhIHJlbGV2YW50IHR5cGUgaW4gdGhlIEZvcm1TZXJ2aWNlIChyZWdpc3RlcmVkKWNvbXBvbmVudHM7XG4gICAqIE9OTFkgaWYgdGhlIGl0ZW0gdHlwZSh1c2luZyBpdGVtSWQpIGRvZXMgbm90IG1hdGNoIG9uZSBvZiB0aGUgZXhpc3RpbmcgZml4ZWRJdGVtVHlwZXNcbiAgICpcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBUcmltIHRoZSBpdGVtSWQgZG93biB0byB0aGUgcmVsZXZhbnQgdHlwZVxuICAgIGNvbnN0IG5ld0lkID0gdGhpcy5pdGVtLml0ZW1JZC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgdHlwZSA9IG5ld0lkW25ld0lkLmxlbmd0aCAtIDFdO1xuICAgIC8vIENoZWNrIGlmIHR5cGUgaXMgbm90IG9uZSBvZiB0aGUgZml4ZWRJdGVtVHlwZXNcbiAgICBpZiAoIXRoaXMuZml4ZWRJdGVtVHlwZXMuc29tZSgoaSkgPT4gaSA9PT0gdHlwZSkpIHtcbiAgICAgIC8vIFJldHJpZXZlIGEgcmVsZXZhbnQgY29tcG9uZW50IHR5cGVcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZm9ybU1hbmFnZXIuZ2V0RHluYW1pY0NvbXBvbmVudCh0eXBlKTtcbiAgICAgIC8vIGlmIGEgdHlwZSBpcyByZXR1cm5lZCwgaW5zdGFudGlhdGUgdGhlIGNvbXBvbmVudCBhbmQgc2V0IHRoZSBpbnB1dCB2YWx1ZXMsIHRoZW4gbWFya1xuICAgICAgLy8gdGhlIHZhbHVlIGl0ZW0gZm9yIGNoYW5nZURldGVjdGlvbiBjaGVja1xuICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jZlJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PEJhc2VGb3JtSXRlbT4oY29tcG9uZW50KTtcblxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuaXRlbUhvc3Q/LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZTtcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBjb21wb25lbnRGYWN0b3J5LmlucHV0cykge1xuICAgICAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBpbnB1dC5wcm9wTmFtZTtcbiAgICAgICAgICAgIC8vIEZvcmNlZnVsbHkgYXNzaWduIGV2ZXJ5IGlucHV0IGZyb20gdGhpcyB0byBpbnN0YW5jZVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGluc3RhbmNlW3Byb3BOYW1lIGFzIGtleW9mIEJhc2VGb3JtSXRlbV0gPSB0aGlzW3Byb3BOYW1lIGFzIGtleW9mIFZhbHVlSXRlbUNvbXBvbmVudF0gYXMgYW55O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIER5bmFtaWMgQ29tcG9uZW50IHdvbid0IGZpcmUgbmdPbkluaXQgdW5sZXNzIHdlIGRldGVjdENoYW5nZXNcbiAgICAgICAgdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy53aGl0ZUxpc3QgfHwgIXRoaXMud2hpdGVMaXN0Lml0ZW1UeXBlcyB8fCAhdGhpcy53aGl0ZUxpc3QuaXRlbVR5cGVzLnNvbWUoKHQpID0+IHQgPT09IHR5cGUpKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgIGBObyBDb21wb25lbnQgRm91bmQgZm9yICR7dHlwZX0gLSBFbnN1cmUgYW55IGR5bmFtaWMgY29tcG9uZW50cyB3ZXJlIHJlZ2lzdGVyZWQgaW4gdGhlIHNlcnZpY2UsIG9yIHVzZSB0aGUgTXRuYVdmSXRlbVdoaXRlTGlzdCB0byBpZ25vcmUgdGhpcyBpdGVtLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY2hhbmdlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsIHByb3ApKSB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlID0gY2hhbmdlc1twcm9wXTtcbiAgICAgICAgICBpZiAoIWNoYW5nZS5maXJzdENoYW5nZSAmJiBpc0tleSh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSwgcHJvcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlW3Byb3BdID0gY2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBkZXN0cm95IHRoZSBjb21wb25lbnRSZWYgdG8gYSBkeW5hbWljIGNvbXBvbmVudCwgaWYgaXQgd2FzIHJlbmRlcmVkLlxuICAgKlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgfVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ210bmEtd2YtbXVsdGlwbGUtY2hvaWNlLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJ211bHRpcGxlLWNob2ljZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW1xuICAgIGAuLi9mb3JtLWl0ZW0tY29udHJvbHMvZm9ybS1jb250cm9sLnNjc3NgLCAvLyBGSVhNRTogdGhlc2Ugc3R5bGVzIGFyZSBnZXR0aW5nIGR1cGxpY2F0ZWQgbGlrZSB0aGlzXG4gICAgJ211bHRpcGxlLWNob2ljZS5jb21wb25lbnQuc2NzcycsXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZNdWx0aXBsZUNob2ljZUNvbXBvbmVudCBleHRlbmRzIEJhc2VTaW5nbGVTZWxlY3Rpb25QYXJlbnQ8TXVsdGlwbGVDaG9pY2VJdGVtPiB7XG4gIGNvbnN0cnVjdG9yKHVpU2VydmljZTogTXRuYVdmVUlTZXJ2aWNlKSB7XG4gICAgc3VwZXIodWlTZXJ2aWNlKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLWJvb2xlYW4taXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnYm9vbGVhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW1xuICAgIGAuLi9mb3JtLWl0ZW0tY29udHJvbHMvZm9ybS1jb250cm9sLnNjc3NgLCAvLyBGSVhNRTogdGhlc2Ugc3R5bGVzIGFyZSBnZXR0aW5nIGR1cGxpY2F0ZWQgbGlrZSB0aGlzXG4gICAgJ2Jvb2xlYW4uY29tcG9uZW50LnNjc3MnLFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTXRuYVdmQm9vbGVhbkNvbXBvbmVudCBleHRlbmRzIEJhc2VQYXJlbnRJdGVtQ29udHJvbDxCb29sZWFuSXRlbSwgRm9ybUNvbnRyb2w+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1aVNlcnZpY2U6IE10bmFXZlVJU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICB0b2dnbGVDaGFuZ2UoY2hhbmdlOiBNYXRTbGlkZVRvZ2dsZUNoYW5nZSkge1xuICAgIHRoaXMudWlTZXJ2aWNlLnRvZ2dsZUZvcm1JdGVtcyh0aGlzLml0ZW0ub3B0aW9uLmVuYWJsZWRJdGVtcywgdGhpcy5pdGVtLm9wdGlvbi5kaXNhYmxlZEl0ZW1zLCBjaGFuZ2UuY2hlY2tlZCwgdGhpcy5pdGVtLmluc3RhbmNlSWQpO1xuICB9XG5cbiAgX3RyYWNrQnlJbnN0YW5jZUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBGb3JtSXRlbSB9KSB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWUuaW5zdGFuY2VJZDtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdG5hLXdmLWNoZWNrYm94LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJ2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgYC4uL2Zvcm0taXRlbS1jb250cm9scy9mb3JtLWNvbnRyb2wuc2Nzc2AsIC8vIEZJWE1FOiB0aGVzZSBzdHlsZXMgYXJlIGdldHRpbmcgZHVwbGljYXRlZCBsaWtlIHRoaXNcbiAgICAnY2hlY2tib3guY29tcG9uZW50LnNjc3MnLFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTXRuYVdmQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBCYXNlUGFyZW50SXRlbUNvbnRyb2w8Q2hlY2tib3hJdGVtLCBGb3JtQXJyYXk+IGltcGxlbWVudHMgQ2FuRGVzdHJveU5vdGlmeSwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IE10bmFXZkRpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdWlTZXJ2aWNlOiBNdG5hV2ZVSVNlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlKGNoYW5nZTogTWF0Q2hlY2tib3hDaGFuZ2UsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLml0ZW0ub3B0aW9uc1tpbmRleF07XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmNvbnRyb2w/LmNvbnRyb2xzW2luZGV4XTtcblxuICAgIC8vIElmIHRoZSB1c2VyIGlzIHRyeWluZyB0byBtYWtlIGEgc2VsZWN0aW9uIHdpdGggc29tZXRoaW5nIHRoYXQgaGFzIGFuIGFja25vd2xlZGdlbWVudCxcbiAgICAvLyBzaG93IHRoZSBhY2tub3dsZWRnZSBkaWFsb2cgZmlyc3QgdG8gZ2V0IHRoZWlyIGNvbnNlbnQuXG4gICAgLy8gTm90ZTogd2UgZG9uJ3QgbmVlZCB0byBzaG93IHRoZSBhY2tub3dsZWRnZW1lbnQgaWYgdGhlIHVzZXIgaXMgdW5jaGVja2luZyB0aGUgYm94LlxuICAgIGlmIChvcHRpb24uYWNrbm93bGVkZ2VtZW50ICYmIGZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGVja2JveCB0byBhbiB1bmNoZWNrZWQgc3RhdGUgdW50aWwgdGhleSBhZ3JlZSB0byB0aGUgYWNrbm93bGVkZ2VtZW50XG4gICAgICBmb3JtQ29udHJvbD8uc2V0VmFsdWUoZmFsc2UpO1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgIC52ZXJpZnlBY2tub3dsZWRnZW1lbnQob3B0aW9uLmFja25vd2xlZGdlbWVudClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGFja25vd2xlZGdlZCkgPT4ge1xuICAgICAgICAgIGlmIChhY2tub3dsZWRnZWQpIHtcbiAgICAgICAgICAgIGZvcm1Db250cm9sPy5zZXRWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLnRvZ2dsZUZvcm1JdGVtcyhvcHRpb24uZW5hYmxlZEl0ZW1zLCBvcHRpb24uZGlzYWJsZWRJdGVtcywgY2hhbmdlLmNoZWNrZWQsIHRoaXMuaXRlbS5pbnN0YW5jZUlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMob3B0aW9uLmVuYWJsZWRJdGVtcywgb3B0aW9uLmRpc2FibGVkSXRlbXMsIGNoYW5nZS5jaGVja2VkLCB0aGlzLml0ZW0uaW5zdGFuY2VJZCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHdoYXQgdGhlIHVzZXIgYWxyZWFkeSBhY2tub3dsZWRnZWQgZm9yIGEgZ2l2ZW4gb3B0aW9uLlxuICAgKiBAcGFyYW0gZXZlbnQgdGhlIGJyb3dzZXIgZXZlbnQgd2hlbiB0aGUgYnV0dG9uIHdhcyBpbnZva2VkXG4gICAqIEBwYXJhbSBhY2tub3dsZWRnZW1lbnRJdGVtIFRoZSBmb3JtIGl0ZW0gdGhhdCByZXByZXNlbnRzIHRoZSBhY2tub3dsZWRnZW1lbnQgdGV4dCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuICAgKiAqL1xuICBzaG93QWNrbm93bGVkZ2VtZW50KGV2ZW50OiBFdmVudCwgYWNrbm93bGVkZ2VtZW50SXRlbTogU2VjdGlvbikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dBY2tub3dsZWRnZW1lbnQoYWNrbm93bGVkZ2VtZW50SXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCBhIGJyb3dzZXIgZXZlbnQgZnJvbSBwcm9wYWdhdGluZ1xuICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50IHRvIHN0b3BcbiAgICovXG4gIHN0b3BFdmVudFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG4iLCI8aDIgKm5nSWY9XCJkYXRhLnRpdGxlIGFzIHRpdGxlXCIgbWF0LWRpYWxvZy10aXRsZT57eyB0aXRsZSB9fTwvaDI+XG48bWF0LWRpYWxvZy1jb250ZW50PlxuICA8bXRuYS13Zi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGEuZm9ybUl0ZW1zXCIgW2l0ZW1dPVwiaXRlbVwiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9tdG5hLXdmLWl0ZW0+XG48L21hdC1kaWFsb2ctY29udGVudD5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgYWxpZ249XCJlbmRcIj5cbiAgPGJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJmYWxzZVwiIG1hdC1idXR0b24+Q0FOQ0VMPC9idXR0b24+XG4gIDxidXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIGNvbG9yPVwiYWNjZW50XCIgbWF0LXJhaXNlZC1idXR0b24+QUNLTk9XTEVER0U8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIiwiPG10bmEtYW5ub3RhdGlvbnMtaW5kaWNhdG9yXG4gICpuZ0lmPVwiaXRlbS5hbm5vdGF0aW9uRW5hYmxlZFwiXG4gIFthbm5vdGF0YWJsZUlkXT1cIml0ZW0uYW5ub3RhdGFibGVJZFwiXG4gIGNvbG9yPVwicHJpbWFyeVwiXG4gIFtjb3VudF09XCJhbm5vdGF0aW9ucyQgfCBhc3luY1wiXG4gIChzdGF0dXMpPVwiaW5kaWNhdG9yU3RhdHVzID0gJGV2ZW50XCJcbj48L210bmEtYW5ub3RhdGlvbnMtaW5kaWNhdG9yPlxuXG48bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJpdGVtLml0ZW1JZCB8IGdldE9iamVjdFR5cGVcIj5cbiAgPG10bmEtd2Ytc2VjdGlvblxuICAgICpuZ1N3aXRjaENhc2U9XCInc2VjdGlvbmltcGwnXCJcbiAgICBbY29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICBbaXRlbV09XCIkYW55KGl0ZW0pXCJcbiAgICBbbXRuYUhpZ2hsaWdodF09XCJpbmRpY2F0b3JTdGF0dXMgPT09ICdBQ1RJVkUnXCJcbiAgICBbcGFyZW50SWRzXT1cInBhcmVudElkcy5jb25jYXQoaXRlbS5pbnN0YW5jZUlkKVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAoZm9jdXNlZCk9XCJmb2N1c2VkU2VjdGlvbi5lbWl0KCRldmVudClcIlxuICA+PC9tdG5hLXdmLXNlY3Rpb24+XG5cbiAgPG10bmEtd2YtZ3JvdXBcbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Zvcm1pdGVtZ3JvdXBpbXBsJ1wiXG4gICAgW2luZGljYXRvclN0YXR1c109XCJpbmRpY2F0b3JTdGF0dXNcIlxuICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxuICAgIFtjb250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgIFttdG5hSGlnaGxpZ2h0XT1cImluZGljYXRvclN0YXR1cyA9PT0gJ0FDVElWRScgJiYgKCEhaXRlbS5kZXNjcmlwdGl2ZVRleHQgfHwgISFpdGVtLnF1ZXN0aW9uVGV4dClcIlxuICAgIFtwYXJlbnRJZHNdPVwicGFyZW50SWRzLmNvbmNhdChpdGVtLmluc3RhbmNlSWQpXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICA+PC9tdG5hLXdmLWdyb3VwPlxuXG4gIDxtdG5hLXdmLXJlcGVhdGFibGUtaXRlbS1jb250YWluZXJcbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ3JlcGVhdGFibGVpdGVtJ1wiXG4gICAgW2luZGljYXRvclN0YXR1c109XCJpbmRpY2F0b3JTdGF0dXNcIlxuICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxuICAgIFtjb250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgIFttdG5hSGlnaGxpZ2h0XT1cImluZGljYXRvclN0YXR1cyA9PT0gJ0FDVElWRScgJiYgKCEhaXRlbS5kZXNjcmlwdGl2ZVRleHQgfHwgISFpdGVtLnF1ZXN0aW9uVGV4dClcIlxuICAgIFtwYXJlbnRJZHNdPVwicGFyZW50SWRzLmNvbmNhdChpdGVtLmluc3RhbmNlSWQpXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICA+PC9tdG5hLXdmLXJlcGVhdGFibGUtaXRlbS1jb250YWluZXI+XG5cbiAgPG10bmEtd2YtdmFsdWUtaXRlbVxuICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gICAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgW210bmFIaWdobGlnaHRdPVwiaW5kaWNhdG9yU3RhdHVzID09PSAnQUNUSVZFJyAmJiAoISFpdGVtLmRlc2NyaXB0aXZlVGV4dCB8fCAhIWl0ZW0ucXVlc3Rpb25UZXh0KVwiXG4gICAgW3BhcmVudElkc109XCJwYXJlbnRJZHMuY29uY2F0KGl0ZW0uaW5zdGFuY2VJZClcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gID48L210bmEtd2YtdmFsdWUtaXRlbT5cbjwvbmctY29udGFpbmVyPlxuIiwiPGgyICpuZ0lmPVwiZGF0YS50aXRsZSBhcyB0aXRsZVwiIG1hdC1kaWFsb2ctdGl0bGU+e3sgdGl0bGUgfX08L2gyPlxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgPG10bmEtd2YtaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhLmZvcm1JdGVtc1wiIFtpdGVtXT1cIml0ZW1cIiBbcmVhZG9ubHldPVwidHJ1ZVwiPjwvbXRuYS13Zi1pdGVtPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG48bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPkNsb3NlPC9idXR0b24+XG48L21hdC1kaWFsb2ctYWN0aW9ucz5cbiIsIjxtdG5hLXdmLXN0ZXAtY2FyZCBbc3RlcF09XCJzdGVwXCIgW3N1YnRpdGxlXT1cIml0ZW0uZGVzY3JpcHRpdmVUZXh0XCIgKGZvY3VzZWQpPVwiZm9jdXNlZC5lbWl0KCRldmVudClcIj5cbiAgPGRpdiBjYXJkQ29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJJdGVtIG9mIGl0ZW0uaXRlbXM7IHRyYWNrQnk6IF90cmFja0J5SW5zdGFuY2VJZFwiPlxuICAgICAgPG1hdC1kaXZpZGVyXG4gICAgICAgICpuZ0lmPVwiKHN1Ykl0ZW0uaXRlbUlkIHwgZ2V0T2JqZWN0VHlwZSkgPT09ICdmb3JtaXRlbWdyb3VwaW1wbCcgJiYgaXRlbS5pdGVtcy5pbmRleE9mKHN1Ykl0ZW0pICE9PSAwXCJcbiAgICAgICAgY2xhc3M9XCJzZWN0aW9uLWl0ZW0tZGl2aWRlclwiXG4gICAgICAgIFtpbnNldF09XCJ0cnVlXCJcbiAgICAgID48L21hdC1kaXZpZGVyPlxuXG4gICAgICA8bXRuYS13Zi1pdGVtXG4gICAgICAgIFtpdGVtXT1cInN1Ykl0ZW1cIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbcGFyZW50SWRzXT1cInBhcmVudElkc1wiXG4gICAgICAgIFtjb250cm9sXT1cIiEhY29udHJvbCAmJiAhIWNvbnRyb2wuY29udHJvbHMgPyBjb250cm9sLmNvbnRyb2xzW3N1Ykl0ZW0uaW5zdGFuY2VJZF0gOiB1bmRlZmluZWRcIlxuICAgICAgICAoZm9jdXNlZFNlY3Rpb24pPVwiZm9jdXNlZC5lbWl0KCRldmVudClcIlxuICAgICAgPjwvbXRuYS13Zi1pdGVtPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbXRuYS13Zi1zdGVwLWNhcmQ+XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbSAmJiBjb250cm9sXCI+XG4gIDxtdG5hLXdmLWl0ZW0taGVhZGVyXG4gICAgKm5nSWY9XCIhIWl0ZW0ucXVlc3Rpb25UZXh0IHx8ICEhaXRlbS5kZXNjcmlwdGl2ZVRleHRcIlxuICAgIFtkZXNjcmlwdGl2ZVRleHRdPVwiaXRlbS5kZXNjcmlwdGl2ZVRleHRcIlxuICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkXCJcbiAgICBbcXVlc3Rpb25UZXh0XT1cIml0ZW0ucXVlc3Rpb25UZXh0XCJcbiAgICBbcmVxdWlyZWRdPVwiaXRlbS5yZXF1aXJlZFwiXG4gID48L210bmEtd2YtaXRlbS1oZWFkZXI+XG4gIDxuZy10ZW1wbGF0ZSAjZnVsbExheW91dD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIml0ZW0tZ3JvdXAtY29udGFpbmVyXCJcbiAgICAgIFttdG5hSGlnaGxpZ2h0XT1cImluZGljYXRvclN0YXR1cyA9PT0gJ0FDVElWRScgJiYgIWl0ZW0ucXVlc3Rpb25UZXh0ICYmICFpdGVtLmRlc2NyaXB0aXZlVGV4dFwiXG4gICAgICBbZm9ybUdyb3VwXT1cImNvbnRyb2xcIlxuICAgICAgW25nQ2xhc3NdPVwiaXRlbS5sYXlvdXRcIlxuICAgID5cbiAgICAgIDxtdG5hLXdmLWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IHN1Ykl0ZW0gb2YgaXRlbS5pdGVtczsgdHJhY2tCeTogX3RyYWNrQnlJbnN0YW5jZUlkXCJcbiAgICAgICAgW2NsYXNzLnJvdy1pdGVtXT1cIml0ZW0ubGF5b3V0ID09PSAnUk9XJyAmJiAhZnVsbFdpZHRoW3N1Ykl0ZW0uaXRlbUlkXVwiXG4gICAgICAgIFtuZ0NsYXNzLmx0LW1kXT1cIid3aWR0aC0xMDAnXCJcbiAgICAgICAgW2l0ZW1dPVwic3ViSXRlbVwiXG4gICAgICAgIFtjb250cm9sXT1cImNvbnRyb2wuY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXVwiXG4gICAgICAgIFtwYXJlbnRJZHNdPVwicGFyZW50SWRzXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgID48L210bmEtd2YtaXRlbT5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIFdoZW4gcmVhZG9ubHksICYmIGFsbCBjaGlsZCBpdGVtcyBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgbWF0LWxpc3QtLT5cbiAgPG1hdC1saXN0ICpuZ0lmPVwicmVhZG9ubHkgJiYgaW5MaXN0OyBlbHNlIGZ1bGxMYXlvdXRcIiBbbmdDbGFzc109XCJpdGVtLmxheW91dFwiPlxuICAgIDxtdG5hLXdmLXZhbHVlLWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBzdWJJdGVtIG9mIGl0ZW0uaXRlbXMgfCBtdG5hV2ZJdGVtc1dpdGhWYWx1ZTsgdHJhY2tCeTogX3RyYWNrQnlJbnN0YW5jZUlkXCJcbiAgICAgIFtjbGFzcy5yb3ctaXRlbV09XCJpdGVtLmxheW91dCA9PT0gJ1JPVydcIlxuICAgICAgW25nQ2xhc3MubHQtbWRdPVwiJ3dpZHRoLTEwMCdcIlxuICAgICAgW2l0ZW1dPVwic3ViSXRlbVwiXG4gICAgICBbaW5MaXN0XT1cInRydWVcIlxuICAgICAgW3BhcmVudElkc109XCJwYXJlbnRJZHNcIlxuICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgID48L210bmEtd2YtdmFsdWUtaXRlbT5cbiAgPC9tYXQtbGlzdD5cbjwvbmctY29udGFpbmVyPlxuIiwiPG10bmEtd2YtaXRlbS1oZWFkZXJcbiAgKm5nSWY9XCIhIWl0ZW0ucXVlc3Rpb25UZXh0IHx8ICEhaXRlbS5kZXNjcmlwdGl2ZVRleHRcIlxuICBbZGVzY3JpcHRpdmVUZXh0XT1cIml0ZW0uZGVzY3JpcHRpdmVUZXh0XCJcbiAgW2Rpc2FibGVkXT1cImNvbnRyb2w/LmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgW3F1ZXN0aW9uVGV4dF09XCJpdGVtLnF1ZXN0aW9uVGV4dFwiXG4gIFtyZXF1aXJlZF09XCJpdGVtLnJlcXVpcmVkXCJcbj48L210bmEtd2YtaXRlbS1oZWFkZXI+XG48c2VjdGlvbiBbbXRuYUhpZ2hsaWdodF09XCJpbmRpY2F0b3JTdGF0dXMgPT09ICdBQ1RJVkUnICYmICFpdGVtLnF1ZXN0aW9uVGV4dCAmJiAhaXRlbS5kZXNjcmlwdGl2ZVRleHRcIj5cbiAgPG10bmEtd2YtcmVwZWF0YWJsZS1pdGVtXG4gICAgQHJlcGVhdEl0ZW1FeHBhbmRDb2xsYXBzZVxuICAgICpuZ0Zvcj1cImxldCBzdWJpdGVtIG9mIGl0ZW0uaXRlbXM7IGxldCBmaXJzdCA9IGZpcnN0OyB0cmFja0J5OiAnaW5zdGFuY2VJZCcgfCBtdG5hVHJhY2tCeVByb3BlcnR5XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiIXJlYWRvbmx5ICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gaXRlbS5taW5PY2N1cnJlbmNlc1wiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNsYXNzPVwiaXRlbS1yZW1vdmUtYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAoY2xpY2spPVwicmVtb3ZlSXRlbShzdWJpdGVtKVwiXG4gICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIEl0ZW1cIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5yZW1vdmVfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bXRuYS13Zi1pdGVtXG4gICAgICBbaXRlbV09XCJzdWJpdGVtXCJcbiAgICAgIFtjb250cm9sXT1cIiEhY29udHJvbCAmJiAhIWNvbnRyb2wuY29udHJvbHMgPyBjb250cm9sLmNvbnRyb2xzW3N1Yml0ZW0uaW5zdGFuY2VJZF0gOiB1bmRlZmluZWRcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgIFtwYXJlbnRJZHNdPVwicGFyZW50SWRzXCJcbiAgICA+PC9tdG5hLXdmLWl0ZW0+XG4gIDwvbXRuYS13Zi1yZXBlYXRhYmxlLWl0ZW0+XG48L3NlY3Rpb24+XG48YnV0dG9uICpuZ0lmPVwiIXJlYWRvbmx5XCIgbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cImFkZEl0ZW0oKVwiIGNsYXNzPVwibmV3LWl0ZW0tYnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gIHt7IGl0ZW0uYWRkaXRpb25hbFRleHQgfHwgJ0FERCcgfCB1cHBlcmNhc2UgfX1cbjwvYnV0dG9uPlxuIiwiPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJpdGVtLnRhYmxlUm93c1wiIFt0cmFja0J5XT1cIl90cmFja0J5VGFibGVSb3dcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGl0ZW0uaGVhZGVyczsgbGV0IGluZGV4ID0gaW5kZXhcIiBbbWF0Q29sdW1uRGVmXT1cImhlYWRlclwiPlxuICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+e3sgaGVhZGVyIH19PC90aD5cblxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dJdGVtXCI+XG4gICAgICA8bXRuYS13Zi1pdGVtXG4gICAgICAgICpuZ0lmPVwiISFyb3dJdGVtLml0ZW1zW2luZGV4XVwiXG4gICAgICAgIFtjb250cm9sXT1cIiEhY29udHJvbCAmJiAhIWNvbnRyb2wuY29udHJvbHMgPyBjb250cm9sLmNvbnRyb2xzW3Jvd0l0ZW0uaXRlbXNbaW5kZXhdLmluc3RhbmNlSWRdIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW2l0ZW1dPVwicm93SXRlbS5pdGVtc1tpbmRleF1cIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbcGFyZW50SWRzXT1cInBhcmVudElkc1wiXG4gICAgICA+PC9tdG5hLXdmLWl0ZW0+XG4gICAgPC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJpdGVtLmhlYWRlcnNcIj48L3RyPlxuICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogaXRlbS5oZWFkZXJzXCI+PC90cj5cbjwvdGFibGU+XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJpdGVtLml0ZW1JZCB8IGdldE9iamVjdFR5cGVcIj5cbiAgPGgzICpuZ1N3aXRjaENhc2U9XCIndGl0bGVpdGVtJ1wiIGNsYXNzPVwibXRuYS13Zi10aXRsZS1pdGVtXCIgW210bmFIaWdobGlnaHRdPVwiaW5kaWNhdG9yU3RhdHVzID09PSAnQUNUSVZFJ1wiPnt7IGl0ZW0udmFsdWUgfX08L2gzPlxuICA8cFxuICAgICpuZ1N3aXRjaENhc2U9XCIndGV4dGl0ZW0nXCJcbiAgICBbaW5uZXJIVE1MXT1cIiRhbnkoaXRlbS52YWx1ZSkgfCBtdG5hV2ZTYW5pdGl6ZUh0bWxcIlxuICAgIGNsYXNzPVwibXRuYS13Zi10ZXh0LWl0ZW1cIlxuICAgIFttdG5hSGlnaGxpZ2h0XT1cImluZGljYXRvclN0YXR1cyA9PT0gJ0FDVElWRSdcIlxuICA+PC9wPlxuXG4gIDxtdG5hLXdmLWJvb2xlYW4taXRlbVxuICAgICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbml0ZW0nXCJcbiAgICBbaGVhZGVyXT1cIml0ZW1IZWFkZXJcIlxuICAgIFtpbmRpY2F0b3JTdGF0dXNdPVwiaW5kaWNhdG9yU3RhdHVzXCJcbiAgICBbaXRlbV09XCIkYW55KGl0ZW0pXCJcbiAgICBbY29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICBbbXRuYUhpZ2hsaWdodF09XCJpbmRpY2F0b3JTdGF0dXMgPT09ICdBQ1RJVkUnXCJcbiAgICBbcGFyZW50SWRzXT1cInBhcmVudElkc1wiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgPjwvbXRuYS13Zi1ib29sZWFuLWl0ZW0+XG5cbiAgPG10bmEtd2YtY2hlY2tib3gtaXRlbVxuICAgICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3hpdGVtJ1wiXG4gICAgW2hlYWRlcl09XCJpdGVtSGVhZGVyXCJcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gICAgW2NvbnRyb2xdPVwiJGFueShjb250cm9sKVwiXG4gICAgW3BhcmVudElkc109XCJwYXJlbnRJZHNcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gID48L210bmEtd2YtY2hlY2tib3gtaXRlbT5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZWl0ZW0nXCI+XG4gICAgPG10bmEtd2YtZGF0ZS1pdGVtXG4gICAgICAqbmdJZj1cIml0ZW0gfCBjb2VyY2VEYXRlSXRlbSBhcyBkYXRlSXRlbVwiXG4gICAgICBbaGVhZGVyXT1cIml0ZW1IZWFkZXJcIlxuICAgICAgW2luZGljYXRvclN0YXR1c109XCJpbmRpY2F0b3JTdGF0dXNcIlxuICAgICAgW2Zvcm1hdF09XCJkYXRlSXRlbS5mb3JtYXRcIlxuICAgICAgW2l0ZW1dPVwiZGF0ZUl0ZW1cIlxuICAgICAgW2NvbnRyb2xdPVwiJGFueShjb250cm9sKVwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgID48L210bmEtd2YtZGF0ZS1pdGVtPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bXRuYS13Zi1kYXRlLXJhbmdlXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidvZmZzZXRkYXRlcmFuZ2VpdGVtJ1wiXG4gICAgW2hlYWRlcl09XCJpdGVtSGVhZGVyXCJcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gICAgW2NvbnRyb2xdPVwiJGFueShjb250cm9sKVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgPjwvbXRuYS13Zi1kYXRlLXJhbmdlPlxuXG4gIDxtdG5hLXdmLXllYXItcXVhcnRlci1yYW5nZS1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIid5ZWFycXVhcnRlcnJhbmdlaXRlbSdcIlxuICAgIFtoZWFkZXJdPVwiaXRlbUhlYWRlclwiXG4gICAgW2luZGljYXRvclN0YXR1c109XCJpbmRpY2F0b3JTdGF0dXNcIlxuICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxuICAgIFtjb250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gID48L210bmEtd2YteWVhci1xdWFydGVyLXJhbmdlLWl0ZW0+XG5cbiAgPG10bmEtd2YtZHJvcGRvd24taXRlbVxuICAgICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd25pdGVtJ1wiXG4gICAgW2hlYWRlcl09XCJpdGVtSGVhZGVyXCJcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gICAgW2luTGlzdF09XCJpbkxpc3RcIlxuICAgIFtjb250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gID48L210bmEtd2YtZHJvcGRvd24taXRlbT5cblxuICA8bXRuYS13Zi1maWxlLXVwbG9hZC1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidmaWxldXBsb2FkaXRlbSdcIlxuICAgIFtoZWFkZXJdPVwiaXRlbUhlYWRlclwiXG4gICAgW2luZGljYXRvclN0YXR1c109XCJpbmRpY2F0b3JTdGF0dXNcIlxuICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgKGZpbGUpPVwic2V0VmFsdWUoJGV2ZW50KVwiXG4gID48L210bmEtd2YtZmlsZS11cGxvYWQtaXRlbT5cblxuICA8bXRuYS13Zi11bm9yZGVyZWQtbGlzdC1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIididWxsZXRlZGxpc3RpdGVtJ1wiXG4gICAgW2hlYWRlcl09XCJpdGVtSGVhZGVyXCJcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gID48L210bmEtd2YtdW5vcmRlcmVkLWxpc3QtaXRlbT5cblxuICA8bXRuYS13Zi1vcmRlcmVkLWxpc3QtaXRlbVxuICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyZWRsaXN0aXRlbSdcIlxuICAgIFtoZWFkZXJdPVwiaXRlbUhlYWRlclwiXG4gICAgW2luZGljYXRvclN0YXR1c109XCJpbmRpY2F0b3JTdGF0dXNcIlxuICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxuICA+PC9tdG5hLXdmLW9yZGVyZWQtbGlzdC1pdGVtPlxuXG4gIDxtdG5hLXdmLW11bHRpcGxlLWNob2ljZS1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aXBsZWNob2ljZWl0ZW0nXCJcbiAgICBbaGVhZGVyXT1cIml0ZW1IZWFkZXJcIlxuICAgIFtpbmRpY2F0b3JTdGF0dXNdPVwiaW5kaWNhdG9yU3RhdHVzXCJcbiAgICBbaXRlbV09XCIkYW55KGl0ZW0pXCJcbiAgICBbY29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICBbcGFyZW50SWRzXT1cInBhcmVudElkc1wiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgPjwvbXRuYS13Zi1tdWx0aXBsZS1jaG9pY2UtaXRlbT5cblxuICA8bXRuYS13Zi1pbnB1dC1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidzaG9ydGFuc3dlcml0ZW0nXCJcbiAgICBtdG5hV2ZTaG9ydEFuc3dlckl0ZW1cbiAgICBbY29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICBbaGVhZGVyXT1cIml0ZW1IZWFkZXJcIlxuICAgIFtpbmRpY2F0b3JTdGF0dXNdPVwiaW5kaWNhdG9yU3RhdHVzXCJcbiAgICBbaW5MaXN0XT1cImluTGlzdFwiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgPjwvbXRuYS13Zi1pbnB1dC1pdGVtPlxuXG4gIDxtdG5hLXdmLWlucHV0LWl0ZW1cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ3BhcmFncmFwaGFuc3dlcml0ZW0nXCJcbiAgICBtdG5hV2ZQYXJhZ3JhcGhJdGVtXG4gICAgW2NvbnRyb2xdPVwiJGFueShjb250cm9sKVwiXG4gICAgW2hlYWRlcl09XCJpdGVtSGVhZGVyXCJcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2luTGlzdF09XCJpbkxpc3RcIlxuICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gID48L210bmEtd2YtaW5wdXQtaXRlbT5cblxuICA8bXRuYS13Zi10YWJsZS1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZWl0ZW0nXCJcbiAgICBbY29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbcGFyZW50SWRzXT1cInBhcmVudElkc1wiXG4gID48L210bmEtd2YtdGFibGUtaXRlbT5cblxuICA8bXRuYS13Zi1pbnB1dC1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidkZWNpbWFsYW5zd2VyaXRlbSdcIlxuICAgIG10bmFXZkRlY2ltYWxJdGVtXG4gICAgW2NvbnRyb2xdPVwiJGFueShjb250cm9sKVwiXG4gICAgW2hlYWRlcl09XCJpdGVtSGVhZGVyXCJcbiAgICBbaW5kaWNhdG9yU3RhdHVzXT1cImluZGljYXRvclN0YXR1c1wiXG4gICAgW2luTGlzdF09XCJpbkxpc3RcIlxuICAgIFtpdGVtXT1cIiRhbnkoaXRlbSlcIlxuICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gID48L210bmEtd2YtaW5wdXQtaXRlbT5cblxuICA8bXRuYS13Zi1pbnB1dC1pdGVtXG4gICAgKm5nU3dpdGNoQ2FzZT1cIid3aG9sZW51bWJlcmFuc3dlcml0ZW0nXCJcbiAgICBtdG5hV2ZXaG9sZU51bWJlckl0ZW1cbiAgICBbY29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICBbaGVhZGVyXT1cIml0ZW1IZWFkZXJcIlxuICAgIFtpbmRpY2F0b3JTdGF0dXNdPVwiaW5kaWNhdG9yU3RhdHVzXCJcbiAgICBbaW5MaXN0XT1cImluTGlzdFwiXG4gICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgPjwvbXRuYS13Zi1pbnB1dC1pdGVtPlxuXG4gIDwhLS0gRFlOQU1JQyBDT01QT05FTlQgQ09OVEFJTkVSIC0tPlxuICA8bmctdGVtcGxhdGUgKm5nU3dpdGNoRGVmYXVsdCBmb3JtSXRlbUhvc3Q+PC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1IZWFkZXIgbGV0LWhpZGVSZXF1aXJlZE1hcmtlcj5cbiAgPG10bmEtd2YtaXRlbS1oZWFkZXJcbiAgICAqbmdJZj1cIiEhaXRlbS5xdWVzdGlvblRleHQgfHwgISFpdGVtLmRlc2NyaXB0aXZlVGV4dFwiXG4gICAgW2Rlc2NyaXB0aXZlVGV4dF09XCJpdGVtLmRlc2NyaXB0aXZlVGV4dFwiXG4gICAgW2Rpc2FibGVkXT1cImNvbnRyb2w/LmRpc2FibGVkXCJcbiAgICBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImhpZGVSZXF1aXJlZE1hcmtlclwiXG4gICAgW2ludmFsaWRdPVwiY29udHJvbD8uaW52YWxpZCAmJiAoY29udHJvbD8uZGlydHkgfHwgY29udHJvbD8udG91Y2hlZClcIlxuICAgIFtxdWVzdGlvblRleHRdPVwiaXRlbS5xdWVzdGlvblRleHRcIlxuICAgIFtyZXF1aXJlZF09XCJpdGVtLnJlcXVpcmVkXCJcbiAgPjwvbXRuYS13Zi1pdGVtLWhlYWRlcj5cbjwvbmctdGVtcGxhdGU+XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbFwiPlxuICA8ZGl2IGNsYXNzPVwibXRuYS13Zi1lcnJvci1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkICYmIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZClcIj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IGVycm9yIG9mIGNvbnRyb2wuZXJyb3JzIHwga2V5dmFsdWVcIj5cbiAgICAgICAge3sgZXJyb3IgfCBtdG5hV2ZHZXRDb250cm9sRXJyb3IgOiBpdGVtIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3M9XCJjb250cm9sLWl0ZW0tY29udGVudFwiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgKGNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdCBvZiBpdGVtLm9wdGlvbnM7IHRyYWNrQnk6IF90cmFja0J5T3B0aW9uSWRcIj5cbiAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFtkaXNhYmxlUmlwcGxlXT1cInJlYWRvbmx5XCIgW3ZhbHVlXT1cIm9wdC5vcHRpb24uaWRcIj57eyBvcHQub3B0aW9uLm5hbWUgfX08L21hdC1yYWRpby1idXR0b24+XG4gICAgICA8bXRuYS13Zi1pdGVtXG4gICAgICAgICpuZ0lmPVwiaXRlbS5vcHRpb25JdGVtTWFwW29wdC5vcHRpb24uaWRdIGFzIHN1Ykl0ZW1cIlxuICAgICAgICBbaXRlbV09XCJzdWJJdGVtXCJcbiAgICAgICAgW2NvbnRyb2xdPVwiISFjb250cm9sV3JhcHBlciAmJiAhIWNvbnRyb2xXcmFwcGVyLmNvbnRyb2xzID8gY29udHJvbFdyYXBwZXIuY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA6IHVuZGVmaW5lZFwiXG4gICAgICAgIFtwYXJlbnRJZHNdPVwicGFyZW50SWRzLmNvbmNhdChvcHQub3B0aW9uLmlkKVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICA+PC9tdG5hLXdmLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXJhZGlvLWdyb3VwPlxuPC9uZy1jb250YWluZXI+XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG48bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cImNvbnRyb2xcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIChjaGFuZ2UpPVwidG9nZ2xlQ2hhbmdlKCRldmVudClcIj57eyBpdGVtLm9wdGlvbi5vcHRpb24ubmFtZSB9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhIWl0ZW0ub3B0aW9uSXRlbU1hcFwiPlxuICA8bXRuYS13Zi1pdGVtXG4gICAgKm5nRm9yPVwibGV0IGYgb2YgaXRlbS5vcHRpb25JdGVtTWFwIHwga2V5dmFsdWU7IHRyYWNrQnk6IF90cmFja0J5SW5zdGFuY2VJZFwiXG4gICAgW2l0ZW1dPVwiZi52YWx1ZVwiXG4gICAgW2NvbnRyb2xdPVwiISFjb250cm9sV3JhcHBlciAmJiBjb250cm9sV3JhcHBlci5jb250cm9scyA/IGNvbnRyb2xXcmFwcGVyLmNvbnRyb2xzW2YudmFsdWUuaW5zdGFuY2VJZF0gOiB1bmRlZmluZWRcIlxuICAgIFtwYXJlbnRJZHNdPVwicGFyZW50SWRzXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICA+PC9tdG5hLXdmLWl0ZW0+XG4gIDxuZy1jb250YWluZXI+IDwvbmctY29udGFpbmVyXG4+PC9uZy1jb250YWluZXI+XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG48ZGl2ICpuZ0lmPVwiaGFzSXRlbUhlYWRlclwiIGNsYXNzPVwibXRuYS13Zi1lcnJvci1jb250YWluZXJcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2w/LmludmFsaWQgJiYgKGNvbnRyb2w/LmRpcnR5IHx8IGNvbnRyb2w/LnRvdWNoZWQpXCI+XG4gICAgPG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgY29udHJvbD8uZXJyb3JzIHwga2V5dmFsdWVcIj5cbiAgICAgIHt7IGVycm9yIHwgbXRuYVdmR2V0Q29udHJvbEVycm9yIDogaXRlbSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPGZpZWxkc2V0XG4gIGNsYXNzPVwiY29udHJvbC1pdGVtLWNvbnRlbnRcIlxuICBbY2xhc3Muc2luZ2xlLW9wdGlvbl09XCJpdGVtLm9wdGlvbnM/Lmxlbmd0aCA9PT0gMVwiXG4gIFttdG5hSGlnaGxpZ2h0XT1cImluZGljYXRvclN0YXR1cyA9PT0gJ0FDVElWRScgJiYgIWhhc0l0ZW1IZWFkZXJcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHQgb2YgaXRlbS5vcHRpb25zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiBfdHJhY2tCeU9wdGlvbklkXCI+XG4gICAgPG1hdC1jaGVja2JveFxuICAgICAgKm5nSWY9XCIhIWNvbnRyb2wgJiYgISFjb250cm9sLmNvbnRyb2xzICYmICEhY29udHJvbC5jb250cm9sc1tpXVwiXG4gICAgICBbZGlzYWJsZVJpcHBsZV09XCJyZWFkb25seVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiJGFueShjb250cm9sLmNvbnRyb2xzW2ldKVwiXG4gICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50LCBpKVwiXG4gICAgICA+e3sgb3B0Lm9wdGlvbi5uYW1lIH19XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwib3B0LmFja25vd2xlZGdlbWVudCAmJiBjb250cm9sLmNvbnRyb2xzW2ldLnZhbHVlXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkFja25vd2xlZGdlZC4gQ2xpY2sgdG8gdmlldyB0aGUgYWdyZWVtZW50LlwiXG4gICAgICAgIGNsYXNzPVwiYWNrbm93bGVkZ2UtdmVyaWZpY2F0aW9uLWJ1dHRvblwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBtYXRUb29sdGlwPVwiQWNrbm93bGVkZ2VkLiBDbGljayB0byB2aWV3IHRoZSBhZ3JlZW1lbnQuXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjgwMFwiXG4gICAgICAgIChjbGljayk9XCJzaG93QWNrbm93bGVkZ2VtZW50KCRldmVudCwgb3B0LmFja25vd2xlZGdlbWVudClcIlxuICAgICAgICAobW91c2Vkb3duKT1cInN0b3BFdmVudFByb3BhZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAodG91Y2hzdGFydCk9XCJzdG9wRXZlbnRQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPnZlcmlmaWVkPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LWNoZWNrYm94PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLm9wdGlvbkl0ZW1NYXBbb3B0Lm9wdGlvbi5pZF1cIj5cbiAgICAgIDxtdG5hLXdmLWl0ZW1cbiAgICAgICAgKm5nSWY9XCJpdGVtLm9wdGlvbkl0ZW1NYXBbb3B0Lm9wdGlvbi5pZF0gYXMgc3ViSXRlbVwiXG4gICAgICAgIFtpdGVtXT1cInN1Ykl0ZW1cIlxuICAgICAgICBbY29udHJvbF09XCIhIWNvbnRyb2xXcmFwcGVyICYmIGNvbnRyb2xXcmFwcGVyLmNvbnRyb2xzID8gY29udHJvbFdyYXBwZXIuY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA6IHVuZGVmaW5lZFwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFtwYXJlbnRJZHNdPVwicGFyZW50SWRzLmNvbmNhdChvcHQub3B0aW9uLmlkKVwiXG4gICAgICA+PC9tdG5hLXdmLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9maWVsZHNldD5cbiJdfQ==
|