@ptsecurity/mosaic 13.6.1 → 13.7.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/LICENSE +21 -21
- package/README.md +6 -6
- package/_theming.scss +7238 -7141
- package/_visual.scss +2724 -2695
- package/autocomplete/autocomplete-origin.directive.d.ts +12 -12
- package/autocomplete/autocomplete-trigger.directive.d.ts +167 -167
- package/autocomplete/autocomplete.component.d.ts +73 -73
- package/autocomplete/autocomplete.module.d.ts +12 -12
- package/autocomplete/index.d.ts +1 -1
- package/autocomplete/ptsecurity-mosaic-autocomplete.d.ts +5 -5
- package/autocomplete/public-api.d.ts +4 -4
- package/button/button.component.d.ts +40 -40
- package/button/button.module.d.ts +10 -10
- package/button/index.d.ts +1 -1
- package/button/ptsecurity-mosaic-button.d.ts +5 -5
- package/button/public-api.d.ts +2 -2
- package/button-toggle/button-toggle.component.d.ts +141 -141
- package/button-toggle/button-toggle.module.d.ts +9 -9
- package/button-toggle/index.d.ts +1 -1
- package/button-toggle/ptsecurity-mosaic-button-toggle.d.ts +5 -5
- package/button-toggle/public-api.d.ts +2 -2
- package/card/card.component.d.ts +26 -26
- package/card/card.module.d.ts +10 -10
- package/card/index.d.ts +1 -1
- package/card/ptsecurity-mosaic-card.d.ts +5 -5
- package/card/public-api.d.ts +2 -2
- package/checkbox/README.md +1 -1
- package/checkbox/checkbox-config.d.ts +13 -13
- package/checkbox/checkbox-module.d.ts +9 -9
- package/checkbox/checkbox-required-validator.d.ts +13 -13
- package/checkbox/checkbox.d.ts +140 -140
- package/checkbox/index.d.ts +1 -1
- package/checkbox/ptsecurity-mosaic-checkbox.d.ts +5 -5
- package/checkbox/public-api.d.ts +4 -4
- package/core/animation/animation.d.ts +6 -6
- package/core/animation/fade-animations.d.ts +2 -2
- package/core/animation/index.d.ts +3 -3
- package/core/animation/select-animations.d.ts +12 -12
- package/core/common-behaviors/color.d.ts +19 -19
- package/core/common-behaviors/common-module.d.ts +25 -25
- package/core/common-behaviors/constructor.d.ts +9 -9
- package/core/common-behaviors/disabled.d.ts +8 -8
- package/core/common-behaviors/error-state.d.ts +25 -25
- package/core/common-behaviors/index.d.ts +5 -5
- package/core/common-behaviors/tabindex.d.ts +8 -8
- package/core/error/error-options.d.ts +14 -14
- package/core/formatters/date/formatter.d.ts +203 -203
- package/core/formatters/date/templates/en-US.d.ts +74 -74
- package/core/formatters/date/templates/ru-RU.d.ts +74 -74
- package/core/formatters/index.d.ts +9 -9
- package/core/formatters/number/formatter.d.ts +27 -27
- package/core/forms/forms-module.d.ts +7 -7
- package/core/forms/forms.directive.d.ts +22 -22
- package/core/forms/index.d.ts +2 -2
- package/core/highlight/highlight.pipe.d.ts +7 -7
- package/core/highlight/index.d.ts +9 -9
- package/core/index.d.ts +1 -1
- package/core/label/label-options.d.ts +13 -13
- package/core/line/line.d.ts +28 -28
- package/core/option/action.d.ts +42 -42
- package/core/option/index.d.ts +4 -4
- package/core/option/optgroup.d.ts +16 -16
- package/core/option/option-module.d.ts +11 -11
- package/core/option/option.d.ts +115 -115
- package/core/overlay/overlay-position-map.d.ts +34 -34
- package/core/pop-up/constants.d.ts +29 -29
- package/core/pop-up/index.d.ts +3 -3
- package/core/pop-up/pop-up-trigger.d.ts +70 -70
- package/core/pop-up/pop-up.d.ts +36 -36
- package/core/ptsecurity-mosaic-core.d.ts +5 -5
- package/core/public-api.d.ts +17 -17
- package/core/select/constants.d.ts +23 -23
- package/core/select/errors.d.ts +19 -19
- package/core/select/events.d.ts +1 -1
- package/core/select/index.d.ts +3 -3
- package/core/selection/constants.d.ts +4 -4
- package/core/selection/index.d.ts +3 -3
- package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +30 -30
- package/core/selection/pseudo-checkbox/pseudo-checkbox.module.d.ts +8 -8
- package/core/services/measure-scrollbar.service.d.ts +11 -11
- package/core/utils/index.d.ts +1 -1
- package/core/utils/public-api.d.ts +1 -1
- package/core/utils/utils.d.ts +2 -2
- package/core/validation/index.d.ts +1 -1
- package/core/validation/validation.d.ts +18 -18
- package/core/version.d.ts +2 -2
- package/datepicker/calendar-body.component.d.ts +63 -63
- package/datepicker/calendar.component.d.ts +151 -151
- package/datepicker/datepicker-animations.d.ts +9 -9
- package/datepicker/datepicker-errors.d.ts +2 -2
- package/datepicker/datepicker-input.directive.d.ts +178 -178
- package/datepicker/datepicker-intl.d.ts +32 -32
- package/datepicker/datepicker-module.d.ts +20 -20
- package/datepicker/datepicker-toggle.component.d.ts +35 -35
- package/datepicker/datepicker.component.d.ts +158 -158
- package/datepicker/index.d.ts +1 -1
- package/datepicker/month-view.component.d.ts +93 -93
- package/datepicker/multi-year-view.component.d.ts +72 -72
- package/datepicker/ptsecurity-mosaic-datepicker.d.ts +5 -5
- package/datepicker/public-api.d.ts +11 -11
- package/datepicker/year-view.component.d.ts +90 -90
- package/design-tokens/index.d.ts +1 -1
- package/design-tokens/legacy-2017/tokens/components/alert.json5 +83 -83
- package/design-tokens/legacy-2017/tokens/components/autocomplete.json5 +11 -11
- package/design-tokens/legacy-2017/tokens/components/badge.json5 +174 -174
- package/design-tokens/legacy-2017/tokens/components/button-toggle.json5 +10 -10
- package/design-tokens/legacy-2017/tokens/components/button.json5 +142 -142
- package/design-tokens/legacy-2017/tokens/components/card.json5 +51 -51
- package/design-tokens/legacy-2017/tokens/components/checkbox.json5 +97 -97
- package/design-tokens/legacy-2017/tokens/components/datepicker.json5 +64 -64
- package/design-tokens/legacy-2017/tokens/components/divider.json5 +14 -14
- package/design-tokens/legacy-2017/tokens/components/dl.json5 +38 -38
- package/design-tokens/legacy-2017/tokens/components/dropdown.json5 +48 -48
- package/design-tokens/legacy-2017/tokens/components/form-field.json5 +92 -92
- package/design-tokens/legacy-2017/tokens/components/forms.json5 +52 -52
- package/design-tokens/legacy-2017/tokens/components/icon.json5 +104 -104
- package/design-tokens/legacy-2017/tokens/components/input.json5 +12 -12
- package/design-tokens/legacy-2017/tokens/components/link.json5 +50 -50
- package/design-tokens/legacy-2017/tokens/components/list.json5 +13 -13
- package/design-tokens/legacy-2017/tokens/components/loader-overlay.json5 +23 -0
- package/design-tokens/legacy-2017/tokens/components/modal.json5 +81 -81
- package/design-tokens/legacy-2017/tokens/components/navbar.json5 +70 -70
- package/design-tokens/legacy-2017/tokens/components/optgroup.json5 +10 -10
- package/design-tokens/legacy-2017/tokens/components/option.json5 +12 -12
- package/design-tokens/legacy-2017/tokens/components/popover.json5 +68 -68
- package/design-tokens/legacy-2017/tokens/components/popup.json5 +16 -16
- package/design-tokens/legacy-2017/tokens/components/progress-bar.json5 +13 -13
- package/design-tokens/legacy-2017/tokens/components/progress-spinner.json5 +7 -7
- package/design-tokens/legacy-2017/tokens/components/radio.json5 +45 -45
- package/design-tokens/legacy-2017/tokens/components/select.json5 +24 -24
- package/design-tokens/legacy-2017/tokens/components/sidepanel.json5 +44 -44
- package/design-tokens/legacy-2017/tokens/components/table.json5 +15 -15
- package/design-tokens/legacy-2017/tokens/components/tabs.json5 +101 -101
- package/design-tokens/legacy-2017/tokens/components/tags.json5 +134 -134
- package/design-tokens/legacy-2017/tokens/components/textarea.json5 +12 -12
- package/design-tokens/legacy-2017/tokens/components/timepicker.json5 +7 -7
- package/design-tokens/legacy-2017/tokens/components/toggle.json5 +79 -79
- package/design-tokens/legacy-2017/tokens/components/tooltip.json5 +83 -83
- package/design-tokens/legacy-2017/tokens/components/tree.json5 +15 -15
- package/design-tokens/legacy-2017/tokens/properties/aliases.json5 +3 -3
- package/design-tokens/legacy-2017/tokens/properties/colors.json5 +119 -119
- package/design-tokens/legacy-2017/tokens/properties/font.json5 +12 -12
- package/design-tokens/legacy-2017/tokens/properties/globals.json5 +49 -49
- package/design-tokens/legacy-2017/tokens/properties/padding.json5 +3 -3
- package/design-tokens/legacy-2017/tokens/properties/palette.json5 +163 -163
- package/design-tokens/legacy-2017/tokens/properties/typography.json5 +175 -175
- package/design-tokens/legacy-2017/tokens.d.ts +7873 -7844
- package/design-tokens/pt-2022/tokens/components/alert.json5 +83 -83
- package/design-tokens/pt-2022/tokens/components/autocomplete.json5 +11 -11
- package/design-tokens/pt-2022/tokens/components/badge.json5 +174 -174
- package/design-tokens/pt-2022/tokens/components/button-toggle.json5 +10 -10
- package/design-tokens/pt-2022/tokens/components/button.json5 +142 -142
- package/design-tokens/pt-2022/tokens/components/card.json5 +51 -51
- package/design-tokens/pt-2022/tokens/components/checkbox.json5 +97 -97
- package/design-tokens/pt-2022/tokens/components/datepicker.json5 +64 -64
- package/design-tokens/pt-2022/tokens/components/divider.json5 +14 -14
- package/design-tokens/pt-2022/tokens/components/dl.json5 +38 -38
- package/design-tokens/pt-2022/tokens/components/dropdown.json5 +48 -48
- package/design-tokens/pt-2022/tokens/components/form-field.json5 +92 -92
- package/design-tokens/pt-2022/tokens/components/forms.json5 +52 -52
- package/design-tokens/pt-2022/tokens/components/icon.json5 +104 -104
- package/design-tokens/pt-2022/tokens/components/input.json5 +12 -12
- package/design-tokens/pt-2022/tokens/components/link.json5 +50 -50
- package/design-tokens/pt-2022/tokens/components/list.json5 +13 -13
- package/design-tokens/pt-2022/tokens/components/loader-overlay.json5 +23 -0
- package/design-tokens/pt-2022/tokens/components/modal.json5 +81 -81
- package/design-tokens/pt-2022/tokens/components/navbar.json5 +70 -70
- package/design-tokens/pt-2022/tokens/components/optgroup.json5 +10 -10
- package/design-tokens/pt-2022/tokens/components/option.json5 +12 -12
- package/design-tokens/pt-2022/tokens/components/popover.json5 +68 -68
- package/design-tokens/pt-2022/tokens/components/popup.json5 +16 -16
- package/design-tokens/pt-2022/tokens/components/progress-bar.json5 +13 -13
- package/design-tokens/pt-2022/tokens/components/progress-spinner.json5 +7 -7
- package/design-tokens/pt-2022/tokens/components/radio.json5 +45 -45
- package/design-tokens/pt-2022/tokens/components/select.json5 +24 -24
- package/design-tokens/pt-2022/tokens/components/sidepanel.json5 +44 -44
- package/design-tokens/pt-2022/tokens/components/table.json5 +15 -15
- package/design-tokens/pt-2022/tokens/components/tabs.json5 +101 -101
- package/design-tokens/pt-2022/tokens/components/tags.json5 +137 -137
- package/design-tokens/pt-2022/tokens/components/textarea.json5 +12 -12
- package/design-tokens/pt-2022/tokens/components/timepicker.json5 +7 -7
- package/design-tokens/pt-2022/tokens/components/toggle.json5 +79 -79
- package/design-tokens/pt-2022/tokens/components/tooltip.json5 +83 -83
- package/design-tokens/pt-2022/tokens/components/tree.json5 +15 -15
- package/design-tokens/pt-2022/tokens/properties/aliases.json5 +3 -3
- package/design-tokens/pt-2022/tokens/properties/colors.json5 +122 -122
- package/design-tokens/pt-2022/tokens/properties/font.json5 +15 -15
- package/design-tokens/pt-2022/tokens/properties/globals.json5 +49 -49
- package/design-tokens/pt-2022/tokens/properties/padding.json5 +3 -3
- package/design-tokens/pt-2022/tokens/properties/palette.json5 +232 -232
- package/design-tokens/pt-2022/tokens/properties/typography.json5 +175 -175
- package/design-tokens/pt-2022/tokens.d.ts +9205 -9176
- package/design-tokens/ptsecurity-mosaic-design-tokens.d.ts +5 -5
- package/design-tokens/public-api.d.ts +3 -3
- package/design-tokens/style-dictionary/build.js +76 -63
- package/design-tokens/style-dictionary/configs/css.js +13 -13
- package/design-tokens/style-dictionary/configs/figma.js +11 -0
- package/design-tokens/style-dictionary/configs/index.js +48 -48
- package/design-tokens/style-dictionary/configs/js.js +9 -9
- package/design-tokens/style-dictionary/configs/scss.js +23 -23
- package/design-tokens/style-dictionary/figma-types.js +41 -0
- package/design-tokens/style-dictionary/filters/color.js +7 -7
- package/design-tokens/style-dictionary/filters/palette.js +7 -7
- package/design-tokens/style-dictionary/filters/size.js +7 -7
- package/design-tokens/style-dictionary/filters/typography.js +7 -7
- package/design-tokens/style-dictionary/formats/figma.js +104 -0
- package/design-tokens/style-dictionary/formats/palette.js +25 -25
- package/design-tokens/style-dictionary/formats/typography.js +52 -52
- package/design-tokens/style-dictionary/transformGroups/css.js +13 -13
- package/design-tokens/style-dictionary/transformGroups/figma.js +21 -0
- package/design-tokens/style-dictionary/transformGroups/scss.js +12 -12
- package/design-tokens/style-dictionary/transformGroups/ts.js +11 -11
- package/design-tokens/style-dictionary/transforms/attribute/figma-border.js +18 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-color.js +25 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-default.js +10 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-font.js +31 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-group.js +17 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-opacity.js +10 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-shadow.js +66 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-sizing.js +16 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-spacing.js +15 -0
- package/design-tokens/style-dictionary/transforms/attribute/figma-typography.js +24 -0
- package/design-tokens/style-dictionary/transforms/attribute/palette.js +9 -9
- package/design-tokens/style-dictionary/transforms/attribute/prefix.js +11 -11
- package/design-tokens/style-dictionary/transforms/attribute/size.js +8 -8
- package/design-tokens/style-dictionary/transforms/attribute/typography.js +9 -9
- package/design-tokens/style-dictionary/transforms/value/figma-values.js +7 -0
- package/divider/divider.component.d.ts +11 -11
- package/divider/divider.module.d.ts +8 -8
- package/divider/index.d.ts +1 -1
- package/divider/ptsecurity-mosaic-divider.d.ts +5 -5
- package/divider/public-api.d.ts +2 -2
- package/dl/dl.component.d.ts +26 -26
- package/dl/dl.module.d.ts +10 -10
- package/dl/index.d.ts +1 -1
- package/dl/ptsecurity-mosaic-dl.d.ts +5 -5
- package/dl/public-api.d.ts +2 -2
- package/dropdown/dropdown-animations.d.ts +11 -11
- package/dropdown/dropdown-content.directive.d.ts +32 -32
- package/dropdown/dropdown-errors.d.ts +17 -17
- package/dropdown/dropdown-item.component.d.ts +50 -50
- package/dropdown/dropdown-trigger.directive.d.ts +136 -136
- package/dropdown/dropdown.component.d.ts +121 -121
- package/dropdown/dropdown.module.d.ts +13 -13
- package/dropdown/dropdown.types.d.ts +53 -53
- package/dropdown/index.d.ts +1 -1
- package/dropdown/ptsecurity-mosaic-dropdown.d.ts +5 -5
- package/dropdown/public-api.d.ts +8 -8
- package/esm2020/autocomplete/autocomplete-origin.directive.mjs +21 -21
- package/esm2020/autocomplete/autocomplete-trigger.directive.mjs +555 -555
- package/esm2020/autocomplete/autocomplete.component.mjs +154 -154
- package/esm2020/autocomplete/autocomplete.module.mjs +34 -34
- package/esm2020/autocomplete/index.mjs +2 -2
- package/esm2020/autocomplete/ptsecurity-mosaic-autocomplete.mjs +4 -4
- package/esm2020/autocomplete/public-api.mjs +5 -5
- package/esm2020/button/button.component.mjs +137 -137
- package/esm2020/button/button.module.mjs +38 -38
- package/esm2020/button/index.mjs +2 -2
- package/esm2020/button/ptsecurity-mosaic-button.mjs +4 -4
- package/esm2020/button/public-api.mjs +3 -3
- package/esm2020/button-toggle/button-toggle.component.mjs +362 -362
- package/esm2020/button-toggle/button-toggle.module.mjs +19 -19
- package/esm2020/button-toggle/index.mjs +2 -2
- package/esm2020/button-toggle/ptsecurity-mosaic-button-toggle.mjs +4 -4
- package/esm2020/button-toggle/public-api.mjs +3 -3
- package/esm2020/card/card.component.mjs +80 -80
- package/esm2020/card/card.module.mjs +30 -30
- package/esm2020/card/index.mjs +2 -2
- package/esm2020/card/ptsecurity-mosaic-card.mjs +4 -4
- package/esm2020/card/public-api.mjs +3 -3
- package/esm2020/checkbox/checkbox-config.mjs +6 -6
- package/esm2020/checkbox/checkbox-module.mjs +19 -19
- package/esm2020/checkbox/checkbox-required-validator.mjs +27 -27
- package/esm2020/checkbox/checkbox.mjs +316 -316
- package/esm2020/checkbox/index.mjs +2 -2
- package/esm2020/checkbox/ptsecurity-mosaic-checkbox.mjs +4 -4
- package/esm2020/checkbox/public-api.mjs +5 -5
- package/esm2020/core/animation/animation.mjs +8 -8
- package/esm2020/core/animation/fade-animations.mjs +9 -9
- package/esm2020/core/animation/index.mjs +4 -4
- package/esm2020/core/animation/select-animations.mjs +45 -45
- package/esm2020/core/common-behaviors/color.mjs +30 -30
- package/esm2020/core/common-behaviors/common-module.mjs +83 -83
- package/esm2020/core/common-behaviors/constructor.mjs +2 -2
- package/esm2020/core/common-behaviors/disabled.mjs +17 -17
- package/esm2020/core/common-behaviors/error-state.mjs +31 -31
- package/esm2020/core/common-behaviors/index.mjs +6 -6
- package/esm2020/core/common-behaviors/tabindex.mjs +18 -18
- package/esm2020/core/error/error-options.mjs +26 -26
- package/esm2020/core/formatters/date/formatter.mjs +359 -359
- package/esm2020/core/formatters/date/templates/en-US.mjs +281 -281
- package/esm2020/core/formatters/date/templates/ru-RU.mjs +281 -281
- package/esm2020/core/formatters/index.mjs +20 -20
- package/esm2020/core/formatters/number/formatter.mjs +105 -105
- package/esm2020/core/forms/forms-module.mjs +24 -24
- package/esm2020/core/forms/forms.directive.mjs +66 -66
- package/esm2020/core/forms/index.mjs +3 -3
- package/esm2020/core/highlight/highlight.pipe.mjs +17 -17
- package/esm2020/core/highlight/index.mjs +19 -19
- package/esm2020/core/index.mjs +2 -2
- package/esm2020/core/label/label-options.mjs +4 -4
- package/esm2020/core/line/line.mjs +70 -70
- package/esm2020/core/option/action.mjs +121 -121
- package/esm2020/core/option/index.mjs +5 -5
- package/esm2020/core/option/optgroup.mjs +31 -31
- package/esm2020/core/option/option-module.mjs +21 -21
- package/esm2020/core/option/option.mjs +257 -257
- package/esm2020/core/overlay/overlay-position-map.mjs +244 -244
- package/esm2020/core/pop-up/constants.mjs +34 -34
- package/esm2020/core/pop-up/index.mjs +4 -4
- package/esm2020/core/pop-up/pop-up-trigger.mjs +239 -239
- package/esm2020/core/pop-up/pop-up.mjs +94 -94
- package/esm2020/core/ptsecurity-mosaic-core.mjs +4 -4
- package/esm2020/core/public-api.mjs +18 -18
- package/esm2020/core/select/constants.mjs +27 -27
- package/esm2020/core/select/errors.mjs +26 -26
- package/esm2020/core/select/events.mjs +2 -2
- package/esm2020/core/select/index.mjs +4 -4
- package/esm2020/core/selection/constants.mjs +6 -6
- package/esm2020/core/selection/index.mjs +4 -4
- package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +49 -49
- package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +18 -18
- package/esm2020/core/services/measure-scrollbar.service.mjs +48 -48
- package/esm2020/core/utils/index.mjs +2 -2
- package/esm2020/core/utils/public-api.mjs +2 -2
- package/esm2020/core/utils/utils.mjs +5 -5
- package/esm2020/core/validation/index.mjs +2 -2
- package/esm2020/core/validation/validation.mjs +118 -118
- package/esm2020/core/version.mjs +3 -3
- package/esm2020/datepicker/calendar-body.component.mjs +106 -106
- package/esm2020/datepicker/calendar.component.mjs +362 -362
- package/esm2020/datepicker/datepicker-animations.mjs +32 -32
- package/esm2020/datepicker/datepicker-errors.mjs +6 -6
- package/esm2020/datepicker/datepicker-input.directive.mjs +938 -938
- package/esm2020/datepicker/datepicker-intl.mjs +40 -40
- package/esm2020/datepicker/datepicker-module.mjs +107 -107
- package/esm2020/datepicker/datepicker-toggle.component.mjs +86 -86
- package/esm2020/datepicker/datepicker.component.mjs +404 -404
- package/esm2020/datepicker/index.mjs +2 -2
- package/esm2020/datepicker/month-view.component.mjs +257 -257
- package/esm2020/datepicker/multi-year-view.component.mjs +218 -218
- package/esm2020/datepicker/ptsecurity-mosaic-datepicker.mjs +4 -4
- package/esm2020/datepicker/public-api.mjs +12 -12
- package/esm2020/datepicker/year-view.component.mjs +253 -253
- package/esm2020/design-tokens/index.mjs +2 -2
- package/esm2020/design-tokens/legacy-2017/tokens.mjs +1167 -1138
- package/esm2020/design-tokens/pt-2022/tokens.mjs +1237 -1208
- package/esm2020/design-tokens/ptsecurity-mosaic-design-tokens.mjs +4 -4
- package/esm2020/design-tokens/public-api.mjs +4 -4
- package/esm2020/divider/divider.component.mjs +39 -39
- package/esm2020/divider/divider.module.mjs +18 -18
- package/esm2020/divider/index.mjs +2 -2
- package/esm2020/divider/ptsecurity-mosaic-divider.mjs +4 -4
- package/esm2020/divider/public-api.mjs +3 -3
- package/esm2020/dl/dl.component.mjs +78 -78
- package/esm2020/dl/dl.module.mjs +42 -42
- package/esm2020/dl/index.mjs +2 -2
- package/esm2020/dl/ptsecurity-mosaic-dl.mjs +4 -4
- package/esm2020/dl/public-api.mjs +3 -3
- package/esm2020/dropdown/dropdown-animations.mjs +41 -41
- package/esm2020/dropdown/dropdown-content.directive.mjs +64 -64
- package/esm2020/dropdown/dropdown-errors.mjs +29 -29
- package/esm2020/dropdown/dropdown-item.component.mjs +139 -139
- package/esm2020/dropdown/dropdown-trigger.directive.mjs +489 -489
- package/esm2020/dropdown/dropdown.component.mjs +292 -292
- package/esm2020/dropdown/dropdown.module.mjs +50 -50
- package/esm2020/dropdown/dropdown.types.mjs +24 -24
- package/esm2020/dropdown/index.mjs +2 -2
- package/esm2020/dropdown/ptsecurity-mosaic-dropdown.mjs +4 -4
- package/esm2020/dropdown/public-api.mjs +9 -9
- package/esm2020/form-field/cleaner.mjs +23 -23
- package/esm2020/form-field/form-field-control.mjs +5 -5
- package/esm2020/form-field/form-field-errors.mjs +7 -7
- package/esm2020/form-field/form-field.mjs +225 -225
- package/esm2020/form-field/form-field.module.mjs +57 -57
- package/esm2020/form-field/hint.mjs +34 -23
- package/esm2020/form-field/index.mjs +2 -2
- package/esm2020/form-field/password-hint.mjs +139 -139
- package/esm2020/form-field/prefix.mjs +13 -13
- package/esm2020/form-field/ptsecurity-mosaic-form-field.mjs +4 -4
- package/esm2020/form-field/public-api.mjs +11 -11
- package/esm2020/form-field/stepper.mjs +55 -55
- package/esm2020/form-field/suffix.mjs +13 -13
- package/esm2020/icon/icon.component.mjs +44 -44
- package/esm2020/icon/icon.module.mjs +38 -38
- package/esm2020/icon/index.mjs +2 -2
- package/esm2020/icon/ptsecurity-mosaic-icon.mjs +4 -4
- package/esm2020/icon/public-api.mjs +3 -3
- package/esm2020/index.mjs +2 -2
- package/esm2020/input/index.mjs +2 -2
- package/esm2020/input/input-errors.mjs +4 -4
- package/esm2020/input/input-number-validators.mjs +92 -92
- package/esm2020/input/input-number.mjs +163 -163
- package/esm2020/input/input-password.mjs +372 -372
- package/esm2020/input/input-value-accessor.mjs +3 -3
- package/esm2020/input/input.mjs +334 -334
- package/esm2020/input/input.module.mjs +65 -65
- package/esm2020/input/ptsecurity-mosaic-input.mjs +4 -4
- package/esm2020/input/public-api.mjs +7 -7
- package/esm2020/link/index.mjs +2 -2
- package/esm2020/link/link.component.mjs +107 -107
- package/esm2020/link/link.module.mjs +26 -26
- package/esm2020/link/ptsecurity-mosaic-link.mjs +4 -4
- package/esm2020/link/public-api.mjs +3 -3
- package/esm2020/list/index.mjs +2 -2
- package/esm2020/list/list-selection.component.mjs +689 -686
- package/esm2020/list/list.component.mjs +44 -44
- package/esm2020/list/list.module.mjs +55 -55
- package/esm2020/list/ptsecurity-mosaic-list.mjs +4 -4
- package/esm2020/list/public-api.mjs +4 -4
- package/esm2020/loader-overlay/index.mjs +2 -0
- package/esm2020/loader-overlay/loader-overlay.component.mjs +99 -0
- package/esm2020/loader-overlay/loader-overlay.module.mjs +50 -0
- package/esm2020/loader-overlay/ptsecurity-mosaic-loader-overlay.mjs +5 -0
- package/esm2020/loader-overlay/public-api.mjs +3 -0
- package/esm2020/modal/css-unit.pipe.mjs +17 -17
- package/esm2020/modal/index.mjs +2 -2
- package/esm2020/modal/modal-control.service.mjs +85 -85
- package/esm2020/modal/modal-ref.class.mjs +8 -8
- package/esm2020/modal/modal-util.mjs +17 -17
- package/esm2020/modal/modal.component.mjs +509 -501
- package/esm2020/modal/modal.directive.mjs +52 -52
- package/esm2020/modal/modal.module.mjs +72 -72
- package/esm2020/modal/modal.service.mjs +124 -124
- package/esm2020/modal/modal.type.mjs +7 -7
- package/esm2020/modal/ptsecurity-mosaic-modal.mjs +4 -4
- package/esm2020/modal/public-api.mjs +7 -7
- package/esm2020/navbar/index.mjs +2 -2
- package/esm2020/navbar/navbar-item.component.mjs +582 -582
- package/esm2020/navbar/navbar.component.mjs +239 -237
- package/esm2020/navbar/navbar.module.mjs +92 -92
- package/esm2020/navbar/ptsecurity-mosaic-navbar.mjs +4 -4
- package/esm2020/navbar/public-api.mjs +5 -5
- package/esm2020/navbar/vertical-navbar.animation.mjs +10 -10
- package/esm2020/navbar/vertical-navbar.component.mjs +114 -114
- package/esm2020/popover/index.mjs +2 -2
- package/esm2020/popover/popover-animations.mjs +16 -16
- package/esm2020/popover/popover-confirm.component.mjs +108 -108
- package/esm2020/popover/popover.component.mjs +253 -253
- package/esm2020/popover/popover.module.mjs +24 -24
- package/esm2020/popover/ptsecurity-mosaic-popover.mjs +4 -4
- package/esm2020/popover/public-api.mjs +5 -5
- package/esm2020/progress-bar/index.mjs +2 -2
- package/esm2020/progress-bar/progress-bar.component.mjs +42 -42
- package/esm2020/progress-bar/progress-bar.module.mjs +30 -30
- package/esm2020/progress-bar/ptsecurity-mosaic-progress-bar.mjs +4 -4
- package/esm2020/progress-bar/public-api.mjs +3 -3
- package/esm2020/progress-spinner/index.mjs +2 -2
- package/esm2020/progress-spinner/progress-spinner.component.mjs +46 -46
- package/esm2020/progress-spinner/progress-spinner.module.mjs +30 -30
- package/esm2020/progress-spinner/ptsecurity-mosaic-progress-spinner.mjs +4 -4
- package/esm2020/progress-spinner/public-api.mjs +3 -3
- package/esm2020/ptsecurity-mosaic.mjs +4 -4
- package/esm2020/public-api.mjs +2 -2
- package/esm2020/radio/index.mjs +2 -2
- package/esm2020/radio/ptsecurity-mosaic-radio.mjs +4 -4
- package/esm2020/radio/public-api.mjs +3 -3
- package/esm2020/radio/radio.component.mjs +458 -458
- package/esm2020/radio/radio.module.mjs +20 -20
- package/esm2020/select/index.mjs +2 -2
- package/esm2020/select/ptsecurity-mosaic-select.mjs +4 -4
- package/esm2020/select/public-api.mjs +4 -4
- package/esm2020/select/select-option.directive.mjs +65 -65
- package/esm2020/select/select.component.mjs +1117 -1117
- package/esm2020/select/select.module.mjs +73 -73
- package/esm2020/sidebar/index.mjs +2 -2
- package/esm2020/sidebar/ptsecurity-mosaic-sidebar.mjs +4 -4
- package/esm2020/sidebar/public-api.mjs +3 -3
- package/esm2020/sidebar/sidebar-animations.mjs +23 -23
- package/esm2020/sidebar/sidebar.component.mjs +146 -146
- package/esm2020/sidebar/sidebar.module.mjs +30 -30
- package/esm2020/sidepanel/index.mjs +2 -2
- package/esm2020/sidepanel/ptsecurity-mosaic-sidepanel.mjs +4 -4
- package/esm2020/sidepanel/public-api.mjs +7 -7
- package/esm2020/sidepanel/sidepanel-animations.mjs +26 -26
- package/esm2020/sidepanel/sidepanel-config.mjs +26 -26
- package/esm2020/sidepanel/sidepanel-container.component.mjs +106 -106
- package/esm2020/sidepanel/sidepanel-directives.mjs +159 -159
- package/esm2020/sidepanel/sidepanel-ref.mjs +53 -53
- package/esm2020/sidepanel/sidepanel.module.mjs +74 -74
- package/esm2020/sidepanel/sidepanel.service.mjs +167 -167
- package/esm2020/splitter/index.mjs +2 -2
- package/esm2020/splitter/ptsecurity-mosaic-splitter.mjs +4 -4
- package/esm2020/splitter/public-api.mjs +3 -3
- package/esm2020/splitter/splitter.component.mjs +482 -482
- package/esm2020/splitter/splitter.module.mjs +40 -40
- package/esm2020/table/index.mjs +2 -2
- package/esm2020/table/ptsecurity-mosaic-table.mjs +4 -4
- package/esm2020/table/public-api.mjs +3 -3
- package/esm2020/table/table.component.mjs +16 -16
- package/esm2020/table/table.module.mjs +30 -30
- package/esm2020/tabs/index.mjs +2 -2
- package/esm2020/tabs/paginated-tab-header.mjs +479 -479
- package/esm2020/tabs/ptsecurity-mosaic-tabs.mjs +4 -4
- package/esm2020/tabs/public-api.mjs +11 -11
- package/esm2020/tabs/tab-body.component.mjs +178 -178
- package/esm2020/tabs/tab-content.directive.mjs +15 -15
- package/esm2020/tabs/tab-group.component.mjs +350 -350
- package/esm2020/tabs/tab-header.component.mjs +67 -67
- package/esm2020/tabs/tab-label-wrapper.directive.mjs +78 -78
- package/esm2020/tabs/tab-label.directive.mjs +17 -17
- package/esm2020/tabs/tab-nav-bar/index.mjs +2 -2
- package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +110 -110
- package/esm2020/tabs/tab.component.mjs +133 -133
- package/esm2020/tabs/tabs-animations.mjs +24 -24
- package/esm2020/tabs/tabs.module.mjs +104 -104
- package/esm2020/tags/index.mjs +2 -2
- package/esm2020/tags/ptsecurity-mosaic-tags.mjs +4 -4
- package/esm2020/tags/public-api.mjs +6 -6
- package/esm2020/tags/tag-default-options.mjs +4 -4
- package/esm2020/tags/tag-input.mjs +229 -229
- package/esm2020/tags/tag-list.component.mjs +722 -722
- package/esm2020/tags/tag-text-control.mjs +2 -2
- package/esm2020/tags/tag.component.mjs +375 -375
- package/esm2020/tags/tag.module.mjs +56 -56
- package/esm2020/textarea/index.mjs +2 -2
- package/esm2020/textarea/ptsecurity-mosaic-textarea.mjs +4 -4
- package/esm2020/textarea/public-api.mjs +3 -3
- package/esm2020/textarea/textarea.component.mjs +269 -269
- package/esm2020/textarea/textarea.module.mjs +21 -21
- package/esm2020/timepicker/index.mjs +2 -2
- package/esm2020/timepicker/ptsecurity-mosaic-timepicker.mjs +4 -4
- package/esm2020/timepicker/public-api.mjs +4 -4
- package/esm2020/timepicker/timepicker.constants.mjs +25 -25
- package/esm2020/timepicker/timepicker.directive.mjs +665 -665
- package/esm2020/timepicker/timepicker.module.mjs +34 -34
- package/esm2020/toggle/index.mjs +2 -2
- package/esm2020/toggle/ptsecurity-mosaic-toggle.mjs +4 -4
- package/esm2020/toggle/public-api.mjs +3 -3
- package/esm2020/toggle/toggle.component.mjs +158 -158
- package/esm2020/toggle/toggle.module.mjs +20 -20
- package/esm2020/tooltip/index.mjs +2 -2
- package/esm2020/tooltip/ptsecurity-mosaic-tooltip.mjs +4 -4
- package/esm2020/tooltip/public-api.mjs +3 -3
- package/esm2020/tooltip/tooltip.animations.mjs +19 -19
- package/esm2020/tooltip/tooltip.component.mjs +295 -295
- package/esm2020/tooltip/tooltip.module.mjs +43 -43
- package/esm2020/tree/control/base-tree-control.mjs +60 -60
- package/esm2020/tree/control/flat-tree-control.mjs +126 -126
- package/esm2020/tree/control/nested-tree-control.mjs +41 -41
- package/esm2020/tree/control/tree-control.mjs +2 -2
- package/esm2020/tree/data-source/flat-data-source.mjs +162 -162
- package/esm2020/tree/data-source/nested-data-source.mjs +30 -30
- package/esm2020/tree/index.mjs +2 -2
- package/esm2020/tree/node.mjs +31 -31
- package/esm2020/tree/outlet.mjs +15 -15
- package/esm2020/tree/padding.directive.mjs +113 -113
- package/esm2020/tree/ptsecurity-mosaic-tree.mjs +4 -4
- package/esm2020/tree/public-api.mjs +16 -16
- package/esm2020/tree/toggle.mjs +80 -80
- package/esm2020/tree/tree-base.mjs +243 -243
- package/esm2020/tree/tree-errors.mjs +36 -36
- package/esm2020/tree/tree-option.component.mjs +248 -248
- package/esm2020/tree/tree-selection.component.mjs +541 -540
- package/esm2020/tree/tree.mjs +15 -15
- package/esm2020/tree/tree.module.mjs +57 -57
- package/esm2020/tree-select/index.mjs +2 -2
- package/esm2020/tree-select/ptsecurity-mosaic-tree-select.mjs +4 -4
- package/esm2020/tree-select/public-api.mjs +3 -3
- package/esm2020/tree-select/tree-select.component.mjs +939 -939
- package/esm2020/tree-select/tree-select.module.mjs +47 -47
- package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +726 -726
- package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +367 -367
- package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-button.mjs +160 -160
- package/fesm2015/ptsecurity-mosaic-button.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-card.mjs +96 -96
- package/fesm2015/ptsecurity-mosaic-card.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-checkbox.mjs +348 -348
- package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-core.mjs +2652 -2652
- package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-datepicker.mjs +2682 -2682
- package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-design-tokens.mjs +2432 -2345
- package/fesm2015/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-divider.mjs +48 -48
- package/fesm2015/ptsecurity-mosaic-divider.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-dl.mjs +108 -108
- package/fesm2015/ptsecurity-mosaic-dl.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-dropdown.mjs +1069 -1069
- package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-form-field.mjs +522 -512
- package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-icon.mjs +73 -73
- package/fesm2015/ptsecurity-mosaic-icon.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-input.mjs +979 -979
- package/fesm2015/ptsecurity-mosaic-input.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-link.mjs +121 -121
- package/fesm2015/ptsecurity-mosaic-link.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-list.mjs +765 -762
- package/fesm2015/ptsecurity-mosaic-list.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-loader-overlay.mjs +155 -0
- package/fesm2015/ptsecurity-mosaic-loader-overlay.mjs.map +1 -0
- package/fesm2015/ptsecurity-mosaic-modal.mjs +833 -824
- package/fesm2015/ptsecurity-mosaic-modal.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-navbar.mjs +996 -994
- package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-popover.mjs +364 -364
- package/fesm2015/ptsecurity-mosaic-popover.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +61 -61
- package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +65 -65
- package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-radio.mjs +464 -464
- package/fesm2015/ptsecurity-mosaic-radio.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-select.mjs +1213 -1213
- package/fesm2015/ptsecurity-mosaic-select.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-sidebar.mjs +185 -185
- package/fesm2015/ptsecurity-mosaic-sidebar.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +555 -555
- package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-splitter.mjs +511 -511
- package/fesm2015/ptsecurity-mosaic-splitter.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-table.mjs +36 -36
- package/fesm2015/ptsecurity-mosaic-table.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tabs.mjs +1460 -1460
- package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tags.mjs +1342 -1342
- package/fesm2015/ptsecurity-mosaic-tags.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-textarea.mjs +274 -274
- package/fesm2015/ptsecurity-mosaic-textarea.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-timepicker.mjs +703 -703
- package/fesm2015/ptsecurity-mosaic-timepicker.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-toggle.mjs +163 -163
- package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tooltip.mjs +344 -344
- package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tree-select.mjs +954 -954
- package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tree.mjs +1689 -1688
- package/fesm2015/ptsecurity-mosaic-tree.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic.mjs +2 -2
- package/fesm2020/ptsecurity-mosaic-autocomplete.mjs +722 -722
- package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-button-toggle.mjs +365 -365
- package/fesm2020/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-button.mjs +160 -160
- package/fesm2020/ptsecurity-mosaic-button.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-card.mjs +96 -96
- package/fesm2020/ptsecurity-mosaic-card.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-checkbox.mjs +346 -346
- package/fesm2020/ptsecurity-mosaic-checkbox.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-core.mjs +2681 -2681
- package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-datepicker.mjs +2667 -2667
- package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-design-tokens.mjs +2432 -2345
- package/fesm2020/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-divider.mjs +48 -48
- package/fesm2020/ptsecurity-mosaic-divider.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-dl.mjs +108 -108
- package/fesm2020/ptsecurity-mosaic-dl.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-dropdown.mjs +1056 -1056
- package/fesm2020/ptsecurity-mosaic-dropdown.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-form-field.mjs +507 -497
- package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-icon.mjs +71 -71
- package/fesm2020/ptsecurity-mosaic-icon.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-input.mjs +968 -968
- package/fesm2020/ptsecurity-mosaic-input.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-link.mjs +120 -120
- package/fesm2020/ptsecurity-mosaic-link.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-list.mjs +758 -755
- package/fesm2020/ptsecurity-mosaic-list.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs +153 -0
- package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs.map +1 -0
- package/fesm2020/ptsecurity-mosaic-modal.mjs +828 -820
- package/fesm2020/ptsecurity-mosaic-modal.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-navbar.mjs +980 -978
- package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-popover.mjs +360 -360
- package/fesm2020/ptsecurity-mosaic-popover.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-progress-bar.mjs +61 -61
- package/fesm2020/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs +65 -65
- package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-radio.mjs +462 -462
- package/fesm2020/ptsecurity-mosaic-radio.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-select.mjs +1208 -1208
- package/fesm2020/ptsecurity-mosaic-select.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-sidebar.mjs +185 -185
- package/fesm2020/ptsecurity-mosaic-sidebar.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-sidepanel.mjs +552 -552
- package/fesm2020/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-splitter.mjs +511 -511
- package/fesm2020/ptsecurity-mosaic-splitter.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-table.mjs +36 -36
- package/fesm2020/ptsecurity-mosaic-table.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tabs.mjs +1445 -1445
- package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tags.mjs +1335 -1335
- package/fesm2020/ptsecurity-mosaic-tags.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-textarea.mjs +272 -272
- package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-timepicker.mjs +700 -700
- package/fesm2020/ptsecurity-mosaic-timepicker.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-toggle.mjs +163 -163
- package/fesm2020/ptsecurity-mosaic-toggle.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tooltip.mjs +336 -336
- package/fesm2020/ptsecurity-mosaic-tooltip.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tree-select.mjs +951 -951
- package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tree.mjs +1676 -1675
- package/fesm2020/ptsecurity-mosaic-tree.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic.mjs +2 -2
- package/form-field/cleaner.d.ts +7 -7
- package/form-field/form-field-control.d.ts +37 -37
- package/form-field/form-field-errors.d.ts +2 -2
- package/form-field/form-field.d.ts +69 -69
- package/form-field/form-field.module.d.ts +15 -15
- package/form-field/hint.d.ts +14 -6
- package/form-field/index.d.ts +1 -1
- package/form-field/password-hint.d.ts +40 -40
- package/form-field/prefix.d.ts +5 -5
- package/form-field/ptsecurity-mosaic-form-field.d.ts +5 -5
- package/form-field/public-api.d.ts +10 -10
- package/form-field/stepper.d.ts +11 -11
- package/form-field/suffix.d.ts +5 -5
- package/icon/icon.component.d.ts +18 -18
- package/icon/icon.module.d.ts +10 -10
- package/icon/index.d.ts +1 -1
- package/icon/ptsecurity-mosaic-icon.d.ts +5 -5
- package/icon/public-api.d.ts +2 -2
- package/index.d.ts +1 -1
- package/input/index.d.ts +1 -1
- package/input/input-errors.d.ts +1 -1
- package/input/input-number-validators.d.ts +39 -39
- package/input/input-number.d.ts +33 -33
- package/input/input-password.d.ts +123 -123
- package/input/input-value-accessor.d.ts +4 -4
- package/input/input.d.ts +116 -116
- package/input/input.module.d.ts +14 -14
- package/input/ptsecurity-mosaic-input.d.ts +5 -5
- package/input/public-api.d.ts +6 -6
- package/link/index.d.ts +1 -1
- package/link/link.component.d.ts +38 -38
- package/link/link.module.d.ts +9 -9
- package/link/ptsecurity-mosaic-link.d.ts +5 -5
- package/link/public-api.d.ts +2 -2
- package/list/index.d.ts +1 -1
- package/list/list-selection.component.d.ts +168 -168
- package/list/list.component.d.ts +18 -18
- package/list/list.module.d.ts +11 -11
- package/list/ptsecurity-mosaic-list.d.ts +5 -5
- package/list/public-api.d.ts +3 -3
- package/{toggle → loader-overlay}/README.md +0 -0
- package/loader-overlay/index.d.ts +1 -0
- package/loader-overlay/loader-overlay.component.d.ts +33 -0
- package/loader-overlay/loader-overlay.module.d.ts +11 -0
- package/loader-overlay/package.json +10 -0
- package/loader-overlay/ptsecurity-mosaic-loader-overlay.d.ts +5 -0
- package/loader-overlay/public-api.d.ts +2 -0
- package/modal/README.md +33 -33
- package/modal/css-unit.pipe.d.ts +7 -7
- package/modal/index.d.ts +1 -1
- package/modal/modal-control.service.d.ts +20 -20
- package/modal/modal-ref.class.d.ts +36 -36
- package/modal/modal-util.d.ts +12 -12
- package/modal/modal.component.d.ts +128 -126
- package/modal/modal.directive.d.ts +17 -17
- package/modal/modal.module.d.ts +14 -14
- package/modal/modal.service.d.ts +33 -33
- package/modal/modal.type.d.ts +60 -59
- package/modal/ptsecurity-mosaic-modal.d.ts +5 -5
- package/modal/public-api.d.ts +6 -6
- package/navbar/README.md +41 -41
- package/navbar/index.d.ts +1 -1
- package/navbar/navbar-item.component.d.ts +161 -161
- package/navbar/navbar.component.d.ts +58 -58
- package/navbar/navbar.module.d.ts +14 -14
- package/navbar/ptsecurity-mosaic-navbar.d.ts +5 -5
- package/navbar/public-api.d.ts +4 -4
- package/navbar/vertical-navbar.animation.d.ts +2 -2
- package/navbar/vertical-navbar.component.d.ts +23 -23
- package/package.json +12 -4
- package/popover/README.md +32 -32
- package/popover/index.d.ts +1 -1
- package/popover/popover-animations.d.ts +4 -4
- package/popover/popover-confirm.component.d.ts +33 -33
- package/popover/popover.component.d.ts +74 -74
- package/popover/popover.module.d.ts +12 -12
- package/popover/ptsecurity-mosaic-popover.d.ts +5 -5
- package/popover/public-api.d.ts +4 -4
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/default-theme.css +1 -1
- package/progress-bar/index.d.ts +1 -1
- package/progress-bar/progress-bar.component.d.ts +18 -18
- package/progress-bar/progress-bar.module.d.ts +9 -9
- package/progress-bar/ptsecurity-mosaic-progress-bar.d.ts +5 -5
- package/progress-bar/public-api.d.ts +2 -2
- package/progress-spinner/index.d.ts +1 -1
- package/progress-spinner/progress-spinner.component.d.ts +19 -19
- package/progress-spinner/progress-spinner.module.d.ts +9 -9
- package/progress-spinner/ptsecurity-mosaic-progress-spinner.d.ts +5 -5
- package/progress-spinner/public-api.d.ts +2 -2
- package/ptsecurity-mosaic.d.ts +5 -5
- package/public-api.d.ts +1 -1
- package/radio/index.d.ts +1 -1
- package/radio/ptsecurity-mosaic-radio.d.ts +5 -5
- package/radio/public-api.d.ts +2 -2
- package/radio/radio.component.d.ts +207 -207
- package/radio/radio.module.d.ts +10 -10
- package/schematics/README.md +35 -35
- package/select/index.d.ts +1 -1
- package/select/ptsecurity-mosaic-select.d.ts +5 -5
- package/select/public-api.d.ts +3 -3
- package/select/select-option.directive.d.ts +20 -20
- package/select/select.component.d.ts +310 -310
- package/select/select.module.d.ts +15 -15
- package/sidebar/index.d.ts +1 -1
- package/sidebar/ptsecurity-mosaic-sidebar.d.ts +5 -5
- package/sidebar/public-api.d.ts +2 -2
- package/sidebar/sidebar-animations.d.ts +8 -8
- package/sidebar/sidebar.component.d.ts +53 -53
- package/sidebar/sidebar.module.d.ts +8 -8
- package/sidepanel/index.d.ts +1 -1
- package/sidepanel/ptsecurity-mosaic-sidepanel.d.ts +5 -5
- package/sidepanel/public-api.d.ts +6 -6
- package/sidepanel/sidepanel-animations.d.ts +14 -14
- package/sidepanel/sidepanel-config.d.ts +25 -25
- package/sidepanel/sidepanel-container.component.d.ts +45 -45
- package/sidepanel/sidepanel-directives.d.ts +50 -50
- package/sidepanel/sidepanel-ref.d.ts +24 -24
- package/sidepanel/sidepanel.module.d.ts +15 -15
- package/sidepanel/sidepanel.service.d.ts +57 -57
- package/splitter/index.d.ts +1 -1
- package/splitter/ptsecurity-mosaic-splitter.d.ts +5 -5
- package/splitter/public-api.d.ts +2 -2
- package/splitter/splitter.component.d.ts +130 -130
- package/splitter/splitter.module.d.ts +9 -9
- package/table/index.d.ts +1 -1
- package/table/ptsecurity-mosaic-table.d.ts +5 -5
- package/table/public-api.d.ts +2 -2
- package/table/table.component.d.ts +5 -5
- package/table/table.module.d.ts +10 -10
- package/tabs/index.d.ts +1 -1
- package/tabs/paginated-tab-header.d.ts +179 -179
- package/tabs/ptsecurity-mosaic-tabs.d.ts +5 -5
- package/tabs/public-api.d.ts +10 -10
- package/tabs/tab-body.component.d.ts +95 -95
- package/tabs/tab-content.directive.d.ts +9 -9
- package/tabs/tab-group.component.d.ts +133 -133
- package/tabs/tab-header.component.d.ts +35 -35
- package/tabs/tab-label-wrapper.directive.d.ts +30 -30
- package/tabs/tab-label.directive.d.ts +9 -9
- package/tabs/tab-nav-bar/index.d.ts +1 -1
- package/tabs/tab-nav-bar/tab-nav-bar.d.ts +38 -38
- package/tabs/tab.component.d.ts +66 -66
- package/tabs/tabs-animations.d.ts +4 -4
- package/tabs/tabs.module.d.ts +20 -20
- package/tags/index.d.ts +1 -1
- package/tags/ptsecurity-mosaic-tags.d.ts +5 -5
- package/tags/public-api.d.ts +5 -5
- package/tags/tag-default-options.d.ts +8 -8
- package/tags/tag-input.d.ts +77 -77
- package/tags/tag-list.component.d.ts +240 -240
- package/tags/tag-text-control.d.ts +10 -10
- package/tags/tag.component.d.ts +135 -135
- package/tags/tag.module.d.ts +11 -11
- package/textarea/index.d.ts +1 -1
- package/textarea/ptsecurity-mosaic-textarea.d.ts +5 -5
- package/textarea/public-api.d.ts +2 -2
- package/textarea/textarea.component.d.ts +111 -111
- package/textarea/textarea.module.d.ts +11 -11
- package/timepicker/index.d.ts +1 -1
- package/timepicker/ptsecurity-mosaic-timepicker.d.ts +5 -5
- package/timepicker/public-api.d.ts +3 -3
- package/timepicker/timepicker.constants.d.ts +20 -20
- package/timepicker/timepicker.directive.d.ts +146 -146
- package/timepicker/timepicker.module.d.ts +11 -11
- package/toggle/index.d.ts +1 -1
- package/toggle/ptsecurity-mosaic-toggle.d.ts +5 -5
- package/toggle/public-api.d.ts +2 -2
- package/toggle/toggle.component.d.ts +54 -54
- package/toggle/toggle.module.d.ts +10 -10
- package/tooltip/index.d.ts +1 -1
- package/tooltip/ptsecurity-mosaic-tooltip.d.ts +5 -5
- package/tooltip/public-api.d.ts +2 -2
- package/tooltip/tooltip.animations.d.ts +8 -8
- package/tooltip/tooltip.component.d.ts +91 -91
- package/tooltip/tooltip.module.d.ts +9 -9
- package/tree/control/base-tree-control.d.ts +40 -40
- package/tree/control/flat-tree-control.d.ts +52 -52
- package/tree/control/nested-tree-control.d.ts +19 -19
- package/tree/control/tree-control.d.ts +44 -44
- package/tree/data-source/flat-data-source.d.ts +80 -80
- package/tree/data-source/nested-data-source.d.ts +15 -15
- package/tree/index.d.ts +1 -1
- package/tree/node.d.ts +34 -34
- package/tree/outlet.d.ts +9 -9
- package/tree/padding.directive.d.ts +47 -47
- package/tree/ptsecurity-mosaic-tree.d.ts +5 -5
- package/tree/public-api.d.ts +15 -15
- package/tree/toggle.d.ts +28 -28
- package/tree/tree-base.d.ts +97 -97
- package/tree/tree-errors.d.ts +25 -25
- package/tree/tree-option.component.d.ts +72 -72
- package/tree/tree-selection.component.d.ts +132 -132
- package/tree/tree.d.ts +6 -6
- package/tree/tree.module.d.ts +16 -16
- package/tree-select/index.d.ts +1 -1
- package/tree-select/ptsecurity-mosaic-tree-select.d.ts +5 -5
- package/tree-select/public-api.d.ts +2 -2
- package/tree-select/tree-select.component.d.ts +277 -277
- package/tree-select/tree-select.module.d.ts +14 -14
@@ -1,501 +1,509 @@
|
|
1
|
-
import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
3
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, Inject, Injector, Input, Output, QueryList, Renderer2, TemplateRef, Type, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
4
|
-
import { ESCAPE, ENTER } from '@ptsecurity/cdk/keycodes';
|
5
|
-
import { ThemePalette } from '@ptsecurity/mosaic/core';
|
6
|
-
import { McModalControlService } from './modal-control.service';
|
7
|
-
import { McModalRef } from './modal-ref.class';
|
8
|
-
import { modalUtilObject as ModalUtil } from './modal-util';
|
9
|
-
import { ModalSize } from './modal.type';
|
10
|
-
import * as i0 from "@angular/core";
|
11
|
-
import * as i1 from "@angular/cdk/overlay";
|
12
|
-
import * as i2 from "./modal-control.service";
|
13
|
-
import * as i3 from "@ptsecurity/mosaic/button";
|
14
|
-
import * as i4 from "@ptsecurity/mosaic/icon";
|
15
|
-
import * as i5 from "@angular/common";
|
16
|
-
import * as i6 from "@angular/cdk/a11y";
|
17
|
-
import * as i7 from "./modal.directive";
|
18
|
-
import * as i8 from "./css-unit.pipe";
|
19
|
-
// Duration when perform animations (ms)
|
20
|
-
export const MODAL_ANIMATE_DURATION = 200;
|
21
|
-
export class McModalComponent extends McModalRef {
|
22
|
-
constructor(overlay, renderer, cfr, elementRef, viewContainer, modalControl, changeDetector, document) {
|
23
|
-
super();
|
24
|
-
this.overlay = overlay;
|
25
|
-
this.renderer = renderer;
|
26
|
-
this.cfr = cfr;
|
27
|
-
this.elementRef = elementRef;
|
28
|
-
this.viewContainer = viewContainer;
|
29
|
-
this.modalControl = modalControl;
|
30
|
-
this.changeDetector = changeDetector;
|
31
|
-
this.document = document;
|
32
|
-
this.themePalette = ThemePalette;
|
33
|
-
this.mcModalType = 'default';
|
34
|
-
this._mcVisible = false;
|
35
|
-
this.mcVisibleChange = new EventEmitter();
|
36
|
-
this.mcZIndex = 1000;
|
37
|
-
this.mcSize = ModalSize.Normal;
|
38
|
-
this.mcCloseByESC = true;
|
39
|
-
this._mcClosable = true;
|
40
|
-
this._mcMask = true;
|
41
|
-
this._mcMaskClosable = false;
|
42
|
-
// Trigger when modal open(visible) after animations
|
43
|
-
this.mcAfterOpen = new EventEmitter();
|
44
|
-
// Trigger when modal leave-animation over
|
45
|
-
this.mcAfterClose = new EventEmitter();
|
46
|
-
this.mcOkType = 'primary';
|
47
|
-
this.
|
48
|
-
this.
|
49
|
-
this.
|
50
|
-
this.
|
51
|
-
this.
|
52
|
-
this.
|
53
|
-
|
54
|
-
|
55
|
-
this.
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
//
|
113
|
-
//
|
114
|
-
//
|
115
|
-
//
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
const
|
148
|
-
const
|
149
|
-
|
150
|
-
this.
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
this.
|
167
|
-
}
|
168
|
-
|
169
|
-
this.
|
170
|
-
}
|
171
|
-
|
172
|
-
|
173
|
-
}
|
174
|
-
|
175
|
-
|
176
|
-
}
|
177
|
-
|
178
|
-
return this
|
179
|
-
}
|
180
|
-
|
181
|
-
return this.
|
182
|
-
}
|
183
|
-
|
184
|
-
return this.
|
185
|
-
}
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
}
|
218
|
-
}
|
219
|
-
// AoT
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
this.
|
332
|
-
}
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
this.contentComponentRef.
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
/** @nocollapse */ /** @nocollapse */ McModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: McModalComponent, selector: "mc-modal", inputs: { mcModalType: "mcModalType", mcComponent: "mcComponent", mcContent: "mcContent", mcComponentParams: "mcComponentParams", mcFooter: "mcFooter", mcVisible: "mcVisible", mcZIndex: "mcZIndex", mcWidth: "mcWidth", mcSize: "mcSize", mcWrapClassName: "mcWrapClassName", mcClassName: "mcClassName", mcStyle: "mcStyle", mcTitle: "mcTitle", mcCloseByESC: "mcCloseByESC", mcClosable: "mcClosable", mcMask: "mcMask", mcMaskClosable: "mcMaskClosable", mcMaskStyle: "mcMaskStyle", mcBodyStyle: "mcBodyStyle", mcOkText: "mcOkText", mcOkType: "mcOkType", mcOkLoading: "mcOkLoading", mcOnOk: "mcOnOk", mcCancelText: "mcCancelText", mcCancelLoading: "mcCancelLoading", mcOnCancel: "mcOnCancel", mcGetContainer: "mcGetContainer" }, outputs: { mcVisibleChange: "mcVisibleChange", mcAfterOpen: "mcAfterOpen", mcAfterClose: "mcAfterClose", mcOnOk: "mcOnOk", mcOnCancel: "mcOnCancel" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, static: true }, { propertyName: "bodyContainer", first: true, predicate: ["bodyContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true }, { propertyName: "autoFocusedButtons", predicate: ["autoFocusedButton"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Compatible: the <ng-content> can appear only once -->\r\n<ng-template #tplOriginContent>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n<div>\r\n <div *ngIf=\"mcMask\"\r\n class=\"mc-modal-mask\"\r\n [ngClass]=\"maskAnimationClassMap\"\r\n [class.mc-modal-mask-hidden]=\"hidden\"\r\n [ngStyle]=\"mcMaskStyle\"\r\n [style.zIndex]=\"mcZIndex\"\r\n ></div>\r\n <div (mousedown)=\"onClickMask($event)\"\r\n class=\"mc-modal-wrap {{ mcWrapClassName }}\"\r\n [style.zIndex]=\"mcZIndex\"\r\n [style.display]=\"hidden ? 'none' : ''\"\r\n tabindex=\"-1\">\r\n\r\n <div #modalContainer\r\n class=\"mc-modal {{ mcClassName }} mc-modal_{{ mcSize }}\"\r\n [ngClass]=\"modalAnimationClassMap\"\r\n [ngStyle]=\"mcStyle\"\r\n [style.width]=\"mcWidth | toCssUnit\"\r\n [style.transform-origin]=\"transformOrigin\">\r\n\r\n <div class=\"mc-modal-content\" cdkTrapFocus>\r\n <button *ngIf=\"mcClosable\"\r\n mc-button\r\n (click)=\"onClickCloseBtn()\"\r\n class=\"mc-modal-close mc-button_transparent\">\r\n <i mc-icon=\"mc-close-L_16\" class=\"mc-icon mc-icon_light\" [color]=\"themePalette.Second\"></i>\r\n </button>\r\n <ng-container [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"isModalType('default')\"\r\n [ngTemplateOutlet]=\"tplContentDefault\"></ng-container>\r\n <ng-container *ngSwitchCase=\"isModalType('confirm')\"\r\n [ngTemplateOutlet]=\"tplContentConfirm\"></ng-container>\r\n <ng-container *ngSwitchCase=\"isModalType('custom')\"\r\n [ngTemplateOutlet]=\"tplContentCustom\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #tplContentCustom>\r\n <ng-container #bodyContainer></ng-container>\r\n</ng-template>\r\n\r\n\r\n<!-- [Predefined] Default Modal Content -->\r\n<ng-template #tplContentDefault>\r\n <div *ngIf=\"mcTitle\" class=\"mc-modal-header\" [class.mc-modal-body_top-overflow]=\"isTopOverflow\">\r\n <div class=\"mc-modal-title\">\r\n <ng-container [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"isTemplateRef(mcTitle)\" [ngTemplateOutlet]=\"$any(mcTitle)\"></ng-container>\r\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcTitle)\">\r\n <div [innerHTML]=\"mcTitle\"></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mc-modal-body\" #modalBody [ngStyle]=\"mcBodyStyle\" (scroll)=\"checkOverflow()\">\r\n <ng-container #bodyContainer>\r\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\" [ngTemplateOutlet]=\"$any(mcContent)\"></ng-container>\r\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\r\n <div [innerHTML]=\"mcContent\"></div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"mcFooter || mcOkText || mcCancelText\" class=\"mc-modal-footer\" [class.mc-modal-body_bottom-overflow]=\"isBottomOverflow\">\r\n <ng-container [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"isTemplateRef(mcFooter)\" [ngTemplateOutlet]=\"$any(mcFooter)\"></ng-container>\r\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcFooter)\">\r\n <div [innerHTML]=\"mcFooter\"></div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"isModalButtons(mcFooter)\">\r\n <ng-container *ngFor=\"let button of $any(mcFooter)\">\r\n <button\r\n mc-button\r\n #autoFocusedButton\r\n [attr.autofocus]=\"button.autoFocus\"\r\n [attr.mc-modal-main-action]=\"button.mcModalMainAction\"\r\n *ngIf=\"getButtonCallableProp(button, 'show')\"\r\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\r\n [class.mc-progress]=\"getButtonCallableProp(button, 'loading')\"\r\n (click)=\"onButtonClick(button)\"\r\n [color]=\"button.type\">\r\n {{ button.label }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <button\r\n #autoFocusedButton\r\n [attr.autofocus]=\"true\"\r\n *ngIf=\"mcOkText\"\r\n mc-button\r\n [color]=\"themePalette.Primary\"\r\n (click)=\"onClickOkCancel('ok')\">\r\n\r\n {{ okText }}\r\n </button>\r\n <button *ngIf=\"mcCancelText\" mc-button (click)=\"onClickOkCancel('cancel')\">\r\n {{ cancelText }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<!-- /[Predefined] Default Modal Content -->\r\n\r\n<!-- [Predefined] Confirm Modal Content -->\r\n<ng-template #tplContentConfirm>\r\n <div class=\"mc-modal-body\" [ngStyle]=\"mcBodyStyle\">\r\n <div class=\"mc-confirm-body-wrapper\">\r\n <div class=\"mc-confirm-body\">\r\n <div class=\"mc-confirm-content\">\r\n <ng-container #bodyContainer>\r\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\r\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\"\r\n [ngTemplateOutlet]=\"$any(mcContent)\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\r\n <div [innerHTML]=\"mcContent\"></div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div> <!-- /.mc-confirm-body-wrapper -->\r\n </div>\r\n <div class=\"mc-confirm-btns\" *ngIf=\"mcOkText || mcCancelText\">\r\n <button\r\n mc-button\r\n #autoFocusedButton\r\n [color]=\"mcOkType\"\r\n [attr.autofocus]=\"true\"\r\n *ngIf=\"mcOkText\"\r\n (click)=\"onClickOkCancel('ok')\">\r\n\r\n {{ okText }}\r\n </button>\r\n\r\n <button mc-button [color]=\"themePalette.Second\" *ngIf=\"mcCancelText\" (click)=\"onClickOkCancel('cancel')\">\r\n {{ cancelText }}\r\n </button>\r\n </div>\r\n</ng-template>\r\n<!-- /[Predefined] Confirm Modal Content -->\r\n", styles: [".mc-confirm .mc-modal-header,.mc-confirm .mc-modal-close{display:none}.mc-confirm .mc-modal-body{padding:var(--mc-modal-confirm-size-padding, 24px)}.mc-confirm-body-wrapper{zoom:1}.mc-confirm-body-wrapper:before,.mc-confirm-body-wrapper:after{content:\"\";display:table}.mc-confirm-body-wrapper:after{clear:both}.mc-confirm-body .mc-confirm-title{display:block;overflow:auto}.mc-confirm .mc-confirm-btns{border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);text-align:right}.mc-confirm .mc-confirm-btns button+button{margin:16px}.mc-modal{box-sizing:border-box;position:relative;top:var(--mc-modal-size-top, 48px);width:auto;margin:0 auto;list-style:none}.mc-modal.zoom-enter,.mc-modal.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.mc-modal.mc-modal_small{width:var(--mc-modal-size-small, 400px)}.mc-modal.mc-modal_normal{width:var(--mc-modal-size-normal, 640px)}.mc-modal.mc-modal_large{width:var(--mc-modal-size-large, 960px)}.mc-modal .mc-modal-close{position:absolute;z-index:10;top:0;right:0;width:var(--mc-modal-size-close-width, 56px);height:var(--mc-modal-size-close-width, 56px)}.mc-modal-wrap{position:fixed;z-index:1000;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.mc-modal-title{margin:0}.mc-modal-content{position:relative;border-radius:var(--mc-modal-size-border-radius, 4px);background-clip:padding-box;background-color:#fff}.mc-modal-header{display:flex;align-items:center;height:var(--mc-modal-header-size-height, 56px);border-radius:var(--mc-modal-header-size-border-radius, 4px 4px 0 0);padding:var(--mc-modal-header-size-padding, 0 16px)}.mc-modal-body{display:block;overflow-y:auto;max-height:var(--mc-modal-body-size-max-height, calc(100vh - 260px));padding:var(--mc-modal-body-size-padding, 16px 24px 24px);word-wrap:break-word}.mc-modal-footer{display:flex;align-items:center;justify-content:right;height:var(--mc-modal-footer-size-height, 64px);border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);padding:var(--mc-modal-footer-size-padding, 0 16px)}.mc-modal-footer button+button{margin-left:16px;margin-bottom:0}.mc-modal-mask{position:fixed;z-index:1000;top:0;right:0;left:0;bottom:0;height:100%}.mc-modal-mask.mc-modal-mask-hidden{display:none}.mc-modal-open{overflow:hidden}\n"], components: [{ type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { type: i4.McIcon, selector: "[mc-icon]", inputs: ["color"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { type: i3.McButtonCssStyler, selector: "[mc-button]" }, { type: i4.McIconCSSStyler, selector: "[mc-icon]" }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.McModalMainAction, selector: "[mc-modal-main-action]" }], pipes: { "toCssUnit": i8.CssUnitPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i2.McModalControlService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
}],
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
type: Input
|
424
|
-
}],
|
425
|
-
type: Input
|
426
|
-
}],
|
427
|
-
type: Input
|
428
|
-
}],
|
429
|
-
type:
|
430
|
-
}],
|
431
|
-
type: Input
|
432
|
-
}],
|
433
|
-
type: Input
|
434
|
-
}],
|
435
|
-
type:
|
436
|
-
}],
|
437
|
-
type: Input
|
438
|
-
}],
|
439
|
-
type: Input
|
440
|
-
}],
|
441
|
-
type: Input
|
442
|
-
}],
|
443
|
-
type: Input
|
444
|
-
}],
|
445
|
-
type: Input
|
446
|
-
}],
|
447
|
-
type: Input
|
448
|
-
}],
|
449
|
-
type: Input
|
450
|
-
}],
|
451
|
-
type: Input
|
452
|
-
}],
|
453
|
-
type: Input
|
454
|
-
}],
|
455
|
-
type: Input
|
456
|
-
}],
|
457
|
-
type:
|
458
|
-
}],
|
459
|
-
type:
|
460
|
-
}],
|
461
|
-
type: Input
|
462
|
-
}],
|
463
|
-
type:
|
464
|
-
}],
|
465
|
-
type:
|
466
|
-
}],
|
467
|
-
type: Input
|
468
|
-
}, {
|
469
|
-
type:
|
470
|
-
}],
|
471
|
-
type: Input
|
472
|
-
}],
|
473
|
-
type: Input
|
474
|
-
}],
|
475
|
-
type: Input
|
476
|
-
}, {
|
477
|
-
type: Output
|
478
|
-
}],
|
479
|
-
type:
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
}
|
485
|
-
type:
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
}]
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
}
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBRXhCLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLElBQUksU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sRUFBc0MsU0FBUyxFQUE4QixNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQUd6Ryx3Q0FBd0M7QUFDeEMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBZTFDLE1BQU0sT0FBTyxnQkFBbUMsU0FBUSxVQUFn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c0JBRFQsS0FBSztnQkFNRixjQUFjO3NCQURqQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdGLFdBQVc7c0JBRGQsS0FBSztnQkFLYSxNQUFNO3NCQUF4QixLQUFLOztzQkFBSSxNQUFNO2dCQUNQLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0YsZUFBZTtzQkFEbEIsS0FBSztnQkFLYSxVQUFVO3NCQUE1QixLQUFLOztzQkFBSSxNQUFNO2dCQUUrQixjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDMEIsYUFBYTtzQkFBbkYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFWixrQkFBa0I7c0JBQTFFLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUUvQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBb0RiLGNBQWM7c0JBQXRCLEtBQUs7O0FBZ1lWLFlBQVk7QUFFWixTQUFTLFNBQVMsQ0FBQyxHQUFjO0lBQzdCLDhDQUE4QztJQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFHO1FBQ1IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDO1FBQ3RELE9BQVEsR0FBbUIsQ0FBQyxJQUFJLEtBQUssVUFBVTtRQUMvQyxPQUFRLEdBQW1CLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBDb21wb25lbnRSZWYsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFJlbmRlcmVyMixcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFR5cGUsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3Q2hpbGRyZW4sXHJcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRVNDQVBFLCBFTlRFUiB9IGZyb20gJ0BwdHNlY3VyaXR5L2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0BwdHNlY3VyaXR5L21vc2FpYy9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTWNNb2RhbENvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1jb250cm9sLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNY01vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYuY2xhc3MnO1xyXG5pbXBvcnQgeyBtb2RhbFV0aWxPYmplY3QgYXMgTW9kYWxVdGlsIH0gZnJvbSAnLi9tb2RhbC11dGlsJztcclxuaW1wb3J0IHsgSU1vZGFsQnV0dG9uT3B0aW9ucywgSU1vZGFsT3B0aW9ucywgTW9kYWxTaXplLCBNb2RhbFR5cGUsIE9uQ2xpY2tDYWxsYmFjayB9IGZyb20gJy4vbW9kYWwudHlwZSc7XHJcblxyXG5cclxuLy8gRHVyYXRpb24gd2hlbiBwZXJmb3JtIGFuaW1hdGlvbnMgKG1zKVxyXG5leHBvcnQgY29uc3QgTU9EQUxfQU5JTUFURV9EVVJBVElPTiA9IDIwMDtcclxuXHJcbnR5cGUgQW5pbWF0aW9uU3RhdGUgPSAnZW50ZXInIHwgJ2xlYXZlJyB8IG51bGw7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ21jLW1vZGFsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBob3N0OiB7XHJcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleURvd24oJGV2ZW50KSdcclxuICAgIH1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1jTW9kYWxDb21wb25lbnQ8VCA9IGFueSwgUiA9IGFueT4gZXh0ZW5kcyBNY01vZGFsUmVmPFQsIFI+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElNb2RhbE9wdGlvbnMge1xyXG5cclxuICAgIHRoZW1lUGFsZXR0ZSA9IFRoZW1lUGFsZXR0ZTtcclxuXHJcbiAgICBASW5wdXQoKSBtY01vZGFsVHlwZTogTW9kYWxUeXBlID0gJ2RlZmF1bHQnO1xyXG5cclxuICAgIC8vIFRoZSBpbnN0YW5jZSBvZiBjb21wb25lbnQgb3BlbmVkIGludG8gdGhlIGRpYWxvZy5cclxuICAgIEBJbnB1dCgpIG1jQ29tcG9uZW50OiBUeXBlPFQ+O1xyXG4gICAgLy8gSWYgbm90IHNwZWNpZmllZCwgd2lsbCB1c2UgPG5nLWNvbnRlbnQ+XHJcbiAgICBASW5wdXQoKSBtY0NvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHt9PiB8IFR5cGU8VD47XHJcbiAgICAvLyBhdmFpbGFibGUgd2hlbiBtY0NvbnRlbnQgaXMgYSBjb21wb25lbnRcclxuICAgIEBJbnB1dCgpIG1jQ29tcG9uZW50UGFyYW1zOiBUO1xyXG4gICAgLy8gRGVmYXVsdCBNb2RhbCBPTkxZXHJcbiAgICBASW5wdXQoKSBtY0Zvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8e30+IHwgSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgbWNWaXNpYmxlKCkgeyByZXR1cm4gdGhpcy5fbWNWaXNpYmxlOyB9XHJcbiAgICBzZXQgbWNWaXNpYmxlKHZhbHVlKSB7IHRoaXMuX21jVmlzaWJsZSA9IHZhbHVlOyB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbWNWaXNpYmxlID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpIG1jVmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBASW5wdXQoKSBtY1pJbmRleDogbnVtYmVyID0gMTAwMDtcclxuICAgIEBJbnB1dCgpIG1jV2lkdGg6IG51bWJlciB8IHN0cmluZztcclxuICAgIEBJbnB1dCgpIG1jU2l6ZTogTW9kYWxTaXplID0gTW9kYWxTaXplLk5vcm1hbDtcclxuICAgIEBJbnB1dCgpIG1jV3JhcENsYXNzTmFtZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgbWNDbGFzc05hbWU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIG1jU3R5bGU6IG9iamVjdDtcclxuICAgIEBJbnB1dCgpIG1jVGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHt9PjtcclxuICAgIEBJbnB1dCgpIG1jQ2xvc2VCeUVTQzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBtY0Nsb3NhYmxlKCkgeyByZXR1cm4gdGhpcy5fbWNDbG9zYWJsZTsgfVxyXG4gICAgc2V0IG1jQ2xvc2FibGUodmFsdWUpIHsgdGhpcy5fbWNDbG9zYWJsZSA9IHZhbHVlOyB9XHJcbiAgICBwcml2YXRlIF9tY0Nsb3NhYmxlID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1jTWFzaygpIHsgcmV0dXJuIHRoaXMuX21jTWFzazsgfVxyXG4gICAgc2V0IG1jTWFzayh2YWx1ZSkgeyB0aGlzLl9tY01hc2sgPSB2YWx1ZTsgfVxyXG4gICAgcHJpdmF0ZSBfbWNNYXNrID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1jTWFza0Nsb3NhYmxlKCkgeyByZXR1cm4gdGhpcy5fbWNNYXNrQ2xvc2FibGU7IH1cclxuICAgIHNldCBtY01hc2tDbG9zYWJsZSh2YWx1ZSkgeyB0aGlzLl9tY01hc2tDbG9zYWJsZSA9IHZhbHVlOyB9XHJcbiAgICBwcml2YXRlIF9tY01hc2tDbG9zYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIG1jTWFza1N0eWxlOiBvYmplY3Q7XHJcbiAgICBASW5wdXQoKSBtY0JvZHlTdHlsZTogb2JqZWN0O1xyXG5cclxuICAgIC8vIFRyaWdnZXIgd2hlbiBtb2RhbCBvcGVuKHZpc2libGUpIGFmdGVyIGFuaW1hdGlvbnNcclxuICAgIEBPdXRwdXQoKSBtY0FmdGVyT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIC8vIFRyaWdnZXIgd2hlbiBtb2RhbCBsZWF2ZS1hbmltYXRpb24gb3ZlclxyXG4gICAgQE91dHB1dCgpIG1jQWZ0ZXJDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8Uj4oKTtcclxuXHJcbiAgICAvLyAtLS0gUHJlZGVmaW5lZCBPSyAmIENhbmNlbCBidXR0b25zXHJcbiAgICBASW5wdXQoKSBtY09rVGV4dDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgbWNPa1R5cGUgPSAncHJpbWFyeSc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBtY09rTG9hZGluZygpIHsgcmV0dXJuIHRoaXMuX21jT2tMb2FkaW5nOyB9XHJcbiAgICBzZXQgbWNPa0xvYWRpbmcodmFsdWUpIHsgdGhpcy5fbWNPa0xvYWRpbmcgPSB2YWx1ZTsgfVxyXG4gICAgcHJpdmF0ZSBfbWNPa0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBAT3V0cHV0KCkgbWNPbk9rOiBFdmVudEVtaXR0ZXI8VD4gfCBPbkNsaWNrQ2FsbGJhY2s8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcbiAgICBASW5wdXQoKSBtY0NhbmNlbFRleHQ6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1jQ2FuY2VsTG9hZGluZygpIHsgcmV0dXJuIHRoaXMuX21jQ2FuY2VsTG9hZGluZzsgfVxyXG4gICAgc2V0IG1jQ2FuY2VsTG9hZGluZyh2YWx1ZSkgeyB0aGlzLl9tY0NhbmNlbExvYWRpbmcgPSB2YWx1ZTsgfVxyXG4gICAgcHJpdmF0ZSBfbWNDYW5jZWxMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KCkgQE91dHB1dCgpIG1jT25DYW5jZWw6IEV2ZW50RW1pdHRlcjxUPiB8IE9uQ2xpY2tDYWxsYmFjazxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdtb2RhbENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIG1vZGFsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnYm9keUNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZSB9KSBib2R5Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gICAgLy8gT25seSBhaW0gdG8gZm9jdXMgdGhlIG9rIGJ1dHRvbiB0aGF0IG5lZWRzIHRvIGJlIGF1dG8gZm9jdXNlZFxyXG4gICAgQFZpZXdDaGlsZHJlbignYXV0b0ZvY3VzZWRCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgYXV0b0ZvY3VzZWRCdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbW9kYWxCb2R5JykgbW9kYWxCb2R5OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIGlzVG9wT3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzQm90dG9tT3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBtYXNrQW5pbWF0aW9uQ2xhc3NNYXA6IG9iamVjdDtcclxuICAgIG1vZGFsQW5pbWF0aW9uQ2xhc3NNYXA6IG9iamVjdDtcclxuICAgIC8vIFRoZSBvcmlnaW4gcG9pbnQgdGhhdCBhbmltYXRpb24gYmFzZWQgb25cclxuICAgIHRyYW5zZm9ybU9yaWdpbiA9ICcwcHggMHB4IDBweCc7XHJcblxyXG4gICAgLy8gT2JzZXJ2YWJsZSBhbGlhcyBmb3IgbWNBZnRlck9wZW5cclxuICAgIGdldCBhZnRlck9wZW4oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWNBZnRlck9wZW4uYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT2JzZXJ2YWJsZSBhbGlhcyBmb3IgbWNBZnRlckNsb3NlXHJcbiAgICBnZXQgYWZ0ZXJDbG9zZSgpOiBPYnNlcnZhYmxlPFI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tY0FmdGVyQ2xvc2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9rVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1jT2tUZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYW5jZWxUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWNDYW5jZWxUZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluZGljYXRlIHdoZXRoZXIgdGhpcyBkaWFsb2cgc2hvdWxkIGhpZGRlblxyXG4gICAgZ2V0IGhpZGRlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMubWNWaXNpYmxlICYmICF0aGlzLmFuaW1hdGlvblN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSB0aGUgcmVmZXJlbmNlIHdoZW4gdXNpbmcgbWNDb250ZW50IGFzIENvbXBvbmVudFxyXG4gICAgcHJpdmF0ZSBjb250ZW50Q29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8VD47XHJcbiAgICAvLyBDdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZTogQW5pbWF0aW9uU3RhdGU7XHJcbiAgICBwcml2YXRlIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBPdmVybGF5UmVmO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxDb250cm9sOiBNY01vZGFsQ29udHJvbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55XHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIG1jR2V0Q29udGFpbmVyOiBIVE1MRWxlbWVudCB8IE92ZXJsYXlSZWYgfCAoKCkgPT4gSFRNTEVsZW1lbnQgfCBPdmVybGF5UmVmKSA9ICgpID0+IHRoaXMub3ZlcmxheS5jcmVhdGUoKTtcclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICAvLyBDcmVhdGUgY29tcG9uZW50IGFsb25nIHdpdGhvdXQgVmlld1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcG9uZW50KHRoaXMubWNDb250ZW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQodGhpcy5tY0NvbnRlbnQgYXMgVHlwZTxUPik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXR1cCBkZWZhdWx0IGJ1dHRvbiBvcHRpb25zXHJcbiAgICAgICAgaWYgKHRoaXMuaXNNb2RhbEJ1dHRvbnModGhpcy5tY0Zvb3RlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5tY0Zvb3RlciA9IHRoaXMuZm9ybWF0TW9kYWxCdXR0b25zKHRoaXMubWNGb290ZXIgYXMgSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcG9uZW50KHRoaXMubWNDb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRHluYW1pY0NvbXBvbmVudCh0aGlzLm1jQ29tcG9uZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBsYWNlIHRoZSBtb2RhbCBkb20gdG8gZWxzZXdoZXJlXHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSB0eXBlb2YgdGhpcy5tY0dldENvbnRhaW5lciA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMubWNHZXRDb250YWluZXIoKSA6IHRoaXMubWNHZXRDb250YWluZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250YWluZXIgaW5zdGFuY2VvZiBPdmVybGF5UmVmKSB7XHJcbiAgICAgICAgICAgIC8vIE5PVEU6IG9ubHkgYXR0YWNoIHRoZSBkb20gdG8gb3ZlcmxheSwgdGhlIHZpZXcgY29udGFpbmVyIGlzIG5vdCBjaGFuZ2VkIGFjdHVhbGx5XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm92ZXJsYXlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlZ2lzdGVyIG1vZGFsIHdoZW4gYWZ0ZXJPcGVuL2FmdGVyQ2xvc2UgaXMgc3RhYmxlXHJcbiAgICAgICAgdGhpcy5tb2RhbENvbnRyb2wucmVnaXN0ZXJNb2RhbCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBbTk9URV0gTk9UIGF2YWlsYWJsZSB3aGVuIHVzaW5nIGJ5IHNlcnZpY2UhXHJcbiAgICAvLyBCZWNhdXNlIG5nT25DaGFuZ2VzIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHVzaW5nIGJ5IHNlcnZpY2UsXHJcbiAgICAvLyBoZXJlIHdlIGNhbid0IHN1cHBvcnQgXCJtY0NvbnRlbnRcIihDb21wb25lbnQpIGV0Yy4gYXMgaW5wdXRzIHRoYXQgaW5pdGlhbGl6ZWQgZHluYW1pY2FsbHkuXHJcbiAgICAvLyBCVVQ6IFVzZXIgYWxzbyBjYW4gY2hhbmdlIFwibWNDb250ZW50XCIgZHluYW1pY2FsbHkgdG8gdHJpZ2dlciBVSSBjaGFuZ2VzXHJcbiAgICAvLyAocHJvdmlkZWQgeW91IGRvbid0IHVzZSBcYkNvbXBvbmVudCB0aGF0IG5lZWRzIGluaXRpYWxpemF0aW9ucylcclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5tY1Zpc2libGUpIHtcclxuICAgICAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgYW5pbWF0aW9uIHdoaWxlIGluaXRpYWxpemluZ1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVZpc2libGVTdGF0ZUNoYW5nZSh0aGlzLm1jVmlzaWJsZSwgIWNoYW5nZXMubWNWaXNpYmxlLmZpcnN0Q2hhbmdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIC8vIElmIHVzaW5nIENvbXBvbmVudCwgaXQgaXMgdGhlIHRpbWUgdG8gYXR0YWNoIFZpZXcgd2hpbGUgYm9keUNvbnRhaW5lciBpcyByZWFkeVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5ib2R5Q29udGFpbmVyLmluc2VydCh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF0/LmZvY3VzKCk7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgYXV0b0ZvY3VzZWRCdXR0b24gb2YgdGhpcy5hdXRvRm9jdXNlZEJ1dHRvbnMudG9BcnJheSgpKSB7XHJcbiAgICAgICAgICAgIGlmIChhdXRvRm9jdXNlZEJ1dHRvbi5uYXRpdmVFbGVtZW50LmF1dG9mb2N1cykge1xyXG4gICAgICAgICAgICAgICAgKGF1dG9Gb2N1c2VkQnV0dG9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIE92ZXJsYXlSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja092ZXJmbG93KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLm1vZGFsQm9keT8ubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKCFuYXRpdmVFbGVtZW50KSB7IHJldHVybjsgfVxyXG5cclxuICAgICAgICBjb25zdCBzY3JvbGxUb3A6IG51bWJlciA9IG5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgICAgIGNvbnN0IG9mZnNldEhlaWdodDogbnVtYmVyID0gbmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0OiBudW1iZXIgPSBuYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5pc1RvcE92ZXJmbG93ID0gc2Nyb2xsVG9wID4gMDtcclxuXHJcbiAgICAgICAgdGhpcy5pc0JvdHRvbU92ZXJmbG93ID0gKHNjcm9sbFRvcCBhcyBudW1iZXIgKyBvZmZzZXRIZWlnaHQgYXMgbnVtYmVyKSA8IHNjcm9sbEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuKCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlVmlzaWJsZUZyb21JbnNpZGUodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UocmVzdWx0PzogUikge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlVmlzaWJsZUZyb21JbnNpZGUoZmFsc2UsIHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGVzdHJveSBlcXVhbHMgQ2xvc2VcclxuICAgIGRlc3Ryb3kocmVzdWx0PzogUikge1xyXG4gICAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJrRm9yQ2hlY2soKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmlnZ2VyT2soKSB7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrT2tDYW5jZWwoJ29rJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJpZ2dlckNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLm9uQ2xpY2tPa0NhbmNlbCgnY2FuY2VsJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW5zdGFuY2UoKTogTWNNb2RhbENvbXBvbmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudENvbXBvbmVudFJlZigpOiBDb21wb25lbnRSZWY8VD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRDb21wb25lbnRSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudENvbXBvbmVudCgpOiBUIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Q29tcG9uZW50UmVmICYmIHRoaXMuY29udGVudENvbXBvbmVudFJlZi5pbnN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1jRm9vdGVyKCk6IEhUTUxFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWMtbW9kYWwtZm9vdGVyJykuaXRlbSgwKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrTWFzaygkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMubWNNYXNrICYmXHJcbiAgICAgICAgICAgIHRoaXMubWNNYXNrQ2xvc2FibGUgJiZcclxuICAgICAgICAgICAgKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnbWMtbW9kYWwtd3JhcCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMubWNWaXNpYmxlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1yZXNlcnZlZC1rZXl3b3Jkc1xyXG4gICAgaXNNb2RhbFR5cGUodHlwZTogTW9kYWxUeXBlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWNNb2RhbFR5cGUgPT09IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcblxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvbiAua2V5IGlzbid0IHN1cHBvcnRlZCBpbiBFZGdlXHJcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJiB0aGlzLmNvbnRhaW5lciAmJiAodGhpcy5jb250YWluZXIgaW5zdGFuY2VvZiBPdmVybGF5UmVmKSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb24gLmtleSBpc24ndCBzdXBwb3J0ZWQgaW4gRWRnZVxyXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleUNvZGUgPT09IEVOVEVSKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1jTW9kYWxUeXBlID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlck9rKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICh0aGlzLmdldEVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCdbbWMtbW9kYWwtbWFpbi1hY3Rpb25dJykgYXMgSFRNTEVsZW1lbnQpPy5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQW9UXHJcbiAgICBvbkNsaWNrQ2xvc2VCdG4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWNWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQW9UXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXJlc2VydmVkLWtleXdvcmRzXHJcbiAgICBvbkNsaWNrT2tDYW5jZWwodHlwZTogJ29rJyB8ICdjYW5jZWwnKSB7XHJcbiAgICAgICAgY29uc3QgdHJpZ2dlciA9IHsgb2s6IHRoaXMubWNPbk9rLCBjYW5jZWw6IHRoaXMubWNPbkNhbmNlbCB9W3R5cGVdO1xyXG4gICAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB7IG9rOiAnbWNPa0xvYWRpbmcnLCBjYW5jZWw6ICdtY0NhbmNlbExvYWRpbmcnIH1bdHlwZV07XHJcblxyXG4gICAgICAgIGlmICh0cmlnZ2VyIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXIuZW1pdCh0aGlzLmdldENvbnRlbnRDb21wb25lbnQoKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdHJpZ2dlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdHJpZ2dlcih0aGlzLmdldENvbnRlbnRDb21wb25lbnQoKSk7XHJcbiAgICAgICAgICAgIC8vIFVzZXJzIGNhbiByZXR1cm4gXCJmYWxzZVwiIHRvIHByZXZlbnQgY2xvc2luZyBieSBkZWZhdWx0XHJcbiAgICAgICAgICAgIGNvbnN0IGNhc2VDbG9zZSA9IChkb0Nsb3NlOiBib29sZWFuIHwgdm9pZCB8IHt9KSA9PiAoZG9DbG9zZSAhPT0gZmFsc2UpICYmIHRoaXMuY2xvc2UoZG9DbG9zZSBhcyBSKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1tsb2FkaW5nS2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVUaGVuID0gKGRvQ2xvc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzW2xvYWRpbmdLZXldID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZUNsb3NlKGRvQ2xvc2UpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIChyZXN1bHQgYXMgUHJvbWlzZTx2b2lkPikudGhlbihoYW5kbGVUaGVuKS5jYXRjaChoYW5kbGVUaGVuKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNhc2VDbG9zZShyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFvVFxyXG4gICAgaXNOb25FbXB0eVN0cmluZyh2YWx1ZToge30pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQW9UXHJcbiAgICBpc1RlbXBsYXRlUmVmKHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFvVFxyXG4gICAgaXNDb21wb25lbnQodmFsdWU6IHt9KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBb1RcclxuICAgIGlzTW9kYWxCdXR0b25zKHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvb2t1cCBhIGJ1dHRvbidzIHByb3BlcnR5LCBpZiB0aGUgcHJvcCBpcyBhIGZ1bmN0aW9uLCBjYWxsICYgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlLCByZXR1cm4gaXRzZWxmLlxyXG4gICAgLy8gQW9UXHJcbiAgICBnZXRCdXR0b25DYWxsYWJsZVByb3Aob3B0aW9uczogSU1vZGFsQnV0dG9uT3B0aW9uczxUPiwgcHJvcDogc3RyaW5nKToge30ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1twcm9wXTtcclxuICAgICAgICBjb25zdCBhcmdzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgYXJncy5wdXNoKHRoaXMuY29udGVudENvbXBvbmVudFJlZi5pbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUuYXBwbHkob3B0aW9ucywgYXJncykgOiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPbiBtY0Zvb3RlcidzIG1vZGFsIGJ1dHRvbiBjbGlja1xyXG4gICAgLy8gQW9UXHJcbiAgICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogSU1vZGFsQnV0dG9uT3B0aW9uczxUPikge1xyXG4gICAgICAgIC8vIENhbGwgb25DbGljayBkaXJlY3RseVxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbmZlcnJlZC1lbXB0eS1vYmplY3QtdHlwZSAgcnVsZSBzZWVtcyB0byBiZSBicm9rZW5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEJ1dHRvbkNhbGxhYmxlUHJvcChidXR0b24sICdvbkNsaWNrJyk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgKHJlc3VsdCBhcyBQcm9taXNlPHt9PikudGhlbigoKSA9PiBidXR0b24ubG9hZGluZyA9IGZhbHNlKS5jYXRjaCgoKSA9PiBidXR0b24ubG9hZGluZyA9IGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRG8gcmVzdCB0aGluZ3Mgd2hlbiB2aXNpYmxlIHN0YXRlIGNoYW5nZWRcclxuICAgIHByaXZhdGUgaGFuZGxlVmlzaWJsZVN0YXRlQ2hhbmdlKHZpc2libGU6IGJvb2xlYW4sIGFuaW1hdGlvbjogYm9vbGVhbiA9IHRydWUsIGNsb3NlUmVzdWx0PzogUik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgLy8gSGlkZSBzY3JvbGxiYXIgYXQgdGhlIGZpcnN0IHRpbWUgd2hlbiBzaG93biB1cFxyXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQm9keU92ZXJmbG93KDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2VcclxuICAgICAgICAgICAgLnJlc29sdmUoYW5pbWF0aW9uICYmIHRoaXMuYW5pbWF0ZVRvKHZpc2libGUpKVxyXG4gICAgICAgICAgICAvLyBFbWl0IG9wZW4vY2xvc2UgZXZlbnQgYWZ0ZXIgYW5pbWF0aW9ucyBvdmVyXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tY0FmdGVyT3Blbi5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWNBZnRlckNsb3NlLmVtaXQoY2xvc2VSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3cvaGlkZSBzY3JvbGxiYXIgd2hlbiBhbmltYXRpb24gaXMgb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQm9keU92ZXJmbG93KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoYW5nZSBtY1Zpc2libGUgZnJvbSBpbnNpZGVcclxuICAgIHByaXZhdGUgY2hhbmdlVmlzaWJsZUZyb21JbnNpZGUodmlzaWJsZTogYm9vbGVhbiwgY2xvc2VSZXN1bHQ/OiBSKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWNWaXNpYmxlICE9PSB2aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIC8vIENoYW5nZSBtY1Zpc2libGUgdmFsdWUgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgdGhpcy5tY1Zpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgICAgICAgICB0aGlzLm1jVmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVmlzaWJsZVN0YXRlQ2hhbmdlKHZpc2libGUsIHRydWUsIGNsb3NlUmVzdWx0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoYW5nZUFuaW1hdGlvblN0YXRlKHN0YXRlOiBBbmltYXRpb25TdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXNrQW5pbWF0aW9uQ2xhc3NNYXAgPSB7XHJcbiAgICAgICAgICAgICAgICBbYGZhZGUtJHtzdGF0ZX1gXTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIFtgZmFkZS0ke3N0YXRlfS1hY3RpdmVgXTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tb2RhbEFuaW1hdGlvbkNsYXNzTWFwID0ge1xyXG4gICAgICAgICAgICAgICAgW2B6b29tLSR7c3RhdGV9YF06IHRydWUsXHJcbiAgICAgICAgICAgICAgICBbYHpvb20tJHtzdGF0ZX0tYWN0aXZlYF06IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHRoaXMubWFza0FuaW1hdGlvbkNsYXNzTWFwID0gdGhpcy5tb2RhbEFuaW1hdGlvbkNsYXNzTWFwID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50Q29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYW5pbWF0ZVRvKGlzVmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgLy8gRmlndXJlIG91dCB0aGUgbGFzdGVzdCBjbGljayBwb3NpdGlvbiB3aGVuIHNob3dzIHVwXHJcbiAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAvLyBbTk9URV0gVXNpbmcgdGltZW91dCBkdWUgdG8gdGhlIGRvY3VtZW50LmNsaWNrIGV2ZW50IGlzIGZpcmVkIGxhdGVyIHRoYW4gdmlzaWJsZSBjaGFuZ2UsXHJcbiAgICAgICAgICAgIC8vIHNvIGlmIG5vdCBwb3N0cG9uZWQgdG8gbmV4dCBldmVudC1sb29wLCB3ZSBjYW4ndCBnZXQgdGhlIGxhc3Rlc3QgY2xpY2sgcG9zaXRpb25cclxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUcmFuc2Zvcm1PcmlnaW4oKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZUFuaW1hdGlvblN0YXRlKGlzVmlzaWJsZSA/ICdlbnRlcicgOiAnbGVhdmUnKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIHdoZW4gYW5pbWF0aW9uIGlzIG92ZXJcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQW5pbWF0aW9uU3RhdGUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBNT0RBTF9BTklNQVRFX0RVUkFUSU9OXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb3JtYXRNb2RhbEJ1dHRvbnMoYnV0dG9uczogSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdKTogSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdIHtcclxuICAgICAgICByZXR1cm4gYnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4ge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9Mb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLi4uYnV0dG9uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBjb21wb25lbnQgZHluYW1pY2FsbHkgYnV0IG5vdCBhdHRhY2ggdG8gYW55IFZpZXdcclxuICAgICAqICh0aGlzIGFjdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gYm9keUNvbnRhaW5lciBpcyByZWFkeSlcclxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3JlYXRlRHluYW1pY0NvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8VD4pIHtcclxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcclxuICAgICAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE1jTW9kYWxSZWYsIHVzZVZhbHVlOiB0aGlzfV0sXHJcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy52aWV3Q29udGFpbmVyLmluamVjdG9yXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudFJlZiA9IGZhY3RvcnkuY3JlYXRlKGNoaWxkSW5qZWN0b3IpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tY0NvbXBvbmVudFBhcmFtcykge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29udGVudENvbXBvbmVudFJlZi5pbnN0YW5jZSwgdGhpcy5tY0NvbXBvbmVudFBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEbyB0aGUgZmlyc3QgY2hhbmdlIGRldGVjdGlvbiBpbW1lZGlhdGVseVxyXG4gICAgICAgIC8vIChvciB3ZSBkbyBkZXRlY3Rpb24gYXQgbmdBZnRlclZpZXdJbml0LCBtdWx0aS1jaGFuZ2VzIGVycm9yIHdpbGwgYmUgdGhyb3duKVxyXG4gICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHRyYW5zZm9ybS1vcmlnaW4gdG8gdGhlIGxhc3QgY2xpY2sgcG9zaXRpb24gb24gZG9jdW1lbnRcclxuICAgIHByaXZhdGUgdXBkYXRlVHJhbnNmb3JtT3JpZ2luKCkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsRWxlbWVudCA9IHRoaXMubW9kYWxDb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCBsYXN0UG9zaXRpb24gPSBNb2RhbFV0aWwuZ2V0TGFzdENsaWNrUG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RQb3NpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU9yaWdpbiA9IGAke2xhc3RQb3NpdGlvbi54IC0gbW9kYWxFbGVtZW50Lm9mZnNldExlZnR9cHggJHtsYXN0UG9zaXRpb24ueSAtIG1vZGFsRWxlbWVudC5vZmZzZXRUb3B9cHggMHB4YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlIGNhcmUgb2YgdGhlIGJvZHkncyBvdmVyZmxvdyB0byBkZWNpZGUgdGhlIGV4aXN0ZW5zZSBvZiBzY3JvbGxiYXJcclxuICAgICAqIEBwYXJhbSBwbHVzTnVtIFRoZSBudW1iZXIgdGhhdCB0aGUgb3Blbk1vZGFscy5sZW5ndGggd2lsbCBpbmNyZWFzZSBzb29uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2hhbmdlQm9keU92ZXJmbG93KHBsdXNOdW06IG51bWJlciA9IDApIHtcclxuICAgICAgICBjb25zdCBvcGVuTW9kYWxzID0gdGhpcy5tb2RhbENvbnRyb2wub3Blbk1vZGFscztcclxuXHJcbiAgICAgICAgaWYgKG9wZW5Nb2RhbHMubGVuZ3RoICsgcGx1c051bSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksICdvdmVyZmxvdycsICdoaWRkZW4nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vLy9cclxuXHJcbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmo6IHt9IHwgdm9pZCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bmJvdW5kLW1ldGhvZFxyXG4gICAgcmV0dXJuICEhb2JqICYmXHJcbiAgICAgICAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmXHJcbiAgICAgICAgdHlwZW9mIChvYmogYXMgUHJvbWlzZTx7fT4pLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICB0eXBlb2YgKG9iaiBhcyBQcm9taXNlPHt9PikuY2F0Y2ggPT09ICdmdW5jdGlvbic7XHJcbn1cclxuIiwiPCEtLSBDb21wYXRpYmxlOiB0aGUgPG5nLWNvbnRlbnQ+IGNhbiBhcHBlYXIgb25seSBvbmNlIC0tPlxyXG48bmctdGVtcGxhdGUgI3RwbE9yaWdpbkNvbnRlbnQ+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIm1jTWFza1wiXHJcbiAgICAgICAgIGNsYXNzPVwibWMtbW9kYWwtbWFza1wiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cIm1hc2tBbmltYXRpb25DbGFzc01hcFwiXHJcbiAgICAgICAgIFtjbGFzcy5tYy1tb2RhbC1tYXNrLWhpZGRlbl09XCJoaWRkZW5cIlxyXG4gICAgICAgICBbbmdTdHlsZV09XCJtY01hc2tTdHlsZVwiXHJcbiAgICAgICAgIFtzdHlsZS56SW5kZXhdPVwibWNaSW5kZXhcIlxyXG4gICAgPjwvZGl2PlxyXG4gICAgPGRpdiAobW91c2Vkb3duKT1cIm9uQ2xpY2tNYXNrKCRldmVudClcIlxyXG4gICAgICAgICBjbGFzcz1cIm1jLW1vZGFsLXdyYXAge3sgbWNXcmFwQ2xhc3NOYW1lIH19XCJcclxuICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJtY1pJbmRleFwiXHJcbiAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImhpZGRlbiA/ICdub25lJyA6ICcnXCJcclxuICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxyXG5cclxuICAgICAgICA8ZGl2ICNtb2RhbENvbnRhaW5lclxyXG4gICAgICAgICAgICAgY2xhc3M9XCJtYy1tb2RhbCB7eyBtY0NsYXNzTmFtZSB9fSBtYy1tb2RhbF97eyBtY1NpemUgfX1cIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwibW9kYWxBbmltYXRpb25DbGFzc01hcFwiXHJcbiAgICAgICAgICAgICBbbmdTdHlsZV09XCJtY1N0eWxlXCJcclxuICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJtY1dpZHRoIHwgdG9Dc3NVbml0XCJcclxuICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm0tb3JpZ2luXT1cInRyYW5zZm9ybU9yaWdpblwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLWNvbnRlbnRcIiBjZGtUcmFwRm9jdXM+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwibWNDbG9zYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1jLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0Nsb3NlQnRuKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1jLW1vZGFsLWNsb3NlIG1jLWJ1dHRvbl90cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIG1jLWljb249XCJtYy1jbG9zZS1MXzE2XCIgY2xhc3M9XCJtYy1pY29uIG1jLWljb25fbGlnaHRcIiBbY29sb3JdPVwidGhlbWVQYWxldHRlLlNlY29uZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTW9kYWxUeXBlKCdkZWZhdWx0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsQ29udGVudERlZmF1bHRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc01vZGFsVHlwZSgnY29uZmlybScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbENvbnRlbnRDb25maXJtXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNNb2RhbFR5cGUoJ2N1c3RvbScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbENvbnRlbnRDdXN0b21cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdHBsQ29udGVudEN1c3RvbT5cclxuICAgIDxuZy1jb250YWluZXIgI2JvZHlDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPCEtLSBbUHJlZGVmaW5lZF0gRGVmYXVsdCBNb2RhbCBDb250ZW50IC0tPlxyXG48bmctdGVtcGxhdGUgI3RwbENvbnRlbnREZWZhdWx0PlxyXG4gICAgPGRpdiAqbmdJZj1cIm1jVGl0bGVcIiBjbGFzcz1cIm1jLW1vZGFsLWhlYWRlclwiIFtjbGFzcy5tYy1tb2RhbC1ib2R5X3RvcC1vdmVyZmxvd109XCJpc1RvcE92ZXJmbG93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLXRpdGxlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzVGVtcGxhdGVSZWYobWNUaXRsZSlcIiBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KG1jVGl0bGUpXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc05vbkVtcHR5U3RyaW5nKG1jVGl0bGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1jVGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLWJvZHlcIiAjbW9kYWxCb2R5IFtuZ1N0eWxlXT1cIm1jQm9keVN0eWxlXCIgKHNjcm9sbCk9XCJjaGVja092ZXJmbG93KClcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICNib2R5Q29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ29tcG9uZW50KG1jQ29udGVudClcIiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY0NvbnRlbnQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShtY0NvbnRlbnQpXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc05vbkVtcHR5U3RyaW5nKG1jQ29udGVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwibWNDb250ZW50XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdCBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxPcmlnaW5Db250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibWNGb290ZXIgfHwgbWNPa1RleHQgfHwgbWNDYW5jZWxUZXh0XCIgY2xhc3M9XCJtYy1tb2RhbC1mb290ZXJcIiBbY2xhc3MubWMtbW9kYWwtYm9keV9ib3R0b20tb3ZlcmZsb3ddPVwiaXNCb3R0b21PdmVyZmxvd1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY0Zvb3RlcilcIiBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KG1jRm9vdGVyKVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc05vbkVtcHR5U3RyaW5nKG1jRm9vdGVyKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1jRm9vdGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc01vZGFsQnV0dG9ucyhtY0Zvb3RlcilcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiAkYW55KG1jRm9vdGVyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvRm9jdXNlZEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvZm9jdXNdPVwiYnV0dG9uLmF1dG9Gb2N1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLm1jLW1vZGFsLW1haW4tYWN0aW9uXT1cImJ1dHRvbi5tY01vZGFsTWFpbkFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKGJ1dHRvbiwgJ3Nob3cnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRCdXR0b25DYWxsYWJsZVByb3AoYnV0dG9uLCAnZGlzYWJsZWQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tYy1wcm9ncmVzc109XCJnZXRCdXR0b25DYWxsYWJsZVByb3AoYnV0dG9uLCAnbG9hZGluZycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24udHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICNhdXRvRm9jdXNlZEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9mb2N1c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1jT2tUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBtYy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGhlbWVQYWxldHRlLlByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrT2tDYW5jZWwoJ29rJylcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge3sgb2tUZXh0IH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJtY0NhbmNlbFRleHRcIiBtYy1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tPa0NhbmNlbCgnY2FuY2VsJylcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjYW5jZWxUZXh0IH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSAvW1ByZWRlZmluZWRdIERlZmF1bHQgTW9kYWwgQ29udGVudCAtLT5cclxuXHJcbjwhLS0gW1ByZWRlZmluZWRdIENvbmZpcm0gTW9kYWwgQ29udGVudCAtLT5cclxuPG5nLXRlbXBsYXRlICN0cGxDb250ZW50Q29uZmlybT5cclxuICAgIDxkaXYgY2xhc3M9XCJtYy1tb2RhbC1ib2R5XCIgW25nU3R5bGVdPVwibWNCb2R5U3R5bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWMtY29uZmlybS1ib2R5LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWNvbmZpcm0tYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWNvbmZpcm0tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI2JvZHlDb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb21wb25lbnQobWNDb250ZW50KVwiIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc1RlbXBsYXRlUmVmKG1jQ29udGVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KG1jQ29udGVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNOb25FbXB0eVN0cmluZyhtY0NvbnRlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1jQ29udGVudFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsT3JpZ2luQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4gPCEtLSAvLm1jLWNvbmZpcm0tYm9keS13cmFwcGVyIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWMtY29uZmlybS1idG5zXCIgKm5nSWY9XCJtY09rVGV4dCB8fCBtY0NhbmNlbFRleHRcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1jLWJ1dHRvblxyXG4gICAgICAgICAgICAjYXV0b0ZvY3VzZWRCdXR0b25cclxuICAgICAgICAgICAgW2NvbG9yXT1cIm1jT2tUeXBlXCJcclxuICAgICAgICAgICAgW2F0dHIuYXV0b2ZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIm1jT2tUZXh0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tPa0NhbmNlbCgnb2snKVwiPlxyXG5cclxuICAgICAgICAgICAge3sgb2tUZXh0IH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gbWMtYnV0dG9uIFtjb2xvcl09XCJ0aGVtZVBhbGV0dGUuU2Vjb25kXCIgKm5nSWY9XCJtY0NhbmNlbFRleHRcIiAoY2xpY2spPVwib25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKVwiPlxyXG4gICAgICAgICAgICB7eyBjYW5jZWxUZXh0IH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSAvW1ByZWRlZmluZWRdIENvbmZpcm0gTW9kYWwgQ29udGVudCAtLT5cclxuIl19
|
1
|
+
import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
3
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, Inject, Injector, Input, Output, QueryList, Renderer2, TemplateRef, Type, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
4
|
+
import { ESCAPE, ENTER } from '@ptsecurity/cdk/keycodes';
|
5
|
+
import { ThemePalette } from '@ptsecurity/mosaic/core';
|
6
|
+
import { McModalControlService } from './modal-control.service';
|
7
|
+
import { McModalRef } from './modal-ref.class';
|
8
|
+
import { modalUtilObject as ModalUtil } from './modal-util';
|
9
|
+
import { ModalSize } from './modal.type';
|
10
|
+
import * as i0 from "@angular/core";
|
11
|
+
import * as i1 from "@angular/cdk/overlay";
|
12
|
+
import * as i2 from "./modal-control.service";
|
13
|
+
import * as i3 from "@ptsecurity/mosaic/button";
|
14
|
+
import * as i4 from "@ptsecurity/mosaic/icon";
|
15
|
+
import * as i5 from "@angular/common";
|
16
|
+
import * as i6 from "@angular/cdk/a11y";
|
17
|
+
import * as i7 from "./modal.directive";
|
18
|
+
import * as i8 from "./css-unit.pipe";
|
19
|
+
// Duration when perform animations (ms)
|
20
|
+
export const MODAL_ANIMATE_DURATION = 200;
|
21
|
+
export class McModalComponent extends McModalRef {
|
22
|
+
constructor(overlay, renderer, cfr, elementRef, viewContainer, modalControl, changeDetector, document) {
|
23
|
+
super();
|
24
|
+
this.overlay = overlay;
|
25
|
+
this.renderer = renderer;
|
26
|
+
this.cfr = cfr;
|
27
|
+
this.elementRef = elementRef;
|
28
|
+
this.viewContainer = viewContainer;
|
29
|
+
this.modalControl = modalControl;
|
30
|
+
this.changeDetector = changeDetector;
|
31
|
+
this.document = document;
|
32
|
+
this.themePalette = ThemePalette;
|
33
|
+
this.mcModalType = 'default';
|
34
|
+
this._mcVisible = false;
|
35
|
+
this.mcVisibleChange = new EventEmitter();
|
36
|
+
this.mcZIndex = 1000;
|
37
|
+
this.mcSize = ModalSize.Normal;
|
38
|
+
this.mcCloseByESC = true;
|
39
|
+
this._mcClosable = true;
|
40
|
+
this._mcMask = true;
|
41
|
+
this._mcMaskClosable = false;
|
42
|
+
// Trigger when modal open(visible) after animations
|
43
|
+
this.mcAfterOpen = new EventEmitter();
|
44
|
+
// Trigger when modal leave-animation over
|
45
|
+
this.mcAfterClose = new EventEmitter();
|
46
|
+
this.mcOkType = 'primary';
|
47
|
+
this.mcRestoreFocus = true;
|
48
|
+
this._mcOkLoading = false;
|
49
|
+
this.mcOnOk = new EventEmitter();
|
50
|
+
this._mcCancelLoading = false;
|
51
|
+
this.mcOnCancel = new EventEmitter();
|
52
|
+
this.isTopOverflow = false;
|
53
|
+
this.isBottomOverflow = false;
|
54
|
+
// The origin point that animation based on
|
55
|
+
this.transformOrigin = '0px 0px 0px';
|
56
|
+
this.mcGetContainer = () => this.overlay.create();
|
57
|
+
}
|
58
|
+
get mcVisible() { return this._mcVisible; }
|
59
|
+
set mcVisible(value) { this._mcVisible = value; }
|
60
|
+
get mcClosable() { return this._mcClosable; }
|
61
|
+
set mcClosable(value) { this._mcClosable = value; }
|
62
|
+
get mcMask() { return this._mcMask; }
|
63
|
+
set mcMask(value) { this._mcMask = value; }
|
64
|
+
get mcMaskClosable() { return this._mcMaskClosable; }
|
65
|
+
set mcMaskClosable(value) { this._mcMaskClosable = value; }
|
66
|
+
get mcOkLoading() { return this._mcOkLoading; }
|
67
|
+
set mcOkLoading(value) { this._mcOkLoading = value; }
|
68
|
+
get mcCancelLoading() { return this._mcCancelLoading; }
|
69
|
+
set mcCancelLoading(value) { this._mcCancelLoading = value; }
|
70
|
+
// Observable alias for mcAfterOpen
|
71
|
+
get afterOpen() {
|
72
|
+
return this.mcAfterOpen.asObservable();
|
73
|
+
}
|
74
|
+
// Observable alias for mcAfterClose
|
75
|
+
get afterClose() {
|
76
|
+
return this.mcAfterClose.asObservable();
|
77
|
+
}
|
78
|
+
get okText() {
|
79
|
+
return this.mcOkText;
|
80
|
+
}
|
81
|
+
get cancelText() {
|
82
|
+
return this.mcCancelText;
|
83
|
+
}
|
84
|
+
// Indicate whether this dialog should hidden
|
85
|
+
get hidden() {
|
86
|
+
return !this.mcVisible && !this.animationState;
|
87
|
+
}
|
88
|
+
ngOnInit() {
|
89
|
+
// Create component along without View
|
90
|
+
if (this.isComponent(this.mcContent)) {
|
91
|
+
this.createDynamicComponent(this.mcContent);
|
92
|
+
}
|
93
|
+
// Setup default button options
|
94
|
+
if (this.isModalButtons(this.mcFooter)) {
|
95
|
+
this.mcFooter = this.formatModalButtons(this.mcFooter);
|
96
|
+
}
|
97
|
+
if (this.isComponent(this.mcComponent)) {
|
98
|
+
this.createDynamicComponent(this.mcComponent);
|
99
|
+
}
|
100
|
+
// Place the modal dom to elsewhere
|
101
|
+
this.container = typeof this.mcGetContainer === 'function' ? this.mcGetContainer() : this.mcGetContainer;
|
102
|
+
if (this.container instanceof HTMLElement) {
|
103
|
+
this.container.appendChild(this.elementRef.nativeElement);
|
104
|
+
}
|
105
|
+
else if (this.container instanceof OverlayRef) {
|
106
|
+
// NOTE: only attach the dom to overlay, the view container is not changed actually
|
107
|
+
this.container.overlayElement.appendChild(this.elementRef.nativeElement);
|
108
|
+
}
|
109
|
+
// Register modal when afterOpen/afterClose is stable
|
110
|
+
this.modalControl.registerModal(this);
|
111
|
+
}
|
112
|
+
// [NOTE] NOT available when using by service!
|
113
|
+
// Because ngOnChanges never be called when using by service,
|
114
|
+
// here we can't support "mcContent"(Component) etc. as inputs that initialized dynamically.
|
115
|
+
// BUT: User also can change "mcContent" dynamically to trigger UI changes
|
116
|
+
// (provided you don't use Component that needs initializations)
|
117
|
+
ngOnChanges(changes) {
|
118
|
+
if (changes.mcVisible) {
|
119
|
+
// Do not trigger animation while initializing
|
120
|
+
this.handleVisibleStateChange(this.mcVisible, !changes.mcVisible.firstChange);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
ngAfterViewInit() {
|
124
|
+
// If using Component, it is the time to attach View while bodyContainer is ready
|
125
|
+
if (this.contentComponentRef) {
|
126
|
+
this.bodyContainer.insert(this.contentComponentRef.hostView);
|
127
|
+
}
|
128
|
+
this.getElement().getElementsByTagName('button')[0]?.focus();
|
129
|
+
for (const autoFocusedButton of this.autoFocusedButtons.toArray()) {
|
130
|
+
if (autoFocusedButton.nativeElement.autofocus) {
|
131
|
+
autoFocusedButton.nativeElement.focus();
|
132
|
+
break;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
this.checkOverflow();
|
136
|
+
}
|
137
|
+
ngOnDestroy() {
|
138
|
+
if (this.container instanceof OverlayRef) {
|
139
|
+
this.container.dispose();
|
140
|
+
}
|
141
|
+
}
|
142
|
+
checkOverflow() {
|
143
|
+
const nativeElement = this.modalBody?.nativeElement;
|
144
|
+
if (!nativeElement) {
|
145
|
+
return;
|
146
|
+
}
|
147
|
+
const scrollTop = nativeElement.scrollTop;
|
148
|
+
const offsetHeight = nativeElement.offsetHeight;
|
149
|
+
const scrollHeight = nativeElement.scrollHeight;
|
150
|
+
this.isTopOverflow = scrollTop > 0;
|
151
|
+
this.isBottomOverflow = scrollTop + offsetHeight < scrollHeight;
|
152
|
+
}
|
153
|
+
open() {
|
154
|
+
this.focusedElementBeforeOpen = this.document.activeElement;
|
155
|
+
this.changeVisibleFromInside(true);
|
156
|
+
}
|
157
|
+
close(result) {
|
158
|
+
if (this.mcRestoreFocus) {
|
159
|
+
this.focusedElementBeforeOpen?.focus();
|
160
|
+
}
|
161
|
+
this.changeVisibleFromInside(false, result);
|
162
|
+
this.focusedElementBeforeOpen = null;
|
163
|
+
}
|
164
|
+
// Destroy equals Close
|
165
|
+
destroy(result) {
|
166
|
+
this.close(result);
|
167
|
+
}
|
168
|
+
markForCheck() {
|
169
|
+
this.changeDetector.markForCheck();
|
170
|
+
}
|
171
|
+
triggerOk() {
|
172
|
+
this.onClickOkCancel('ok');
|
173
|
+
}
|
174
|
+
triggerCancel() {
|
175
|
+
this.onClickOkCancel('cancel');
|
176
|
+
}
|
177
|
+
getInstance() {
|
178
|
+
return this;
|
179
|
+
}
|
180
|
+
getContentComponentRef() {
|
181
|
+
return this.contentComponentRef;
|
182
|
+
}
|
183
|
+
getContentComponent() {
|
184
|
+
return this.contentComponentRef && this.contentComponentRef.instance;
|
185
|
+
}
|
186
|
+
getElement() {
|
187
|
+
return this.elementRef && this.elementRef.nativeElement;
|
188
|
+
}
|
189
|
+
getMcFooter() {
|
190
|
+
return this.getElement().getElementsByClassName('mc-modal-footer').item(0);
|
191
|
+
}
|
192
|
+
onClickMask($event) {
|
193
|
+
if (this.mcMask &&
|
194
|
+
this.mcMaskClosable &&
|
195
|
+
$event.target.classList.contains('mc-modal-wrap') &&
|
196
|
+
this.mcVisible) {
|
197
|
+
this.onClickOkCancel('cancel');
|
198
|
+
}
|
199
|
+
}
|
200
|
+
// tslint:disable-next-line: no-reserved-keywords
|
201
|
+
isModalType(type) {
|
202
|
+
return this.mcModalType === type;
|
203
|
+
}
|
204
|
+
onKeyDown(event) {
|
205
|
+
// tslint:disable-next-line:deprecation .key isn't supported in Edge
|
206
|
+
if (event.keyCode === ESCAPE && this.container && (this.container instanceof OverlayRef)) {
|
207
|
+
this.close();
|
208
|
+
event.preventDefault();
|
209
|
+
}
|
210
|
+
// tslint:disable-next-line:deprecation .key isn't supported in Edge
|
211
|
+
if (event.ctrlKey && event.keyCode === ENTER) {
|
212
|
+
if (this.mcModalType === 'confirm') {
|
213
|
+
this.triggerOk();
|
214
|
+
}
|
215
|
+
this.getElement().querySelector('[mc-modal-main-action]')?.click();
|
216
|
+
event.preventDefault();
|
217
|
+
}
|
218
|
+
}
|
219
|
+
// AoT
|
220
|
+
onClickCloseBtn() {
|
221
|
+
if (this.mcVisible) {
|
222
|
+
this.onClickOkCancel('cancel');
|
223
|
+
}
|
224
|
+
}
|
225
|
+
// AoT
|
226
|
+
// tslint:disable-next-line: no-reserved-keywords
|
227
|
+
onClickOkCancel(type) {
|
228
|
+
const trigger = { ok: this.mcOnOk, cancel: this.mcOnCancel }[type];
|
229
|
+
const loadingKey = { ok: 'mcOkLoading', cancel: 'mcCancelLoading' }[type];
|
230
|
+
if (trigger instanceof EventEmitter) {
|
231
|
+
trigger.emit(this.getContentComponent());
|
232
|
+
}
|
233
|
+
else if (typeof trigger === 'function') {
|
234
|
+
const result = trigger(this.getContentComponent());
|
235
|
+
// Users can return "false" to prevent closing by default
|
236
|
+
const caseClose = (doClose) => (doClose !== false) && this.close(doClose);
|
237
|
+
if (isPromise(result)) {
|
238
|
+
this[loadingKey] = true;
|
239
|
+
const handleThen = (doClose) => {
|
240
|
+
this[loadingKey] = false;
|
241
|
+
caseClose(doClose);
|
242
|
+
};
|
243
|
+
result.then(handleThen).catch(handleThen);
|
244
|
+
}
|
245
|
+
else {
|
246
|
+
caseClose(result);
|
247
|
+
}
|
248
|
+
}
|
249
|
+
}
|
250
|
+
// AoT
|
251
|
+
isNonEmptyString(value) {
|
252
|
+
return typeof value === 'string' && value !== '';
|
253
|
+
}
|
254
|
+
// AoT
|
255
|
+
isTemplateRef(value) {
|
256
|
+
return value instanceof TemplateRef;
|
257
|
+
}
|
258
|
+
// AoT
|
259
|
+
isComponent(value) {
|
260
|
+
return value instanceof Type;
|
261
|
+
}
|
262
|
+
// AoT
|
263
|
+
isModalButtons(value) {
|
264
|
+
return Array.isArray(value) && value.length > 0;
|
265
|
+
}
|
266
|
+
// Lookup a button's property, if the prop is a function, call & then return the result, otherwise, return itself.
|
267
|
+
// AoT
|
268
|
+
getButtonCallableProp(options, prop) {
|
269
|
+
const value = options[prop];
|
270
|
+
const args = [];
|
271
|
+
if (this.contentComponentRef) {
|
272
|
+
args.push(this.contentComponentRef.instance);
|
273
|
+
}
|
274
|
+
return typeof value === 'function' ? value.apply(options, args) : value;
|
275
|
+
}
|
276
|
+
// On mcFooter's modal button click
|
277
|
+
// AoT
|
278
|
+
onButtonClick(button) {
|
279
|
+
// Call onClick directly
|
280
|
+
// tslint:disable-next-line:no-inferred-empty-object-type rule seems to be broken
|
281
|
+
const result = this.getButtonCallableProp(button, 'onClick');
|
282
|
+
if (isPromise(result)) {
|
283
|
+
button.loading = true;
|
284
|
+
result.then(() => button.loading = false).catch(() => button.loading = false);
|
285
|
+
}
|
286
|
+
}
|
287
|
+
// Do rest things when visible state changed
|
288
|
+
handleVisibleStateChange(visible, animation = true, closeResult) {
|
289
|
+
// Hide scrollbar at the first time when shown up
|
290
|
+
if (visible) {
|
291
|
+
this.changeBodyOverflow(1);
|
292
|
+
}
|
293
|
+
return Promise
|
294
|
+
.resolve(animation && this.animateTo(visible))
|
295
|
+
// Emit open/close event after animations over
|
296
|
+
.then(() => {
|
297
|
+
if (visible) {
|
298
|
+
this.mcAfterOpen.emit();
|
299
|
+
}
|
300
|
+
else {
|
301
|
+
this.mcAfterClose.emit(closeResult);
|
302
|
+
// Show/hide scrollbar when animation is over
|
303
|
+
this.changeBodyOverflow();
|
304
|
+
}
|
305
|
+
});
|
306
|
+
}
|
307
|
+
// Change mcVisible from inside
|
308
|
+
changeVisibleFromInside(visible, closeResult) {
|
309
|
+
if (this.mcVisible !== visible) {
|
310
|
+
// Change mcVisible value immediately
|
311
|
+
this.mcVisible = visible;
|
312
|
+
this.mcVisibleChange.emit(visible);
|
313
|
+
return this.handleVisibleStateChange(visible, true, closeResult);
|
314
|
+
}
|
315
|
+
return Promise.resolve();
|
316
|
+
}
|
317
|
+
changeAnimationState(state) {
|
318
|
+
this.animationState = state;
|
319
|
+
if (state) {
|
320
|
+
this.maskAnimationClassMap = {
|
321
|
+
[`fade-${state}`]: true,
|
322
|
+
[`fade-${state}-active`]: true
|
323
|
+
};
|
324
|
+
this.modalAnimationClassMap = {
|
325
|
+
[`zoom-${state}`]: true,
|
326
|
+
[`zoom-${state}-active`]: true
|
327
|
+
};
|
328
|
+
}
|
329
|
+
else {
|
330
|
+
// @ts-ignore
|
331
|
+
this.maskAnimationClassMap = this.modalAnimationClassMap = null;
|
332
|
+
}
|
333
|
+
if (this.contentComponentRef) {
|
334
|
+
this.contentComponentRef.changeDetectorRef.markForCheck();
|
335
|
+
}
|
336
|
+
else {
|
337
|
+
this.changeDetector.markForCheck();
|
338
|
+
}
|
339
|
+
}
|
340
|
+
animateTo(isVisible) {
|
341
|
+
// Figure out the lastest click position when shows up
|
342
|
+
if (isVisible) {
|
343
|
+
// [NOTE] Using timeout due to the document.click event is fired later than visible change,
|
344
|
+
// so if not postponed to next event-loop, we can't get the lastest click position
|
345
|
+
window.setTimeout(() => this.updateTransformOrigin());
|
346
|
+
}
|
347
|
+
this.changeAnimationState(isVisible ? 'enter' : 'leave');
|
348
|
+
// Return when animation is over
|
349
|
+
return new Promise((resolve) => {
|
350
|
+
return window.setTimeout(() => {
|
351
|
+
this.changeAnimationState(null);
|
352
|
+
resolve(null);
|
353
|
+
}, MODAL_ANIMATE_DURATION);
|
354
|
+
});
|
355
|
+
}
|
356
|
+
formatModalButtons(buttons) {
|
357
|
+
return buttons.map((button) => {
|
358
|
+
return {
|
359
|
+
...{
|
360
|
+
type: 'default',
|
361
|
+
size: 'default',
|
362
|
+
autoLoading: true,
|
363
|
+
show: true,
|
364
|
+
loading: false,
|
365
|
+
disabled: false
|
366
|
+
},
|
367
|
+
...button
|
368
|
+
};
|
369
|
+
});
|
370
|
+
}
|
371
|
+
/**
|
372
|
+
* Create a component dynamically but not attach to any View
|
373
|
+
* (this action will be executed when bodyContainer is ready)
|
374
|
+
* @param component Component class
|
375
|
+
*/
|
376
|
+
createDynamicComponent(component) {
|
377
|
+
const factory = this.cfr.resolveComponentFactory(component);
|
378
|
+
const childInjector = Injector.create({
|
379
|
+
providers: [{ provide: McModalRef, useValue: this }],
|
380
|
+
parent: this.viewContainer.injector
|
381
|
+
});
|
382
|
+
this.contentComponentRef = factory.create(childInjector);
|
383
|
+
if (this.mcComponentParams) {
|
384
|
+
Object.assign(this.contentComponentRef.instance, this.mcComponentParams);
|
385
|
+
}
|
386
|
+
// Do the first change detection immediately
|
387
|
+
// (or we do detection at ngAfterViewInit, multi-changes error will be thrown)
|
388
|
+
this.contentComponentRef.changeDetectorRef.detectChanges();
|
389
|
+
}
|
390
|
+
// Update transform-origin to the last click position on document
|
391
|
+
updateTransformOrigin() {
|
392
|
+
const modalElement = this.modalContainer.nativeElement;
|
393
|
+
const lastPosition = ModalUtil.getLastClickPosition();
|
394
|
+
if (lastPosition) {
|
395
|
+
this.transformOrigin = `${lastPosition.x - modalElement.offsetLeft}px ${lastPosition.y - modalElement.offsetTop}px 0px`;
|
396
|
+
}
|
397
|
+
}
|
398
|
+
/**
|
399
|
+
* Take care of the body's overflow to decide the existense of scrollbar
|
400
|
+
* @param plusNum The number that the openModals.length will increase soon
|
401
|
+
*/
|
402
|
+
changeBodyOverflow(plusNum = 0) {
|
403
|
+
const openModals = this.modalControl.openModals;
|
404
|
+
if (openModals.length + plusNum > 0) {
|
405
|
+
this.renderer.setStyle(this.document.body, 'overflow', 'hidden');
|
406
|
+
}
|
407
|
+
else {
|
408
|
+
this.renderer.removeStyle(this.document.body, 'overflow');
|
409
|
+
}
|
410
|
+
}
|
411
|
+
}
|
412
|
+
/** @nocollapse */ /** @nocollapse */ McModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McModalComponent, deps: [{ token: i1.Overlay }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i2.McModalControlService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
413
|
+
/** @nocollapse */ /** @nocollapse */ McModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: McModalComponent, selector: "mc-modal", inputs: { mcModalType: "mcModalType", mcComponent: "mcComponent", mcContent: "mcContent", mcComponentParams: "mcComponentParams", mcFooter: "mcFooter", mcVisible: "mcVisible", mcZIndex: "mcZIndex", mcWidth: "mcWidth", mcSize: "mcSize", mcWrapClassName: "mcWrapClassName", mcClassName: "mcClassName", mcStyle: "mcStyle", mcTitle: "mcTitle", mcCloseByESC: "mcCloseByESC", mcClosable: "mcClosable", mcMask: "mcMask", mcMaskClosable: "mcMaskClosable", mcMaskStyle: "mcMaskStyle", mcBodyStyle: "mcBodyStyle", mcOkText: "mcOkText", mcOkType: "mcOkType", mcRestoreFocus: "mcRestoreFocus", mcOkLoading: "mcOkLoading", mcOnOk: "mcOnOk", mcCancelText: "mcCancelText", mcCancelLoading: "mcCancelLoading", mcOnCancel: "mcOnCancel", mcGetContainer: "mcGetContainer" }, outputs: { mcVisibleChange: "mcVisibleChange", mcAfterOpen: "mcAfterOpen", mcAfterClose: "mcAfterClose", mcOnOk: "mcOnOk", mcOnCancel: "mcOnCancel" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, static: true }, { propertyName: "bodyContainer", first: true, predicate: ["bodyContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true }, { propertyName: "autoFocusedButtons", predicate: ["autoFocusedButton"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content></ng-content>\n</ng-template>\n\n<div>\n <div *ngIf=\"mcMask\"\n class=\"mc-modal-mask\"\n [ngClass]=\"maskAnimationClassMap\"\n [class.mc-modal-mask-hidden]=\"hidden\"\n [ngStyle]=\"mcMaskStyle\"\n [style.zIndex]=\"mcZIndex\"\n ></div>\n <div (mousedown)=\"onClickMask($event)\"\n class=\"mc-modal-wrap {{ mcWrapClassName }}\"\n [style.zIndex]=\"mcZIndex\"\n [style.display]=\"hidden ? 'none' : ''\"\n tabindex=\"-1\">\n\n <div #modalContainer\n class=\"mc-modal {{ mcClassName }} mc-modal_{{ mcSize }}\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"mcStyle\"\n [style.width]=\"mcWidth | toCssUnit\"\n [style.transform-origin]=\"transformOrigin\">\n\n <div class=\"mc-modal-content\" cdkTrapFocus>\n <button *ngIf=\"mcClosable\"\n mc-button\n (click)=\"onClickCloseBtn()\"\n class=\"mc-modal-close mc-button_transparent\">\n <i mc-icon=\"mc-close-L_16\" class=\"mc-icon mc-icon_light\" [color]=\"themePalette.Second\"></i>\n </button>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isModalType('default')\"\n [ngTemplateOutlet]=\"tplContentDefault\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('confirm')\"\n [ngTemplateOutlet]=\"tplContentConfirm\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('custom')\"\n [ngTemplateOutlet]=\"tplContentCustom\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer></ng-container>\n</ng-template>\n\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n <div *ngIf=\"mcTitle\" class=\"mc-modal-header\" [class.mc-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"mc-modal-title\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcTitle)\" [ngTemplateOutlet]=\"$any(mcTitle)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcTitle)\">\n <div [innerHTML]=\"mcTitle\"></div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"mc-modal-body\" #modalBody [ngStyle]=\"mcBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\" [ngTemplateOutlet]=\"$any(mcContent)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"mcFooter || mcOkText || mcCancelText\" class=\"mc-modal-footer\" [class.mc-modal-body_bottom-overflow]=\"isBottomOverflow\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcFooter)\" [ngTemplateOutlet]=\"$any(mcFooter)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcFooter)\">\n <div [innerHTML]=\"mcFooter\"></div>\n </ng-container>\n <ng-container *ngSwitchCase=\"isModalButtons(mcFooter)\">\n <ng-container *ngFor=\"let button of $any(mcFooter)\">\n <button\n mc-button\n #autoFocusedButton\n [attr.autofocus]=\"button.autoFocus\"\n [attr.mc-modal-main-action]=\"button.mcModalMainAction\"\n *ngIf=\"getButtonCallableProp(button, 'show')\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n [class.mc-progress]=\"getButtonCallableProp(button, 'loading')\"\n (click)=\"onButtonClick(button)\"\n [color]=\"button.type\">\n {{ button.label }}\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button\n #autoFocusedButton\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n mc-button\n [color]=\"themePalette.Primary\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n <button *ngIf=\"mcCancelText\" mc-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"mc-modal-body\" [ngStyle]=\"mcBodyStyle\">\n <div class=\"mc-confirm-body-wrapper\">\n <div class=\"mc-confirm-body\">\n <div class=\"mc-confirm-content\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\"\n [ngTemplateOutlet]=\"$any(mcContent)\">\n </ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div> <!-- /.mc-confirm-body-wrapper -->\n </div>\n <div class=\"mc-confirm-btns\" *ngIf=\"mcOkText || mcCancelText\">\n <button\n mc-button\n #autoFocusedButton\n [color]=\"mcOkType\"\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n\n <button mc-button [color]=\"themePalette.Second\" *ngIf=\"mcCancelText\" (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </div>\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".mc-confirm .mc-modal-header,.mc-confirm .mc-modal-close{display:none}.mc-confirm .mc-modal-body{padding:var(--mc-modal-confirm-size-padding, 24px)}.mc-confirm-body-wrapper{zoom:1}.mc-confirm-body-wrapper:before,.mc-confirm-body-wrapper:after{content:\"\";display:table}.mc-confirm-body-wrapper:after{clear:both}.mc-confirm-body .mc-confirm-title{display:block;overflow:auto}.mc-confirm .mc-confirm-btns{border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);text-align:right}.mc-confirm .mc-confirm-btns button{margin:16px}.mc-modal{box-sizing:border-box;position:relative;top:var(--mc-modal-size-top, 48px);width:auto;margin:0 auto;list-style:none}.mc-modal.zoom-enter,.mc-modal.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.mc-modal.mc-modal_small{width:var(--mc-modal-size-small, 400px)}.mc-modal.mc-modal_normal{width:var(--mc-modal-size-normal, 640px)}.mc-modal.mc-modal_large{width:var(--mc-modal-size-large, 960px)}.mc-modal .mc-modal-close{position:absolute;z-index:10;top:0;right:0;width:var(--mc-modal-size-close-width, 56px);height:var(--mc-modal-size-close-width, 56px)}.mc-modal-wrap{position:fixed;z-index:1000;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.mc-modal-title{margin:0}.mc-modal-content{position:relative;border-radius:var(--mc-modal-size-border-radius, 4px);background-clip:padding-box;background-color:#fff}.mc-modal-header{display:flex;align-items:center;height:var(--mc-modal-header-size-height, 56px);border-radius:var(--mc-modal-header-size-border-radius, 4px 4px 0 0);padding:var(--mc-modal-header-size-padding, 0 16px)}.mc-modal-body{display:block;overflow-y:auto;max-height:var(--mc-modal-body-size-max-height, calc(100vh - 260px));padding:var(--mc-modal-body-size-padding, 16px 24px 24px);word-wrap:break-word}.mc-modal-footer{display:flex;align-items:center;justify-content:right;height:var(--mc-modal-footer-size-height, 64px);border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);padding:var(--mc-modal-footer-size-padding, 0 16px)}.mc-modal-footer button+button{margin-left:16px;margin-bottom:0}.mc-modal-mask{position:fixed;z-index:1000;top:0;right:0;left:0;bottom:0;height:100%}.mc-modal-mask.mc-modal-mask-hidden{display:none}.mc-modal-open{overflow:hidden}\n"], components: [{ type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { type: i4.McIcon, selector: "[mc-icon]", inputs: ["color"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { type: i3.McButtonCssStyler, selector: "[mc-button]" }, { type: i4.McIconCSSStyler, selector: "[mc-icon]" }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.McModalMainAction, selector: "[mc-modal-main-action]" }], pipes: { "toCssUnit": i8.CssUnitPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
414
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McModalComponent, decorators: [{
|
415
|
+
type: Component,
|
416
|
+
args: [{ selector: 'mc-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
417
|
+
'(keydown)': 'onKeyDown($event)'
|
418
|
+
}, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content></ng-content>\n</ng-template>\n\n<div>\n <div *ngIf=\"mcMask\"\n class=\"mc-modal-mask\"\n [ngClass]=\"maskAnimationClassMap\"\n [class.mc-modal-mask-hidden]=\"hidden\"\n [ngStyle]=\"mcMaskStyle\"\n [style.zIndex]=\"mcZIndex\"\n ></div>\n <div (mousedown)=\"onClickMask($event)\"\n class=\"mc-modal-wrap {{ mcWrapClassName }}\"\n [style.zIndex]=\"mcZIndex\"\n [style.display]=\"hidden ? 'none' : ''\"\n tabindex=\"-1\">\n\n <div #modalContainer\n class=\"mc-modal {{ mcClassName }} mc-modal_{{ mcSize }}\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"mcStyle\"\n [style.width]=\"mcWidth | toCssUnit\"\n [style.transform-origin]=\"transformOrigin\">\n\n <div class=\"mc-modal-content\" cdkTrapFocus>\n <button *ngIf=\"mcClosable\"\n mc-button\n (click)=\"onClickCloseBtn()\"\n class=\"mc-modal-close mc-button_transparent\">\n <i mc-icon=\"mc-close-L_16\" class=\"mc-icon mc-icon_light\" [color]=\"themePalette.Second\"></i>\n </button>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isModalType('default')\"\n [ngTemplateOutlet]=\"tplContentDefault\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('confirm')\"\n [ngTemplateOutlet]=\"tplContentConfirm\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('custom')\"\n [ngTemplateOutlet]=\"tplContentCustom\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer></ng-container>\n</ng-template>\n\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n <div *ngIf=\"mcTitle\" class=\"mc-modal-header\" [class.mc-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"mc-modal-title\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcTitle)\" [ngTemplateOutlet]=\"$any(mcTitle)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcTitle)\">\n <div [innerHTML]=\"mcTitle\"></div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"mc-modal-body\" #modalBody [ngStyle]=\"mcBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\" [ngTemplateOutlet]=\"$any(mcContent)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"mcFooter || mcOkText || mcCancelText\" class=\"mc-modal-footer\" [class.mc-modal-body_bottom-overflow]=\"isBottomOverflow\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcFooter)\" [ngTemplateOutlet]=\"$any(mcFooter)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcFooter)\">\n <div [innerHTML]=\"mcFooter\"></div>\n </ng-container>\n <ng-container *ngSwitchCase=\"isModalButtons(mcFooter)\">\n <ng-container *ngFor=\"let button of $any(mcFooter)\">\n <button\n mc-button\n #autoFocusedButton\n [attr.autofocus]=\"button.autoFocus\"\n [attr.mc-modal-main-action]=\"button.mcModalMainAction\"\n *ngIf=\"getButtonCallableProp(button, 'show')\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n [class.mc-progress]=\"getButtonCallableProp(button, 'loading')\"\n (click)=\"onButtonClick(button)\"\n [color]=\"button.type\">\n {{ button.label }}\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button\n #autoFocusedButton\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n mc-button\n [color]=\"themePalette.Primary\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n <button *ngIf=\"mcCancelText\" mc-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"mc-modal-body\" [ngStyle]=\"mcBodyStyle\">\n <div class=\"mc-confirm-body-wrapper\">\n <div class=\"mc-confirm-body\">\n <div class=\"mc-confirm-content\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\"\n [ngTemplateOutlet]=\"$any(mcContent)\">\n </ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div> <!-- /.mc-confirm-body-wrapper -->\n </div>\n <div class=\"mc-confirm-btns\" *ngIf=\"mcOkText || mcCancelText\">\n <button\n mc-button\n #autoFocusedButton\n [color]=\"mcOkType\"\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n\n <button mc-button [color]=\"themePalette.Second\" *ngIf=\"mcCancelText\" (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </div>\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".mc-confirm .mc-modal-header,.mc-confirm .mc-modal-close{display:none}.mc-confirm .mc-modal-body{padding:var(--mc-modal-confirm-size-padding, 24px)}.mc-confirm-body-wrapper{zoom:1}.mc-confirm-body-wrapper:before,.mc-confirm-body-wrapper:after{content:\"\";display:table}.mc-confirm-body-wrapper:after{clear:both}.mc-confirm-body .mc-confirm-title{display:block;overflow:auto}.mc-confirm .mc-confirm-btns{border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);text-align:right}.mc-confirm .mc-confirm-btns button{margin:16px}.mc-modal{box-sizing:border-box;position:relative;top:var(--mc-modal-size-top, 48px);width:auto;margin:0 auto;list-style:none}.mc-modal.zoom-enter,.mc-modal.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.mc-modal.mc-modal_small{width:var(--mc-modal-size-small, 400px)}.mc-modal.mc-modal_normal{width:var(--mc-modal-size-normal, 640px)}.mc-modal.mc-modal_large{width:var(--mc-modal-size-large, 960px)}.mc-modal .mc-modal-close{position:absolute;z-index:10;top:0;right:0;width:var(--mc-modal-size-close-width, 56px);height:var(--mc-modal-size-close-width, 56px)}.mc-modal-wrap{position:fixed;z-index:1000;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.mc-modal-title{margin:0}.mc-modal-content{position:relative;border-radius:var(--mc-modal-size-border-radius, 4px);background-clip:padding-box;background-color:#fff}.mc-modal-header{display:flex;align-items:center;height:var(--mc-modal-header-size-height, 56px);border-radius:var(--mc-modal-header-size-border-radius, 4px 4px 0 0);padding:var(--mc-modal-header-size-padding, 0 16px)}.mc-modal-body{display:block;overflow-y:auto;max-height:var(--mc-modal-body-size-max-height, calc(100vh - 260px));padding:var(--mc-modal-body-size-padding, 16px 24px 24px);word-wrap:break-word}.mc-modal-footer{display:flex;align-items:center;justify-content:right;height:var(--mc-modal-footer-size-height, 64px);border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);padding:var(--mc-modal-footer-size-padding, 0 16px)}.mc-modal-footer button+button{margin-left:16px;margin-bottom:0}.mc-modal-mask{position:fixed;z-index:1000;top:0;right:0;left:0;bottom:0;height:100%}.mc-modal-mask.mc-modal-mask-hidden{display:none}.mc-modal-open{overflow:hidden}\n"] }]
|
419
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i2.McModalControlService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
420
|
+
type: Inject,
|
421
|
+
args: [DOCUMENT]
|
422
|
+
}] }]; }, propDecorators: { mcModalType: [{
|
423
|
+
type: Input
|
424
|
+
}], mcComponent: [{
|
425
|
+
type: Input
|
426
|
+
}], mcContent: [{
|
427
|
+
type: Input
|
428
|
+
}], mcComponentParams: [{
|
429
|
+
type: Input
|
430
|
+
}], mcFooter: [{
|
431
|
+
type: Input
|
432
|
+
}], mcVisible: [{
|
433
|
+
type: Input
|
434
|
+
}], mcVisibleChange: [{
|
435
|
+
type: Output
|
436
|
+
}], mcZIndex: [{
|
437
|
+
type: Input
|
438
|
+
}], mcWidth: [{
|
439
|
+
type: Input
|
440
|
+
}], mcSize: [{
|
441
|
+
type: Input
|
442
|
+
}], mcWrapClassName: [{
|
443
|
+
type: Input
|
444
|
+
}], mcClassName: [{
|
445
|
+
type: Input
|
446
|
+
}], mcStyle: [{
|
447
|
+
type: Input
|
448
|
+
}], mcTitle: [{
|
449
|
+
type: Input
|
450
|
+
}], mcCloseByESC: [{
|
451
|
+
type: Input
|
452
|
+
}], mcClosable: [{
|
453
|
+
type: Input
|
454
|
+
}], mcMask: [{
|
455
|
+
type: Input
|
456
|
+
}], mcMaskClosable: [{
|
457
|
+
type: Input
|
458
|
+
}], mcMaskStyle: [{
|
459
|
+
type: Input
|
460
|
+
}], mcBodyStyle: [{
|
461
|
+
type: Input
|
462
|
+
}], mcAfterOpen: [{
|
463
|
+
type: Output
|
464
|
+
}], mcAfterClose: [{
|
465
|
+
type: Output
|
466
|
+
}], mcOkText: [{
|
467
|
+
type: Input
|
468
|
+
}], mcOkType: [{
|
469
|
+
type: Input
|
470
|
+
}], mcRestoreFocus: [{
|
471
|
+
type: Input
|
472
|
+
}], mcOkLoading: [{
|
473
|
+
type: Input
|
474
|
+
}], mcOnOk: [{
|
475
|
+
type: Input
|
476
|
+
}, {
|
477
|
+
type: Output
|
478
|
+
}], mcCancelText: [{
|
479
|
+
type: Input
|
480
|
+
}], mcCancelLoading: [{
|
481
|
+
type: Input
|
482
|
+
}], mcOnCancel: [{
|
483
|
+
type: Input
|
484
|
+
}, {
|
485
|
+
type: Output
|
486
|
+
}], modalContainer: [{
|
487
|
+
type: ViewChild,
|
488
|
+
args: ['modalContainer', { static: true }]
|
489
|
+
}], bodyContainer: [{
|
490
|
+
type: ViewChild,
|
491
|
+
args: ['bodyContainer', { read: ViewContainerRef, static: false }]
|
492
|
+
}], autoFocusedButtons: [{
|
493
|
+
type: ViewChildren,
|
494
|
+
args: ['autoFocusedButton', { read: ElementRef }]
|
495
|
+
}], modalBody: [{
|
496
|
+
type: ViewChild,
|
497
|
+
args: ['modalBody']
|
498
|
+
}], mcGetContainer: [{
|
499
|
+
type: Input
|
500
|
+
}] } });
|
501
|
+
////////////
|
502
|
+
function isPromise(obj) {
|
503
|
+
// tslint:disable-next-line: no-unbound-method
|
504
|
+
return !!obj &&
|
505
|
+
(typeof obj === 'object' || typeof obj === 'function') &&
|
506
|
+
typeof obj.then === 'function' &&
|
507
|
+
typeof obj.catch === 'function';
|
508
|
+
}
|
509
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBRXhCLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLElBQUksU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sRUFBc0MsU0FBUyxFQUE4QixNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQUd6Ryx3Q0FBd0M7QUFDeEMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBZTFDLE1BQU0sT0FBTyxnQkFBbUMsU0FBUSxVQUFn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QUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQztRQUN0RCxPQUFRLEdBQW1CLENBQUMsSUFBSSxLQUFLLFVBQVU7UUFDL0MsT0FBUSxHQUFtQixDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVHlwZSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFU0NBUEUsIEVOVEVSIH0gZnJvbSAnQHB0c2VjdXJpdHkvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0BwdHNlY3VyaXR5L21vc2FpYy9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTWNNb2RhbENvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWNNb2RhbFJlZiB9IGZyb20gJy4vbW9kYWwtcmVmLmNsYXNzJztcbmltcG9ydCB7IG1vZGFsVXRpbE9iamVjdCBhcyBNb2RhbFV0aWwgfSBmcm9tICcuL21vZGFsLXV0aWwnO1xuaW1wb3J0IHsgSU1vZGFsQnV0dG9uT3B0aW9ucywgSU1vZGFsT3B0aW9ucywgTW9kYWxTaXplLCBNb2RhbFR5cGUsIE9uQ2xpY2tDYWxsYmFjayB9IGZyb20gJy4vbW9kYWwudHlwZSc7XG5cblxuLy8gRHVyYXRpb24gd2hlbiBwZXJmb3JtIGFuaW1hdGlvbnMgKG1zKVxuZXhwb3J0IGNvbnN0IE1PREFMX0FOSU1BVEVfRFVSQVRJT04gPSAyMDA7XG5cbnR5cGUgQW5pbWF0aW9uU3RhdGUgPSAnZW50ZXInIHwgJ2xlYXZlJyB8IG51bGw7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtYy1tb2RhbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICcoa2V5ZG93biknOiAnb25LZXlEb3duKCRldmVudCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBNY01vZGFsQ29tcG9uZW50PFQgPSBhbnksIFIgPSBhbnk+IGV4dGVuZHMgTWNNb2RhbFJlZjxULCBSPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSU1vZGFsT3B0aW9ucyB7XG5cbiAgICB0aGVtZVBhbGV0dGUgPSBUaGVtZVBhbGV0dGU7XG5cbiAgICBASW5wdXQoKSBtY01vZGFsVHlwZTogTW9kYWxUeXBlID0gJ2RlZmF1bHQnO1xuXG4gICAgLy8gVGhlIGluc3RhbmNlIG9mIGNvbXBvbmVudCBvcGVuZWQgaW50byB0aGUgZGlhbG9nLlxuICAgIEBJbnB1dCgpIG1jQ29tcG9uZW50OiBUeXBlPFQ+O1xuICAgIC8vIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgdXNlIDxuZy1jb250ZW50PlxuICAgIEBJbnB1dCgpIG1jQ29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8e30+IHwgVHlwZTxUPjtcbiAgICAvLyBhdmFpbGFibGUgd2hlbiBtY0NvbnRlbnQgaXMgYSBjb21wb25lbnRcbiAgICBASW5wdXQoKSBtY0NvbXBvbmVudFBhcmFtczogVDtcbiAgICAvLyBEZWZhdWx0IE1vZGFsIE9OTFlcbiAgICBASW5wdXQoKSBtY0Zvb3Rlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8e30+IHwgSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWNWaXNpYmxlKCkgeyByZXR1cm4gdGhpcy5fbWNWaXNpYmxlOyB9XG4gICAgc2V0IG1jVmlzaWJsZSh2YWx1ZSkgeyB0aGlzLl9tY1Zpc2libGUgPSB2YWx1ZTsgfVxuXG4gICAgcHJpdmF0ZSBfbWNWaXNpYmxlID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgbWNWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQElucHV0KCkgbWNaSW5kZXg6IG51bWJlciA9IDEwMDA7XG4gICAgQElucHV0KCkgbWNXaWR0aDogbnVtYmVyIHwgc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1jU2l6ZTogTW9kYWxTaXplID0gTW9kYWxTaXplLk5vcm1hbDtcbiAgICBASW5wdXQoKSBtY1dyYXBDbGFzc05hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBtY0NsYXNzTmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1jU3R5bGU6IG9iamVjdDtcbiAgICBASW5wdXQoKSBtY1RpdGxlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx7fT47XG4gICAgQElucHV0KCkgbWNDbG9zZUJ5RVNDOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1jQ2xvc2FibGUoKSB7IHJldHVybiB0aGlzLl9tY0Nsb3NhYmxlOyB9XG4gICAgc2V0IG1jQ2xvc2FibGUodmFsdWUpIHsgdGhpcy5fbWNDbG9zYWJsZSA9IHZhbHVlOyB9XG4gICAgcHJpdmF0ZSBfbWNDbG9zYWJsZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtY01hc2soKSB7IHJldHVybiB0aGlzLl9tY01hc2s7IH1cbiAgICBzZXQgbWNNYXNrKHZhbHVlKSB7IHRoaXMuX21jTWFzayA9IHZhbHVlOyB9XG4gICAgcHJpdmF0ZSBfbWNNYXNrID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1jTWFza0Nsb3NhYmxlKCkgeyByZXR1cm4gdGhpcy5fbWNNYXNrQ2xvc2FibGU7IH1cbiAgICBzZXQgbWNNYXNrQ2xvc2FibGUodmFsdWUpIHsgdGhpcy5fbWNNYXNrQ2xvc2FibGUgPSB2YWx1ZTsgfVxuICAgIHByaXZhdGUgX21jTWFza0Nsb3NhYmxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBtY01hc2tTdHlsZTogb2JqZWN0O1xuICAgIEBJbnB1dCgpIG1jQm9keVN0eWxlOiBvYmplY3Q7XG5cbiAgICAvLyBUcmlnZ2VyIHdoZW4gbW9kYWwgb3Blbih2aXNpYmxlKSBhZnRlciBhbmltYXRpb25zXG4gICAgQE91dHB1dCgpIG1jQWZ0ZXJPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8vIFRyaWdnZXIgd2hlbiBtb2RhbCBsZWF2ZS1hbmltYXRpb24gb3ZlclxuICAgIEBPdXRwdXQoKSBtY0FmdGVyQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPFI+KCk7XG5cbiAgICAvLyAtLS0gUHJlZGVmaW5lZCBPSyAmIENhbmNlbCBidXR0b25zXG4gICAgQElucHV0KCkgbWNPa1RleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBtY09rVHlwZSA9ICdwcmltYXJ5JztcblxuICAgIEBJbnB1dCgpIG1jUmVzdG9yZUZvY3VzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1jT2tMb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fbWNPa0xvYWRpbmc7IH1cbiAgICBzZXQgbWNPa0xvYWRpbmcodmFsdWUpIHsgdGhpcy5fbWNPa0xvYWRpbmcgPSB2YWx1ZTsgfVxuICAgIHByaXZhdGUgX21jT2tMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBAT3V0cHV0KCkgbWNPbk9rOiBFdmVudEVtaXR0ZXI8VD4gfCBPbkNsaWNrQ2FsbGJhY2s8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gICAgQElucHV0KCkgbWNDYW5jZWxUZXh0OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtY0NhbmNlbExvYWRpbmcoKSB7IHJldHVybiB0aGlzLl9tY0NhbmNlbExvYWRpbmc7IH1cbiAgICBzZXQgbWNDYW5jZWxMb2FkaW5nKHZhbHVlKSB7IHRoaXMuX21jQ2FuY2VsTG9hZGluZyA9IHZhbHVlOyB9XG4gICAgcHJpdmF0ZSBfbWNDYW5jZWxMb2FkaW5nID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBAT3V0cHV0KCkgbWNPbkNhbmNlbDogRXZlbnRFbWl0dGVyPFQ+IHwgT25DbGlja0NhbGxiYWNrPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnbW9kYWxDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBtb2RhbENvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdib2R5Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IGZhbHNlIH0pIGJvZHlDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gICAgLy8gT25seSBhaW0gdG8gZm9jdXMgdGhlIG9rIGJ1dHRvbiB0aGF0IG5lZWRzIHRvIGJlIGF1dG8gZm9jdXNlZFxuICAgIEBWaWV3Q2hpbGRyZW4oJ2F1dG9Gb2N1c2VkQnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGF1dG9Gb2N1c2VkQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnbW9kYWxCb2R5JykgbW9kYWxCb2R5OiBFbGVtZW50UmVmO1xuXG4gICAgaXNUb3BPdmVyZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzQm90dG9tT3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG1hc2tBbmltYXRpb25DbGFzc01hcDogb2JqZWN0O1xuICAgIG1vZGFsQW5pbWF0aW9uQ2xhc3NNYXA6IG9iamVjdDtcbiAgICAvLyBUaGUgb3JpZ2luIHBvaW50IHRoYXQgYW5pbWF0aW9uIGJhc2VkIG9uXG4gICAgdHJhbnNmb3JtT3JpZ2luID0gJzBweCAwcHggMHB4JztcblxuICAgIC8vIE9ic2VydmFibGUgYWxpYXMgZm9yIG1jQWZ0ZXJPcGVuXG4gICAgZ2V0IGFmdGVyT3BlbigpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWNBZnRlck9wZW4uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gT2JzZXJ2YWJsZSBhbGlhcyBmb3IgbWNBZnRlckNsb3NlXG4gICAgZ2V0IGFmdGVyQ2xvc2UoKTogT2JzZXJ2YWJsZTxSPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1jQWZ0ZXJDbG9zZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBnZXQgb2tUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1jT2tUZXh0O1xuICAgIH1cblxuICAgIGdldCBjYW5jZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1jQ2FuY2VsVGV4dDtcbiAgICB9XG5cbiAgICAvLyBJbmRpY2F0ZSB3aGV0aGVyIHRoaXMgZGlhbG9nIHNob3VsZCBoaWRkZW5cbiAgICBnZXQgaGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMubWNWaXNpYmxlICYmICF0aGlzLmFuaW1hdGlvblN0YXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuOiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAvLyBIYW5kbGUgdGhlIHJlZmVyZW5jZSB3aGVuIHVzaW5nIG1jQ29udGVudCBhcyBDb21wb25lbnRcbiAgICBwcml2YXRlIGNvbnRlbnRDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPjtcbiAgICAvLyBDdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxuICAgIHByaXZhdGUgYW5pbWF0aW9uU3RhdGU6IEFuaW1hdGlvblN0YXRlO1xuICAgIHByaXZhdGUgY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IE92ZXJsYXlSZWY7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIG1vZGFsQ29udHJvbDogTWNNb2RhbENvbnRyb2xTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbWNHZXRDb250YWluZXI6IEhUTUxFbGVtZW50IHwgT3ZlcmxheVJlZiB8ICgoKSA9PiBIVE1MRWxlbWVudCB8IE92ZXJsYXlSZWYpID0gKCkgPT4gdGhpcy5vdmVybGF5LmNyZWF0ZSgpO1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIENyZWF0ZSBjb21wb25lbnQgYWxvbmcgd2l0aG91dCBWaWV3XG4gICAgICAgIGlmICh0aGlzLmlzQ29tcG9uZW50KHRoaXMubWNDb250ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVEeW5hbWljQ29tcG9uZW50KHRoaXMubWNDb250ZW50IGFzIFR5cGU8VD4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dXAgZGVmYXVsdCBidXR0b24gb3B0aW9uc1xuICAgICAgICBpZiAodGhpcy5pc01vZGFsQnV0dG9ucyh0aGlzLm1jRm9vdGVyKSkge1xuICAgICAgICAgICAgdGhpcy5tY0Zvb3RlciA9IHRoaXMuZm9ybWF0TW9kYWxCdXR0b25zKHRoaXMubWNGb290ZXIgYXMgSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcG9uZW50KHRoaXMubWNDb21wb25lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQodGhpcy5tY0NvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQbGFjZSB0aGUgbW9kYWwgZG9tIHRvIGVsc2V3aGVyZVxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHR5cGVvZiB0aGlzLm1jR2V0Q29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gdGhpcy5tY0dldENvbnRhaW5lcigpIDogdGhpcy5tY0dldENvbnRhaW5lcjtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIE92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IG9ubHkgYXR0YWNoIHRoZSBkb20gdG8gb3ZlcmxheSwgdGhlIHZpZXcgY29udGFpbmVyIGlzIG5vdCBjaGFuZ2VkIGFjdHVhbGx5XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5vdmVybGF5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWdpc3RlciBtb2RhbCB3aGVuIGFmdGVyT3Blbi9hZnRlckNsb3NlIGlzIHN0YWJsZVxuICAgICAgICB0aGlzLm1vZGFsQ29udHJvbC5yZWdpc3Rlck1vZGFsKHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFtOT1RFXSBOT1QgYXZhaWxhYmxlIHdoZW4gdXNpbmcgYnkgc2VydmljZSFcbiAgICAvLyBCZWNhdXNlIG5nT25DaGFuZ2VzIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHVzaW5nIGJ5IHNlcnZpY2UsXG4gICAgLy8gaGVyZSB3ZSBjYW4ndCBzdXBwb3J0IFwibWNDb250ZW50XCIoQ29tcG9uZW50KSBldGMuIGFzIGlucHV0cyB0aGF0IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5LlxuICAgIC8vIEJVVDogVXNlciBhbHNvIGNhbiBjaGFuZ2UgXCJtY0NvbnRlbnRcIiBkeW5hbWljYWxseSB0byB0cmlnZ2VyIFVJIGNoYW5nZXNcbiAgICAvLyAocHJvdmlkZWQgeW91IGRvbid0IHVzZSBcYkNvbXBvbmVudCB0aGF0IG5lZWRzIGluaXRpYWxpemF0aW9ucylcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1jVmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgYW5pbWF0aW9uIHdoaWxlIGluaXRpYWxpemluZ1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVWaXNpYmxlU3RhdGVDaGFuZ2UodGhpcy5tY1Zpc2libGUsICFjaGFuZ2VzLm1jVmlzaWJsZS5maXJzdENoYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIElmIHVzaW5nIENvbXBvbmVudCwgaXQgaXMgdGhlIHRpbWUgdG8gYXR0YWNoIFZpZXcgd2hpbGUgYm9keUNvbnRhaW5lciBpcyByZWFkeVxuICAgICAgICBpZiAodGhpcy5jb250ZW50Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlDb250YWluZXIuaW5zZXJ0KHRoaXMuY29udGVudENvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzBdPy5mb2N1cygpO1xuXG4gICAgICAgIGZvciAoY29uc3QgYXV0b0ZvY3VzZWRCdXR0b24gb2YgdGhpcy5hdXRvRm9jdXNlZEJ1dHRvbnMudG9BcnJheSgpKSB7XG4gICAgICAgICAgICBpZiAoYXV0b0ZvY3VzZWRCdXR0b24ubmF0aXZlRWxlbWVudC5hdXRvZm9jdXMpIHtcbiAgICAgICAgICAgICAgICAoYXV0b0ZvY3VzZWRCdXR0b24ubmF0aXZlRWxlbWVudCBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZm9jdXMoKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGVja092ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIE92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrT3ZlcmZsb3coKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLm1vZGFsQm9keT8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBpZiAoIW5hdGl2ZUVsZW1lbnQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wOiBudW1iZXIgPSBuYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0SGVpZ2h0OiBudW1iZXIgPSBuYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0OiBudW1iZXIgPSBuYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcblxuICAgICAgICB0aGlzLmlzVG9wT3ZlcmZsb3cgPSBzY3JvbGxUb3AgPiAwO1xuXG4gICAgICAgIHRoaXMuaXNCb3R0b21PdmVyZmxvdyA9IChzY3JvbGxUb3AgYXMgbnVtYmVyICsgb2Zmc2V0SGVpZ2h0IGFzIG51bWJlcikgPCBzY3JvbGxIZWlnaHQ7XG4gICAgfVxuXG4gICAgb3BlbigpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VWaXNpYmxlRnJvbUluc2lkZSh0cnVlKTtcbiAgICB9XG5cbiAgICBjbG9zZShyZXN1bHQ/OiBSKSB7XG4gICAgICAgIGlmICh0aGlzLm1jUmVzdG9yZUZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbj8uZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlVmlzaWJsZUZyb21JbnNpZGUoZmFsc2UsIHJlc3VsdCk7XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIERlc3Ryb3kgZXF1YWxzIENsb3NlXG4gICAgZGVzdHJveShyZXN1bHQ/OiBSKSB7XG4gICAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgICB9XG5cbiAgICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgdHJpZ2dlck9rKCkge1xuICAgICAgICB0aGlzLm9uQ2xpY2tPa0NhbmNlbCgnb2snKTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyQ2FuY2VsKCkge1xuICAgICAgICB0aGlzLm9uQ2xpY2tPa0NhbmNlbCgnY2FuY2VsJyk7XG4gICAgfVxuXG4gICAgZ2V0SW5zdGFuY2UoKTogTWNNb2RhbENvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldENvbnRlbnRDb21wb25lbnRSZWYoKTogQ29tcG9uZW50UmVmPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudENvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBnZXRDb250ZW50Q29tcG9uZW50KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Q29tcG9uZW50UmVmICYmIHRoaXMuY29udGVudENvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZiAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXRNY0Zvb3RlcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnQoKS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYy1tb2RhbC1mb290ZXInKS5pdGVtKDApIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIG9uQ2xpY2tNYXNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLm1jTWFzayAmJlxuICAgICAgICAgICAgdGhpcy5tY01hc2tDbG9zYWJsZSAmJlxuICAgICAgICAgICAgKCRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnbWMtbW9kYWwtd3JhcCcpICYmXG4gICAgICAgICAgICB0aGlzLm1jVmlzaWJsZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMub25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tcmVzZXJ2ZWQta2V5d29yZHNcbiAgICBpc01vZGFsVHlwZSh0eXBlOiBNb2RhbFR5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWNNb2RhbFR5cGUgPT09IHR5cGU7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uIC5rZXkgaXNuJ3Qgc3VwcG9ydGVkIGluIEVkZ2VcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJiB0aGlzLmNvbnRhaW5lciAmJiAodGhpcy5jb250YWluZXIgaW5zdGFuY2VvZiBPdmVybGF5UmVmKSkge1xuXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvbiAua2V5IGlzbid0IHN1cHBvcnRlZCBpbiBFZGdlXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleUNvZGUgPT09IEVOVEVSKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tY01vZGFsVHlwZSA9PT0gJ2NvbmZpcm0nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyT2soKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKHRoaXMuZ2V0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJ1ttYy1tb2RhbC1tYWluLWFjdGlvbl0nKSBhcyBIVE1MRWxlbWVudCk/LmNsaWNrKCk7XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBb1RcbiAgICBvbkNsaWNrQ2xvc2VCdG4oKSB7XG4gICAgICAgIGlmICh0aGlzLm1jVmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrT2tDYW5jZWwoJ2NhbmNlbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQW9UXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1yZXNlcnZlZC1rZXl3b3Jkc1xuICAgIG9uQ2xpY2tPa0NhbmNlbCh0eXBlOiAnb2snIHwgJ2NhbmNlbCcpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlciA9IHsgb2s6IHRoaXMubWNPbk9rLCBjYW5jZWw6IHRoaXMubWNPbkNhbmNlbCB9W3R5cGVdO1xuICAgICAgICBjb25zdCBsb2FkaW5nS2V5ID0geyBvazogJ21jT2tMb2FkaW5nJywgY2FuY2VsOiAnbWNDYW5jZWxMb2FkaW5nJyB9W3R5cGVdO1xuXG4gICAgICAgIGlmICh0cmlnZ2VyIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICB0cmlnZ2VyLmVtaXQodGhpcy5nZXRDb250ZW50Q29tcG9uZW50KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0cmlnZ2VyID09PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRyaWdnZXIodGhpcy5nZXRDb250ZW50Q29tcG9uZW50KCkpO1xuICAgICAgICAgICAgLy8gVXNlcnMgY2FuIHJldHVybiBcImZhbHNlXCIgdG8gcHJldmVudCBjbG9zaW5nIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIGNvbnN0IGNhc2VDbG9zZSA9IChkb0Nsb3NlOiBib29sZWFuIHwgdm9pZCB8IHt9KSA9PiAoZG9DbG9zZSAhPT0gZmFsc2UpICYmIHRoaXMuY2xvc2UoZG9DbG9zZSBhcyBSKTtcblxuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tsb2FkaW5nS2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlVGhlbiA9IChkb0Nsb3NlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbbG9hZGluZ0tleV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZUNsb3NlKGRvQ2xvc2UpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgKHJlc3VsdCBhcyBQcm9taXNlPHZvaWQ+KS50aGVuKGhhbmRsZVRoZW4pLmNhdGNoKGhhbmRsZVRoZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYXNlQ2xvc2UocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFvVFxuICAgIGlzTm9uRW1wdHlTdHJpbmcodmFsdWU6IHt9KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJztcbiAgICB9XG5cbiAgICAvLyBBb1RcbiAgICBpc1RlbXBsYXRlUmVmKHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICAvLyBBb1RcbiAgICBpc0NvbXBvbmVudCh2YWx1ZToge30pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVHlwZTtcbiAgICB9XG5cbiAgICAvLyBBb1RcbiAgICBpc01vZGFsQnV0dG9ucyh2YWx1ZToge30pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLy8gTG9va3VwIGEgYnV0dG9uJ3MgcHJvcGVydHksIGlmIHRoZSBwcm9wIGlzIGEgZnVuY3Rpb24sIGNhbGwgJiB0aGVuIHJldHVybiB0aGUgcmVzdWx0LCBvdGhlcndpc2UsIHJldHVybiBpdHNlbGYuXG4gICAgLy8gQW9UXG4gICAgZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKG9wdGlvbnM6IElNb2RhbEJ1dHRvbk9wdGlvbnM8VD4sIHByb3A6IHN0cmluZyk6IHt9IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW3Byb3BdO1xuICAgICAgICBjb25zdCBhcmdzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jb250ZW50Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2godGhpcy5jb250ZW50Q29tcG9uZW50UmVmLmluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZS5hcHBseShvcHRpb25zLCBhcmdzKSA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIE9uIG1jRm9vdGVyJ3MgbW9kYWwgYnV0dG9uIGNsaWNrXG4gICAgLy8gQW9UXG4gICAgb25CdXR0b25DbGljayhidXR0b246IElNb2RhbEJ1dHRvbk9wdGlvbnM8VD4pIHtcbiAgICAgICAgLy8gQ2FsbCBvbkNsaWNrIGRpcmVjdGx5XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbmZlcnJlZC1lbXB0eS1vYmplY3QtdHlwZSAgcnVsZSBzZWVtcyB0byBiZSBicm9rZW5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRCdXR0b25DYWxsYWJsZVByb3AoYnV0dG9uLCAnb25DbGljaycpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGJ1dHRvbi5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIChyZXN1bHQgYXMgUHJvbWlzZTx7fT4pLnRoZW4oKCkgPT4gYnV0dG9uLmxvYWRpbmcgPSBmYWxzZSkuY2F0Y2goKCkgPT4gYnV0dG9uLmxvYWRpbmcgPSBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEbyByZXN0IHRoaW5ncyB3aGVuIHZpc2libGUgc3RhdGUgY2hhbmdlZFxuICAgIHByaXZhdGUgaGFuZGxlVmlzaWJsZVN0YXRlQ2hhbmdlKHZpc2libGU6IGJvb2xlYW4sIGFuaW1hdGlvbjogYm9vbGVhbiA9IHRydWUsIGNsb3NlUmVzdWx0PzogUik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIC8vIEhpZGUgc2Nyb2xsYmFyIGF0IHRoZSBmaXJzdCB0aW1lIHdoZW4gc2hvd24gdXBcbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQm9keU92ZXJmbG93KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VcbiAgICAgICAgICAgIC5yZXNvbHZlKGFuaW1hdGlvbiAmJiB0aGlzLmFuaW1hdGVUbyh2aXNpYmxlKSlcbiAgICAgICAgICAgIC8vIEVtaXQgb3Blbi9jbG9zZSBldmVudCBhZnRlciBhbmltYXRpb25zIG92ZXJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1jQWZ0ZXJPcGVuLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1jQWZ0ZXJDbG9zZS5lbWl0KGNsb3NlUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdy9oaWRlIHNjcm9sbGJhciB3aGVuIGFuaW1hdGlvbiBpcyBvdmVyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQm9keU92ZXJmbG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIG1jVmlzaWJsZSBmcm9tIGluc2lkZVxuICAgIHByaXZhdGUgY2hhbmdlVmlzaWJsZUZyb21JbnNpZGUodmlzaWJsZTogYm9vbGVhbiwgY2xvc2VSZXN1bHQ/OiBSKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLm1jVmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gQ2hhbmdlIG1jVmlzaWJsZSB2YWx1ZSBpbW1lZGlhdGVseVxuICAgICAgICAgICAgdGhpcy5tY1Zpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgdGhpcy5tY1Zpc2libGVDaGFuZ2UuZW1pdCh2aXNpYmxlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVmlzaWJsZVN0YXRlQ2hhbmdlKHZpc2libGUsIHRydWUsIGNsb3NlUmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUFuaW1hdGlvblN0YXRlKHN0YXRlOiBBbmltYXRpb25TdGF0ZSkge1xuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gc3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXNrQW5pbWF0aW9uQ2xhc3NNYXAgPSB7XG4gICAgICAgICAgICAgICAgW2BmYWRlLSR7c3RhdGV9YF06IHRydWUsXG4gICAgICAgICAgICAgICAgW2BmYWRlLSR7c3RhdGV9LWFjdGl2ZWBdOiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLm1vZGFsQW5pbWF0aW9uQ2xhc3NNYXAgPSB7XG4gICAgICAgICAgICAgICAgW2B6b29tLSR7c3RhdGV9YF06IHRydWUsXG4gICAgICAgICAgICAgICAgW2B6b29tLSR7c3RhdGV9LWFjdGl2ZWBdOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5tYXNrQW5pbWF0aW9uQ2xhc3NNYXAgPSB0aGlzLm1vZGFsQW5pbWF0aW9uQ2xhc3NNYXAgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50Q29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYW5pbWF0ZVRvKGlzVmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGxhc3Rlc3QgY2xpY2sgcG9zaXRpb24gd2hlbiBzaG93cyB1cFxuICAgICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyBbTk9URV0gVXNpbmcgdGltZW91dCBkdWUgdG8gdGhlIGRvY3VtZW50LmNsaWNrIGV2ZW50IGlzIGZpcmVkIGxhdGVyIHRoYW4gdmlzaWJsZSBjaGFuZ2UsXG4gICAgICAgICAgICAvLyBzbyBpZiBub3QgcG9zdHBvbmVkIHRvIG5leHQgZXZlbnQtbG9vcCwgd2UgY2FuJ3QgZ2V0IHRoZSBsYXN0ZXN0IGNsaWNrIHBvc2l0aW9uXG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRyYW5zZm9ybU9yaWdpbigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlQW5pbWF0aW9uU3RhdGUoaXNWaXNpYmxlID8gJ2VudGVyJyA6ICdsZWF2ZScpO1xuXG4gICAgICAgIC8vIFJldHVybiB3aGVuIGFuaW1hdGlvbiBpcyBvdmVyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VBbmltYXRpb25TdGF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE1PREFMX0FOSU1BVEVfRFVSQVRJT05cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0TW9kYWxCdXR0b25zKGJ1dHRvbnM6IElNb2RhbEJ1dHRvbk9wdGlvbnM8VD5bXSk6IElNb2RhbEJ1dHRvbk9wdGlvbnM8VD5bXSB7XG4gICAgICAgIHJldHVybiBidXR0b25zLm1hcCgoYnV0dG9uKSA9PiB7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgYXV0b0xvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLmJ1dHRvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY29tcG9uZW50IGR5bmFtaWNhbGx5IGJ1dCBub3QgYXR0YWNoIHRvIGFueSBWaWV3XG4gICAgICogKHRoaXMgYWN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBib2R5Q29udGFpbmVyIGlzIHJlYWR5KVxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IGNsYXNzXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVEeW5hbWljQ29tcG9uZW50KGNvbXBvbmVudDogVHlwZTxUPikge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgY2hpbGRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogTWNNb2RhbFJlZiwgdXNlVmFsdWU6IHRoaXN9XSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy52aWV3Q29udGFpbmVyLmluamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudFJlZiA9IGZhY3RvcnkuY3JlYXRlKGNoaWxkSW5qZWN0b3IpO1xuXG4gICAgICAgIGlmICh0aGlzLm1jQ29tcG9uZW50UGFyYW1zKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29udGVudENvbXBvbmVudFJlZi5pbnN0YW5jZSwgdGhpcy5tY0NvbXBvbmVudFBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEbyB0aGUgZmlyc3QgY2hhbmdlIGRldGVjdGlvbiBpbW1lZGlhdGVseVxuICAgICAgICAvLyAob3Igd2UgZG8gZGV0ZWN0aW9uIGF0IG5nQWZ0ZXJWaWV3SW5pdCwgbXVsdGktY2hhbmdlcyBlcnJvciB3aWxsIGJlIHRocm93bilcbiAgICAgICAgdGhpcy5jb250ZW50Q29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdHJhbnNmb3JtLW9yaWdpbiB0byB0aGUgbGFzdCBjbGljayBwb3NpdGlvbiBvbiBkb2N1bWVudFxuICAgIHByaXZhdGUgdXBkYXRlVHJhbnNmb3JtT3JpZ2luKCkge1xuICAgICAgICBjb25zdCBtb2RhbEVsZW1lbnQgPSB0aGlzLm1vZGFsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxhc3RQb3NpdGlvbiA9IE1vZGFsVXRpbC5nZXRMYXN0Q2xpY2tQb3NpdGlvbigpO1xuXG4gICAgICAgIGlmIChsYXN0UG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtT3JpZ2luID0gYCR7bGFzdFBvc2l0aW9uLnggLSBtb2RhbEVsZW1lbnQub2Zmc2V0TGVmdH1weCAke2xhc3RQb3NpdGlvbi55IC0gbW9kYWxFbGVtZW50Lm9mZnNldFRvcH1weCAwcHhgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZSBjYXJlIG9mIHRoZSBib2R5J3Mgb3ZlcmZsb3cgdG8gZGVjaWRlIHRoZSBleGlzdGVuc2Ugb2Ygc2Nyb2xsYmFyXG4gICAgICogQHBhcmFtIHBsdXNOdW0gVGhlIG51bWJlciB0aGF0IHRoZSBvcGVuTW9kYWxzLmxlbmd0aCB3aWxsIGluY3JlYXNlIHNvb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGNoYW5nZUJvZHlPdmVyZmxvdyhwbHVzTnVtOiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGNvbnN0IG9wZW5Nb2RhbHMgPSB0aGlzLm1vZGFsQ29udHJvbC5vcGVuTW9kYWxzO1xuXG4gICAgICAgIGlmIChvcGVuTW9kYWxzLmxlbmd0aCArIHBsdXNOdW0gPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksICdvdmVyZmxvdycpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iajoge30gfCB2b2lkKTogYm9vbGVhbiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bmJvdW5kLW1ldGhvZFxuICAgIHJldHVybiAhIW9iaiAmJlxuICAgICAgICAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgICAgdHlwZW9mIChvYmogYXMgUHJvbWlzZTx7fT4pLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgdHlwZW9mIChvYmogYXMgUHJvbWlzZTx7fT4pLmNhdGNoID09PSAnZnVuY3Rpb24nO1xufVxuIiwiPCEtLSBDb21wYXRpYmxlOiB0aGUgPG5nLWNvbnRlbnQ+IGNhbiBhcHBlYXIgb25seSBvbmNlIC0tPlxuPG5nLXRlbXBsYXRlICN0cGxPcmlnaW5Db250ZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1jTWFza1wiXG4gICAgICAgICBjbGFzcz1cIm1jLW1vZGFsLW1hc2tcIlxuICAgICAgICAgW25nQ2xhc3NdPVwibWFza0FuaW1hdGlvbkNsYXNzTWFwXCJcbiAgICAgICAgIFtjbGFzcy5tYy1tb2RhbC1tYXNrLWhpZGRlbl09XCJoaWRkZW5cIlxuICAgICAgICAgW25nU3R5bGVdPVwibWNNYXNrU3R5bGVcIlxuICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJtY1pJbmRleFwiXG4gICAgPjwvZGl2PlxuICAgIDxkaXYgKG1vdXNlZG93bik9XCJvbkNsaWNrTWFzaygkZXZlbnQpXCJcbiAgICAgICAgIGNsYXNzPVwibWMtbW9kYWwtd3JhcCB7eyBtY1dyYXBDbGFzc05hbWUgfX1cIlxuICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJtY1pJbmRleFwiXG4gICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJoaWRkZW4gPyAnbm9uZScgOiAnJ1wiXG4gICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG5cbiAgICAgICAgPGRpdiAjbW9kYWxDb250YWluZXJcbiAgICAgICAgICAgICBjbGFzcz1cIm1jLW1vZGFsIHt7IG1jQ2xhc3NOYW1lIH19IG1jLW1vZGFsX3t7IG1jU2l6ZSB9fVwiXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwibW9kYWxBbmltYXRpb25DbGFzc01hcFwiXG4gICAgICAgICAgICAgW25nU3R5bGVdPVwibWNTdHlsZVwiXG4gICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIm1jV2lkdGggfCB0b0Nzc1VuaXRcIlxuICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm0tb3JpZ2luXT1cInRyYW5zZm9ybU9yaWdpblwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWMtbW9kYWwtY29udGVudFwiIGNka1RyYXBGb2N1cz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwibWNDbG9zYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrQ2xvc2VCdG4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1jLW1vZGFsLWNsb3NlIG1jLWJ1dHRvbl90cmFuc3BhcmVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBtYy1pY29uPVwibWMtY2xvc2UtTF8xNlwiIGNsYXNzPVwibWMtaWNvbiBtYy1pY29uX2xpZ2h0XCIgW2NvbG9yXT1cInRoZW1lUGFsZXR0ZS5TZWNvbmRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc01vZGFsVHlwZSgnZGVmYXVsdCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxDb250ZW50RGVmYXVsdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc01vZGFsVHlwZSgnY29uZmlybScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxDb250ZW50Q29uZmlybVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc01vZGFsVHlwZSgnY3VzdG9tJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbENvbnRlbnRDdXN0b21cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RwbENvbnRlbnRDdXN0b20+XG4gICAgPG5nLWNvbnRhaW5lciAjYm9keUNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cblxuPCEtLSBbUHJlZGVmaW5lZF0gRGVmYXVsdCBNb2RhbCBDb250ZW50IC0tPlxuPG5nLXRlbXBsYXRlICN0cGxDb250ZW50RGVmYXVsdD5cbiAgICA8ZGl2ICpuZ0lmPVwibWNUaXRsZVwiIGNsYXNzPVwibWMtbW9kYWwtaGVhZGVyXCIgW2NsYXNzLm1jLW1vZGFsLWJvZHlfdG9wLW92ZXJmbG93XT1cImlzVG9wT3ZlcmZsb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLXRpdGxlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY1RpdGxlKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkobWNUaXRsZSlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc05vbkVtcHR5U3RyaW5nKG1jVGl0bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJtY1RpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLWJvZHlcIiAjbW9kYWxCb2R5IFtuZ1N0eWxlXT1cIm1jQm9keVN0eWxlXCIgKHNjcm9sbCk9XCJjaGVja092ZXJmbG93KClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjYm9keUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb21wb25lbnQobWNDb250ZW50KVwiIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY0NvbnRlbnQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShtY0NvbnRlbnQpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNOb25FbXB0eVN0cmluZyhtY0NvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJtY0NvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsT3JpZ2luQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtY0Zvb3RlciB8fCBtY09rVGV4dCB8fCBtY0NhbmNlbFRleHRcIiBjbGFzcz1cIm1jLW1vZGFsLWZvb3RlclwiIFtjbGFzcy5tYy1tb2RhbC1ib2R5X2JvdHRvbS1vdmVyZmxvd109XCJpc0JvdHRvbU92ZXJmbG93XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzVGVtcGxhdGVSZWYobWNGb290ZXIpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShtY0Zvb3RlcilcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTm9uRW1wdHlTdHJpbmcobWNGb290ZXIpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1jRm9vdGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTW9kYWxCdXR0b25zKG1jRm9vdGVyKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiAkYW55KG1jRm9vdGVyKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvRm9jdXNlZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2ZvY3VzXT1cImJ1dHRvbi5hdXRvRm9jdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIubWMtbW9kYWwtbWFpbi1hY3Rpb25dPVwiYnV0dG9uLm1jTW9kYWxNYWluQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKGJ1dHRvbiwgJ3Nob3cnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKGJ1dHRvbiwgJ2Rpc2FibGVkJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1jLXByb2dyZXNzXT1cImdldEJ1dHRvbkNhbGxhYmxlUHJvcChidXR0b24sICdsb2FkaW5nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLnR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgI2F1dG9Gb2N1c2VkQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtY09rVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1jLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGhlbWVQYWxldHRlLlByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja09rQ2FuY2VsKCdvaycpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAge3sgb2tUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm1jQ2FuY2VsVGV4dFwiIG1jLWJ1dHRvbiAoY2xpY2spPVwib25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjYW5jZWxUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSAvW1ByZWRlZmluZWRdIERlZmF1bHQgTW9kYWwgQ29udGVudCAtLT5cblxuPCEtLSBbUHJlZGVmaW5lZF0gQ29uZmlybSBNb2RhbCBDb250ZW50IC0tPlxuPG5nLXRlbXBsYXRlICN0cGxDb250ZW50Q29uZmlybT5cbiAgICA8ZGl2IGNsYXNzPVwibWMtbW9kYWwtYm9keVwiIFtuZ1N0eWxlXT1cIm1jQm9keVN0eWxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYy1jb25maXJtLWJvZHktd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWNvbmZpcm0tYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1jb25maXJtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjYm9keUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb21wb25lbnQobWNDb250ZW50KVwiIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY0NvbnRlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkobWNDb250ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTm9uRW1wdHlTdHJpbmcobWNDb250ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwibWNDb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0IFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbE9yaWdpbkNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gPCEtLSAvLm1jLWNvbmZpcm0tYm9keS13cmFwcGVyIC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYy1jb25maXJtLWJ0bnNcIiAqbmdJZj1cIm1jT2tUZXh0IHx8IG1jQ2FuY2VsVGV4dFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICNhdXRvRm9jdXNlZEJ1dHRvblxuICAgICAgICAgICAgW2NvbG9yXT1cIm1jT2tUeXBlXCJcbiAgICAgICAgICAgIFthdHRyLmF1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICpuZ0lmPVwibWNPa1RleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tPa0NhbmNlbCgnb2snKVwiPlxuXG4gICAgICAgICAgICB7eyBva1RleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiBtYy1idXR0b24gW2NvbG9yXT1cInRoZW1lUGFsZXR0ZS5TZWNvbmRcIiAqbmdJZj1cIm1jQ2FuY2VsVGV4dFwiIChjbGljayk9XCJvbkNsaWNrT2tDYW5jZWwoJ2NhbmNlbCcpXCI+XG4gICAgICAgICAgICB7eyBjYW5jZWxUZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gL1tQcmVkZWZpbmVkXSBDb25maXJtIE1vZGFsIENvbnRlbnQgLS0+XG4iXX0=
|