@wavemaker/app-ng-runtime 11.10.5-rc.6100 → 11.11.0-1.6140
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/build-task/bundles/index.umd.js +94 -68
- package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +8 -8
- package/build-task/esm2022/containers/repeat-template.build.mjs +5 -5
- package/build-task/esm2022/containers/wizard/wizard-step/wizard-step.build.mjs +2 -2
- package/build-task/esm2022/containers/wizard/wizard.build.mjs +33 -4
- package/build-task/esm2022/data/form/form-field/form-field.build.mjs +10 -10
- package/build-task/esm2022/data/table/table-column/table-column.build.mjs +15 -11
- package/build-task/esm2022/page/page.build.mjs +2 -8
- package/build-task/esm2022/public_api.mjs +1 -1
- package/build-task/fesm2022/index.mjs +95 -69
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/advanced/carousel/bundles/index.umd.js +8 -36
- package/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +1 -1
- package/components/advanced/carousel/carousel.directive.d.ts +1 -1
- package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +3 -2
- package/components/advanced/carousel/esm2022/carousel.directive.mjs +3 -2
- package/components/advanced/carousel/esm2022/public_api.mjs +1 -2
- package/components/advanced/carousel/fesm2022/index.mjs +8 -36
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/advanced/carousel/public_api.d.ts +0 -1
- package/components/advanced/custom/bundles/index.umd.js +8 -33
- package/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +1 -1
- package/components/advanced/custom/custom-widget.directive.d.ts +1 -1
- package/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +3 -2
- package/components/advanced/custom/esm2022/custom-widget.directive.mjs +3 -2
- package/components/advanced/custom/esm2022/public_api.mjs +1 -2
- package/components/advanced/custom/fesm2022/index.mjs +7 -32
- package/components/advanced/custom/fesm2022/index.mjs.map +1 -1
- package/components/advanced/custom/public_api.d.ts +0 -1
- package/components/advanced/login/bundles/index.umd.js +10 -34
- package/components/advanced/login/esm2022/login.component.mjs +7 -6
- package/components/advanced/login/esm2022/public_api.mjs +1 -2
- package/components/advanced/login/fesm2022/index.mjs +8 -32
- package/components/advanced/login/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/login.component.d.ts +1 -1
- package/components/advanced/login/public_api.d.ts +0 -1
- package/components/advanced/marquee/bundles/index.umd.js +6 -29
- package/components/advanced/marquee/esm2022/marquee.directive.mjs +3 -2
- package/components/advanced/marquee/esm2022/public_api.mjs +1 -2
- package/components/advanced/marquee/fesm2022/index.mjs +5 -28
- package/components/advanced/marquee/fesm2022/index.mjs.map +1 -1
- package/components/advanced/marquee/marquee.directive.d.ts +1 -1
- package/components/advanced/marquee/public_api.d.ts +0 -1
- package/components/base/bundles/index.umd.js +86 -278
- package/components/base/components.module.d.ts +13 -15
- package/components/base/directives/show-in-device.directive.d.ts +1 -1
- package/components/base/esm2022/components.module.mjs +7 -13
- package/components/base/esm2022/directives/show-in-device.directive.mjs +3 -2
- package/components/base/esm2022/pipes/custom-pipes.mjs +33 -16
- package/components/base/esm2022/pipes/image.pipe.mjs +3 -2
- package/components/base/esm2022/pipes/sanitize.pipe.mjs +3 -2
- package/components/base/esm2022/pipes/trust-as.pipe.mjs +3 -2
- package/components/base/esm2022/public_api.mjs +1 -2
- package/components/base/esm2022/utils/form-utils.mjs +3 -1
- package/components/base/esm2022/utils/live-utils.mjs +3 -7
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +4 -2
- package/components/base/esm2022/widgets/common/base/base.component.mjs +3 -5
- package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/base/text-content.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/container/container.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +3 -3
- package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/message/message.component.mjs +5 -5
- package/components/base/esm2022/widgets/common/partial/partial.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +5 -3
- package/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +3 -2
- package/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +3 -2
- package/components/base/fesm2022/index.mjs +85 -276
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +15 -15
- package/components/base/pipes/image.pipe.d.ts +1 -1
- package/components/base/pipes/sanitize.pipe.d.ts +1 -1
- package/components/base/pipes/trust-as.pipe.d.ts +1 -1
- package/components/base/public_api.d.ts +0 -1
- package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +1 -1
- package/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
- package/components/base/widgets/common/base/text-content.directive.d.ts +1 -1
- package/components/base/widgets/common/container/container.directive.d.ts +1 -1
- package/components/base/widgets/common/item-template/item-template.directive.d.ts +1 -1
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
- package/components/base/widgets/common/message/message.component.d.ts +1 -1
- package/components/base/widgets/common/partial/partial.directive.d.ts +1 -1
- package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +2 -2
- package/components/base/widgets/common/redraw/redrawable.directive.d.ts +1 -1
- package/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +1 -1
- package/components/basic/default/anchor/anchor.component.d.ts +1 -1
- package/components/basic/default/audio/audio.component.d.ts +1 -1
- package/components/basic/default/bundles/index.umd.js +100 -148
- package/components/basic/default/esm2022/anchor/anchor.component.mjs +23 -21
- package/components/basic/default/esm2022/audio/audio.component.mjs +7 -6
- package/components/basic/default/esm2022/html/html.directive.mjs +3 -2
- package/components/basic/default/esm2022/icon/icon.component.mjs +17 -16
- package/components/basic/default/esm2022/iframe/iframe.component.mjs +14 -13
- package/components/basic/default/esm2022/label/label.directive.mjs +3 -2
- package/components/basic/default/esm2022/picture/picture.directive.mjs +3 -2
- package/components/basic/default/esm2022/picture/picture.props.mjs +1 -5
- package/components/basic/default/esm2022/public_api.mjs +1 -2
- package/components/basic/default/esm2022/spinner/spinner.component.mjs +26 -24
- package/components/basic/default/esm2022/video/video.component.mjs +19 -18
- package/components/basic/default/fesm2022/index.mjs +101 -148
- package/components/basic/default/fesm2022/index.mjs.map +1 -1
- package/components/basic/default/html/html.directive.d.ts +1 -1
- package/components/basic/default/icon/icon.component.d.ts +1 -1
- package/components/basic/default/iframe/iframe.component.d.ts +1 -1
- package/components/basic/default/label/label.directive.d.ts +1 -1
- package/components/basic/default/picture/picture.directive.d.ts +1 -1
- package/components/basic/default/public_api.d.ts +0 -1
- package/components/basic/default/spinner/spinner.component.d.ts +1 -1
- package/components/basic/default/video/video.component.d.ts +1 -1
- package/components/basic/progress/bundles/index.umd.js +20 -51
- package/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +12 -11
- package/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +8 -6
- package/components/basic/progress/esm2022/public_api.mjs +1 -2
- package/components/basic/progress/fesm2022/index.mjs +19 -49
- package/components/basic/progress/fesm2022/index.mjs.map +1 -1
- package/components/basic/progress/progress-bar/progress-bar.component.d.ts +1 -1
- package/components/basic/progress/progress-circle/progress-circle.component.d.ts +1 -1
- package/components/basic/progress/public_api.d.ts +0 -1
- package/components/basic/rich-text-editor/bundles/index.umd.js +15 -40
- package/components/basic/rich-text-editor/esm2022/public_api.mjs +1 -2
- package/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +13 -12
- package/components/basic/rich-text-editor/fesm2022/index.mjs +13 -37
- package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
- package/components/basic/rich-text-editor/public_api.d.ts +0 -1
- package/components/basic/rich-text-editor/rich-text-editor.component.d.ts +1 -1
- package/components/basic/search/bundles/index.umd.js +170 -207
- package/components/basic/search/esm2022/public_api.mjs +1 -2
- package/components/basic/search/esm2022/scrollable.directive.mjs +3 -2
- package/components/basic/search/esm2022/search.component.mjs +76 -72
- package/components/basic/search/fesm2022/index.mjs +107 -143
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/public_api.d.ts +0 -1
- package/components/basic/search/scrollable.directive.d.ts +1 -1
- package/components/basic/search/search.component.d.ts +1 -1
- package/components/basic/tree/bundles/index.umd.js +9 -33
- package/components/basic/tree/esm2022/public_api.mjs +1 -2
- package/components/basic/tree/esm2022/tree.component.mjs +7 -6
- package/components/basic/tree/fesm2022/index.mjs +8 -32
- package/components/basic/tree/fesm2022/index.mjs.map +1 -1
- package/components/basic/tree/public_api.d.ts +0 -1
- package/components/basic/tree/tree.component.d.ts +1 -1
- package/components/chart/bundles/index.umd.js +27 -53
- package/components/chart/chart.component.d.ts +1 -1
- package/components/chart/esm2022/chart.component.mjs +26 -24
- package/components/chart/esm2022/chart.utils.mjs +3 -1
- package/components/chart/esm2022/public_api.mjs +1 -2
- package/components/chart/fesm2022/index.mjs +27 -52
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/chart/public_api.d.ts +0 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +1 -1
- package/components/containers/accordion/accordion.directive.d.ts +1 -1
- package/components/containers/accordion/bundles/index.umd.js +208 -237
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -11
- package/components/containers/accordion/esm2022/accordion.directive.mjs +5 -4
- package/components/containers/accordion/esm2022/public_api.mjs +1 -2
- package/components/containers/accordion/fesm2022/index.mjs +189 -217
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/public_api.d.ts +0 -1
- package/components/containers/layout-grid/bundles/index.umd.js +13 -43
- package/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +7 -9
- package/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +3 -2
- package/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +3 -2
- package/components/containers/layout-grid/esm2022/public_api.mjs +1 -2
- package/components/containers/layout-grid/fesm2022/index.mjs +13 -43
- package/components/containers/layout-grid/fesm2022/index.mjs.map +1 -1
- package/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +1 -1
- package/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +1 -1
- package/components/containers/layout-grid/layout-grid.directive.d.ts +1 -1
- package/components/containers/layout-grid/public_api.d.ts +0 -1
- package/components/containers/linear-layout/bundles/index.umd.js +8 -33
- package/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +3 -2
- package/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +3 -2
- package/components/containers/linear-layout/esm2022/public_api.mjs +1 -2
- package/components/containers/linear-layout/fesm2022/index.mjs +7 -32
- package/components/containers/linear-layout/fesm2022/index.mjs.map +1 -1
- package/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +1 -1
- package/components/containers/linear-layout/linear-layout.directive.d.ts +1 -1
- package/components/containers/linear-layout/public_api.d.ts +0 -1
- package/components/containers/panel/bundles/index.umd.js +87 -118
- package/components/containers/panel/esm2022/panel.component.mjs +48 -46
- package/components/containers/panel/esm2022/public_api.mjs +1 -2
- package/components/containers/panel/fesm2022/index.mjs +49 -79
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/panel.component.d.ts +1 -1
- package/components/containers/panel/public_api.d.ts +0 -1
- package/components/containers/tabs/bundles/index.umd.js +112 -120
- package/components/containers/tabs/esm2022/public_api.mjs +1 -2
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +8 -10
- package/components/containers/tabs/esm2022/tabs.component.mjs +61 -38
- package/components/containers/tabs/esm2022/tabs.props.mjs +2 -5
- package/components/containers/tabs/fesm2022/index.mjs +72 -81
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/public_api.d.ts +0 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +1 -1
- package/components/containers/tabs/tabs.component.d.ts +3 -1
- package/components/containers/tile/bundles/index.umd.js +6 -29
- package/components/containers/tile/esm2022/public_api.mjs +1 -2
- package/components/containers/tile/esm2022/tile.directive.mjs +3 -2
- package/components/containers/tile/fesm2022/index.mjs +5 -28
- package/components/containers/tile/fesm2022/index.mjs.map +1 -1
- package/components/containers/tile/public_api.d.ts +0 -1
- package/components/containers/tile/tile.directive.d.ts +1 -1
- package/components/containers/wizard/bundles/index.umd.js +355 -189
- package/components/containers/wizard/esm2022/public_api.mjs +2 -3
- package/components/containers/wizard/esm2022/wizard-action/wizard-action.directive.mjs +3 -2
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +176 -0
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.props.mjs +8 -5
- package/components/containers/wizard/esm2022/wizard.component.mjs +264 -105
- package/components/containers/wizard/esm2022/wizard.props.mjs +8 -4
- package/components/containers/wizard/fesm2022/index.mjs +323 -155
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/public_api.d.ts +1 -2
- package/components/containers/wizard/wizard-action/wizard-action.directive.d.ts +1 -1
- package/components/containers/wizard/wizard-step/{wizard-step.directive.d.ts → wizard-step.component.d.ts} +12 -6
- package/components/containers/wizard/wizard.component.d.ts +64 -18
- package/components/data/card/bundles/index.umd.js +92 -135
- package/components/data/card/card-actions/card-actions.directive.d.ts +1 -1
- package/components/data/card/card-content/card-content.component.d.ts +1 -1
- package/components/data/card/card-footer/card-footer.directive.d.ts +1 -1
- package/components/data/card/card.component.d.ts +1 -1
- package/components/data/card/esm2022/card-actions/card-actions.directive.mjs +3 -2
- package/components/data/card/esm2022/card-content/card-content.component.mjs +7 -6
- package/components/data/card/esm2022/card-footer/card-footer.directive.mjs +3 -2
- package/components/data/card/esm2022/card.component.mjs +39 -38
- package/components/data/card/esm2022/public_api.mjs +1 -2
- package/components/data/card/fesm2022/index.mjs +49 -92
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/card/public_api.d.ts +0 -1
- package/components/data/form/bundles/index.umd.js +115 -182
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +3 -2
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +3 -2
- package/components/data/form/esm2022/form-widget.directive.mjs +3 -2
- package/components/data/form/esm2022/form.component.mjs +101 -104
- package/components/data/form/esm2022/form.props.mjs +1 -11
- package/components/data/form/esm2022/live-actions/dependson.directive.mjs +3 -2
- package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +3 -2
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +3 -2
- package/components/data/form/esm2022/live-form/live-form.directive.mjs +3 -6
- package/components/data/form/esm2022/public_api.mjs +1 -2
- package/components/data/form/fesm2022/index.mjs +117 -184
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form-action/form-action.directive.d.ts +1 -1
- package/components/data/form/form-field/form-field.directive.d.ts +1 -1
- package/components/data/form/form-widget.directive.d.ts +1 -1
- package/components/data/form/form.component.d.ts +1 -1
- package/components/data/form/live-actions/dependson.directive.d.ts +1 -1
- package/components/data/form/live-actions/live-actions.directive.d.ts +1 -1
- package/components/data/form/live-filter/live-filter.directive.d.ts +1 -1
- package/components/data/form/live-form/live-form.directive.d.ts +1 -1
- package/components/data/form/public_api.d.ts +0 -1
- package/components/data/list/bundles/index.umd.js +195 -504
- package/components/data/list/esm2022/list-item.directive.mjs +4 -3
- package/components/data/list/esm2022/list.component.mjs +187 -232
- package/components/data/list/esm2022/list.props.mjs +2 -3
- package/components/data/list/esm2022/public_api.mjs +1 -2
- package/components/data/list/fesm2022/index.mjs +193 -502
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +1 -1
- package/components/data/list/list.component.d.ts +1 -1
- package/components/data/list/public_api.d.ts +0 -1
- package/components/data/live-table/bundles/index.umd.js +9 -33
- package/components/data/live-table/esm2022/live-table.component.mjs +7 -6
- package/components/data/live-table/esm2022/public_api.mjs +1 -2
- package/components/data/live-table/fesm2022/index.mjs +8 -32
- package/components/data/live-table/fesm2022/index.mjs.map +1 -1
- package/components/data/live-table/live-table.component.d.ts +1 -1
- package/components/data/live-table/public_api.d.ts +0 -1
- package/components/data/pagination/bundles/index.umd.js +80 -110
- package/components/data/pagination/esm2022/pagination.component.mjs +80 -76
- package/components/data/pagination/esm2022/public_api.mjs +1 -2
- package/components/data/pagination/fesm2022/index.mjs +81 -110
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/pagination.component.d.ts +1 -1
- package/components/data/pagination/public_api.d.ts +0 -1
- package/components/data/table/bundles/index.umd.js +69 -135
- package/components/data/table/esm2022/public_api.mjs +1 -2
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +3 -2
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +3 -2
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +3 -2
- package/components/data/table/esm2022/table-cud.directive.mjs +3 -2
- package/components/data/table/esm2022/table-filter.directive.mjs +5 -2
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +3 -2
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +3 -2
- package/components/data/table/esm2022/table.component.mjs +51 -48
- package/components/data/table/fesm2022/index.mjs +73 -140
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/public_api.d.ts +0 -1
- package/components/data/table/table-action/table-action.directive.d.ts +1 -1
- package/components/data/table/table-column/table-column.directive.d.ts +1 -1
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +1 -1
- package/components/data/table/table-cud.directive.d.ts +1 -1
- package/components/data/table/table-filter.directive.d.ts +1 -1
- package/components/data/table/table-row/table-row.directive.d.ts +1 -1
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +1 -1
- package/components/data/table/table.component.d.ts +1 -1
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +1 -1
- package/components/dialogs/alert-dialog/bundles/index.umd.js +32 -64
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +10 -10
- package/components/dialogs/alert-dialog/esm2022/public_api.mjs +1 -2
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +11 -43
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/alert-dialog/public_api.d.ts +0 -1
- package/components/dialogs/confirm-dialog/bundles/index.umd.js +10 -42
- package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +1 -1
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +9 -9
- package/components/dialogs/confirm-dialog/esm2022/public_api.mjs +1 -2
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs +10 -42
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/confirm-dialog/public_api.d.ts +0 -1
- package/components/dialogs/default/bundles/index.umd.js +76 -136
- package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +1 -1
- package/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +1 -1
- package/components/dialogs/default/dialog-header/dialog-header.component.d.ts +1 -1
- package/components/dialogs/default/esm2022/base-dialog.mjs +3 -3
- package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +3 -2
- package/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +3 -2
- package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +70 -97
- package/components/dialogs/default/esm2022/public_api.mjs +1 -2
- package/components/dialogs/default/fesm2022/index.mjs +78 -137
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/default/public_api.d.ts +0 -1
- package/components/dialogs/design-dialog/bundles/index.umd.js +16 -47
- package/components/dialogs/design-dialog/dialog.component.d.ts +1 -1
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +14 -13
- package/components/dialogs/design-dialog/esm2022/public_api.mjs +1 -2
- package/components/dialogs/design-dialog/fesm2022/index.mjs +14 -45
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/design-dialog/public_api.d.ts +0 -1
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +20 -57
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +21 -21
- package/components/dialogs/iframe-dialog/esm2022/public_api.mjs +1 -2
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +21 -57
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +1 -1
- package/components/dialogs/iframe-dialog/public_api.d.ts +0 -1
- package/components/dialogs/login-dialog/bundles/index.umd.js +6 -38
- package/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +3 -2
- package/components/dialogs/login-dialog/esm2022/public_api.mjs +1 -2
- package/components/dialogs/login-dialog/fesm2022/index.mjs +6 -41
- package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/login-dialog/login-dialog.directive.d.ts +1 -1
- package/components/dialogs/login-dialog/public_api.d.ts +0 -1
- package/components/dialogs/partial-dialog/bundles/index.umd.js +17 -49
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +16 -15
- package/components/dialogs/partial-dialog/esm2022/public_api.mjs +1 -2
- package/components/dialogs/partial-dialog/fesm2022/index.mjs +16 -47
- package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +1 -1
- package/components/dialogs/partial-dialog/public_api.d.ts +0 -1
- package/components/input/calendar/bundles/index.umd.js +24 -46
- package/components/input/calendar/calendar.component.d.ts +1 -1
- package/components/input/calendar/esm2022/calendar.component.mjs +28 -10
- package/components/input/calendar/esm2022/calendar.props.mjs +1 -1
- package/components/input/calendar/esm2022/public_api.mjs +1 -2
- package/components/input/calendar/fesm2022/index.mjs +30 -48
- package/components/input/calendar/fesm2022/index.mjs.map +1 -1
- package/components/input/calendar/public_api.d.ts +0 -1
- package/components/input/chips/bundles/index.umd.js +86 -114
- package/components/input/chips/chips.component.d.ts +1 -1
- package/components/input/chips/esm2022/chips.component.mjs +28 -27
- package/components/input/chips/esm2022/public_api.mjs +1 -2
- package/components/input/chips/fesm2022/index.mjs +29 -56
- package/components/input/chips/fesm2022/index.mjs.map +1 -1
- package/components/input/chips/public_api.d.ts +0 -1
- package/components/input/color-picker/bundles/index.umd.js +14 -42
- package/components/input/color-picker/color-picker.component.d.ts +1 -1
- package/components/input/color-picker/esm2022/color-picker.component.mjs +14 -8
- package/components/input/color-picker/esm2022/public_api.mjs +1 -2
- package/components/input/color-picker/fesm2022/index.mjs +15 -42
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/public_api.d.ts +0 -1
- package/components/input/currency/bundles/index.umd.js +11 -41
- package/components/input/currency/currency.component.d.ts +1 -1
- package/components/input/currency/esm2022/currency.component.mjs +8 -6
- package/components/input/currency/esm2022/public_api.mjs +1 -2
- package/components/input/currency/fesm2022/index.mjs +11 -41
- package/components/input/currency/fesm2022/index.mjs.map +1 -1
- package/components/input/currency/public_api.d.ts +0 -1
- package/components/input/default/bundles/index.umd.js +2183 -2263
- package/components/input/default/button/button.component.d.ts +1 -1
- package/components/input/default/button-group/button-group.directive.d.ts +1 -1
- package/components/input/default/caption-position.directive.d.ts +1 -1
- package/components/input/default/checkbox/checkbox.component.d.ts +1 -1
- package/components/input/default/checkboxset/checkboxset.component.d.ts +1 -1
- package/components/input/default/composite/composite.directive.d.ts +1 -1
- package/components/input/default/esm2022/button/button.component.mjs +23 -21
- package/components/input/default/esm2022/button-group/button-group.directive.mjs +3 -2
- package/components/input/default/esm2022/caption-position.directive.mjs +3 -2
- package/components/input/default/esm2022/checkbox/checkbox.component.mjs +9 -6
- package/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +73 -72
- package/components/input/default/esm2022/composite/composite.directive.mjs +3 -2
- package/components/input/default/esm2022/number/number.component.mjs +9 -6
- package/components/input/default/esm2022/public_api.mjs +1 -2
- package/components/input/default/esm2022/radioset/radioset.component.mjs +73 -72
- package/components/input/default/esm2022/select/select.component.mjs +29 -32
- package/components/input/default/esm2022/switch/switch.component.mjs +29 -27
- package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +9 -6
- package/components/input/default/esm2022/text/color/input-color.component.mjs +9 -6
- package/components/input/default/esm2022/text/email/input-email.component.mjs +9 -6
- package/components/input/default/esm2022/text/number/input-number.component.mjs +9 -6
- package/components/input/default/esm2022/text/text/input-text.component.mjs +10 -6
- package/components/input/default/esm2022/textarea/textarea.component.mjs +14 -11
- package/components/input/default/fesm2022/index.mjs +2198 -2277
- package/components/input/default/fesm2022/index.mjs.map +1 -1
- package/components/input/default/number/number.component.d.ts +1 -1
- package/components/input/default/public_api.d.ts +0 -1
- package/components/input/default/radioset/radioset.component.d.ts +1 -1
- package/components/input/default/select/select.component.d.ts +1 -1
- package/components/input/default/switch/switch.component.d.ts +1 -1
- package/components/input/default/text/calendar/input-calendar.component.d.ts +1 -1
- package/components/input/default/text/color/input-color.component.d.ts +1 -1
- package/components/input/default/text/email/input-email.component.d.ts +1 -1
- package/components/input/default/text/number/input-number.component.d.ts +1 -1
- package/components/input/default/text/text/input-text.component.d.ts +1 -1
- package/components/input/default/textarea/textarea.component.d.ts +1 -1
- package/components/input/epoch/base-date-time.component.d.ts +0 -1
- package/components/input/epoch/bundles/index.umd.js +220 -262
- package/components/input/epoch/date/date.component.d.ts +1 -1
- package/components/input/epoch/date/imaskUtil.d.ts +2 -2
- package/components/input/epoch/date-time/date-time-picker.component.d.ts +6 -6
- package/components/input/epoch/date-time/date-time.component.d.ts +1 -1
- package/components/input/epoch/esm2022/base-date-time.component.mjs +6 -9
- package/components/input/epoch/esm2022/date/date.component.mjs +19 -18
- package/components/input/epoch/esm2022/date/imaskUtil.mjs +3 -1
- package/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +76 -62
- package/components/input/epoch/esm2022/date-time/date-time.component.mjs +28 -24
- package/components/input/epoch/esm2022/picker/picker.component.mjs +33 -28
- package/components/input/epoch/esm2022/public_api.mjs +1 -2
- package/components/input/epoch/esm2022/time/time.component.mjs +25 -21
- package/components/input/epoch/fesm2022/index.mjs +196 -237
- package/components/input/epoch/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/picker/picker.component.d.ts +2 -2
- package/components/input/epoch/public_api.d.ts +0 -1
- package/components/input/epoch/time/time.component.d.ts +1 -1
- package/components/input/file-upload/bundles/index.umd.js +135 -178
- package/components/input/file-upload/esm2022/file-upload.component.mjs +133 -150
- package/components/input/file-upload/esm2022/public_api.mjs +1 -2
- package/components/input/file-upload/fesm2022/index.mjs +133 -175
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/file-upload.component.d.ts +1 -2
- package/components/input/file-upload/public_api.d.ts +0 -1
- package/components/input/rating/bundles/index.umd.js +50 -77
- package/components/input/rating/esm2022/public_api.mjs +1 -2
- package/components/input/rating/esm2022/rating.component.mjs +23 -20
- package/components/input/rating/fesm2022/index.mjs +23 -49
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/public_api.d.ts +0 -1
- package/components/input/rating/rating.component.d.ts +1 -1
- package/components/input/slider/bundles/index.umd.js +35 -63
- package/components/input/slider/esm2022/public_api.mjs +1 -2
- package/components/input/slider/esm2022/slider.component.mjs +15 -13
- package/components/input/slider/fesm2022/index.mjs +15 -42
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/public_api.d.ts +0 -1
- package/components/input/slider/slider.component.d.ts +1 -1
- package/components/navigation/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/components/navigation/breadcrumb/bundles/index.umd.js +40 -67
- package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +23 -21
- package/components/navigation/breadcrumb/esm2022/public_api.mjs +1 -2
- package/components/navigation/breadcrumb/fesm2022/index.mjs +23 -50
- package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- package/components/navigation/breadcrumb/public_api.d.ts +0 -1
- package/components/navigation/menu/bundles/index.umd.js +642 -696
- package/components/navigation/menu/esm2022/menu-adapator.component.mjs +1 -1
- package/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +11 -9
- package/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +24 -18
- package/components/navigation/menu/esm2022/menu.component.mjs +34 -31
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +3 -2
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +39 -29
- package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +6 -3
- package/components/navigation/menu/esm2022/public_api.mjs +1 -2
- package/components/navigation/menu/fesm2022/index.mjs +534 -587
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/menu-dropdown/menu-dropdown.component.d.ts +1 -1
- package/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +1 -1
- package/components/navigation/menu/menu.component.d.ts +1 -1
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +1 -1
- package/components/navigation/menu/nav/nav.component.d.ts +1 -1
- package/components/navigation/menu/nav/navigation-control.directive.d.ts +1 -1
- package/components/navigation/menu/public_api.d.ts +0 -1
- package/components/navigation/navbar/bundles/index.umd.js +20 -44
- package/components/navigation/navbar/esm2022/navbar.component.mjs +18 -16
- package/components/navigation/navbar/esm2022/public_api.mjs +1 -2
- package/components/navigation/navbar/fesm2022/index.mjs +18 -41
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/navbar.component.d.ts +1 -1
- package/components/navigation/navbar/public_api.d.ts +0 -1
- package/components/navigation/popover/bundles/index.umd.js +12 -43
- package/components/navigation/popover/esm2022/popover.component.mjs +11 -9
- package/components/navigation/popover/esm2022/public_api.mjs +1 -2
- package/components/navigation/popover/fesm2022/index.mjs +11 -41
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +1 -1
- package/components/navigation/popover/public_api.d.ts +0 -1
- package/components/page/default/bundles/index.umd.js +96 -138
- package/components/page/default/content/content.component.d.ts +1 -1
- package/components/page/default/esm2022/content/content.component.mjs +7 -6
- package/components/page/default/esm2022/layout.directive.mjs +3 -2
- package/components/page/default/esm2022/page-content/page-content.component.mjs +7 -6
- package/components/page/default/esm2022/page-content/page-content.props.mjs +2 -3
- package/components/page/default/esm2022/page.directive.mjs +3 -2
- package/components/page/default/esm2022/public_api.mjs +1 -2
- package/components/page/default/esm2022/router-outlet.directive.mjs +3 -2
- package/components/page/default/esm2022/spa-page.directive.mjs +3 -2
- package/components/page/default/fesm2022/index.mjs +96 -138
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/default/layout.directive.d.ts +1 -1
- package/components/page/default/page-content/page-content.component.d.ts +1 -1
- package/components/page/default/page.directive.d.ts +1 -1
- package/components/page/default/public_api.d.ts +0 -1
- package/components/page/default/router-outlet.directive.d.ts +1 -1
- package/components/page/default/spa-page.directive.d.ts +1 -1
- package/components/page/footer/bundles/index.umd.js +6 -29
- package/components/page/footer/esm2022/footer.directive.mjs +3 -2
- package/components/page/footer/esm2022/public_api.mjs +1 -2
- package/components/page/footer/fesm2022/index.mjs +5 -28
- package/components/page/footer/fesm2022/index.mjs.map +1 -1
- package/components/page/footer/footer.directive.d.ts +1 -1
- package/components/page/footer/public_api.d.ts +0 -1
- package/components/page/header/bundles/index.umd.js +9 -33
- package/components/page/header/esm2022/header.component.mjs +7 -6
- package/components/page/header/esm2022/public_api.mjs +1 -2
- package/components/page/header/fesm2022/index.mjs +8 -32
- package/components/page/header/fesm2022/index.mjs.map +1 -1
- package/components/page/header/header.component.d.ts +1 -1
- package/components/page/header/public_api.d.ts +0 -1
- package/components/page/left-panel/bundles/index.umd.js +6 -29
- package/components/page/left-panel/esm2022/left-panel.directive.mjs +3 -2
- package/components/page/left-panel/esm2022/public_api.mjs +1 -2
- package/components/page/left-panel/fesm2022/index.mjs +5 -28
- package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- package/components/page/left-panel/left-panel.directive.d.ts +1 -1
- package/components/page/left-panel/public_api.d.ts +0 -1
- package/components/page/right-panel/bundles/index.umd.js +6 -29
- package/components/page/right-panel/esm2022/public_api.mjs +1 -2
- package/components/page/right-panel/esm2022/right-panel.directive.mjs +3 -2
- package/components/page/right-panel/fesm2022/index.mjs +5 -28
- package/components/page/right-panel/fesm2022/index.mjs.map +1 -1
- package/components/page/right-panel/public_api.d.ts +0 -1
- package/components/page/right-panel/right-panel.directive.d.ts +1 -1
- package/components/page/top-nav/bundles/index.umd.js +6 -29
- package/components/page/top-nav/esm2022/public_api.mjs +1 -2
- package/components/page/top-nav/esm2022/top-nav.directive.mjs +3 -2
- package/components/page/top-nav/fesm2022/index.mjs +5 -28
- package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
- package/components/page/top-nav/public_api.d.ts +0 -1
- package/components/page/top-nav/top-nav.directive.d.ts +1 -1
- package/components/prefab/bundles/index.umd.js +8 -33
- package/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +3 -2
- package/components/prefab/esm2022/prefab.directive.mjs +3 -2
- package/components/prefab/esm2022/public_api.mjs +1 -2
- package/components/prefab/fesm2022/index.mjs +7 -32
- package/components/prefab/fesm2022/index.mjs.map +1 -1
- package/components/prefab/prefab-container/prefab-container.directive.d.ts +1 -1
- package/components/prefab/prefab.directive.d.ts +1 -1
- package/components/prefab/public_api.d.ts +0 -1
- package/core/bundles/index.umd.js +32 -85
- package/core/esm2022/public_api.mjs +2 -3
- package/core/esm2022/types/types.mjs +1 -1
- package/core/esm2022/utils/build-utils.mjs +9 -5
- package/core/esm2022/utils/utils.mjs +12 -40
- package/core/fesm2022/index.mjs +32 -81
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -2
- package/core/types/types.d.ts +1 -0
- package/core/utils/utils.d.ts +1 -3
- package/http/bundles/index.umd.js +9 -34
- package/http/esm2022/http.service.mjs +6 -3
- package/http/esm2022/public_api.mjs +4 -2
- package/http/fesm2022/index.mjs +9 -34
- package/http/fesm2022/index.mjs.map +1 -1
- package/http/public_api.d.ts +3 -1
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/bundles/index.umd.js +9 -42
- package/oAuth/esm2022/oAuth.utils.mjs +7 -23
- package/oAuth/esm2022/public_api.mjs +1 -2
- package/oAuth/fesm2022/index.mjs +8 -40
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/public_api.d.ts +0 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +690 -596
- package/runtime/base/components/app-component/app.component.d.ts +1 -1
- package/runtime/base/components/app-spinner.component.d.ts +1 -1
- package/runtime/base/components/custom-toaster.component.d.ts +1 -1
- package/runtime/base/components/empty-component/empty-page.component.d.ts +1 -1
- package/runtime/base/components/prefab-preview.component.d.ts +1 -1
- package/runtime/base/directives/accessroles.directive.d.ts +1 -1
- package/runtime/base/directives/prefab.directive.d.ts +1 -1
- package/runtime/base/esm2022/components/app-component/app.component.mjs +42 -49
- package/runtime/base/esm2022/components/app-spinner.component.mjs +29 -21
- package/runtime/base/esm2022/components/base-page.component.mjs +3 -11
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +3 -11
- package/runtime/base/esm2022/components/custom-toaster.component.mjs +20 -14
- package/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +4 -3
- package/runtime/base/esm2022/components/prefab-preview.component.mjs +8 -6
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +3 -2
- package/runtime/base/esm2022/directives/prefab.directive.mjs +3 -2
- package/runtime/base/esm2022/public_api.mjs +1 -1
- package/runtime/base/esm2022/resolves/security-config.resolve.mjs +4 -6
- package/runtime/base/esm2022/runtime-base.module.mjs +486 -337
- package/runtime/base/esm2022/services/app.manager.service.mjs +31 -48
- package/runtime/base/esm2022/services/app.service.mjs +8 -1
- package/runtime/base/esm2022/services/i18n.service.mjs +39 -72
- package/runtime/base/fesm2022/index.mjs +697 -605
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +115 -84
- package/runtime/base/services/app.service.d.ts +1 -0
- package/runtime/base/services/i18n.service.d.ts +1 -1
- package/runtime/dynamic/app/app.config.d.ts +5 -0
- package/runtime/dynamic/app/components/page-wrapper.component.d.ts +1 -1
- package/runtime/dynamic/bundles/index.umd.js +270 -117
- package/runtime/dynamic/esm2022/app/app.config.mjs +136 -0
- package/runtime/dynamic/esm2022/app/app.module.mjs +151 -105
- package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +7 -4
- package/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +1 -1
- package/runtime/dynamic/esm2022/main.mjs +11 -16
- package/runtime/dynamic/fesm2022/index.mjs +340 -184
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/security/bundles/index.umd.js +3 -34
- package/security/esm2022/public_api.mjs +1 -2
- package/security/esm2022/security.service.mjs +4 -15
- package/security/fesm2022/index.mjs +5 -32
- package/security/fesm2022/index.mjs.map +1 -1
- package/security/public_api.d.ts +0 -1
- package/transpiler/bundles/index.umd.js +271 -168
- package/transpiler/esm2022/build.mjs +1 -6
- package/transpiler/esm2022/imports.mjs +268 -161
- package/transpiler/fesm2022/index.mjs +267 -165
- package/transpiler/fesm2022/index.mjs.map +1 -1
- package/variables/bundles/index.umd.js +16 -197
- package/variables/constants/variables.constants.d.ts +0 -2
- package/variables/esm2022/constants/variables.constants.mjs +1 -3
- package/variables/esm2022/factory/variable-manager.factory.mjs +1 -3
- package/variables/esm2022/factory/variable.factory.mjs +1 -5
- package/variables/esm2022/manager/action/logout-action.manager.mjs +5 -7
- package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +3 -3
- package/variables/esm2022/public_api.mjs +1 -5
- package/variables/esm2022/service/metadata-service/metadata.service.mjs +6 -11
- package/variables/esm2022/util/variable/service-variable.utils.mjs +1 -4
- package/variables/esm2022/util/variable/variables.utils.mjs +5 -19
- package/variables/fesm2022/index.mjs +16 -198
- package/variables/fesm2022/index.mjs.map +1 -1
- package/variables/public_api.d.ts +0 -4
- package/components/advanced/carousel/carousel.module.d.ts +0 -11
- package/components/advanced/carousel/esm2022/carousel.module.mjs +0 -36
- package/components/advanced/custom/custom-widget.module.d.ts +0 -10
- package/components/advanced/custom/esm2022/custom-widget.module.mjs +0 -32
- package/components/advanced/login/esm2022/login.module.mjs +0 -28
- package/components/advanced/login/login.module.d.ts +0 -9
- package/components/advanced/marquee/esm2022/marquee.module.mjs +0 -28
- package/components/advanced/marquee/marquee.module.d.ts +0 -9
- package/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +0 -221
- package/components/base/widgets/common/smooth-scroll/smooth-scroll.directive.d.ts +0 -22
- package/components/basic/default/basic.module.d.ts +0 -17
- package/components/basic/default/esm2022/basic.module.mjs +0 -60
- package/components/basic/progress/esm2022/progress.module.mjs +0 -36
- package/components/basic/progress/progress.module.d.ts +0 -11
- package/components/basic/rich-text-editor/esm2022/rich-text-editor.module.mjs +0 -28
- package/components/basic/rich-text-editor/rich-text-editor.module.d.ts +0 -9
- package/components/basic/search/esm2022/search.module.mjs +0 -45
- package/components/basic/search/search.module.d.ts +0 -12
- package/components/basic/tree/esm2022/tree.module.mjs +0 -28
- package/components/basic/tree/tree.module.d.ts +0 -9
- package/components/chart/chart.module.d.ts +0 -10
- package/components/chart/esm2022/chart.module.mjs +0 -32
- package/components/containers/accordion/accordion.module.d.ts +0 -10
- package/components/containers/accordion/esm2022/accordion.module.mjs +0 -32
- package/components/containers/layout-grid/esm2022/layout-grid.module.mjs +0 -36
- package/components/containers/layout-grid/layout-grid.module.d.ts +0 -11
- package/components/containers/linear-layout/esm2022/linear-layout.module.mjs +0 -32
- package/components/containers/linear-layout/linear-layout.module.d.ts +0 -10
- package/components/containers/panel/esm2022/panel.module.mjs +0 -36
- package/components/containers/panel/panel.module.d.ts +0 -11
- package/components/containers/tabs/esm2022/tabs.module.mjs +0 -32
- package/components/containers/tabs/tabs.module.d.ts +0 -10
- package/components/containers/tile/esm2022/tile.module.mjs +0 -28
- package/components/containers/tile/tile.module.d.ts +0 -9
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.directive.mjs +0 -140
- package/components/containers/wizard/esm2022/wizard.module.mjs +0 -40
- package/components/containers/wizard/wizard.module.d.ts +0 -12
- package/components/data/card/card.module.d.ts +0 -15
- package/components/data/card/esm2022/card.module.mjs +0 -52
- package/components/data/form/esm2022/form.module.mjs +0 -68
- package/components/data/form/form.module.d.ts +0 -19
- package/components/data/list/esm2022/list.module.mjs +0 -40
- package/components/data/list/list.module.d.ts +0 -11
- package/components/data/live-table/esm2022/live-table.module.mjs +0 -28
- package/components/data/live-table/live-table.module.d.ts +0 -9
- package/components/data/pagination/esm2022/pagination.module.mjs +0 -36
- package/components/data/pagination/pagination.module.d.ts +0 -11
- package/components/data/table/esm2022/table.module.mjs +0 -91
- package/components/data/table/table.module.d.ts +0 -24
- package/components/dialogs/alert-dialog/alert-dialog.module.d.ts +0 -11
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.module.mjs +0 -36
- package/components/dialogs/confirm-dialog/confirm-dialog.module.d.ts +0 -11
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.module.mjs +0 -36
- package/components/dialogs/default/dialog.module.d.ts +0 -12
- package/components/dialogs/default/esm2022/dialog.module.mjs +0 -40
- package/components/dialogs/design-dialog/design-dialog.module.d.ts +0 -11
- package/components/dialogs/design-dialog/esm2022/design-dialog.module.mjs +0 -36
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.module.mjs +0 -40
- package/components/dialogs/iframe-dialog/iframe-dialog.module.d.ts +0 -12
- package/components/dialogs/login-dialog/esm2022/login-dialog.module.mjs +0 -40
- package/components/dialogs/login-dialog/login-dialog.module.d.ts +0 -12
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.module.mjs +0 -36
- package/components/dialogs/partial-dialog/partial-dialog.module.d.ts +0 -11
- package/components/input/calendar/calendar.module.d.ts +0 -12
- package/components/input/calendar/esm2022/calendar.module.mjs +0 -40
- package/components/input/chips/chips.module.d.ts +0 -10
- package/components/input/chips/esm2022/chips.module.mjs +0 -32
- package/components/input/color-picker/color-picker.module.d.ts +0 -11
- package/components/input/color-picker/esm2022/color-picker.module.mjs +0 -36
- package/components/input/currency/currency.module.d.ts +0 -11
- package/components/input/currency/esm2022/currency.module.mjs +0 -36
- package/components/input/default/esm2022/input.module.mjs +0 -96
- package/components/input/default/input.module.d.ts +0 -26
- package/components/input/epoch/epoch.module.d.ts +0 -18
- package/components/input/epoch/esm2022/epoch.module.mjs +0 -70
- package/components/input/file-upload/esm2022/file-upload.module.mjs +0 -28
- package/components/input/file-upload/file-upload.module.d.ts +0 -9
- package/components/input/rating/esm2022/rating.module.mjs +0 -32
- package/components/input/rating/rating.module.d.ts +0 -10
- package/components/input/slider/esm2022/slider.module.mjs +0 -32
- package/components/input/slider/slider.module.d.ts +0 -10
- package/components/navigation/breadcrumb/breadcrumb.module.d.ts +0 -10
- package/components/navigation/breadcrumb/esm2022/breadcrumb.module.mjs +0 -32
- package/components/navigation/menu/esm2022/menu.module.mjs +0 -71
- package/components/navigation/menu/menu.module.d.ts +0 -17
- package/components/navigation/navbar/esm2022/navbar.module.mjs +0 -28
- package/components/navigation/navbar/navbar.module.d.ts +0 -9
- package/components/navigation/popover/esm2022/popover.module.mjs +0 -36
- package/components/navigation/popover/popover.module.d.ts +0 -11
- package/components/page/default/esm2022/page.module.mjs +0 -55
- package/components/page/default/page.module.d.ts +0 -14
- package/components/page/footer/esm2022/footer.module.mjs +0 -28
- package/components/page/footer/footer.module.d.ts +0 -9
- package/components/page/header/esm2022/header.module.mjs +0 -28
- package/components/page/header/header.module.d.ts +0 -9
- package/components/page/left-panel/esm2022/left-panel.module.mjs +0 -28
- package/components/page/left-panel/left-panel.module.d.ts +0 -9
- package/components/page/right-panel/esm2022/right-panel.module.mjs +0 -28
- package/components/page/right-panel/right-panel.module.d.ts +0 -9
- package/components/page/top-nav/esm2022/top-nav.module.mjs +0 -28
- package/components/page/top-nav/top-nav.module.d.ts +0 -9
- package/components/prefab/esm2022/prefab.module.mjs +0 -32
- package/components/prefab/prefab.module.d.ts +0 -10
- package/core/core.module.d.ts +0 -9
- package/core/esm2022/core.module.mjs +0 -27
- package/http/esm2022/http-service.module.mjs +0 -36
- package/http/http-service.module.d.ts +0 -14
- package/locales/fullcalendar/af.js +0 -27
- package/locales/fullcalendar/ar-dz.js +0 -28
- package/locales/fullcalendar/ar-kw.js +0 -28
- package/locales/fullcalendar/ar-ly.js +0 -28
- package/locales/fullcalendar/ar-ma.js +0 -28
- package/locales/fullcalendar/ar-sa.js +0 -28
- package/locales/fullcalendar/ar-tn.js +0 -28
- package/locales/fullcalendar/ar.js +0 -28
- package/locales/fullcalendar/az.js +0 -29
- package/locales/fullcalendar/bg.js +0 -28
- package/locales/fullcalendar/bs.js +0 -29
- package/locales/fullcalendar/ca.js +0 -27
- package/locales/fullcalendar/cs.js +0 -29
- package/locales/fullcalendar/da.js +0 -27
- package/locales/fullcalendar/de.js +0 -30
- package/locales/fullcalendar/el.js +0 -27
- package/locales/fullcalendar/en-au.js +0 -14
- package/locales/fullcalendar/en-gb.js +0 -14
- package/locales/fullcalendar/en-nz.js +0 -14
- package/locales/fullcalendar/es-us.js +0 -27
- package/locales/fullcalendar/es.js +0 -27
- package/locales/fullcalendar/et.js +0 -29
- package/locales/fullcalendar/eu.js +0 -27
- package/locales/fullcalendar/fa.js +0 -30
- package/locales/fullcalendar/fi.js +0 -27
- package/locales/fullcalendar/fr-ca.js +0 -24
- package/locales/fullcalendar/fr-ch.js +0 -28
- package/locales/fullcalendar/fr.js +0 -28
- package/locales/fullcalendar/gl.js +0 -27
- package/locales/fullcalendar/he.js +0 -24
- package/locales/fullcalendar/hi.js +0 -29
- package/locales/fullcalendar/hr.js +0 -29
- package/locales/fullcalendar/hu.js +0 -27
- package/locales/fullcalendar/id.js +0 -27
- package/locales/fullcalendar/is.js +0 -27
- package/locales/fullcalendar/it.js +0 -29
- package/locales/fullcalendar/ja.js +0 -25
- package/locales/fullcalendar/ka.js +0 -29
- package/locales/fullcalendar/kk.js +0 -29
- package/locales/fullcalendar/ko.js +0 -23
- package/locales/fullcalendar/lb.js +0 -27
- package/locales/fullcalendar/lt.js +0 -27
- package/locales/fullcalendar/lv.js +0 -29
- package/locales/fullcalendar/mk.js +0 -25
- package/locales/fullcalendar/ms.js +0 -29
- package/locales/fullcalendar/nb.js +0 -27
- package/locales/fullcalendar/ne.js +0 -27
- package/locales/fullcalendar/nl.js +0 -27
- package/locales/fullcalendar/nn.js +0 -27
- package/locales/fullcalendar/pl.js +0 -27
- package/locales/fullcalendar/pt-br.js +0 -25
- package/locales/fullcalendar/pt.js +0 -27
- package/locales/fullcalendar/ro.js +0 -29
- package/locales/fullcalendar/ru.js +0 -29
- package/locales/fullcalendar/sk.js +0 -29
- package/locales/fullcalendar/sl.js +0 -27
- package/locales/fullcalendar/sq.js +0 -29
- package/locales/fullcalendar/sr-cyrl.js +0 -29
- package/locales/fullcalendar/sr.js +0 -29
- package/locales/fullcalendar/sv.js +0 -27
- package/locales/fullcalendar/th.js +0 -30
- package/locales/fullcalendar/tr.js +0 -27
- package/locales/fullcalendar/ug.js +0 -17
- package/locales/fullcalendar/uk.js +0 -29
- package/locales/fullcalendar/uz.js +0 -21
- package/locales/fullcalendar/vi.js +0 -29
- package/locales/fullcalendar/zh-cn.js +0 -30
- package/locales/fullcalendar/zh-tw.js +0 -23
- package/mobile/components/basic/default/.npmignore +0 -2
- package/mobile/components/basic/default/anchor/anchor.directive.d.ts +0 -8
- package/mobile/components/basic/default/app-update/app-update.component.d.ts +0 -26
- package/mobile/components/basic/default/basic.module.d.ts +0 -15
- package/mobile/components/basic/default/bundles/index.umd.js +0 -980
- package/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +0 -44
- package/mobile/components/basic/default/esm2022/app-update/app-update.component.mjs +0 -116
- package/mobile/components/basic/default/esm2022/basic.module.mjs +0 -52
- package/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +0 -236
- package/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +0 -85
- package/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +0 -61
- package/mobile/components/basic/default/esm2022/index.mjs +0 -5
- package/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.component.mjs +0 -183
- package/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.props.mjs +0 -5
- package/mobile/components/basic/default/esm2022/process-manager/process-management.service.mjs +0 -47
- package/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +0 -175
- package/mobile/components/basic/default/esm2022/public_api.mjs +0 -10
- package/mobile/components/basic/default/fesm2022/index.mjs +0 -958
- package/mobile/components/basic/default/fesm2022/index.mjs.map +0 -1
- package/mobile/components/basic/default/file-browser/file-browser.component.d.ts +0 -39
- package/mobile/components/basic/default/file-browser/file-selector.service.d.ts +0 -27
- package/mobile/components/basic/default/image-cache/image-cache.directive.d.ts +0 -18
- package/mobile/components/basic/default/index.d.ts +0 -5
- package/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +0 -28
- package/mobile/components/basic/default/network-info-toaster/network-info-toaster.props.d.ts +0 -1
- package/mobile/components/basic/default/package.json +0 -23
- package/mobile/components/basic/default/process-manager/process-management.service.d.ts +0 -36
- package/mobile/components/basic/default/process-manager/process-manager.component.d.ts +0 -33
- package/mobile/components/basic/default/public_api.d.ts +0 -9
- package/mobile/components/basic/search/.npmignore +0 -2
- package/mobile/components/basic/search/bundles/index.umd.js +0 -66
- package/mobile/components/basic/search/esm2022/index.mjs +0 -5
- package/mobile/components/basic/search/esm2022/public_api.mjs +0 -3
- package/mobile/components/basic/search/esm2022/search.directive.mjs +0 -17
- package/mobile/components/basic/search/esm2022/search.module.mjs +0 -28
- package/mobile/components/basic/search/fesm2022/index.mjs +0 -49
- package/mobile/components/basic/search/fesm2022/index.mjs.map +0 -1
- package/mobile/components/basic/search/index.d.ts +0 -5
- package/mobile/components/basic/search/package.json +0 -23
- package/mobile/components/basic/search/public_api.d.ts +0 -2
- package/mobile/components/basic/search/search.directive.d.ts +0 -7
- package/mobile/components/basic/search/search.module.d.ts +0 -9
- package/mobile/components/containers/segmented-control/.npmignore +0 -2
- package/mobile/components/containers/segmented-control/bundles/index.umd.js +0 -281
- package/mobile/components/containers/segmented-control/esm2022/index.mjs +0 -5
- package/mobile/components/containers/segmented-control/esm2022/public_api.mjs +0 -4
- package/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +0 -70
- package/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.props.mjs +0 -14
- package/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +0 -147
- package/mobile/components/containers/segmented-control/esm2022/segmented-control.module.mjs +0 -32
- package/mobile/components/containers/segmented-control/esm2022/segmented-control.props.mjs +0 -9
- package/mobile/components/containers/segmented-control/fesm2022/index.mjs +0 -264
- package/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +0 -1
- package/mobile/components/containers/segmented-control/index.d.ts +0 -5
- package/mobile/components/containers/segmented-control/package.json +0 -23
- package/mobile/components/containers/segmented-control/public_api.d.ts +0 -3
- package/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +0 -18
- package/mobile/components/containers/segmented-control/segment-content/segment-content.props.d.ts +0 -1
- package/mobile/components/containers/segmented-control/segmented-control.component.d.ts +0 -20
- package/mobile/components/containers/segmented-control/segmented-control.module.d.ts +0 -10
- package/mobile/components/containers/segmented-control/segmented-control.props.d.ts +0 -1
- package/mobile/components/data/media-list/.npmignore +0 -2
- package/mobile/components/data/media-list/bundles/index.umd.js +0 -310
- package/mobile/components/data/media-list/esm2022/index.mjs +0 -5
- package/mobile/components/data/media-list/esm2022/media-list-item/media-list-item.directive.mjs +0 -24
- package/mobile/components/data/media-list/esm2022/media-list.component.mjs +0 -213
- package/mobile/components/data/media-list/esm2022/media-list.module.mjs +0 -48
- package/mobile/components/data/media-list/esm2022/media-list.props.mjs +0 -16
- package/mobile/components/data/media-list/esm2022/public_api.mjs +0 -4
- package/mobile/components/data/media-list/fesm2022/index.mjs +0 -297
- package/mobile/components/data/media-list/fesm2022/index.mjs.map +0 -1
- package/mobile/components/data/media-list/index.d.ts +0 -5
- package/mobile/components/data/media-list/media-list-item/media-list-item.directive.d.ts +0 -8
- package/mobile/components/data/media-list/media-list.component.d.ts +0 -33
- package/mobile/components/data/media-list/media-list.module.d.ts +0 -14
- package/mobile/components/data/media-list/media-list.props.d.ts +0 -1
- package/mobile/components/data/media-list/package.json +0 -23
- package/mobile/components/data/media-list/public_api.d.ts +0 -3
- package/mobile/components/device/barcode-scanner/.npmignore +0 -2
- package/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +0 -18
- package/mobile/components/device/barcode-scanner/barcode-scanner.module.d.ts +0 -9
- package/mobile/components/device/barcode-scanner/barcode-scanner.props.d.ts +0 -1
- package/mobile/components/device/barcode-scanner/bundles/index.umd.js +0 -129
- package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.component.mjs +0 -69
- package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.module.mjs +0 -28
- package/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.props.mjs +0 -15
- package/mobile/components/device/barcode-scanner/esm2022/index.mjs +0 -5
- package/mobile/components/device/barcode-scanner/esm2022/public_api.mjs +0 -3
- package/mobile/components/device/barcode-scanner/fesm2022/index.mjs +0 -112
- package/mobile/components/device/barcode-scanner/fesm2022/index.mjs.map +0 -1
- package/mobile/components/device/barcode-scanner/index.d.ts +0 -5
- package/mobile/components/device/barcode-scanner/package.json +0 -23
- package/mobile/components/device/barcode-scanner/public_api.d.ts +0 -2
- package/mobile/components/device/camera/.npmignore +0 -2
- package/mobile/components/device/camera/bundles/index.umd.js +0 -170
- package/mobile/components/device/camera/camera.component.d.ts +0 -37
- package/mobile/components/device/camera/camera.module.d.ts +0 -9
- package/mobile/components/device/camera/camera.props.d.ts +0 -1
- package/mobile/components/device/camera/esm2022/camera.component.mjs +0 -101
- package/mobile/components/device/camera/esm2022/camera.module.mjs +0 -28
- package/mobile/components/device/camera/esm2022/camera.props.mjs +0 -25
- package/mobile/components/device/camera/esm2022/index.mjs +0 -5
- package/mobile/components/device/camera/esm2022/public_api.mjs +0 -3
- package/mobile/components/device/camera/fesm2022/index.mjs +0 -153
- package/mobile/components/device/camera/fesm2022/index.mjs.map +0 -1
- package/mobile/components/device/camera/index.d.ts +0 -5
- package/mobile/components/device/camera/package.json +0 -23
- package/mobile/components/device/camera/public_api.d.ts +0 -2
- package/mobile/components/input/file-upload/.npmignore +0 -2
- package/mobile/components/input/file-upload/bundles/index.umd.js +0 -88
- package/mobile/components/input/file-upload/esm2022/file-upload.directive.mjs +0 -41
- package/mobile/components/input/file-upload/esm2022/file-upload.module.mjs +0 -28
- package/mobile/components/input/file-upload/esm2022/index.mjs +0 -5
- package/mobile/components/input/file-upload/esm2022/public_api.mjs +0 -3
- package/mobile/components/input/file-upload/fesm2022/index.mjs +0 -71
- package/mobile/components/input/file-upload/fesm2022/index.mjs.map +0 -1
- package/mobile/components/input/file-upload/file-upload.directive.d.ts +0 -11
- package/mobile/components/input/file-upload/file-upload.module.d.ts +0 -9
- package/mobile/components/input/file-upload/index.d.ts +0 -5
- package/mobile/components/input/file-upload/package.json +0 -23
- package/mobile/components/input/file-upload/public_api.d.ts +0 -2
- package/mobile/components/page/default/.npmignore +0 -2
- package/mobile/components/page/default/bundles/index.umd.js +0 -127
- package/mobile/components/page/default/esm2022/index.mjs +0 -5
- package/mobile/components/page/default/esm2022/page-content-loader/page-content-loader.component.mjs +0 -24
- package/mobile/components/page/default/esm2022/page.directive.mjs +0 -58
- package/mobile/components/page/default/esm2022/page.module.mjs +0 -32
- package/mobile/components/page/default/esm2022/public_api.mjs +0 -4
- package/mobile/components/page/default/fesm2022/index.mjs +0 -110
- package/mobile/components/page/default/fesm2022/index.mjs.map +0 -1
- package/mobile/components/page/default/index.d.ts +0 -5
- package/mobile/components/page/default/package.json +0 -23
- package/mobile/components/page/default/page-content-loader/page-content-loader.component.d.ts +0 -7
- package/mobile/components/page/default/page.directive.d.ts +0 -19
- package/mobile/components/page/default/page.module.d.ts +0 -10
- package/mobile/components/page/default/public_api.d.ts +0 -3
- package/mobile/components/page/left-panel/.npmignore +0 -2
- package/mobile/components/page/left-panel/bundles/index.umd.js +0 -91
- package/mobile/components/page/left-panel/esm2022/index.mjs +0 -5
- package/mobile/components/page/left-panel/esm2022/left-panel.directive.mjs +0 -45
- package/mobile/components/page/left-panel/esm2022/left-panel.module.mjs +0 -28
- package/mobile/components/page/left-panel/esm2022/public_api.mjs +0 -3
- package/mobile/components/page/left-panel/fesm2022/index.mjs +0 -74
- package/mobile/components/page/left-panel/fesm2022/index.mjs.map +0 -1
- package/mobile/components/page/left-panel/index.d.ts +0 -5
- package/mobile/components/page/left-panel/left-panel.directive.d.ts +0 -16
- package/mobile/components/page/left-panel/left-panel.module.d.ts +0 -9
- package/mobile/components/page/left-panel/package.json +0 -23
- package/mobile/components/page/left-panel/public_api.d.ts +0 -2
- package/mobile/components/page/mobile-navbar/.npmignore +0 -2
- package/mobile/components/page/mobile-navbar/bundles/index.umd.js +0 -332
- package/mobile/components/page/mobile-navbar/esm2022/index.mjs +0 -5
- package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.component.mjs +0 -247
- package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.module.mjs +0 -32
- package/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.props.mjs +0 -41
- package/mobile/components/page/mobile-navbar/esm2022/public_api.mjs +0 -3
- package/mobile/components/page/mobile-navbar/fesm2022/index.mjs +0 -317
- package/mobile/components/page/mobile-navbar/fesm2022/index.mjs.map +0 -1
- package/mobile/components/page/mobile-navbar/index.d.ts +0 -5
- package/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +0 -50
- package/mobile/components/page/mobile-navbar/mobile-navbar.module.d.ts +0 -10
- package/mobile/components/page/mobile-navbar/mobile-navbar.props.d.ts +0 -2
- package/mobile/components/page/mobile-navbar/package.json +0 -23
- package/mobile/components/page/mobile-navbar/public_api.d.ts +0 -2
- package/mobile/components/page/tab-bar/.npmignore +0 -2
- package/mobile/components/page/tab-bar/bundles/index.umd.js +0 -279
- package/mobile/components/page/tab-bar/esm2022/index.mjs +0 -5
- package/mobile/components/page/tab-bar/esm2022/public_api.mjs +0 -3
- package/mobile/components/page/tab-bar/esm2022/tab-bar.module.mjs +0 -28
- package/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +0 -219
- package/mobile/components/page/tab-bar/esm2022/tabbar.props.mjs +0 -15
- package/mobile/components/page/tab-bar/fesm2022/index.mjs +0 -262
- package/mobile/components/page/tab-bar/fesm2022/index.mjs.map +0 -1
- package/mobile/components/page/tab-bar/index.d.ts +0 -5
- package/mobile/components/page/tab-bar/package.json +0 -23
- package/mobile/components/page/tab-bar/public_api.d.ts +0 -2
- package/mobile/components/page/tab-bar/tab-bar.module.d.ts +0 -9
- package/mobile/components/page/tab-bar/tabbar.component.d.ts +0 -40
- package/mobile/components/page/tab-bar/tabbar.props.d.ts +0 -1
- package/mobile/core/.npmignore +0 -2
- package/mobile/core/bundles/index.umd.js +0 -1658
- package/mobile/core/core.module.d.ts +0 -15
- package/mobile/core/esm2022/core.module.mjs +0 -79
- package/mobile/core/esm2022/index.mjs +0 -5
- package/mobile/core/esm2022/native.xhr.mjs +0 -340
- package/mobile/core/esm2022/public_api.mjs +0 -12
- package/mobile/core/esm2022/services/device-file-cache.service.mjs +0 -92
- package/mobile/core/esm2022/services/device-file-download.service.mjs +0 -154
- package/mobile/core/esm2022/services/device-file-opener.service.mjs +0 -112
- package/mobile/core/esm2022/services/device-file-upload.service.mjs +0 -91
- package/mobile/core/esm2022/services/device-file.service.mjs +0 -237
- package/mobile/core/esm2022/services/device-start-up-service.mjs +0 -2
- package/mobile/core/esm2022/services/device.service.mjs +0 -150
- package/mobile/core/esm2022/services/ext-app-message.service.mjs +0 -114
- package/mobile/core/esm2022/services/network.service.mjs +0 -358
- package/mobile/core/fesm2022/index.mjs +0 -1660
- package/mobile/core/fesm2022/index.mjs.map +0 -1
- package/mobile/core/index.d.ts +0 -5
- package/mobile/core/native.xhr.d.ts +0 -36
- package/mobile/core/package.json +0 -28
- package/mobile/core/public_api.d.ts +0 -11
- package/mobile/core/services/device-file-cache.service.d.ts +0 -24
- package/mobile/core/services/device-file-download.service.d.ts +0 -36
- package/mobile/core/services/device-file-opener.service.d.ts +0 -25
- package/mobile/core/services/device-file-upload.service.d.ts +0 -27
- package/mobile/core/services/device-file.service.d.ts +0 -45
- package/mobile/core/services/device-start-up-service.d.ts +0 -4
- package/mobile/core/services/device.service.d.ts +0 -52
- package/mobile/core/services/ext-app-message.service.d.ts +0 -24
- package/mobile/core/services/network.service.d.ts +0 -118
- package/mobile/offline/.npmignore +0 -2
- package/mobile/offline/bundles/index.umd.js +0 -3512
- package/mobile/offline/esm2022/index.mjs +0 -5
- package/mobile/offline/esm2022/models/config.mjs +0 -64
- package/mobile/offline/esm2022/models/local-db-store.mjs +0 -412
- package/mobile/offline/esm2022/offline.module.mjs +0 -100
- package/mobile/offline/esm2022/public_api.mjs +0 -7
- package/mobile/offline/esm2022/services/change-log.service.mjs +0 -332
- package/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +0 -525
- package/mobile/offline/esm2022/services/local-db-management.service.mjs +0 -855
- package/mobile/offline/esm2022/services/local-db.service.mjs +0 -193
- package/mobile/offline/esm2022/services/local-key-value.service.mjs +0 -87
- package/mobile/offline/esm2022/services/push.service.mjs +0 -49
- package/mobile/offline/esm2022/services/workers/error-blocker.mjs +0 -115
- package/mobile/offline/esm2022/services/workers/file-handler.mjs +0 -162
- package/mobile/offline/esm2022/services/workers/id-resolver.mjs +0 -154
- package/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +0 -63
- package/mobile/offline/esm2022/utils/file-upload.utils.mjs +0 -59
- package/mobile/offline/esm2022/utils/live-variable.utils.mjs +0 -232
- package/mobile/offline/esm2022/utils/query-executor.utils.mjs +0 -82
- package/mobile/offline/esm2022/utils/security.utils.mjs +0 -119
- package/mobile/offline/esm2022/utils/utils.mjs +0 -8
- package/mobile/offline/fesm2022/index.mjs +0 -3529
- package/mobile/offline/fesm2022/index.mjs.map +0 -1
- package/mobile/offline/index.d.ts +0 -5
- package/mobile/offline/models/config.d.ts +0 -80
- package/mobile/offline/models/local-db-store.d.ts +0 -119
- package/mobile/offline/offline.module.d.ts +0 -17
- package/mobile/offline/package.json +0 -28
- package/mobile/offline/public_api.d.ts +0 -6
- package/mobile/offline/services/change-log.service.d.ts +0 -112
- package/mobile/offline/services/local-db-data-pull.service.d.ts +0 -139
- package/mobile/offline/services/local-db-management.service.d.ts +0 -179
- package/mobile/offline/services/local-db.service.d.ts +0 -83
- package/mobile/offline/services/local-key-value.service.d.ts +0 -38
- package/mobile/offline/services/push.service.d.ts +0 -11
- package/mobile/offline/services/workers/error-blocker.d.ts +0 -26
- package/mobile/offline/services/workers/file-handler.d.ts +0 -56
- package/mobile/offline/services/workers/id-resolver.d.ts +0 -26
- package/mobile/offline/services/workers/multi-part-param-transformer.d.ts +0 -11
- package/mobile/offline/utils/file-upload.utils.d.ts +0 -14
- package/mobile/offline/utils/live-variable.utils.d.ts +0 -24
- package/mobile/offline/utils/query-executor.utils.d.ts +0 -15
- package/mobile/offline/utils/security.utils.d.ts +0 -19
- package/mobile/offline/utils/utils.d.ts +0 -2
- package/mobile/placeholder/runtime/.npmignore +0 -2
- package/mobile/placeholder/runtime/bundles/index.umd.js +0 -70
- package/mobile/placeholder/runtime/components/app-ext.component.d.ts +0 -5
- package/mobile/placeholder/runtime/esm2022/components/app-ext.component.mjs +0 -19
- package/mobile/placeholder/runtime/esm2022/index.mjs +0 -5
- package/mobile/placeholder/runtime/esm2022/mobile-runtime.module.mjs +0 -27
- package/mobile/placeholder/runtime/esm2022/public_api.mjs +0 -3
- package/mobile/placeholder/runtime/fesm2022/index.mjs +0 -50
- package/mobile/placeholder/runtime/fesm2022/index.mjs.map +0 -1
- package/mobile/placeholder/runtime/index.d.ts +0 -5
- package/mobile/placeholder/runtime/mobile-runtime.module.d.ts +0 -9
- package/mobile/placeholder/runtime/package.json +0 -27
- package/mobile/placeholder/runtime/public_api.d.ts +0 -2
- package/mobile/placeholder/runtime-dynamic/.npmignore +0 -2
- package/mobile/placeholder/runtime-dynamic/bundles/index.umd.js +0 -40
- package/mobile/placeholder/runtime-dynamic/esm2022/index.mjs +0 -5
- package/mobile/placeholder/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +0 -13
- package/mobile/placeholder/runtime-dynamic/esm2022/public_api.mjs +0 -2
- package/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs +0 -20
- package/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs.map +0 -1
- package/mobile/placeholder/runtime-dynamic/index.d.ts +0 -5
- package/mobile/placeholder/runtime-dynamic/mobile-runtime-dynamic.module.d.ts +0 -7
- package/mobile/placeholder/runtime-dynamic/package.json +0 -23
- package/mobile/placeholder/runtime-dynamic/public_api.d.ts +0 -1
- package/mobile/runtime/.npmignore +0 -2
- package/mobile/runtime/bundles/index.umd.js +0 -732
- package/mobile/runtime/components/app-ext.component.d.ts +0 -14
- package/mobile/runtime/esm2022/components/app-ext.component.mjs +0 -59
- package/mobile/runtime/esm2022/index.mjs +0 -5
- package/mobile/runtime/esm2022/mobile-runtime.module.mjs +0 -351
- package/mobile/runtime/esm2022/public_api.mjs +0 -6
- package/mobile/runtime/esm2022/services/cookie.service.mjs +0 -135
- package/mobile/runtime/esm2022/services/http-interceptor.service.mjs +0 -147
- package/mobile/runtime/esm2022/services/webprocess.service.mjs +0 -76
- package/mobile/runtime/fesm2022/index.mjs +0 -742
- package/mobile/runtime/fesm2022/index.mjs.map +0 -1
- package/mobile/runtime/index.d.ts +0 -5
- package/mobile/runtime/mobile-runtime.module.d.ts +0 -51
- package/mobile/runtime/package.json +0 -28
- package/mobile/runtime/public_api.d.ts +0 -5
- package/mobile/runtime/services/cookie.service.d.ts +0 -31
- package/mobile/runtime/services/http-interceptor.service.d.ts +0 -19
- package/mobile/runtime/services/webprocess.service.d.ts +0 -15
- package/mobile/runtime-dynamic/.npmignore +0 -2
- package/mobile/runtime-dynamic/bundles/index.umd.js +0 -461
- package/mobile/runtime-dynamic/esm2022/index.mjs +0 -5
- package/mobile/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +0 -48
- package/mobile/runtime-dynamic/esm2022/public_api.mjs +0 -2
- package/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +0 -404
- package/mobile/runtime-dynamic/fesm2022/index.mjs +0 -454
- package/mobile/runtime-dynamic/fesm2022/index.mjs.map +0 -1
- package/mobile/runtime-dynamic/index.d.ts +0 -5
- package/mobile/runtime-dynamic/mobile-runtime-dynamic.module.d.ts +0 -8
- package/mobile/runtime-dynamic/package.json +0 -23
- package/mobile/runtime-dynamic/public_api.d.ts +0 -1
- package/mobile/runtime-dynamic/services/live-sync.service.d.ts +0 -38
- package/mobile/variables/.npmignore +0 -2
- package/mobile/variables/bundles/index.umd.js +0 -1166
- package/mobile/variables/esm2022/index.mjs +0 -5
- package/mobile/variables/esm2022/public_api.mjs +0 -10
- package/mobile/variables/esm2022/services/calendar-service.mjs +0 -77
- package/mobile/variables/esm2022/services/camera-service.mjs +0 -70
- package/mobile/variables/esm2022/services/contacts-service.mjs +0 -74
- package/mobile/variables/esm2022/services/datasync-service.mjs +0 -363
- package/mobile/variables/esm2022/services/device-service/device-service.mjs +0 -161
- package/mobile/variables/esm2022/services/device-service/location-service.mjs +0 -200
- package/mobile/variables/esm2022/services/file-service.mjs +0 -87
- package/mobile/variables/esm2022/services/scan-service.mjs +0 -60
- package/mobile/variables/esm2022/variables.module.mjs +0 -78
- package/mobile/variables/fesm2022/index.mjs +0 -1143
- package/mobile/variables/fesm2022/index.mjs.map +0 -1
- package/mobile/variables/index.d.ts +0 -5
- package/mobile/variables/package.json +0 -28
- package/mobile/variables/public_api.d.ts +0 -9
- package/mobile/variables/services/calendar-service.d.ts +0 -10
- package/mobile/variables/services/camera-service.d.ts +0 -8
- package/mobile/variables/services/contacts-service.d.ts +0 -6
- package/mobile/variables/services/datasync-service.d.ts +0 -11
- package/mobile/variables/services/device-service/device-service.d.ts +0 -17
- package/mobile/variables/services/device-service/location-service.d.ts +0 -63
- package/mobile/variables/services/file-service.d.ts +0 -7
- package/mobile/variables/services/scan-service.d.ts +0 -7
- package/mobile/variables/variables.module.d.ts +0 -25
- package/oAuth/esm2022/oAuth.module.mjs +0 -19
- package/oAuth/oAuth.module.d.ts +0 -8
- package/scripts/fullcalendar/main.min.js +0 -6
- package/security/esm2022/security.module.mjs +0 -19
- package/security/security.module.d.ts +0 -8
- package/variables/esm2022/manager/variable/device-variable-manager.mjs +0 -48
- package/variables/esm2022/manager/variable/device-variable-operation.mjs +0 -2
- package/variables/esm2022/manager/variable/device-variable-service.mjs +0 -45
- package/variables/esm2022/model/variable/device-variable.mjs +0 -19
- package/variables/esm2022/variables.module.mjs +0 -52
- package/variables/manager/variable/device-variable-manager.d.ts +0 -26
- package/variables/manager/variable/device-variable-operation.d.ts +0 -37
- package/variables/manager/variable/device-variable-service.d.ts +0 -6
- package/variables/model/variable/device-variable.d.ts +0 -6
- package/variables/variables.module.d.ts +0 -16
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { $parseEvent, $watch, DataType, DEFAULT_FORMATS, extractType, findValueOf, getBlob, getClonedObject, stringStartsWith, triggerFn } from '@wm/core';
|
|
2
|
-
import {
|
|
2
|
+
import { VARIABLE_CONSTANTS, WS_CONSTANTS } from '../../constants/variables.constants';
|
|
3
3
|
import { debounce, filter, forEach, get, includes, isArray, isDate, isEmpty, isFunction, isNumber, isObject, isString, isUndefined, join, keys, last, map, noop, pickBy, remove, replace, set, slice, split, toLower, toUpper, trim } from "lodash-es";
|
|
4
|
+
import * as momentLib from 'moment';
|
|
5
|
+
const moment = momentLib.default || window['moment'];
|
|
4
6
|
const exportTypesMap = { 'EXCEL': '.xlsx', 'CSV': '.csv' };
|
|
5
7
|
export let appManager;
|
|
6
8
|
export let httpService;
|
|
@@ -74,12 +76,6 @@ const processVariablePostBindUpdate = (nodeName, nodeVal, nodeType, variable, no
|
|
|
74
76
|
_invoke(variable, 'invoke');
|
|
75
77
|
}
|
|
76
78
|
break;
|
|
77
|
-
case VARIABLE_CONSTANTS.CATEGORY.DEVICE:
|
|
78
|
-
variable[nodeName] = nodeVal;
|
|
79
|
-
if (variable.autoUpdate && !isUndefined(nodeVal) && isFunction(variable.invoke) && !noUpdate) {
|
|
80
|
-
_invoke(variable, 'invoke');
|
|
81
|
-
}
|
|
82
|
-
break;
|
|
83
79
|
}
|
|
84
80
|
};
|
|
85
81
|
export const setDependency = (type, ref) => {
|
|
@@ -376,9 +372,6 @@ const getCookieByName = (name) => {
|
|
|
376
372
|
* @returns xsrf cookie value
|
|
377
373
|
*/
|
|
378
374
|
const isXsrfEnabled = () => {
|
|
379
|
-
if (CONSTANTS.hasCordova) {
|
|
380
|
-
return localStorage.getItem(CONSTANTS.XSRF_COOKIE_NAME);
|
|
381
|
-
}
|
|
382
375
|
return false;
|
|
383
376
|
};
|
|
384
377
|
/**
|
|
@@ -601,14 +594,7 @@ export const processBinding = (variable, context, bindSource, bindTarget) => {
|
|
|
601
594
|
export const simulateFileDownload = (requestParams, fileName, exportFormat, success, error, dataBinding) => {
|
|
602
595
|
/*success and error callbacks are executed incase of downloadThroughAnchor
|
|
603
596
|
Due to technical limitation cannot be executed incase of iframe*/
|
|
604
|
-
if (
|
|
605
|
-
let fileExtension;
|
|
606
|
-
if (exportFormat) {
|
|
607
|
-
fileExtension = exportTypesMap[exportFormat];
|
|
608
|
-
}
|
|
609
|
-
appManager.notify('device-file-download', { url: requestParams.url, name: fileName, extension: fileExtension, headers: requestParams.headers, successCb: success, errorCb: error });
|
|
610
|
-
}
|
|
611
|
-
else if (!isEmpty(requestParams.headers) || isXsrfEnabled()) {
|
|
597
|
+
if (!isEmpty(requestParams.headers) || isXsrfEnabled()) {
|
|
612
598
|
downloadThroughAnchor(requestParams, success, error);
|
|
613
599
|
}
|
|
614
600
|
else {
|
|
@@ -798,4 +784,4 @@ export const decodeData = (responseContent) => {
|
|
|
798
784
|
function htmlDecode(input) {
|
|
799
785
|
return he.unescape(input);
|
|
800
786
|
}
|
|
801
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsV0FBVyxFQUNYLE1BQU0sRUFDTixRQUFRLEVBQ1IsZUFBZSxFQUNmLFdBQVcsRUFDWCxXQUFXLEVBQ1gsT0FBTyxFQUNQLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDaEcsT0FBTyxFQUNILFFBQVEsRUFBRSxNQUFNLEVBQ2hCLE9BQU8sRUFDUCxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQzlCLE9BQU8sRUFDUCxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFDOUIsUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQ3JCLElBQUksRUFDSixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQzVCLEtBQUssRUFDTCxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQ2hDLE1BQU0sV0FBVyxDQUFDO0FBT25CLE1BQU0sY0FBYyxHQUFLLEVBQUUsT0FBTyxFQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUcsTUFBTSxFQUFDLENBQUM7QUFFOUQsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQztBQUN2QixNQUFNLENBQUMsSUFBSSxlQUFlLENBQUM7QUFDM0IsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUM7QUFDN0IsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDO0FB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c0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICAkcGFyc2VFdmVudCxcbiAgICAkd2F0Y2gsXG4gICAgRGF0YVR5cGUsXG4gICAgREVGQVVMVF9GT1JNQVRTLFxuICAgIGV4dHJhY3RUeXBlLFxuICAgIGZpbmRWYWx1ZU9mLFxuICAgIGdldEJsb2IsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIHN0cmluZ1N0YXJ0c1dpdGgsXG4gICAgdHJpZ2dlckZuXG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtDT05TVEFOVFMsIFZBUklBQkxFX0NPTlNUQU5UUywgV1NfQ09OU1RBTlRTfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdmFyaWFibGVzLmNvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlLCBmaWx0ZXIsXG4gICAgZm9yRWFjaCxcbiAgICBnZXQsIGluY2x1ZGVzLCBpc0FycmF5LCBpc0RhdGUsXG4gICAgaXNFbXB0eSxcbiAgICBpc0Z1bmN0aW9uLCBpc051bWJlciwgaXNPYmplY3QsXG4gICAgaXNTdHJpbmcsXG4gICAgaXNVbmRlZmluZWQsXG4gICAgam9pbiwga2V5cywgbGFzdCwgbWFwLFxuICAgIG5vb3AsXG4gICAgcGlja0J5LCByZW1vdmUsIHJlcGxhY2UsIHNldCxcbiAgICBzbGljZSxcbiAgICBzcGxpdCwgdG9Mb3dlciwgdG9VcHBlciwgdHJpbVxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcbmRlY2xhcmUgY29uc3QgaGU7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3Qgd2luZG93O1xuXG5jb25zdCBleHBvcnRUeXBlc01hcCAgID0geyAnRVhDRUwnIDogJy54bHN4JywgJ0NTVicgOiAnLmNzdid9O1xuXG5leHBvcnQgbGV0IGFwcE1hbmFnZXI7XG5leHBvcnQgbGV0IGh0dHBTZXJ2aWNlO1xuZXhwb3J0IGxldCBtZXRhZGF0YVNlcnZpY2U7XG5leHBvcnQgbGV0IG5hdmlnYXRpb25TZXJ2aWNlO1xuZXhwb3J0IGxldCByb3V0ZXJTZXJ2aWNlO1xuZXhwb3J0IGxldCB0b2FzdGVyU2VydmljZTtcbmV4cG9ydCBsZXQgb2F1dGhTZXJ2aWNlO1xuZXhwb3J0IGxldCBzZWN1cml0eVNlcnZpY2U7XG5leHBvcnQgbGV0IGRpYWxvZ1NlcnZpY2U7XG5cbmNvbnN0IERPVF9FWFBSX1JFWCA9IC9eXFxbKFwifCcpW1xcd1xcV10qKFxcMSlcXF0kLyxcbiAgICBpbnRlcm5hbEJvdW5kTm9kZU1hcCA9IG5ldyBNYXAoKSxcbiAgICB0aW1lcnMgPSBuZXcgTWFwKCk7XG5cbmNvbnN0IF9pbnZva2UgPSAodmFyaWFibGUsIG9wKSA9PiB7XG4gICAgbGV0IGRlYm91bmNlZEZuLFxuICAgICAgICBjYW5jZWxGbiA9IG5vb3AsXG4gICAgICAgIHJldFZhbDtcbiAgICBpZiAodGltZXJzLmhhcyh2YXJpYWJsZSkpIHtcbiAgICAgICAgY2FuY2VsRm4gPSB0aW1lcnMuZ2V0KHZhcmlhYmxlKS5jYW5jZWw7XG4gICAgfVxuICAgIGNhbmNlbEZuKCk7XG4gICAgZGVib3VuY2VkRm4gPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldFZhbCA9IHZhcmlhYmxlW29wXSgpO1xuICAgICAgICAvLyBoYW5kbGUgcHJvbWlzZXMgdG8gYXZvaWQgdW5jYXVnaHQgcHJvbWlzZSBlcnJvcnMgaW4gY29uc29sZVxuICAgICAgICBpZiAocmV0VmFsIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0VmFsLmNhdGNoKG5vb3ApO1xuICAgICAgICB9XG4gICAgfSwgMTAwKTtcbiAgICB0aW1lcnMuc2V0KHZhcmlhYmxlLCBkZWJvdW5jZWRGbik7XG4gICAgZGVib3VuY2VkRm4oKTtcbn07XG5cbmNvbnN0IHByb2Nlc3NWYXJpYWJsZVBvc3RCaW5kVXBkYXRlID0gKG5vZGVOYW1lLCBub2RlVmFsLCBub2RlVHlwZSwgdmFyaWFibGUsIG5vVXBkYXRlKSA9PiB7XG4gICAgc3dpdGNoICh2YXJpYWJsZS5jYXRlZ29yeSkge1xuICAgICAgICBjYXNlIFZBUklBQkxFX0NPTlNUQU5UUy5DQVRFR09SWS5MSVZFOlxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlLm9wZXJhdGlvbiA9PT0gJ3JlYWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnZGF0YUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2gobm9kZVZhbCwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5maWx0ZXJGaWVsZHNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmZpbHRlckZpZWxkc1tub2RlTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBub2RlVmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnIDogbm9kZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogaWYgYXV0by11cGRhdGUgc2V0IGZvciB0aGUgdmFyaWFibGUgd2l0aCByZWFkIG9wZXJhdGlvbiBvbmx5LCBnZXQgaXRzIGRhdGEgKi9cbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuYXV0b1VwZGF0ZSAmJiAhaXNVbmRlZmluZWQobm9kZVZhbCkgJiYgaXNGdW5jdGlvbih2YXJpYWJsZS5saXN0UmVjb3JkcykgJiYgIW5vVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9pbnZva2UodmFyaWFibGUsICdsaXN0UmVjb3JkcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnZGF0YUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlucHV0RmllbGRzID0gbm9kZVZhbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5pbnB1dEZpZWxkc1tub2RlTmFtZV0gPSBub2RlVmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBpZiBhdXRvLXVwZGF0ZSBzZXQgZm9yIHRoZSB2YXJpYWJsZSB3aXRoIHJlYWQgb3BlcmF0aW9uIG9ubHksIGdldCBpdHMgZGF0YSAqL1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS5hdXRvVXBkYXRlICYmICFpc1VuZGVmaW5lZChub2RlVmFsKSAmJiBpc0Z1bmN0aW9uKHZhcmlhYmxlW3ZhcmlhYmxlLm9wZXJhdGlvbiArICdSZWNvcmQnXSkgJiYgIW5vVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9pbnZva2UodmFyaWFibGUsIHZhcmlhYmxlLm9wZXJhdGlvbiArICdSZWNvcmQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBWQVJJQUJMRV9DT05TVEFOVFMuQ0FURUdPUlkuQ1JVRDpcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5vcGVyYXRpb25UeXBlID09PSAnbGlzdCcgJiYgdmFyaWFibGUuYXV0b1VwZGF0ZSAmJiAhaXNVbmRlZmluZWQobm9kZVZhbCkgJiYgaXNGdW5jdGlvbih2YXJpYWJsZS5pbnZva2UpICYmICFub1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgIF9pbnZva2UodmFyaWFibGUsICdpbnZva2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFZBUklBQkxFX0NPTlNUQU5UUy5DQVRFR09SWS5TRVJWSUNFOlxuICAgICAgICBjYXNlIFZBUklBQkxFX0NPTlNUQU5UUy5DQVRFR09SWS5MT0dJTjpcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5hdXRvVXBkYXRlICYmICFpc1VuZGVmaW5lZChub2RlVmFsKSAmJiBpc0Z1bmN0aW9uKHZhcmlhYmxlLmludm9rZSkgJiYgIW5vVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgX2ludm9rZSh2YXJpYWJsZSwgJ2ludm9rZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVkFSSUFCTEVfQ09OU1RBTlRTLkNBVEVHT1JZLkRFVklDRTpcbiAgICAgICAgICAgIHZhcmlhYmxlW25vZGVOYW1lXSA9IG5vZGVWYWw7XG4gICAgICAgICAgICBpZiAodmFyaWFibGUuYXV0b1VwZGF0ZSAmJiAhaXNVbmRlZmluZWQobm9kZVZhbCkgJiYgaXNGdW5jdGlvbih2YXJpYWJsZS5pbnZva2UpICYmICFub1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgIF9pbnZva2UodmFyaWFibGUsICdpbnZva2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXREZXBlbmRlbmN5ID0gKHR5cGU6IHN0cmluZywgcmVmOiBhbnkpID0+IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXBwTWFuYWdlcic6XG4gICAgICAgICAgICBhcHBNYW5hZ2VyID0gcmVmO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0dHAnOlxuICAgICAgICAgICAgaHR0cFNlcnZpY2UgPSByZWY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWV0YWRhdGEnOlxuICAgICAgICAgICAgbWV0YWRhdGFTZXJ2aWNlID0gcmVmO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25hdmlnYXRpb25TZXJ2aWNlJzpcbiAgICAgICAgICAgIG5hdmlnYXRpb25TZXJ2aWNlID0gcmVmO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JvdXRlcic6XG4gICAgICAgICAgICByb3V0ZXJTZXJ2aWNlID0gcmVmO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvYXN0ZXInOlxuICAgICAgICAgICAgdG9hc3RlclNlcnZpY2UgPSAgcmVmO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29BdXRoJzpcbiAgICAgICAgICAgIG9hdXRoU2VydmljZSA9ICByZWY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2VjdXJpdHknOlxuICAgICAgICAgICAgc2VjdXJpdHlTZXJ2aWNlID0gIHJlZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgICAgICAgZGlhbG9nU2VydmljZSA9IHJlZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWF0ZUNhbGxiYWNrID0gKHR5cGU6IHN0cmluZywgdmFyaWFibGU6IGFueSwgZGF0YTogYW55LCBvcHRpb25zPzogYW55LCBza2lwRGVmYXVsdE5vdGlmaWNhdGlvbj86IGJvb2xlYW4pID0+IHtcblxuICAgIC8qY2hlY2tpbmcgaWYgZXZlbnQgaXMgYXZhaWxhYmxlIGFuZCB2YXJpYWJsZSBoYXMgZXZlbnQgcHJvcGVydHkgYW5kIHZhcmlhYmxlIGV2ZW50IHByb3BlcnR5IGJvdW5kIHRvIGZ1bmN0aW9uKi9cbiAgICBjb25zdCBldmVudFZhbHVlcyA9IHZhcmlhYmxlW3R5cGVdLFxuICAgICAgICBjYWxsQmFja1Njb3BlID0gdmFyaWFibGUuX2NvbnRleHQ7XG4gICAgbGV0IGVycm9yVmFyaWFibGU7XG4gICAgLyoqXG4gICAgICogRm9yIGVycm9yIGV2ZW50OlxuICAgICAqIHRyaWdnZXIgYXBwIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gICAgICogaWYgbm8gZXZlbnQgaXMgYXNzaWduZWQsIHRyaWdnZXIgZGVmYXVsdCBhcHBOb3RpZmljYXRpb24gdmFyaWFibGUuXG4gICAgICovXG4gICBpZiAodHlwZSA9PT0gVkFSSUFCTEVfQ09OU1RBTlRTLkVWRU5ULkVSUk9SICYmICFza2lwRGVmYXVsdE5vdGlmaWNhdGlvbikge1xuICAgICAgICBpZiAoIWV2ZW50VmFsdWVzKSB7XG4gICAgICAgICAgICAvKiBpbiBjYXNlIG9mIGVycm9yLCBpZiBubyBldmVudCBhc3NpZ25lZCwgaGFuZGxlIHRocm91Z2ggZGVmYXVsdCBub3RpZmljYXRpb24gdmFyaWFibGUgKi9cbiAgICAgICAgICAgIGVycm9yVmFyaWFibGUgPSBjYWxsQmFja1Njb3BlLkFjdGlvbnNbVkFSSUFCTEVfQ09OU1RBTlRTLkRFRkFVTFRfVkFSLk5PVElGSUNBVElPTl07XG4gICAgICAgICAgICBpZiAoZXJyb3JWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBlcnJvclZhcmlhYmxlLmdldE1lc3NhZ2UoKSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpc1N0cmluZyhkYXRhKSA/IGRhdGEgOiAnQW4gZXJyb3IgaGFzIG9jY3VyZWQuIFBsZWFzZSBjaGVjayB0aGUgYXBwIGxvZ3MuJztcbiAgICAgICAgICAgICAgICBlcnJvclZhcmlhYmxlLmludm9rZSh7ICdtZXNzYWdlJyA6IGRhdGF9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgIC8vICRyb290U2NvcGUuJGV2YWxBc3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICRyb290U2NvcGUuJGVtaXQoXCJpbnZva2Utc2VydmljZVwiLCBWQVJJQUJMRV9DT05TVEFOVFMuREVGQVVMVF9WQVIuTk9USUZJQ0FUSU9OLCB7c2NvcGU6IGNhbGxCYWNrU2NvcGUsIG1lc3NhZ2U6IHJlc3BvbnNlfSk7XG4gICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETzogW1ZpYmh1XSwgY2hlY2sgd2hldGhlciB0byBzdXBwb3J0IGxlZ2FjeSBldmVudCBjYWxsaW5nIG1lY2hhbmlzbSAoaWRlYWxseSwgaXQgc2hvdWxkIGhhdmUgYmVlbiBtaWdyYXRlZClcbiAgICBjb25zdCBmbiA9ICRwYXJzZUV2ZW50KHZhcmlhYmxlW3R5cGVdKTtcbiAgICBpZiAodHlwZSA9PT0gVkFSSUFCTEVfQ09OU1RBTlRTLkVWRU5ULkJFRk9SRV9VUERBVEUpIHtcbiAgICAgICAgaWYgKHZhcmlhYmxlLmNhdGVnb3J5ID09PSAnd20uTGl2ZVZhcmlhYmxlJyAmJiB2YXJpYWJsZS5vcGVyYXRpb24gPT09ICdyZWFkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhcmlhYmxlLl9jb250ZXh0LCB7dmFyaWFibGU6IHZhcmlhYmxlLCBkYXRhRmlsdGVyOiBkYXRhLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFyaWFibGUuX2NvbnRleHQsIHt2YXJpYWJsZTogdmFyaWFibGUsIGlucHV0RGF0YTogZGF0YSwgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZuKHZhcmlhYmxlLl9jb250ZXh0LCB7dmFyaWFibGU6IHZhcmlhYmxlLCBkYXRhOiBkYXRhLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgfVxufTtcblxuY29uc3QgdHJpZ2dlck9uVGltZW91dCA9IChzdWNjZXNzKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRyaWdnZXJGbihzdWNjZXNzKTsgfSwgNTAwKTtcbn07XG5cbmNvbnN0IGRvd25sb2FkRmlsZWZyb21SZXNwb25zZSA9IChyZXNwb25zZSwgaGVhZGVycywgc3VjY2VzcywgZXJyb3IpID0+IHtcbiAgICAvLyBjaGVjayBmb3IgYSBmaWxlbmFtZVxuICAgIGxldCBmaWxlbmFtZSA9ICcnLFxuICAgICAgICBmaWxlbmFtZVJlZ2V4LFxuICAgICAgICBtYXRjaGVzLFxuICAgICAgICB0eXBlLFxuICAgICAgICBibG9iLFxuICAgICAgICBVUkwsXG4gICAgICAgIGRvd25sb2FkVXJsLFxuICAgICAgICBwb3B1cDtcbiAgICBjb25zdCBkaXNwb3NpdGlvbiA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gICAgaWYgKGRpc3Bvc2l0aW9uICYmIGRpc3Bvc2l0aW9uLmluZGV4T2YoJ2F0dGFjaG1lbnQnKSAhPT0gLTEpIHtcbiAgICAgICAgZmlsZW5hbWVSZWdleCA9IC9maWxlbmFtZVteOz1cXG5dKj0oKFsnXCJdKS4qP1xcMnxbXjtcXG5dKikvO1xuICAgICAgICBtYXRjaGVzID0gZmlsZW5hbWVSZWdleC5leGVjKGRpc3Bvc2l0aW9uKTtcbiAgICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwgJiYgbWF0Y2hlc1sxXSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBtYXRjaGVzWzFdLnJlcGxhY2UoL1snXCJdL2csICcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHR5cGUgPSBoZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgYmxvYiA9IG5ldyBCbG9iKFtyZXNwb25zZV0sIHsgdHlwZTogdHlwZSB9KTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBJRSB3b3JrYXJvdW5kIGZvciBcIkhUTUw3MDA3OiBPbmUgb3IgbW9yZSBibG9iIFVSTHMgd2VyZSByZXZva2VkIGJ5IGNsb3NpbmcgdGhlIGJsb2IgZm9yIHdoaWNoIHRoZXkgd2VyZSBjcmVhdGVkLiBUaGVzZSBVUkxzIHdpbGwgbm8gbG9uZ2VyIHJlc29sdmUgYXMgdGhlIGRhdGEgYmFja2luZyB0aGUgVVJMIGhhcyBiZWVuIGZyZWVkLlwiXG4gICAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYmxvYiwgZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICB0cmlnZ2VyT25UaW1lb3V0KHN1Y2Nlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJpZ2dlckZuKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIFVSTCAgICAgICAgID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgICAgICBkb3dubG9hZFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAgICAgaWYgKGZpbGVuYW1lKSB7XG4gICAgICAgICAgICAvLyB1c2UgSFRNTDUgYVtkb3dubG9hZF0gYXR0cmlidXRlIHRvIHNwZWNpZnkgZmlsZW5hbWVcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICBsZXQgcmVhZGVyO1xuICAgICAgICAgICAgLy8gc2FmYXJpIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIHlldFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBhLmRvd25sb2FkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gcmVhZGVyLnJlc3VsdC5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLCAnZGF0YTphdHRhY2htZW50L2ZpbGU7Jyk7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwID0gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcG9wdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gdHJpZ2dlck9uVGltZW91dC5iaW5kKHVuZGVmaW5lZCwgc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYS5ocmVmID0gZG93bmxvYWRVcmw7XG4gICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgYS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJPblRpbWVvdXQoc3VjY2Vzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3B1cCA9IHdpbmRvdy5vcGVuKGRvd25sb2FkVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICBpZiAoIXBvcHVwKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJPblRpbWVvdXQoc3VjY2Vzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgVVJMLnJldm9rZU9iamVjdFVSTChkb3dubG9hZFVybCk7IH0sIDEwMCk7IC8vIGNsZWFudXBcbiAgICB9XG59O1xuXG5jb25zdCBnZXRTZXJ2aWNlID0gKHNlcnZpY2VOYW1lKSA9PiB7XG4gICAgaWYgKCFzZXJ2aWNlTmFtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBzZXJ2aWNlTmFtZTtcbiAgICAvLyBUb2RvOiBTaHViaGFtLCB1bmNvbW1lbnQgYmVsb3cgY29kZVxuICAgIC8qIC8hKiBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgd2hlcmUgbmctYXBwIGlzIGRlZmluZWQgKiEvXG4gICAgIGxldCBhcHBFbCA9IFdNLmVsZW1lbnQoJ1tpZD1uZy1hcHBdJyksIGluamVjdG9yO1xuICAgICBpZiAoYXBwRWwpIHtcbiAgICAgdHJ5IHtcbiAgICAgaW5qZWN0b3IgPSBhcHBFbC5pbmplY3RvcigpOyAvLyBnZXQgdGhlIGFuZ3VsYXIgaW5qZWN0b3JcbiAgICAgaWYgKGluamVjdG9yKSB7XG4gICAgIHJldHVybiBpbmplY3Rvci5nZXQoc2VydmljZU5hbWUpOyAvLyByZXR1cm4gdGhlIHNlcnZpY2VcbiAgICAgfVxuICAgICB9IGNhdGNoIChlKSB7XG4gICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgIH1cbiAgICAgfSovXG59O1xuXG4vKipcbiAqIENvbnN0cnVjdCB0aGUgZm9ybSBkYXRhIHBhcmFtcyBmcm9tIHRoZSBVUkxcbiAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICogQHBhcmFtIHBhcmFtc1xuICovXG5jb25zdCBzZXRQYXJhbXNGcm9tVVJMID0gKHF1ZXJ5UGFyYW1zLCBwYXJhbXMpID0+IHtcbiAgICBxdWVyeVBhcmFtcyA9IHNwbGl0KHF1ZXJ5UGFyYW1zLCAnJicpO1xuICAgIGZvckVhY2gocXVlcnlQYXJhbXMsIGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICBwYXJhbSA9IHNwbGl0KHBhcmFtLCAnPScpO1xuICAgICAgICBwYXJhbXNbcGFyYW1bMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KGpvaW4oc2xpY2UocGFyYW0sIDEpLCAnPScpKTtcbiAgICB9KTtcbn07XG5cbi8qKlxuICogW1RvZG86IFNodWJoYW1dLCBJbXBsZW1lbnQgRG93bmxvYWQgdGhyb3VnaCBJIGZyYW1lXG4gKiBTaW11bGF0ZXMgZmlsZSBkb3dubG9hZCBpbiBhbiBhcHAgdGhyb3VnaCBjcmVhdGluZyBhbmQgc3VibWl0dGluZyBhIGhpZGRlbiBmb3JtIGluIERPTS5cbiAqIFRoZSBhY3Rpb24gd2lsbCBiZSBpbml0aWF0ZWQgdGhyb3VnaCBhIFNlcnZpY2UgVmFyaWFibGVcbiAqXG4gKiBRdWVyeSBQYXJhbXNcbiAqIFRoZSByZXF1ZXN0IHBhcmFtcyBsaWtlIHF1ZXJ5IHBhcmFtcyBhcmUgYWRkZWQgYXMgaGlkZGVuIGlucHV0IGVsZW1lbnRzXG4gKlxuICogSGVhZGVyIFBhcmFtc1xuICogVGhlIGhlYWRlciBwYXJhbXMgZm9yIGEgcmVxdWVzdCBhcmUgYWxzbyBhZGRlZCBhbG9uZyB3aXRoIGhpZGRlbiBpbnB1dCBlbGVtZW50cy5cbiAqIFRoaXMgaXMgZG9uZSBhcyBoZWFkZXJzIGNhbiBub3QgYmUgc2V0IGZvciBhIGZvcm0gUE9TVCBjYWxsIGZyb20gSmF2YVNjcmlwdFxuICpcbiAqIEZpbmFsbHksIHJlcXVlc3QgcGFyYW1ldGVycyBhcmUgc2VudCBhcyBmb2xsb3dzOlxuICogRm9yIGEgR0VUIHJlcXVlc3QsIHRoZSByZXF1ZXN0IGRhdGEgaXMgc2VudCBhbG9uZyB3aXRoIHRoZSBxdWVyeSBwYXJhbXMuXG4gKiBGb3IgUE9TVCwgaXQgaXMgc2VudCBhcyByZXF1ZXN0IGJvZHkuXG4gKlxuICogQHBhcmFtIHZhcmlhYmxlOiB0aGUgdmFyaWFibGUgdGhhdCBpcyBjYWxsZWQgZnJvbSB1c2VyIGFjdGlvblxuICogQHBhcmFtIHJlcXVlc3RQYXJhbXMgb2JqZWN0IGNvbnNpc3RpbmcgdGhlIGluZm8gdG8gY29uc3RydWN0IHRoZSBYSFIgcmVxdWVzdCBmb3IgdGhlIHNlcnZpY2VcbiAqL1xuY29uc3QgZG93bmxvYWRUaHJvdWdoSWZyYW1lID0gKHJlcXVlc3RQYXJhbXMsIHN1Y2Nlc3MsIGRhdGFCaW5kaW5nKSA9PiB7XG4gICAgLy8gVG9kbzogU0h1YmhhbTogVVJMIGNvbnRhaW5zICcvLycgaW4gYmV0d2VlbiB3aGljaCBzaG91bGQgYmUgaGFuZGxlZCBhdCB0aGUgVVJMIGZvcm1hdGlvbiBvbmx5XG4gICAgaWYgKHJlcXVlc3RQYXJhbXMudXJsWzFdID09PSAnLycgJiYgcmVxdWVzdFBhcmFtcy51cmxbMl0gPT09ICcvJykge1xuICAgICAgICByZXF1ZXN0UGFyYW1zLnVybCA9IHJlcXVlc3RQYXJhbXMudXJsLnNsaWNlKDAsIDEpICsgcmVxdWVzdFBhcmFtcy51cmwuc2xpY2UoMik7XG4gICAgfVxuICAgIGxldCBpRnJhbWVFbGVtZW50LFxuICAgICAgICBmb3JtRWwsXG4gICAgICAgIHBhcmFtRWxlbWVudCxcbiAgICAgICAgcXVlcnlQYXJhbXMgPSAnJyxcbiAgICAgICAgZGF0YTtcbiAgICBjb25zdCBJRlJBTUVfTkFNRSAgICAgPSAnZmlsZURvd25sb2FkSUZyYW1lJyxcbiAgICAgICAgRk9STV9OQU1FICAgICAgID0gJ2ZpbGVEb3dubG9hZEZvcm0nLFxuICAgICAgICBDT05URU5UX1RZUEUgICAgPSAnQ29udGVudC1UeXBlJyxcbiAgICAgICAgdXJsICAgICAgICAgICAgID0gcmVxdWVzdFBhcmFtcy51cmwsXG4gICAgICAgIGVuY1R5cGUgPSBnZXQocmVxdWVzdFBhcmFtcy5oZWFkZXJzLCBDT05URU5UX1RZUEUpLFxuICAgICAgICBwYXJhbXMgPSBwaWNrQnkocmVxdWVzdFBhcmFtcy5oZWFkZXJzLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXkgIT09IENPTlRFTlRfVFlQRTtcbiAgICAgICAgfSk7XG4gICAgLyogVG9kbzogc2h1YmhhbSA6IGRlZmluZSBnZXRTZXJ2aWNlIG1ldGhvZFxuICAgICBXU19DT05TVEFOVFMgICAgPSBnZXRTZXJ2aWNlKCdXU19DT05TVEFOVFMnKTsqL1xuXG4gICAgLyogbG9vayBmb3IgZXhpc3RpbmcgaWZyYW1lLiBJZiBleGlzdHMsIHJlbW92ZSBpdCBmaXJzdCAqL1xuICAgIGlGcmFtZUVsZW1lbnQgPSAkKCcjJyArIElGUkFNRV9OQU1FKTtcbiAgICBpZiAoaUZyYW1lRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgaUZyYW1lRWxlbWVudC5maXJzdCgpLnJlbW92ZSgpO1xuICAgIH1cbiAgICBpRnJhbWVFbGVtZW50ID0gJCgnPGlmcmFtZSBpZD1cIicgKyBJRlJBTUVfTkFNRSArICdcIiBuYW1lPVwiJyArIElGUkFNRV9OQU1FICsgJ1wiIGNsYXNzPVwibmctaGlkZVwiPjwvaWZyYW1lPicpO1xuICAgIGZvcm1FbCAgICAgICAgPSAkKCc8Zm9ybSBpZD1cIicgKyBGT1JNX05BTUUgKyAnXCIgbmFtZT1cIicgKyBGT1JNX05BTUUgKyAnXCI+PC9mb3JtPicpO1xuXG4gICAgLyogcHJvY2VzcyBxdWVyeSBwYXJhbXMsIGFwcGVuZCBhIGhpZGRlbiBpbnB1dCBlbGVtZW50IGluIHRoZSBmb3JtIGFnYWluc3QgZWFjaCBwYXJhbSAqL1xuICAgIHF1ZXJ5UGFyYW1zICs9IHVybC5pbmRleE9mKCc/JykgIT09IC0xID8gdXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZignPycpICsgMSkgOiAnJztcbiAgICBxdWVyeVBhcmFtcyArPSBlbmNUeXBlID09PSBXU19DT05TVEFOVFMuQ09OVEVOVF9UWVBFUy5GT1JNX1VSTF9FTkNPREVEID8gKChxdWVyeVBhcmFtcyA/ICcmJyA6ICcnKSArIHJlcXVlc3RQYXJhbXMuZGF0YVBhcmFtcykgOiAnJztcblxuICAgIGZvcm1FbC5hdHRyKHtcbiAgICAgICAgJ3RhcmdldCcgIDogaUZyYW1lRWxlbWVudC5hdHRyKCduYW1lJyksXG4gICAgICAgICdhY3Rpb24nICA6IHVybCxcbiAgICAgICAgJ21ldGhvZCcgIDogcmVxdWVzdFBhcmFtcy5tZXRob2QsXG4gICAgICAgICdlbmN0eXBlJzogIShpc0VtcHR5KHJlcXVlc3RQYXJhbXMuZGF0YSkgJiYgaXNFbXB0eShxdWVyeVBhcmFtcykpID8gZW5jVHlwZSA6IFdTX0NPTlNUQU5UUy5DT05URU5UX1RZUEVTLk1VTFRJUEFSVF9GT1JNREFUQVxuICAgIH0pO1xuXG4gICAgLy8gRm9yIE5vbiBib2R5IG1ldGhvZHMgb25seSwgc2V0IHRoZSBpbnB1dCBmaWVsZHMgZnJvbSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgaWYgKGluY2x1ZGVzKFdTX0NPTlNUQU5UUy5OT05fQk9EWV9IVFRQX01FVEhPRFMsIHRvVXBwZXIocmVxdWVzdFBhcmFtcy5tZXRob2QpKSkge1xuICAgICAgICBzZXRQYXJhbXNGcm9tVVJMKHF1ZXJ5UGFyYW1zLCBwYXJhbXMpOyAvLyBTZXQgcGFyYW1zIGZvciBVUkwgcXVlcnkgcGFyYW1zXG4gICAgfVxuICAgIGlmICghaXNFbXB0eShyZXF1ZXN0UGFyYW1zLmRhdGEpKSB7XG4gICAgICAgIHNldFBhcmFtc0Zyb21VUkwocmVxdWVzdFBhcmFtcy5kYXRhLCBwYXJhbXMpOy8vIFNldCBwYXJhbXMgZm9yIHJlcXVlc3QgZGF0YVxuICAgICAgICBkYXRhID0gcGFyYW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBpc0VtcHR5KGRhdGFCaW5kaW5nKSA/IHBhcmFtcyA6IGRhdGFCaW5kaW5nO1xuICAgIH1cbiAgICBmb3JFYWNoKGRhdGEsIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICBwYXJhbUVsZW1lbnQgPSAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiPicpO1xuICAgICAgICBwYXJhbUVsZW1lbnQuYXR0cih7XG4gICAgICAgICAgICAnbmFtZScgIDoga2V5LFxuICAgICAgICAgICAgJ3ZhbHVlJyA6IHZhbFxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUVsLmFwcGVuZChwYXJhbUVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgLyogYXBwZW5kIGZvcm0gdG8gaUZyYW1lIGFuZCBpRnJhbWUgdG8gdGhlIGRvY3VtZW50IGFuZCBzdWJtaXQgdGhlIGZvcm0gKi9cbiAgICAkKCdib2R5JykuYXBwZW5kKGlGcmFtZUVsZW1lbnQpO1xuXG4gICAgLy8gdGltZW91dCBmb3IgSUUgMTAsIGlmcmFtZUVsZW1lbnQuY29udGVudHMoKSBpcyBlbXB0eSBpbiBJRSAxMCB3aXRob3V0IHRpbWVvdXRcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaUZyYW1lRWxlbWVudC5jb250ZW50cygpLmZpbmQoJ2JvZHknKS5hcHBlbmQoZm9ybUVsKTtcbiAgICAgICAgZm9ybUVsLnN1Ym1pdCgpO1xuICAgICAgICB0cmlnZ2VyRm4oc3VjY2Vzcyk7XG4gICAgfSwgMTAwKTtcbn07XG5cbi8qKlxuICogTWFrZXMgYW4gWEhSIGNhbGwgYWdhaW5zdCB0aGUgY29uZmlnXG4gKiB0aGUgcmVzcG9uc2UgaXMgY29udmVydGVkIGludG8gYSBibG9iIHVybCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gdGhlIHNyYyBhdHRyaWJ1dGUgb2YgYW4gYW5jaG9yIGVsZW1lbnQgd2l0aCBkb3dubG9hZD10cnVlXG4gKiBhIGNsaWNrIGlzIHNpbXVsYXRlZCBvbiB0aGUgYW5jaG9yIHRvIGRvd25sb2FkIHRoZSBmaWxlXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcGFyYW0gc3VjY2Vzc1xuICogQHBhcmFtIGVycm9yXG4gKi9cbmNvbnN0IGRvd25sb2FkVGhyb3VnaEFuY2hvciA9IChjb25maWcsIHN1Y2Nlc3MsIGVycm9yKSA9PiB7XG4gICAgY29uc3QgdXJsICAgICA9IGNvbmZpZy51cmwsXG4gICAgICAgIG1ldGhvZCAgPSBjb25maWcubWV0aG9kLFxuICAgICAgICBkYXRhICAgID0gY29uZmlnLmRhdGFQYXJhbXMgfHwgY29uZmlnLmRhdGEsXG4gICAgICAgIGhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gaGVhZGVyc1snQ29udGVudC1UeXBlJ10gfHwgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG5cbiAgICAvLyBUb2RvOiBSZXBsYWNlIGh0dHAgd2l0aCBnZXRTZXJ2aWNlXG4gICAgaHR0cFNlcnZpY2Uuc2VuZCh7XG4gICAgICAgICd0YXJnZXQnIDogJ1dlYlNlcnZpY2UnLFxuICAgICAgICAnYWN0aW9uJyA6ICdpbnZva2VSdW50aW1lUmVzdENhbGwnLFxuICAgICAgICAnbWV0aG9kJyA6IG1ldGhvZCxcbiAgICAgICAgJ3VybCcgICAgOiB1cmwsXG4gICAgICAgICdoZWFkZXJzJzogaGVhZGVycyxcbiAgICAgICAgJ2RhdGEnICAgOiBkYXRhLFxuICAgICAgICAncmVzcG9uc2VUeXBlJzogJ2FycmF5YnVmZmVyJ1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZG93bmxvYWRGaWxlZnJvbVJlc3BvbnNlKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlLmhlYWRlcnMsIHN1Y2Nlc3MsIGVycm9yKTtcbiAgICAgICAgfSwgOTAwKTtcbiAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyaWdnZXJGbihlcnJvciwgZXJyKTtcbiAgICB9KTtcbn07XG5cbi8qKlxuICogYXBwZW5kcyBhIHRpbWVzdGFtcCBvbiB0aGUgcGFzc2VkIGZpbGVuYW1lIHRvIHByZXZlbnQgY2FjaGluZ1xuICogcmV0dXJucyB0aGUgbW9kaWZpZWQgZmlsZSBuYW1lXG4gKiBAcGFyYW0gZmlsZU5hbWVcbiAqIEBwYXJhbSBleHBvcnRGb3JtYXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IGdldE1vZGlmaWVkRmlsZU5hbWUgPSAoZmlsZU5hbWUsIGV4cG9ydEZvcm1hdCkgPT4ge1xuICAgIGxldCBmaWxlRXh0ZW5zaW9uO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGV4cG9ydEZvcm1hdCkge1xuICAgICAgICBmaWxlRXh0ZW5zaW9uID0gZXhwb3J0VHlwZXNNYXBbZXhwb3J0Rm9ybWF0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlRXh0ZW5zaW9uID0gJy4nICsgbGFzdChzcGxpdChmaWxlTmFtZSwgJy4nKSk7XG4gICAgICAgIGZpbGVOYW1lID0gcmVwbGFjZShmaWxlTmFtZSwgZmlsZUV4dGVuc2lvbiwgJycpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZU5hbWUgKyAnXycgKyBjdXJyZW50VGltZXN0YW1wICsgZmlsZUV4dGVuc2lvbjtcbn07XG5cbmNvbnN0IGdldENvb2tpZUJ5TmFtZSA9IChuYW1lKSA9PiB7XG4gICAgLy8gVG9kbzogU2h1YmhhbSBJbXBsZW1lbnQgY29va2llIG5hdGl2ZSBqc1xuICAgIHJldHVybiAnY29va2llJztcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb29raWVWYWx1ZSBpZiB4c3JmIGlzIGVuYWJsZWQuXG4gKiBJbiBkZXZpY2UsIHhzcmYgY29va2llIGlzIHN0b3JlZCBpbiBsb2NhbFN0b3JhZ2UuXG4gKiBAcmV0dXJucyB4c3JmIGNvb2tpZSB2YWx1ZVxuICovXG5jb25zdCBpc1hzcmZFbmFibGVkID0gKCkgPT4ge1xuICAgIGlmIChDT05TVEFOVFMuaGFzQ29yZG92YSkge1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ09OU1RBTlRTLlhTUkZfQ09PS0lFX05BTUUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9iamVjdCBub2RlIGZvciBhIGJpbmQgb2JqZWN0LCB3aGVyZSB0aGUgdmFsdWUgaGFzIHRvIGJlIHVwZGF0ZWRcbiAqIG9iai50YXJnZXQgPSBcImFcIlxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIHJvb3RcbiAqIEBwYXJhbSB2YXJpYWJsZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmNvbnN0IGdldFRhcmdldE9iaiA9IChvYmosIHJvb3QsIHZhcmlhYmxlKSA9PiB7XG4gICAgLypcbiAgICAgKiBpZiB0aGUgdGFyZ2V0IGtleSBpcyBpbiB0aGUgZm9ybSBhcyBcIlsnbXkucGFyYW0nXVwiXG4gICAgICoga2VlcCB0aGUgdGFyZ2V0IGtleSBhcyBcIm15LnBhcmFtXCIgYW5kIGRvIG5vdCBzcGxpdCBmdXJ0aGVyXG4gICAgICogdGhpcyBpcyBkb25lLCBzbyB0aGF0LCB0aGUgY29tcHV0ZWQgdmFsdWUgYWdhaW5zdCB0aGlzIGJpbmRpbmcgaXMgYXNzaWduZWQgYXNcbiAgICAgKiAgICAgIHtcIm15LnBhcmFtXCI6IFwidmFsdWVcIn1cbiAgICAgKiBhbmQgbm90IGFzXG4gICAgICogICAgICB7XG4gICAgICogICAgICAgICAgXCJteVwiOiB7XG4gICAgICogICAgICAgICAgICAgIFwicGFyYW1cIjogXCJ2YWx1ZVwiXG4gICAgICogICAgICAgICAgfVxuICAgICAqICAgICAgfVxuICAgICAqL1xuICAgIGxldCB0YXJnZXQgPSBvYmoudGFyZ2V0LFxuICAgICAgICB0YXJnZXRPYmo7XG4gICAgY29uc3Qgcm9vdE5vZGUgPSB2YXJpYWJsZVtyb290XTtcbiAgICBpZiAoRE9UX0VYUFJfUkVYLnRlc3QodGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXRPYmogPSByb290Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQuc3Vic3RyKDAsIHRhcmdldC5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgICAgaWYgKG9iai50YXJnZXQgPT09IHJvb3QpIHtcbiAgICAgICAgICAgIHRhcmdldE9iaiA9IHZhcmlhYmxlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGFyZ2V0T2JqID0gZmluZFZhbHVlT2Yocm9vdE5vZGUsIHRhcmdldCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRPYmogPSByb290Tm9kZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0T2JqO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBrZXkgZm9yIHRoZSB0YXJnZXQgb2JqZWN0XG4gKiB0aGUgY29tcHV0ZWQgdmFsdWUgd2lsbCBiZSB1cGRhdGVkIGFnYWluc3QgdGhpcyBrZXkgaW4gdGhlIHRhcmdldE9iamVjdChjb21wdXRlZCBieSBnZXRUYXJnZXRPYmooKSlcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSByZWdleFxuICogQHJldHVybnMgeyp9XG4gKi9cbmNvbnN0IGdldFRhcmdldE5vZGVLZXkgPSAodGFyZ2V0KSA9PiB7XG4gICAgLypcbiAgICAgKiBpZiB0aGUgdGFyZ2V0IGtleSBpcyBpbiB0aGUgZm9ybSBhcyBcIlsnbXkucGFyYW0nXVwiXG4gICAgICoga2VlcCB0aGUgdGFyZ2V0IGtleSBhcyBcIm15LnBhcmFtXCIgYW5kIGRvIG5vdCBzcGxpdCBmdXJ0aGVyXG4gICAgICogdGhpcyBpcyBkb25lLCBzbyB0aGF0LCB0aGUgY29tcHV0ZWQgdmFsdWUgYWdhaW5zdCB0aGlzIGJpbmRpbmcgaXMgYXNzaWduZWQgYXNcbiAgICAgKiAgICAgIHtcIm15LnBhcmFtXCI6IFwidmFsdWVcIn1cbiAgICAgKiBhbmQgbm90IGFzXG4gICAgICogICAgICB7XG4gICAgICogICAgICAgICAgXCJteVwiOiB7XG4gICAgICogICAgICAgICAgICAgIFwicGFyYW1cIjogXCJ2YWx1ZVwiXG4gICAgICogICAgICAgICAgfVxuICAgICAqICAgICAgfVxuICAgICAqL1xuICAgIGxldCB0YXJnZXROb2RlS2V5O1xuICAgIGlmIChET1RfRVhQUl9SRVgudGVzdCh0YXJnZXQpKSB7XG4gICAgICAgIHRhcmdldE5vZGVLZXkgPSB0YXJnZXQucmVwbGFjZSgvXihcXFtbXCInXSl8KFtcIiddXFxdKSQvZywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldE5vZGVLZXkgPSB0YXJnZXQuc3BsaXQoJy4nKS5wb3AoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldE5vZGVLZXk7XG59O1xuXG5jb25zdCBzZXRWYWx1ZVRvTm9kZSA9ICh0YXJnZXQsIG9iaiwgcm9vdCwgdmFyaWFibGUsIHZhbHVlLCBub1VwZGF0ZT8pID0+IHtcbiAgICBjb25zdCB0YXJnZXROb2RlS2V5ID0gZ2V0VGFyZ2V0Tm9kZUtleSh0YXJnZXQpLFxuICAgICAgICB0YXJnZXRPYmogPSBnZXRUYXJnZXRPYmoob2JqLCByb290LCB2YXJpYWJsZSk7XG4gICAgdmFsdWUgPSAhaXNVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiBvYmoudmFsdWU7XG4gICAgLyogc2FuaXR5IGNoZWNrLCB1c2VyIGNhbiBiaW5kIHBhcmVudCBub2RlcyB0byBub24tb2JqZWN0IHZhbHVlcywgc28gY2hpbGQgbm9kZSBiaW5kaW5ncyBtYXkgZmFpbCAqL1xuICAgIGlmICh0YXJnZXRPYmopIHtcbiAgICAgICAgdGFyZ2V0T2JqW3RhcmdldE5vZGVLZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHByb2Nlc3NWYXJpYWJsZVBvc3RCaW5kVXBkYXRlKHRhcmdldE5vZGVLZXksIHZhbHVlLCBvYmoudHlwZSwgdmFyaWFibGUsIG5vVXBkYXRlKTtcbn07XG5cbi8qKlxuICogVGhlIG1vZGVsIGludGVybmFsQm91bmROb2RlTWFwIHN0b3JlcyB0aGUgcmVmZXJlbmNlIHRvIGxhdGVzdCBjb21wdXRlZCB2YWx1ZXMgYWdhaW5zdCBpbnRlcm5hbChuZXN0ZWQpIGJvdW5kIG5vZGVzXG4gKiBUaGlzIGlzIGRvbmUgc28gdGhhdCB0aGUgaW50ZXJuYWwgbm9kZSdzIGNvbXB1dGVkIHZhbHVlIGlzIG5vdCBsb3N0LCBvbmNlIGl0cyBwYXJlbnQgbm9kZSdzIHZhbHVlIGlzIGNvbXB1dGVkIGF0IGEgbGF0ZXIgcG9pbnRcbiAqIEUuZy5cbiAqIFZhcmlhYmxlLmVtcGxveWVlVmFyIGhhcyBmb2xsb3dpbmcgYmluZGluZ3NcbiAqIFwiZGF0YUJpbmRpbmdcIjogW1xuICAgICB7XG4gICAgICAgICBcInRhcmdldFwiOiBcImRlcGFydG1lbnQuYnVkZ2V0XCIsXG4gICAgICAgICBcInZhbHVlXCI6IFwiYmluZDpWYXJpYWJsZXMuYnVkZ2V0VmFyLmRhdGFTZXRcIlxuICAgICB9LFxuICAgICB7XG4gICAgICAgICBcInRhcmdldFwiOiBcImRlcGFydG1lbnRcIixcbiAgICAgICAgIFwidmFsdWVcIjogXCJiaW5kOlZhcmlhYmxlcy5kZXBhcnRtZW50VmFyLmRhdGFTZXRcIlxuICAgICB9XG4gXVxuICogV2hlbiBkZXBhcnRtZW50LmJ1ZGdldCBpcyBjb21wdXRlZCwgZW1wbG95ZWVWYXIuZGF0YVNldCA9IHtcbiAqICBcImRlcGFydG1lbnRcIjoge1xuICogICAgICBcImJ1ZGdldFwiOiB7XCJxMVwiOiAxMTExfVxuICogIH1cbiAqIH1cbiAqXG4gKiBXaGVuIGRlcGFydG1lbnQgaXMgY29tcHV0ZWRcbiAqICBcImRlcGFydG1lbnRcIjoge1xuICogICAgICBcIm5hbWVcIjogXCJIUlwiLFxuICogICAgICBcImxvY2F0aW9uXCI6IFwiSHlkZXJhYmFkXCJcbiAqICB9XG4gKiBUaGUgYnVkZ2V0IGZpZWxkIChjb21wdXRlZCBlYXJsaWVyKSBpcyBMT1NULlxuICpcbiAqIFRvIGF2b2lkIHRoaXMsIHRoZSBsYXRlc3QgdmFsdWVzIGFnYWluc3QgaW50ZXJuYWwgbm9kZXMgKGluIHRoaXMgY2FzZSBkZXBhcnRtZW50LmJ1ZGdldCkgYXJlIHN0b3JlZCBpbiBhIG1hcFxuICogVGhlc2UgdmFsdWVzIGFyZSBhc3NpZ25lZCBiYWNrIHRvIGludGVybmFsIGZpZWxkcyBpZiB0aGUgcGFyZW50IGlzIGNvbXB1dGVkIChpbiB0aGlzIGNhc2UgZGVwYXJ0bWVudClcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSByb290XG4gKiBAcGFyYW0gdmFyaWFibGVcbiAqL1xuY29uc3QgdXBkYXRlSW50ZXJuYWxOb2RlcyA9ICh0YXJnZXQsIHJvb3QsIHZhcmlhYmxlKSA9PiB7XG4gICAgY29uc3QgYm91bmRJbnRlcm5hbE5vZGVzID0ga2V5cyhnZXQoaW50ZXJuYWxCb3VuZE5vZGVNYXAuZ2V0KHZhcmlhYmxlKSwgW3ZhcmlhYmxlLm5hbWUsIHJvb3RdKSksXG4gICAgICAgIHRhcmdldE5vZGVLZXkgPSBnZXRUYXJnZXROb2RlS2V5KHRhcmdldCk7XG4gICAgbGV0IGludGVybmFsTm9kZXM7XG4gICAgZnVuY3Rpb24gZmluZEludGVybmFsTm9kZUJvdW5kKCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyKGJvdW5kSW50ZXJuYWxOb2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIC8vIHRoZSBsYXRlciBjb25kaXRpb24gaW4gY2hlY2sgKHRhcmdldE5vZGVLZXkgPT09IHJvb3QgfHwgdGFyZ2V0Tm9kZUtleSA9PT0gJ2RhdGFCaW5kaW5nJykgaXMgc3BlY2lmaWNhbGx5IGZvciBsaXZlIHZhcmlhYmxlIG9mIGluc2VydC91cGRhdGUgdHlwZXNcbiAgICAgICAgICAgIHJldHVybiAobm9kZSAhPT0gdGFyZ2V0Tm9kZUtleSAmJiBpbmNsdWRlcyhub2RlLCB0YXJnZXROb2RlS2V5KSkgfHwgKCh0YXJnZXROb2RlS2V5ID09PSByb290IHx8IHRhcmdldE5vZGVLZXkgPT09ICdkYXRhQmluZGluZycpICYmIG5vZGUgIT09IHRhcmdldE5vZGVLZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW50ZXJuYWxOb2RlcyA9IGZpbmRJbnRlcm5hbE5vZGVCb3VuZCgpO1xuICAgIGlmICgoaW50ZXJuYWxOb2Rlcy5sZW5ndGgpKSB7XG4gICAgICAgIGZvckVhY2goaW50ZXJuYWxOb2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHNldFZhbHVlVG9Ob2RlKG5vZGUsIHt0YXJnZXQ6IG5vZGV9LCByb290LCB2YXJpYWJsZSwgZ2V0KGludGVybmFsQm91bmROb2RlTWFwLmdldCh2YXJpYWJsZSksIFt2YXJpYWJsZS5uYW1lLCByb290LCBub2RlXSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIE5ldyBJbXBsZW1lbnRhdGlvbiAoRGF0YUJpbmRpbmcgRmxhdCBTdHJ1Y3R1cmUgd2l0aCB4LXBhdGggdGFyZ2V0cylcbiAqIHByb2Nlc3NlcyBhIGRhdGFCaW5kaW5nIG9iamVjdCwgaWYgYm91bmQgdG8gZXhwcmVzc2lvbiwgd2F0Y2hlcyBvdmVyIGl0LCBlbHNlIGFzc2lnbnMgdmFsdWUgdG8gdGhlIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBvYmogZGF0YUJpbmRpbmcgb2JqZWN0XG4gKiBAcGFyYW0gc2NvcGUgc2NvcGUgb2YgdGhlIHZhcmlhYmxlXG4gKiBAcGFyYW0gcm9vdCByb290IG5vZGUgc3RyaW5nIChkYXRhQmluZGluZyBmb3IgYWxsIHZhcmlhYmxlcywgZGF0YVNldCBmb3Igc3RhdGljIHZhcmlhYmxlKVxuICogQHBhcmFtIHZhcmlhYmxlIHZhcmlhYmxlIG9iamVjdFxuICovXG5jb25zdCBwcm9jZXNzQmluZE9iamVjdCA9IChvYmosIHNjb3BlLCByb290LCB2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IG9iai50YXJnZXQsXG4gICAgICAgIHRhcmdldE9iaiA9IGdldFRhcmdldE9iaihvYmosIHJvb3QsIHZhcmlhYmxlKSxcbiAgICAgICAgdGFyZ2V0Tm9kZUtleSA9IGdldFRhcmdldE5vZGVLZXkodGFyZ2V0KSxcbiAgICAgICAgcnVuTW9kZSA9IHRydWU7XG4gICAgY29uc3QgZGVzdHJveUZuID0gc2NvcGUucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIgPyBzY29wZS5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lci5iaW5kKHNjb3BlKSA6IG5vb3A7XG5cbiAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aChvYmoudmFsdWUsICdiaW5kOicpKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoKG5ld1ZhbCA9PT0gb2xkVmFsICYmIGlzVW5kZWZpbmVkKG5ld1ZhbCkpIHx8IChpc1VuZGVmaW5lZChuZXdWYWwpICYmICghaXNVbmRlZmluZWQob2xkVmFsKSB8fCAhaXNVbmRlZmluZWQodGFyZ2V0T2JqW3RhcmdldE5vZGVLZXldKSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBjbG9uaW5nIGZvciBibG9iIGNvbHVtblxuICAgICAgICAgICAgaWYgKCFpbmNsdWRlcyhbJ2Jsb2InLCAnZmlsZSddLCBvYmoudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBnZXRDbG9uZWRPYmplY3QobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFZhbHVlVG9Ob2RlKHRhcmdldCwgb2JqLCByb290LCB2YXJpYWJsZSwgbmV3VmFsKTsgLy8gY2xvbmluZyBuZXdWYWwgdG8ga2VlcCB0aGUgc291cmNlIGNsZWFuXG5cbiAgICAgICAgICAgIGlmIChydW5Nb2RlKSB7XG4gICAgICAgICAgICAgICAgLypzZXQgdGhlIGludGVybmFsIGJvdW5kIG5vZGUgbWFwIHdpdGggdGhlIGxhdGVzdCB1cGRhdGVkIHZhbHVlKi9cbiAgICAgICAgICAgICAgICBpZiAoIWludGVybmFsQm91bmROb2RlTWFwLmhhcyh2YXJpYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxCb3VuZE5vZGVNYXAuc2V0KHZhcmlhYmxlLCB7fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldChpbnRlcm5hbEJvdW5kTm9kZU1hcC5nZXQodmFyaWFibGUpLCBbdmFyaWFibGUubmFtZSwgcm9vdCwgdGFyZ2V0XSwgbmV3VmFsKTtcbiAgICAgICAgICAgICAgICAvKnVwZGF0ZSB0aGUgaW50ZXJuYWwgbm9kZXMgYWZ0ZXIgaW50ZXJuYWwgbm9kZSBtYXAgaXMgc2V0Ki9cbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbE5vZGVzKHRhcmdldCwgcm9vdCwgdmFyaWFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZGVzdHJveUZuKCR3YXRjaChvYmoudmFsdWUucmVwbGFjZSgnYmluZDonLCAnJyksIHNjb3BlLCB7fSwgbGlzdGVuZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICgpID0+IHZhcmlhYmxlLmlzTXV0ZWQpKTtcbiAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChvYmoudmFsdWUpKSB7XG4gICAgICAgIHNldFZhbHVlVG9Ob2RlKHRhcmdldCwgb2JqLCByb290LCB2YXJpYWJsZSwgb2JqLnZhbHVlLCB0cnVlKTtcbiAgICAgICAgaWYgKHJ1bk1vZGUgJiYgcm9vdCAhPT0gdGFyZ2V0Tm9kZUtleSkge1xuICAgICAgICAgICAgaWYgKCFpbnRlcm5hbEJvdW5kTm9kZU1hcC5oYXModmFyaWFibGUpKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxCb3VuZE5vZGVNYXAuc2V0KHZhcmlhYmxlLCB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXQoaW50ZXJuYWxCb3VuZE5vZGVNYXAuZ2V0KHZhcmlhYmxlKSwgW3ZhcmlhYmxlLm5hbWUsIHJvb3QsIHRhcmdldF0sIG9iai52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQVUJMSUMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLy9cblxuLyoqXG4gKiBJbml0aWFsaXplcyB3YXRjaGVycyBmb3IgYmluZGluZyBleHByZXNzaW9ucyBjb25maWd1cmVkIGluIHRoZSB2YXJpYWJsZVxuICogQHBhcmFtIHZhcmlhYmxlXG4gKiBAcGFyYW0gY29udGV4dCwgc2NvcGUgY29udGV4dCBpbiB3aGljaCB0aGUgdmFyaWFibGUgZXhpc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gYmluZFNvdXJjZSwgIHRoZSBmaWVsZCBpbiB2YXJpYWJsZSB3aGVyZSB0aGUgZGF0YWJpbmRpbmdzIGFyZSBjb25maWd1cmVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtb3N0IHZhcmlhYmxlcywgaXQgd2lsbCBiZSAnZGF0YUJpbmRpbmcnLCBoZW5jZSBkZWZhdWx0IGZhbGxiYWNrIGlzIHRvICdkYXRhQmluZGluZydcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNvbWUgaXQgY2FuIGJlICdkYXRhU2V0JyBhbmQgaGVuY2Ugd2lsbCBiZSBwYXNzZWQgYXMgcGFyYW1cbiAqIEBwYXJhbSB7c3RyaW5nfSBiaW5kVGFyZ2V0LCB0aGUgb2JqZWN0IGZpZWxkIGluIHZhcmlhYmxlIHdoZXJlIHRoZSBjb21wdXRlZCBiaW5kaW5ncyB3aWxsIGJlIHNldFxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0JpbmRpbmcgPSAodmFyaWFibGU6IGFueSwgY29udGV4dDogYW55LCBiaW5kU291cmNlPzogc3RyaW5nLCBiaW5kVGFyZ2V0Pzogc3RyaW5nKSA9PiB7XG4gICAgYmluZFNvdXJjZSA9IGJpbmRTb3VyY2UgfHwgJ2RhdGFCaW5kaW5nJztcbiAgICBiaW5kVGFyZ2V0ID0gYmluZFRhcmdldCB8fCAnZGF0YUJpbmRpbmcnO1xuXG4gICAgY29uc3QgYmluZE1hcCA9IHZhcmlhYmxlW2JpbmRTb3VyY2VdO1xuICAgIHZhcmlhYmxlW2JpbmRTb3VyY2VdID0ge307XG4gICAgdmFyaWFibGVbJ19iaW5kJyArIGJpbmRTb3VyY2VdID0gYmluZE1hcDtcbiAgICBpZiAoIWJpbmRNYXAgfHwgIWlzQXJyYXkoYmluZE1hcCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBiaW5kTWFwLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgLyogZm9yIHN0YXRpYyB2YXJpYWJsZSBjaGFuZ2UgdGhlIGJpbmRpbmcgd2l0aCB0YXJnZXQgJ2RhdGFCaW5kaW5nJyB0byAnZGF0YVNldCcsIGFzIHRoZSByZXN1bHRzIGhhdmUgdG8gcmVmbGVjdCBkaXJlY3RseSBpbiB0aGUgZGF0YVNldCAqL1xuICAgICAgICBpZiAodmFyaWFibGUuY2F0ZWdvcnkgPT09ICd3bS5WYXJpYWJsZScgJiYgbm9kZS50YXJnZXQgPT09ICdkYXRhQmluZGluZycpIHtcbiAgICAgICAgICAgIG5vZGUudGFyZ2V0ID0gJ2RhdGFTZXQnO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NCaW5kT2JqZWN0KG5vZGUsIGNvbnRleHQsIGJpbmRUYXJnZXQsIHZhcmlhYmxlKTtcbiAgICB9KTtcbn07XG5cbi8qKlxuICogRG93bmxvYWRzIGEgZmlsZSBpbiB0aGUgYnJvd3Nlci5cbiAqIFR3byBtZXRob2RzIHRvIGRvIHNvLCBuYW1lbHk6XG4gKiAxLiBkb3dubG9hZFRocm91Z2hBbmNob3IsIGNhbGxlZCBpZlxuICogICAgICAtIGlmIGEgaGVhZGVyIGlzIHRvIGJlIHBhc3NlZFxuICogICAgICBPUlxuICogICAgICAtIGlmIHNlY3VyaXR5IGlzIE9OIGFuZCBYU1JGIHRva2VuIGlzIHRvIGJlIHNlbnQgYXMgd2VsbFxuICogTk9URTogVGhpcyBtZXRob2QgZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSB2ZXJzaW9uIDEwLjAgYW5kIGJlbG93XG4gKlxuICogMi4gZG93bmxvYWRUaHJvdWdoSWZyYW1lXG4gKiAgICAgIC0gdGhpcyBtZXRob2Qgd29ya3MgYWNyb3NzIGJyb3dzZXJzIGFuZCB1c2VzIGFuIGlmcmFtZSB0byBkb3dubGFkIHRoZSBmaWxlLlxuICogQHBhcmFtIHJlcXVlc3RQYXJhbXMgcmVxdWVzdCBwYXJhbXMgb2JqZWN0XG4gKiBAcGFyYW0gZmlsZU5hbWUgcmVwcmVzZW50cyB0aGUgZmlsZSBuYW1lXG4gKiBAcGFyYW0gZXhwb3J0Rm9ybWF0IGRvd25sb2FkZWQgZmlsZSBmb3JtYXRcbiAqIEBwYXJhbSBzdWNjZXNzIHN1Y2Nlc3MgY2FsbGJhY2tcbiAqIEBwYXJhbSBlcnJvciBlcnJvciBjYWxsYmFja1xuICovXG5leHBvcnQgY29uc3Qgc2ltdWxhdGVGaWxlRG93bmxvYWQgPSAocmVxdWVzdFBhcmFtcywgZmlsZU5hbWUsIGV4cG9ydEZvcm1hdCwgc3VjY2VzcywgZXJyb3IsIGRhdGFCaW5kaW5nKSA9PiB7XG4gICAgLypzdWNjZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkIGluY2FzZSBvZiBkb3dubG9hZFRocm91Z2hBbmNob3JcbiAgICAgRHVlIHRvIHRlY2huaWNhbCBsaW1pdGF0aW9uIGNhbm5vdCBiZSBleGVjdXRlZCBpbmNhc2Ugb2YgaWZyYW1lKi9cbiAgICBpZiAoQ09OU1RBTlRTLmhhc0NvcmRvdmEpIHtcbiAgICAgICAgbGV0IGZpbGVFeHRlbnNpb247XG4gICAgICAgIGlmIChleHBvcnRGb3JtYXQpIHtcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBleHBvcnRUeXBlc01hcFtleHBvcnRGb3JtYXRdO1xuICAgICAgICB9XG4gICAgICAgIGFwcE1hbmFnZXIubm90aWZ5KCdkZXZpY2UtZmlsZS1kb3dubG9hZCcsIHsgdXJsOiByZXF1ZXN0UGFyYW1zLnVybCwgbmFtZTogZmlsZU5hbWUsIGV4dGVuc2lvbjogZmlsZUV4dGVuc2lvbiwgaGVhZGVyczogcmVxdWVzdFBhcmFtcy5oZWFkZXJzLCBzdWNjZXNzQ2I6IHN1Y2Nlc3MsIGVycm9yQ2I6IGVycm9yfSk7XG4gICAgfSBlbHNlIGlmICghaXNFbXB0eShyZXF1ZXN0UGFyYW1zLmhlYWRlcnMpIHx8IGlzWHNyZkVuYWJsZWQoKSkge1xuICAgICAgICBkb3dubG9hZFRocm91Z2hBbmNob3IocmVxdWVzdFBhcmFtcywgc3VjY2VzcywgZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvd25sb2FkVGhyb3VnaElmcmFtZShyZXF1ZXN0UGFyYW1zLCBzdWNjZXNzLCBkYXRhQmluZGluZyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBzZXRzIHRoZSB2YWx1ZSBhZ2FpbnN0IHBhc3NlZCBrZXkgb24gdGhlIFwiaW5wdXRGaWVsZHNcIiBvYmplY3QgaW4gdGhlIHZhcmlhYmxlXG4gKiBAcGFyYW0gdGFyZ2V0T2JqOiB0aGUgb2JqZWN0IGluIHdoaWNoIHRoZSBrZXksIHZhbHVlIGlzIHRvIGJlIHNldFxuICogQHBhcmFtIHZhcmlhYmxlXG4gKiBAcGFyYW0ga2V5OiBjYW4gYmU6XG4gKiAgLSBhIHN0cmluZyBlLmcuIFwidXNlcm5hbWVcIlxuICogIC0gYW4gb2JqZWN0LCBlLmcuIHtcInVzZXJuYW1lXCI6IFwiam9oblwiLCBcInNzblwiOiBcIjExMTExXCJ9XG4gKiBAcGFyYW0gdmFsXG4gKiAtIGlmIGtleSBpcyBzdHJpbmcsIHRoZSB2YWx1ZSBhZ2FpbnN0IGl0IChmb3IgdGhhdCBkYXRhIHR5cGUpXG4gKiAtIGlmIGtleSBpcyBvYmplY3QsIG5vdCByZXF1aXJlZFxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRJbnB1dCA9ICh0YXJnZXRPYmo6IGFueSwga2V5OiBhbnksIHZhbDogYW55LCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICB0YXJnZXRPYmogPSB0YXJnZXRPYmogfHwge307XG4gICAgbGV0IGtleXMsXG4gICAgICAgIGxhc3RLZXksXG4gICAgICAgIHBhcmFtT2JqID0ge307XG5cbiAgICAvLyBjb250ZW50IHR5cGUgY2hlY2tcbiAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHZhbCA9IGdldEJsb2IodmFsLCBvcHRpb25zLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgdmFsID0gaXNOdW1iZXIodmFsKSA/IHZhbCA6IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHBhc3NlZCBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IGl0c2VsZlxuICAgICAgICBwYXJhbU9iaiA9IGtleTtcbiAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICAvLyBjaGVjayBmb3IgJy4nIGluIGtleSBlLmcuICdlbXBsb3llZS5kZXBhcnRtZW50J1xuICAgICAgICBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgIGxhc3RLZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICAvLyBGaW5kaW5nIHRoZSBvYmplY3QgYmFzZWQgb24gdGhlIGtleVxuICAgICAgICB0YXJnZXRPYmogPSBmaW5kVmFsdWVPZih0YXJnZXRPYmosIGtleXMuam9pbignLicpLCB0cnVlKTtcbiAgICAgICAga2V5ID0gbGFzdEtleTtcbiAgICAgICAgcGFyYW1PYmpba2V5XSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU9ialtrZXldID0gdmFsO1xuICAgIH1cblxuICAgIGZvckVhY2gocGFyYW1PYmosIGZ1bmN0aW9uIChwYXJhbVZhbCwgcGFyYW1LZXkpIHtcbiAgICAgICAgdGFyZ2V0T2JqW3BhcmFtS2V5XSA9IHBhcmFtVmFsO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXRPYmo7XG59O1xuXG4vKipcbiAqIHJldHVybnMgdHJ1ZSBpZiBIVE1MNSBGaWxlIEFQSSBpcyBhdmFpbGFibGUgZWxzZSBmYWxzZVxuICogQHJldHVybnMge3twcm90b3R5cGU6IEJsb2I7IG5ldyhibG9iUGFydHM/OiBhbnlbXSwgb3B0aW9ucz86IEJsb2JQcm9wZXJ0eUJhZyk6IEJsb2J9fVxuICovXG5leHBvcnQgY29uc3QgaXNGaWxlVXBsb2FkU3VwcG9ydGVkID0gKCkgPT4ge1xuICAgIHJldHVybiAod2luZG93LkZpbGUgJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGVMaXN0ICYmIHdpbmRvdy5CbG9iKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YXJPcmRlclxuICogQHBhcmFtIG9wdGlvbnNPcmRlclxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV2YWx1YXRlZE9yZGVyQnkgPSAodmFyT3JkZXIsIG9wdGlvbnNPcmRlcikgPT4ge1xuICAgIGxldCBvcHRpb25GaWVsZHMsXG4gICAgICAgIHZhck9yZGVyQnk7XG4gICAgLy8gSWYgb3B0aW9ucyBvcmRlciBieSBpcyBub3QgZGVmaW5lZCwgcmV0dXJuIHZhcmlhYmxlIG9yZGVyXG4gICAgaWYgKCFvcHRpb25zT3JkZXIgfHwgaXNFbXB0eShvcHRpb25zT3JkZXIpKSB7XG4gICAgICAgIHJldHVybiB2YXJPcmRlcjtcbiAgICB9XG4gICAgLy8gSWYgdmFyaWFibGUgb3JkZXIgYnkgaXMgbm90IGRlZmluZWQsIHJldHVybiBvcHRpb25zIG9yZGVyXG4gICAgaWYgKCF2YXJPcmRlcikge1xuICAgICAgICByZXR1cm4gb3B0aW9uc09yZGVyO1xuICAgIH1cbiAgICAvLyBJZiBib3RoIGFyZSBwcmVzZW50LCBjb21iaW5lIHRoZSBvcHRpb25zIG9yZGVyIGFuZCB2YXJpYWJsZSBvcmRlciwgd2l0aCBvcHRpb25zIG9yZGVyIGFzIHByZWNlZGVuY2VcbiAgICB2YXJPcmRlciA9IHNwbGl0KHZhck9yZGVyLCAnLCcpO1xuICAgIG9wdGlvbnNPcmRlciA9IHNwbGl0KG9wdGlvbnNPcmRlciwgJywnKTtcbiAgICBvcHRpb25GaWVsZHMgPSBtYXAob3B0aW9uc09yZGVyLCBmdW5jdGlvbiAob3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIHNwbGl0KHRyaW0ob3JkZXIpLCAnICcpWzBdO1xuICAgIH0pO1xuICAgIC8vIElmIGEgZmllbGQgaXMgcHJlc2VudCBpbiBib3RoIG9wdGlvbnMgYW5kIHZhcmlhYmxlLCByZW1vdmUgdGhlIHZhcmlhYmxlIG9yZGVyYnlcbiAgICByZW1vdmUodmFyT3JkZXIsIGZ1bmN0aW9uIChvcmRlckJ5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGluY2x1ZGVzKG9wdGlvbkZpZWxkcywgc3BsaXQodHJpbShvcmRlckJ5KSwgJyAnKVswXSk7XG4gICAgfSk7XG4gICAgdmFyT3JkZXJCeSA9IHZhck9yZGVyLmxlbmd0aCA/ICcsJyArIGpvaW4odmFyT3JkZXIsICcsJykgOiAnJztcbiAgICByZXR1cm4gam9pbihvcHRpb25zT3JkZXIsICcsJykgKyB2YXJPcmRlckJ5O1xufTtcblxuLyoqXG4gKiBmb3JtYXR0aW5nIHRoZSBleHByZXNzaW9uIGFzIHJlcXVpcmVkIGJ5IGJhY2tlbmQgd2hpY2ggd2FzIGVuY2xvc2VkIGJ5ICR7PGV4cHJlc3Npb24+fS5cbiAqIEBwYXJhbSBmaWVsZERlZnNcbiAqIHJldHVybnMgZmllbGREZWZzXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRFeHBvcnRFeHByZXNzaW9uID0gZmllbGREZWZzID0+IHtcbiAgICBmb3JFYWNoKGZpZWxkRGVmcywgZnVuY3Rpb24gKGZpZWxkRGVmKSB7XG4gICAgICAgIGlmIChmaWVsZERlZi5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICBmaWVsZERlZi5leHByZXNzaW9uID0gJyR7JyArIGZpZWxkRGVmLmV4cHJlc3Npb24gKyAnfSc7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmllbGREZWZzO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlYm91bmNlVmFyaWFibGVDYWxsID0gX2ludm9rZTtcblxuY29uc3QgZ2V0RGF0ZVRpbWVGb3JtYXRGb3JUeXBlID0gKHR5cGUpID0+IHtcbiAgICByZXR1cm4gREVGQVVMVF9GT1JNQVRTW3RvVXBwZXIodHlwZSldO1xufTtcblxuLy8gRm9ybWF0IHZhbHVlIGZvciBkYXRldGltZSB0eXBlc1xuY29uc3QgX2Zvcm1hdERhdGUgPSAoZGF0ZVZhbHVlLCB0eXBlKSA9PiB7XG4gICAgbGV0IGVwb2NoO1xuICAgIGlmIChpc0RhdGUoZGF0ZVZhbHVlKSkge1xuICAgICAgICBlcG9jaCA9IGRhdGVWYWx1ZS5nZXRUaW1lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFpc05hTihkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICBkYXRlVmFsdWUgPSBwYXJzZUludChkYXRlVmFsdWUsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICBlcG9jaCA9IGRhdGVWYWx1ZSAmJiBtb21lbnQoZGF0ZVZhbHVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICAgIGlmIChpc05hTihlcG9jaCkgJiYgdHlwZSAhPT0gRGF0YVR5cGUuVElNRSkge1xuICAgICAgICByZXR1cm4gZXBvY2g7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBEYXRhVHlwZS5USU1FU1RBTVApIHtcbiAgICAgICAgcmV0dXJuIGVwb2NoO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gRGF0YVR5cGUuVElNRSAmJiAhZXBvY2gpIHtcbiAgICAgICAgZXBvY2ggPSBtb21lbnQobmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKSArICcgJyArIGRhdGVWYWx1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZVZhbHVlICYmIGFwcE1hbmFnZXIuZ2V0UGlwZSgnZGF0ZScpLnRyYW5zZm9ybShlcG9jaCwgZ2V0RGF0ZVRpbWVGb3JtYXRGb3JUeXBlKHR5cGUpKTtcbn07XG5cbi8vIEZ1bmN0aW9uIHRvIGNvbnZlcnQgdmFsdWVzIG9mIGRhdGUgdGltZSB0eXBlcyBpbnRvIGRlZmF1bHQgZm9ybWF0c1xuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGUgPSAodmFsdWUsIHR5cGUpID0+IHtcbiAgICBpZiAoaW5jbHVkZXModHlwZSwgJy4nKSkge1xuICAgICAgICB0eXBlID0gdG9Mb3dlcihleHRyYWN0VHlwZSh0eXBlKSk7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbWFwKHZhbHVlLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gX2Zvcm1hdERhdGUodmFsLCB0eXBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBfZm9ybWF0RGF0ZSh2YWx1ZSwgdHlwZSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHZhcmlhYmxlIGRhdGEgd2hpY2ggaXMgZW5jb2RlZCBmcm9tIGJhY2tlbmQgYmVmb3JlIHNob3dpbmcgaW4gdGhlIHdpZGdldHMuXG4gKiBJdCB0YWtlcyB2YXJpYWJsZSByZXNwb25zZSBjb250ZW50IGFzIGlucHV0IGFuZCBpdGVyYXRlcyByZWN1cnNpdmVseSxcbiAqIGlmIHRoZSB2YWx1ZSBpcyBzdHJpbmcgdHlwZSB0aGVuIGl0IHdpbGwgZGVjb2RlIHRoZSBkYXRhLlxuICogQHBhcmFtIHJlc3BvbnNlQ29udGVudCAoQXJyYXkgb2Ygb2JqZWN0cylcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY29kZURhdGEgPSAocmVzcG9uc2VDb250ZW50KSA9PiB7XG4gICAgaWYgKCFyZXNwb25zZUNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlQ29udGVudDtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkocmVzcG9uc2VDb250ZW50KSkge1xuICAgICAgICBmb3JFYWNoKHJlc3BvbnNlQ29udGVudCwgZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gaHRtbERlY29kZShkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKGRhdGEsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IGh0bWxEZWNvZGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlRGF0YSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChyZXNwb25zZUNvbnRlbnQpKSB7XG4gICAgICAgIGZvckVhY2gocmVzcG9uc2VDb250ZW50LCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudFtrZXldID0gaHRtbERlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlY29kZURhdGEodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHJlc3BvbnNlQ29udGVudCkpIHtcbiAgICAgICAgcmVzcG9uc2VDb250ZW50ID0gaHRtbERlY29kZShyZXNwb25zZUNvbnRlbnQpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250ZW50O1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGh0bWxEZWNvZGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaGUudW5lc2NhcGUoaW5wdXQpO1xufVxuIl19
|
|
787
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsV0FBVyxFQUNYLE1BQU0sRUFDTixRQUFRLEVBQ1IsZUFBZSxFQUNmLFdBQVcsRUFDWCxXQUFXLEVBQ1gsT0FBTyxFQUNQLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBWSxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRyxPQUFPLEVBQ0gsUUFBUSxFQUFFLE1BQU0sRUFDaEIsT0FBTyxFQUNQLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFDOUIsT0FBTyxFQUNQLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUM5QixRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFDckIsSUFBSSxFQUNKLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFDNUIsS0FBSyxFQUNMLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFDaEMsTUFBTSxXQUFXLENBQUM7QUFJbkIsT0FBTyxLQUFLLFNBQVMsTUFBTyxRQUFRLENBQUM7QUFDckMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFHckQsTUFBTSxjQUFjLEdBQUssRUFBRSxPQUFPLEVBQUcsT0FBTyxFQUFFLEtBQUssRUFBRyxNQUFNLEVBQUMsQ0FBQztBQUU5RCxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDdEIsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDO0FBQ3ZC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QUFDO2dCQUN6QixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztTQUFNLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDbkMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsU0FBUyxVQUFVLENBQUMsS0FBSztJQUNyQixPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHdhdGNoLFxuICAgIERhdGFUeXBlLFxuICAgIERFRkFVTFRfRk9STUFUUyxcbiAgICBleHRyYWN0VHlwZSxcbiAgICBmaW5kVmFsdWVPZixcbiAgICBnZXRCbG9iLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBzdHJpbmdTdGFydHNXaXRoLFxuICAgIHRyaWdnZXJGblxufSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7Q09OU1RBTlRTLCBWQVJJQUJMRV9DT05TVEFOVFMsIFdTX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZhcmlhYmxlcy5jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZSwgZmlsdGVyLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LCBpbmNsdWRlcywgaXNBcnJheSwgaXNEYXRlLFxuICAgIGlzRW1wdHksXG4gICAgaXNGdW5jdGlvbiwgaXNOdW1iZXIsIGlzT2JqZWN0LFxuICAgIGlzU3RyaW5nLFxuICAgIGlzVW5kZWZpbmVkLFxuICAgIGpvaW4sIGtleXMsIGxhc3QsIG1hcCxcbiAgICBub29wLFxuICAgIHBpY2tCeSwgcmVtb3ZlLCByZXBsYWNlLCBzZXQsXG4gICAgc2xpY2UsXG4gICAgc3BsaXQsIHRvTG93ZXIsIHRvVXBwZXIsIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IGhlO1xuaW1wb3J0ICogYXMgbW9tZW50TGliICBmcm9tICdtb21lbnQnO1xuY29uc3QgbW9tZW50ID0gbW9tZW50TGliLmRlZmF1bHQgfHwgd2luZG93Wydtb21lbnQnXTtcbmRlY2xhcmUgY29uc3Qgd2luZG93O1xuXG5jb25zdCBleHBvcnRUeXBlc01hcCAgID0geyAnRVhDRUwnIDogJy54bHN4JywgJ0NTVicgOiAnLmNzdid9O1xuXG5leHBvcnQgbGV0IGFwcE1hbmFnZXI7XG5leHBvcnQgbGV0IGh0dHBTZXJ2aWNlO1xuZXhwb3J0IGxldCBtZXRhZGF0YVNlcnZpY2U7XG5leHBvcnQgbGV0IG5hdmlnYXRpb25TZXJ2aWNlO1xuZXhwb3J0IGxldCByb3V0ZXJTZXJ2aWNlO1xuZXhwb3J0IGxldCB0b2FzdGVyU2VydmljZTtcbmV4cG9ydCBsZXQgb2F1dGhTZXJ2aWNlO1xuZXhwb3J0IGxldCBzZWN1cml0eVNlcnZpY2U7XG5leHBvcnQgbGV0IGRpYWxvZ1NlcnZpY2U7XG5cbmNvbnN0IERPVF9FWFBSX1JFWCA9IC9eXFxbKFwifCcpW1xcd1xcV10qKFxcMSlcXF0kLyxcbiAgICBpbnRlcm5hbEJvdW5kTm9kZU1hcCA9IG5ldyBNYXAoKSxcbiAgICB0aW1lcnMgPSBuZXcgTWFwKCk7XG5cbmNvbnN0IF9pbnZva2UgPSAodmFyaWFibGUsIG9wKSA9PiB7XG4gICAgbGV0IGRlYm91bmNlZEZuLFxuICAgICAgICBjYW5jZWxGbiA9IG5vb3AsXG4gICAgICAgIHJldFZhbDtcbiAgICBpZiAodGltZXJzLmhhcyh2YXJpYWJsZSkpIHtcbiAgICAgICAgY2FuY2VsRm4gPSB0aW1lcnMuZ2V0KHZhcmlhYmxlKS5jYW5jZWw7XG4gICAgfVxuICAgIGNhbmNlbEZuKCk7XG4gICAgZGVib3VuY2VkRm4gPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldFZhbCA9IHZhcmlhYmxlW29wXSgpO1xuICAgICAgICAvLyBoYW5kbGUgcHJvbWlzZXMgdG8gYXZvaWQgdW5jYXVnaHQgcHJvbWlzZSBlcnJvcnMgaW4gY29uc29sZVxuICAgICAgICBpZiAocmV0VmFsIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0VmFsLmNhdGNoKG5vb3ApO1xuICAgICAgICB9XG4gICAgfSwgMTAwKTtcbiAgICB0aW1lcnMuc2V0KHZhcmlhYmxlLCBkZWJvdW5jZWRGbik7XG4gICAgZGVib3VuY2VkRm4oKTtcbn07XG5cbmNvbnN0IHByb2Nlc3NWYXJpYWJsZVBvc3RCaW5kVXBkYXRlID0gKG5vZGVOYW1lLCBub2RlVmFsLCBub2RlVHlwZSwgdmFyaWFibGUsIG5vVXBkYXRlKSA9PiB7XG4gICAgc3dpdGNoICh2YXJpYWJsZS5jYXRlZ29yeSkge1xuICAgICAgICBjYXNlIFZBUklBQkxFX0NPTlNUQU5UUy5DQVRFR09SWS5MSVZFOlxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlLm9wZXJhdGlvbiA9PT0gJ3JlYWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnZGF0YUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2gobm9kZVZhbCwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5maWx0ZXJGaWVsZHNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmZpbHRlckZpZWxkc1tub2RlTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBub2RlVmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnIDogbm9kZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogaWYgYXV0by11cGRhdGUgc2V0IGZvciB0aGUgdmFyaWFibGUgd2l0aCByZWFkIG9wZXJhdGlvbiBvbmx5LCBnZXQgaXRzIGRhdGEgKi9cbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuYXV0b1VwZGF0ZSAmJiAhaXNVbmRlZmluZWQobm9kZVZhbCkgJiYgaXNGdW5jdGlvbih2YXJpYWJsZS5saXN0UmVjb3JkcykgJiYgIW5vVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9pbnZva2UodmFyaWFibGUsICdsaXN0UmVjb3JkcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnZGF0YUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlucHV0RmllbGRzID0gbm9kZVZhbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5pbnB1dEZpZWxkc1tub2RlTmFtZV0gPSBub2RlVmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBpZiBhdXRvLXVwZGF0ZSBzZXQgZm9yIHRoZSB2YXJpYWJsZSB3aXRoIHJlYWQgb3BlcmF0aW9uIG9ubHksIGdldCBpdHMgZGF0YSAqL1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS5hdXRvVXBkYXRlICYmICFpc1VuZGVmaW5lZChub2RlVmFsKSAmJiBpc0Z1bmN0aW9uKHZhcmlhYmxlW3ZhcmlhYmxlLm9wZXJhdGlvbiArICdSZWNvcmQnXSkgJiYgIW5vVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9pbnZva2UodmFyaWFibGUsIHZhcmlhYmxlLm9wZXJhdGlvbiArICdSZWNvcmQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBWQVJJQUJMRV9DT05TVEFOVFMuQ0FURUdPUlkuQ1JVRDpcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5vcGVyYXRpb25UeXBlID09PSAnbGlzdCcgJiYgdmFyaWFibGUuYXV0b1VwZGF0ZSAmJiAhaXNVbmRlZmluZWQobm9kZVZhbCkgJiYgaXNGdW5jdGlvbih2YXJpYWJsZS5pbnZva2UpICYmICFub1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgIF9pbnZva2UodmFyaWFibGUsICdpbnZva2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFZBUklBQkxFX0NPTlNUQU5UUy5DQVRFR09SWS5TRVJWSUNFOlxuICAgICAgICBjYXNlIFZBUklBQkxFX0NPTlNUQU5UUy5DQVRFR09SWS5MT0dJTjpcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5hdXRvVXBkYXRlICYmICFpc1VuZGVmaW5lZChub2RlVmFsKSAmJiBpc0Z1bmN0aW9uKHZhcmlhYmxlLmludm9rZSkgJiYgIW5vVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgX2ludm9rZSh2YXJpYWJsZSwgJ2ludm9rZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldERlcGVuZGVuY3kgPSAodHlwZTogc3RyaW5nLCByZWY6IGFueSkgPT4ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdhcHBNYW5hZ2VyJzpcbiAgICAgICAgICAgIGFwcE1hbmFnZXIgPSByZWY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaHR0cCc6XG4gICAgICAgICAgICBodHRwU2VydmljZSA9IHJlZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgICAgICBtZXRhZGF0YVNlcnZpY2UgPSByZWY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbmF2aWdhdGlvblNlcnZpY2UnOlxuICAgICAgICAgICAgbmF2aWdhdGlvblNlcnZpY2UgPSByZWY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncm91dGVyJzpcbiAgICAgICAgICAgIHJvdXRlclNlcnZpY2UgPSByZWY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG9hc3Rlcic6XG4gICAgICAgICAgICB0b2FzdGVyU2VydmljZSA9ICByZWY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb0F1dGgnOlxuICAgICAgICAgICAgb2F1dGhTZXJ2aWNlID0gIHJlZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZWN1cml0eSc6XG4gICAgICAgICAgICBzZWN1cml0eVNlcnZpY2UgPSAgcmVmO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICAgICAgICBkaWFsb2dTZXJ2aWNlID0gcmVmO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYXRlQ2FsbGJhY2sgPSAodHlwZTogc3RyaW5nLCB2YXJpYWJsZTogYW55LCBkYXRhOiBhbnksIG9wdGlvbnM/OiBhbnksIHNraXBEZWZhdWx0Tm90aWZpY2F0aW9uPzogYm9vbGVhbikgPT4ge1xuXG4gICAgLypjaGVja2luZyBpZiBldmVudCBpcyBhdmFpbGFibGUgYW5kIHZhcmlhYmxlIGhhcyBldmVudCBwcm9wZXJ0eSBhbmQgdmFyaWFibGUgZXZlbnQgcHJvcGVydHkgYm91bmQgdG8gZnVuY3Rpb24qL1xuICAgIGNvbnN0IGV2ZW50VmFsdWVzID0gdmFyaWFibGVbdHlwZV0sXG4gICAgICAgIGNhbGxCYWNrU2NvcGUgPSB2YXJpYWJsZS5fY29udGV4dDtcbiAgICBsZXQgZXJyb3JWYXJpYWJsZTtcbiAgICAvKipcbiAgICAgKiBGb3IgZXJyb3IgZXZlbnQ6XG4gICAgICogdHJpZ2dlciBhcHAgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAgICAgKiBpZiBubyBldmVudCBpcyBhc3NpZ25lZCwgdHJpZ2dlciBkZWZhdWx0IGFwcE5vdGlmaWNhdGlvbiB2YXJpYWJsZS5cbiAgICAgKi9cbiAgIGlmICh0eXBlID09PSBWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlQuRVJST1IgJiYgIXNraXBEZWZhdWx0Tm90aWZpY2F0aW9uKSB7XG4gICAgICAgIGlmICghZXZlbnRWYWx1ZXMpIHtcbiAgICAgICAgICAgIC8qIGluIGNhc2Ugb2YgZXJyb3IsIGlmIG5vIGV2ZW50IGFzc2lnbmVkLCBoYW5kbGUgdGhyb3VnaCBkZWZhdWx0IG5vdGlmaWNhdGlvbiB2YXJpYWJsZSAqL1xuICAgICAgICAgICAgZXJyb3JWYXJpYWJsZSA9IGNhbGxCYWNrU2NvcGUuQWN0aW9uc1tWQVJJQUJMRV9DT05TVEFOVFMuREVGQVVMVF9WQVIuTk9USUZJQ0FUSU9OXTtcbiAgICAgICAgICAgIGlmIChlcnJvclZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGVycm9yVmFyaWFibGUuZ2V0TWVzc2FnZSgpIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGlzU3RyaW5nKGRhdGEpID8gZGF0YSA6ICdBbiBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBhcHAgbG9ncy4nO1xuICAgICAgICAgICAgICAgIGVycm9yVmFyaWFibGUuaW52b2tlKHsgJ21lc3NhZ2UnIDogZGF0YX0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgLy8gJHJvb3RTY29wZS4kZXZhbEFzeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gJHJvb3RTY29wZS4kZW1pdChcImludm9rZS1zZXJ2aWNlXCIsIFZBUklBQkxFX0NPTlNUQU5UUy5ERUZBVUxUX1ZBUi5OT1RJRklDQVRJT04sIHtzY29wZTogY2FsbEJhY2tTY29wZSwgbWVzc2FnZTogcmVzcG9uc2V9KTtcbiAgICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUT0RPOiBbVmliaHVdLCBjaGVjayB3aGV0aGVyIHRvIHN1cHBvcnQgbGVnYWN5IGV2ZW50IGNhbGxpbmcgbWVjaGFuaXNtIChpZGVhbGx5LCBpdCBzaG91bGQgaGF2ZSBiZWVuIG1pZ3JhdGVkKVxuICAgIGNvbnN0IGZuID0gJHBhcnNlRXZlbnQodmFyaWFibGVbdHlwZV0pO1xuICAgIGlmICh0eXBlID09PSBWQVJJQUJMRV9DT05TVEFOVFMuRVZFTlQuQkVGT1JFX1VQREFURSkge1xuICAgICAgICBpZiAodmFyaWFibGUuY2F0ZWdvcnkgPT09ICd3bS5MaXZlVmFyaWFibGUnICYmIHZhcmlhYmxlLm9wZXJhdGlvbiA9PT0gJ3JlYWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFyaWFibGUuX2NvbnRleHQsIHt2YXJpYWJsZTogdmFyaWFibGUsIGRhdGFGaWx0ZXI6IGRhdGEsIG9wdGlvbnM6IG9wdGlvbnN9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YXJpYWJsZS5fY29udGV4dCwge3ZhcmlhYmxlOiB2YXJpYWJsZSwgaW5wdXREYXRhOiBkYXRhLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZm4odmFyaWFibGUuX2NvbnRleHQsIHt2YXJpYWJsZTogdmFyaWFibGUsIGRhdGE6IGRhdGEsIG9wdGlvbnM6IG9wdGlvbnN9KTtcbiAgICB9XG59O1xuXG5jb25zdCB0cmlnZ2VyT25UaW1lb3V0ID0gKHN1Y2Nlc3MpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdHJpZ2dlckZuKHN1Y2Nlc3MpOyB9LCA1MDApO1xufTtcblxuY29uc3QgZG93bmxvYWRGaWxlZnJvbVJlc3BvbnNlID0gKHJlc3BvbnNlLCBoZWFkZXJzLCBzdWNjZXNzLCBlcnJvcikgPT4ge1xuICAgIC8vIGNoZWNrIGZvciBhIGZpbGVuYW1lXG4gICAgbGV0IGZpbGVuYW1lID0gJycsXG4gICAgICAgIGZpbGVuYW1lUmVnZXgsXG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGJsb2IsXG4gICAgICAgIFVSTCxcbiAgICAgICAgZG93bmxvYWRVcmwsXG4gICAgICAgIHBvcHVwO1xuICAgIGNvbnN0IGRpc3Bvc2l0aW9uID0gaGVhZGVycy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcbiAgICBpZiAoZGlzcG9zaXRpb24gJiYgZGlzcG9zaXRpb24uaW5kZXhPZignYXR0YWNobWVudCcpICE9PSAtMSkge1xuICAgICAgICBmaWxlbmFtZVJlZ2V4ID0gL2ZpbGVuYW1lW147PVxcbl0qPSgoWydcIl0pLio/XFwyfFteO1xcbl0qKS87XG4gICAgICAgIG1hdGNoZXMgPSBmaWxlbmFtZVJlZ2V4LmV4ZWMoZGlzcG9zaXRpb24pO1xuICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCAmJiBtYXRjaGVzWzFdKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IG1hdGNoZXNbMV0ucmVwbGFjZSgvWydcIl0vZywgJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHlwZSA9IGhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICBibG9iID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwgeyB0eXBlOiB0eXBlIH0pO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIElFIHdvcmthcm91bmQgZm9yIFwiSFRNTDcwMDc6IE9uZSBvciBtb3JlIGJsb2IgVVJMcyB3ZXJlIHJldm9rZWQgYnkgY2xvc2luZyB0aGUgYmxvYiBmb3Igd2hpY2ggdGhleSB3ZXJlIGNyZWF0ZWQuIFRoZXNlIFVSTHMgd2lsbCBubyBsb25nZXIgcmVzb2x2ZSBhcyB0aGUgZGF0YSBiYWNraW5nIHRoZSBVUkwgaGFzIGJlZW4gZnJlZWQuXCJcbiAgICAgICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihibG9iLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyaWdnZXJPblRpbWVvdXQoc3VjY2Vzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgVVJMICAgICAgICAgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG4gICAgICAgIGRvd25sb2FkVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgICAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIC8vIHVzZSBIVE1MNSBhW2Rvd25sb2FkXSBhdHRyaWJ1dGUgdG8gc3BlY2lmeSBmaWxlbmFtZVxuICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgIGxldCByZWFkZXI7XG4gICAgICAgICAgICAvLyBzYWZhcmkgZG9lc24ndCBzdXBwb3J0IHRoaXMgeWV0XG4gICAgICAgICAgICBpZiAodHlwZW9mIGEuZG93bmxvYWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSByZWFkZXIucmVzdWx0LnJlcGxhY2UoL15kYXRhOlteO10qOy8sICdkYXRhOmF0dGFjaG1lbnQvZmlsZTsnKTtcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAgPSB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSB0cmlnZ2VyT25UaW1lb3V0LmJpbmQodW5kZWZpbmVkLCBzdWNjZXNzKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhLmhyZWYgPSBkb3dubG9hZFVybDtcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlck9uVGltZW91dChzdWNjZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvcHVwID0gd2luZG93Lm9wZW4oZG93bmxvYWRVcmwsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIGlmICghcG9wdXApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGRvd25sb2FkVXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlck9uVGltZW91dChzdWNjZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBVUkwucmV2b2tlT2JqZWN0VVJMKGRvd25sb2FkVXJsKTsgfSwgMTAwKTsgLy8gY2xlYW51cFxuICAgIH1cbn07XG5cbmNvbnN0IGdldFNlcnZpY2UgPSAoc2VydmljZU5hbWUpID0+IHtcbiAgICBpZiAoIXNlcnZpY2VOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHNlcnZpY2VOYW1lO1xuICAgIC8vIFRvZG86IFNodWJoYW0sIHVuY29tbWVudCBiZWxvdyBjb2RlXG4gICAgLyogLyEqIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB3aGVyZSBuZy1hcHAgaXMgZGVmaW5lZCAqIS9cbiAgICAgbGV0IGFwcEVsID0gV00uZWxlbWVudCgnW2lkPW5nLWFwcF0nKSwgaW5qZWN0b3I7XG4gICAgIGlmIChhcHBFbCkge1xuICAgICB0cnkge1xuICAgICBpbmplY3RvciA9IGFwcEVsLmluamVjdG9yKCk7IC8vIGdldCB0aGUgYW5ndWxhciBpbmplY3RvclxuICAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgcmV0dXJuIGluamVjdG9yLmdldChzZXJ2aWNlTmFtZSk7IC8vIHJldHVybiB0aGUgc2VydmljZVxuICAgICB9XG4gICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgfVxuICAgICB9Ki9cbn07XG5cbi8qKlxuICogQ29uc3RydWN0IHRoZSBmb3JtIGRhdGEgcGFyYW1zIGZyb20gdGhlIFVSTFxuICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zXG4gKi9cbmNvbnN0IHNldFBhcmFtc0Zyb21VUkwgPSAocXVlcnlQYXJhbXMsIHBhcmFtcykgPT4ge1xuICAgIHF1ZXJ5UGFyYW1zID0gc3BsaXQocXVlcnlQYXJhbXMsICcmJyk7XG4gICAgZm9yRWFjaChxdWVyeVBhcmFtcywgZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgIHBhcmFtID0gc3BsaXQocGFyYW0sICc9Jyk7XG4gICAgICAgIHBhcmFtc1twYXJhbVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQoam9pbihzbGljZShwYXJhbSwgMSksICc9JykpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBbVG9kbzogU2h1YmhhbV0sIEltcGxlbWVudCBEb3dubG9hZCB0aHJvdWdoIEkgZnJhbWVcbiAqIFNpbXVsYXRlcyBmaWxlIGRvd25sb2FkIGluIGFuIGFwcCB0aHJvdWdoIGNyZWF0aW5nIGFuZCBzdWJtaXR0aW5nIGEgaGlkZGVuIGZvcm0gaW4gRE9NLlxuICogVGhlIGFjdGlvbiB3aWxsIGJlIGluaXRpYXRlZCB0aHJvdWdoIGEgU2VydmljZSBWYXJpYWJsZVxuICpcbiAqIFF1ZXJ5IFBhcmFtc1xuICogVGhlIHJlcXVlc3QgcGFyYW1zIGxpa2UgcXVlcnkgcGFyYW1zIGFyZSBhZGRlZCBhcyBoaWRkZW4gaW5wdXQgZWxlbWVudHNcbiAqXG4gKiBIZWFkZXIgUGFyYW1zXG4gKiBUaGUgaGVhZGVyIHBhcmFtcyBmb3IgYSByZXF1ZXN0IGFyZSBhbHNvIGFkZGVkIGFsb25nIHdpdGggaGlkZGVuIGlucHV0IGVsZW1lbnRzLlxuICogVGhpcyBpcyBkb25lIGFzIGhlYWRlcnMgY2FuIG5vdCBiZSBzZXQgZm9yIGEgZm9ybSBQT1NUIGNhbGwgZnJvbSBKYXZhU2NyaXB0XG4gKlxuICogRmluYWxseSwgcmVxdWVzdCBwYXJhbWV0ZXJzIGFyZSBzZW50IGFzIGZvbGxvd3M6XG4gKiBGb3IgYSBHRVQgcmVxdWVzdCwgdGhlIHJlcXVlc3QgZGF0YSBpcyBzZW50IGFsb25nIHdpdGggdGhlIHF1ZXJ5IHBhcmFtcy5cbiAqIEZvciBQT1NULCBpdCBpcyBzZW50IGFzIHJlcXVlc3QgYm9keS5cbiAqXG4gKiBAcGFyYW0gdmFyaWFibGU6IHRoZSB2YXJpYWJsZSB0aGF0IGlzIGNhbGxlZCBmcm9tIHVzZXIgYWN0aW9uXG4gKiBAcGFyYW0gcmVxdWVzdFBhcmFtcyBvYmplY3QgY29uc2lzdGluZyB0aGUgaW5mbyB0byBjb25zdHJ1Y3QgdGhlIFhIUiByZXF1ZXN0IGZvciB0aGUgc2VydmljZVxuICovXG5jb25zdCBkb3dubG9hZFRocm91Z2hJZnJhbWUgPSAocmVxdWVzdFBhcmFtcywgc3VjY2VzcywgZGF0YUJpbmRpbmcpID0+IHtcbiAgICAvLyBUb2RvOiBTSHViaGFtOiBVUkwgY29udGFpbnMgJy8vJyBpbiBiZXR3ZWVuIHdoaWNoIHNob3VsZCBiZSBoYW5kbGVkIGF0IHRoZSBVUkwgZm9ybWF0aW9uIG9ubHlcbiAgICBpZiAocmVxdWVzdFBhcmFtcy51cmxbMV0gPT09ICcvJyAmJiByZXF1ZXN0UGFyYW1zLnVybFsyXSA9PT0gJy8nKSB7XG4gICAgICAgIHJlcXVlc3RQYXJhbXMudXJsID0gcmVxdWVzdFBhcmFtcy51cmwuc2xpY2UoMCwgMSkgKyByZXF1ZXN0UGFyYW1zLnVybC5zbGljZSgyKTtcbiAgICB9XG4gICAgbGV0IGlGcmFtZUVsZW1lbnQsXG4gICAgICAgIGZvcm1FbCxcbiAgICAgICAgcGFyYW1FbGVtZW50LFxuICAgICAgICBxdWVyeVBhcmFtcyA9ICcnLFxuICAgICAgICBkYXRhO1xuICAgIGNvbnN0IElGUkFNRV9OQU1FICAgICA9ICdmaWxlRG93bmxvYWRJRnJhbWUnLFxuICAgICAgICBGT1JNX05BTUUgICAgICAgPSAnZmlsZURvd25sb2FkRm9ybScsXG4gICAgICAgIENPTlRFTlRfVFlQRSAgICA9ICdDb250ZW50LVR5cGUnLFxuICAgICAgICB1cmwgICAgICAgICAgICAgPSByZXF1ZXN0UGFyYW1zLnVybCxcbiAgICAgICAgZW5jVHlwZSA9IGdldChyZXF1ZXN0UGFyYW1zLmhlYWRlcnMsIENPTlRFTlRfVFlQRSksXG4gICAgICAgIHBhcmFtcyA9IHBpY2tCeShyZXF1ZXN0UGFyYW1zLmhlYWRlcnMsIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGtleSAhPT0gQ09OVEVOVF9UWVBFO1xuICAgICAgICB9KTtcbiAgICAvKiBUb2RvOiBzaHViaGFtIDogZGVmaW5lIGdldFNlcnZpY2UgbWV0aG9kXG4gICAgIFdTX0NPTlNUQU5UUyAgICA9IGdldFNlcnZpY2UoJ1dTX0NPTlNUQU5UUycpOyovXG5cbiAgICAvKiBsb29rIGZvciBleGlzdGluZyBpZnJhbWUuIElmIGV4aXN0cywgcmVtb3ZlIGl0IGZpcnN0ICovXG4gICAgaUZyYW1lRWxlbWVudCA9ICQoJyMnICsgSUZSQU1FX05BTUUpO1xuICAgIGlmIChpRnJhbWVFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICBpRnJhbWVFbGVtZW50LmZpcnN0KCkucmVtb3ZlKCk7XG4gICAgfVxuICAgIGlGcmFtZUVsZW1lbnQgPSAkKCc8aWZyYW1lIGlkPVwiJyArIElGUkFNRV9OQU1FICsgJ1wiIG5hbWU9XCInICsgSUZSQU1FX05BTUUgKyAnXCIgY2xhc3M9XCJuZy1oaWRlXCI+PC9pZnJhbWU+Jyk7XG4gICAgZm9ybUVsICAgICAgICA9ICQoJzxmb3JtIGlkPVwiJyArIEZPUk1fTkFNRSArICdcIiBuYW1lPVwiJyArIEZPUk1fTkFNRSArICdcIj48L2Zvcm0+Jyk7XG5cbiAgICAvKiBwcm9jZXNzIHF1ZXJ5IHBhcmFtcywgYXBwZW5kIGEgaGlkZGVuIGlucHV0IGVsZW1lbnQgaW4gdGhlIGZvcm0gYWdhaW5zdCBlYWNoIHBhcmFtICovXG4gICAgcXVlcnlQYXJhbXMgKz0gdXJsLmluZGV4T2YoJz8nKSAhPT0gLTEgPyB1cmwuc3Vic3RyaW5nKHVybC5pbmRleE9mKCc/JykgKyAxKSA6ICcnO1xuICAgIHF1ZXJ5UGFyYW1zICs9IGVuY1R5cGUgPT09IFdTX0NPTlNUQU5UUy5DT05URU5UX1RZUEVTLkZPUk1fVVJMX0VOQ09ERUQgPyAoKHF1ZXJ5UGFyYW1zID8gJyYnIDogJycpICsgcmVxdWVzdFBhcmFtcy5kYXRhUGFyYW1zKSA6ICcnO1xuXG4gICAgZm9ybUVsLmF0dHIoe1xuICAgICAgICAndGFyZ2V0JyAgOiBpRnJhbWVFbGVtZW50LmF0dHIoJ25hbWUnKSxcbiAgICAgICAgJ2FjdGlvbicgIDogdXJsLFxuICAgICAgICAnbWV0aG9kJyAgOiByZXF1ZXN0UGFyYW1zLm1ldGhvZCxcbiAgICAgICAgJ2VuY3R5cGUnOiAhKGlzRW1wdHkocmVxdWVzdFBhcmFtcy5kYXRhKSAmJiBpc0VtcHR5KHF1ZXJ5UGFyYW1zKSkgPyBlbmNUeXBlIDogV1NfQ09OU1RBTlRTLkNPTlRFTlRfVFlQRVMuTVVMVElQQVJUX0ZPUk1EQVRBXG4gICAgfSk7XG5cbiAgICAvLyBGb3IgTm9uIGJvZHkgbWV0aG9kcyBvbmx5LCBzZXQgdGhlIGlucHV0IGZpZWxkcyBmcm9tIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICBpZiAoaW5jbHVkZXMoV1NfQ09OU1RBTlRTLk5PTl9CT0RZX0hUVFBfTUVUSE9EUywgdG9VcHBlcihyZXF1ZXN0UGFyYW1zLm1ldGhvZCkpKSB7XG4gICAgICAgIHNldFBhcmFtc0Zyb21VUkwocXVlcnlQYXJhbXMsIHBhcmFtcyk7IC8vIFNldCBwYXJhbXMgZm9yIFVSTCBxdWVyeSBwYXJhbXNcbiAgICB9XG4gICAgaWYgKCFpc0VtcHR5KHJlcXVlc3RQYXJhbXMuZGF0YSkpIHtcbiAgICAgICAgc2V0UGFyYW1zRnJvbVVSTChyZXF1ZXN0UGFyYW1zLmRhdGEsIHBhcmFtcyk7Ly8gU2V0IHBhcmFtcyBmb3IgcmVxdWVzdCBkYXRhXG4gICAgICAgIGRhdGEgPSBwYXJhbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IGlzRW1wdHkoZGF0YUJpbmRpbmcpID8gcGFyYW1zIDogZGF0YUJpbmRpbmc7XG4gICAgfVxuICAgIGZvckVhY2goZGF0YSwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICAgIHBhcmFtRWxlbWVudCA9ICQoJzxpbnB1dCB0eXBlPVwiaGlkZGVuXCI+Jyk7XG4gICAgICAgIHBhcmFtRWxlbWVudC5hdHRyKHtcbiAgICAgICAgICAgICduYW1lJyAgOiBrZXksXG4gICAgICAgICAgICAndmFsdWUnIDogdmFsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtRWwuYXBwZW5kKHBhcmFtRWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICAvKiBhcHBlbmQgZm9ybSB0byBpRnJhbWUgYW5kIGlGcmFtZSB0byB0aGUgZG9jdW1lbnQgYW5kIHN1Ym1pdCB0aGUgZm9ybSAqL1xuICAgICQoJ2JvZHknKS5hcHBlbmQoaUZyYW1lRWxlbWVudCk7XG5cbiAgICAvLyB0aW1lb3V0IGZvciBJRSAxMCwgaWZyYW1lRWxlbWVudC5jb250ZW50cygpIGlzIGVtcHR5IGluIElFIDEwIHdpdGhvdXQgdGltZW91dFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpRnJhbWVFbGVtZW50LmNvbnRlbnRzKCkuZmluZCgnYm9keScpLmFwcGVuZChmb3JtRWwpO1xuICAgICAgICBmb3JtRWwuc3VibWl0KCk7XG4gICAgICAgIHRyaWdnZXJGbihzdWNjZXNzKTtcbiAgICB9LCAxMDApO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbiBYSFIgY2FsbCBhZ2FpbnN0IHRoZSBjb25maWdcbiAqIHRoZSByZXNwb25zZSBpcyBjb252ZXJ0ZWQgaW50byBhIGJsb2IgdXJsLCB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGUgc3JjIGF0dHJpYnV0ZSBvZiBhbiBhbmNob3IgZWxlbWVudCB3aXRoIGRvd25sb2FkPXRydWVcbiAqIGEgY2xpY2sgaXMgc2ltdWxhdGVkIG9uIHRoZSBhbmNob3IgdG8gZG93bmxvYWQgdGhlIGZpbGVcbiAqIEBwYXJhbSBjb25maWdcbiAqIEBwYXJhbSBzdWNjZXNzXG4gKiBAcGFyYW0gZXJyb3JcbiAqL1xuY29uc3QgZG93bmxvYWRUaHJvdWdoQW5jaG9yID0gKGNvbmZpZywgc3VjY2VzcywgZXJyb3IpID0+IHtcbiAgICBjb25zdCB1cmwgICAgID0gY29uZmlnLnVybCxcbiAgICAgICAgbWV0aG9kICA9IGNvbmZpZy5tZXRob2QsXG4gICAgICAgIGRhdGEgICAgPSBjb25maWcuZGF0YVBhcmFtcyB8fCBjb25maWcuZGF0YSxcbiAgICAgICAgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBoZWFkZXJzWydDb250ZW50LVR5cGUnXSB8fCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcblxuICAgIC8vIFRvZG86IFJlcGxhY2UgaHR0cCB3aXRoIGdldFNlcnZpY2VcbiAgICBodHRwU2VydmljZS5zZW5kKHtcbiAgICAgICAgJ3RhcmdldCcgOiAnV2ViU2VydmljZScsXG4gICAgICAgICdhY3Rpb24nIDogJ2ludm9rZVJ1bnRpbWVSZXN0Q2FsbCcsXG4gICAgICAgICdtZXRob2QnIDogbWV0aG9kLFxuICAgICAgICAndXJsJyAgICA6IHVybCxcbiAgICAgICAgJ2hlYWRlcnMnOiBoZWFkZXJzLFxuICAgICAgICAnZGF0YScgICA6IGRhdGEsXG4gICAgICAgICdyZXNwb25zZVR5cGUnOiAnYXJyYXlidWZmZXInXG4gICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBkb3dubG9hZEZpbGVmcm9tUmVzcG9uc2UocmVzcG9uc2UuYm9keSwgcmVzcG9uc2UuaGVhZGVycywgc3VjY2VzcywgZXJyb3IpO1xuICAgICAgICB9LCA5MDApO1xuICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJpZ2dlckZuKGVycm9yLCBlcnIpO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBhcHBlbmRzIGEgdGltZXN0YW1wIG9uIHRoZSBwYXNzZWQgZmlsZW5hbWUgdG8gcHJldmVudCBjYWNoaW5nXG4gKiByZXR1cm5zIHRoZSBtb2RpZmllZCBmaWxlIG5hbWVcbiAqIEBwYXJhbSBmaWxlTmFtZVxuICogQHBhcmFtIGV4cG9ydEZvcm1hdFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgZ2V0TW9kaWZpZWRGaWxlTmFtZSA9IChmaWxlTmFtZSwgZXhwb3J0Rm9ybWF0KSA9PiB7XG4gICAgbGV0IGZpbGVFeHRlbnNpb247XG4gICAgY29uc3QgY3VycmVudFRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoZXhwb3J0Rm9ybWF0KSB7XG4gICAgICAgIGZpbGVFeHRlbnNpb24gPSBleHBvcnRUeXBlc01hcFtleHBvcnRGb3JtYXRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVFeHRlbnNpb24gPSAnLicgKyBsYXN0KHNwbGl0KGZpbGVOYW1lLCAnLicpKTtcbiAgICAgICAgZmlsZU5hbWUgPSByZXBsYWNlKGZpbGVOYW1lLCBmaWxlRXh0ZW5zaW9uLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBmaWxlTmFtZSArICdfJyArIGN1cnJlbnRUaW1lc3RhbXAgKyBmaWxlRXh0ZW5zaW9uO1xufTtcblxuY29uc3QgZ2V0Q29va2llQnlOYW1lID0gKG5hbWUpID0+IHtcbiAgICAvLyBUb2RvOiBTaHViaGFtIEltcGxlbWVudCBjb29raWUgbmF0aXZlIGpzXG4gICAgcmV0dXJuICdjb29raWUnO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvb2tpZVZhbHVlIGlmIHhzcmYgaXMgZW5hYmxlZC5cbiAqIEluIGRldmljZSwgeHNyZiBjb29raWUgaXMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZS5cbiAqIEByZXR1cm5zIHhzcmYgY29va2llIHZhbHVlXG4gKi9cbmNvbnN0IGlzWHNyZkVuYWJsZWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvYmplY3Qgbm9kZSBmb3IgYSBiaW5kIG9iamVjdCwgd2hlcmUgdGhlIHZhbHVlIGhhcyB0byBiZSB1cGRhdGVkXG4gKiBvYmoudGFyZ2V0ID0gXCJhXCJcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSByb290XG4gKiBAcGFyYW0gdmFyaWFibGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5jb25zdCBnZXRUYXJnZXRPYmogPSAob2JqLCByb290LCB2YXJpYWJsZSkgPT4ge1xuICAgIC8qXG4gICAgICogaWYgdGhlIHRhcmdldCBrZXkgaXMgaW4gdGhlIGZvcm0gYXMgXCJbJ215LnBhcmFtJ11cIlxuICAgICAqIGtlZXAgdGhlIHRhcmdldCBrZXkgYXMgXCJteS5wYXJhbVwiIGFuZCBkbyBub3Qgc3BsaXQgZnVydGhlclxuICAgICAqIHRoaXMgaXMgZG9uZSwgc28gdGhhdCwgdGhlIGNvbXB1dGVkIHZhbHVlIGFnYWluc3QgdGhpcyBiaW5kaW5nIGlzIGFzc2lnbmVkIGFzXG4gICAgICogICAgICB7XCJteS5wYXJhbVwiOiBcInZhbHVlXCJ9XG4gICAgICogYW5kIG5vdCBhc1xuICAgICAqICAgICAge1xuICAgICAqICAgICAgICAgIFwibXlcIjoge1xuICAgICAqICAgICAgICAgICAgICBcInBhcmFtXCI6IFwidmFsdWVcIlxuICAgICAqICAgICAgICAgIH1cbiAgICAgKiAgICAgIH1cbiAgICAgKi9cbiAgICBsZXQgdGFyZ2V0ID0gb2JqLnRhcmdldCxcbiAgICAgICAgdGFyZ2V0T2JqO1xuICAgIGNvbnN0IHJvb3ROb2RlID0gdmFyaWFibGVbcm9vdF07XG4gICAgaWYgKERPVF9FWFBSX1JFWC50ZXN0KHRhcmdldCkpIHtcbiAgICAgICAgdGFyZ2V0T2JqID0gcm9vdE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnN1YnN0cigwLCB0YXJnZXQubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgICAgIGlmIChvYmoudGFyZ2V0ID09PSByb290KSB7XG4gICAgICAgICAgICB0YXJnZXRPYmogPSB2YXJpYWJsZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHRhcmdldE9iaiA9IGZpbmRWYWx1ZU9mKHJvb3ROb2RlLCB0YXJnZXQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0T2JqID0gcm9vdE5vZGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldE9iajtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUga2V5IGZvciB0aGUgdGFyZ2V0IG9iamVjdFxuICogdGhlIGNvbXB1dGVkIHZhbHVlIHdpbGwgYmUgdXBkYXRlZCBhZ2FpbnN0IHRoaXMga2V5IGluIHRoZSB0YXJnZXRPYmplY3QoY29tcHV0ZWQgYnkgZ2V0VGFyZ2V0T2JqKCkpXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gcmVnZXhcbiAqIEByZXR1cm5zIHsqfVxuICovXG5jb25zdCBnZXRUYXJnZXROb2RlS2V5ID0gKHRhcmdldCkgPT4ge1xuICAgIC8qXG4gICAgICogaWYgdGhlIHRhcmdldCBrZXkgaXMgaW4gdGhlIGZvcm0gYXMgXCJbJ215LnBhcmFtJ11cIlxuICAgICAqIGtlZXAgdGhlIHRhcmdldCBrZXkgYXMgXCJteS5wYXJhbVwiIGFuZCBkbyBub3Qgc3BsaXQgZnVydGhlclxuICAgICAqIHRoaXMgaXMgZG9uZSwgc28gdGhhdCwgdGhlIGNvbXB1dGVkIHZhbHVlIGFnYWluc3QgdGhpcyBiaW5kaW5nIGlzIGFzc2lnbmVkIGFzXG4gICAgICogICAgICB7XCJteS5wYXJhbVwiOiBcInZhbHVlXCJ9XG4gICAgICogYW5kIG5vdCBhc1xuICAgICAqICAgICAge1xuICAgICAqICAgICAgICAgIFwibXlcIjoge1xuICAgICAqICAgICAgICAgICAgICBcInBhcmFtXCI6IFwidmFsdWVcIlxuICAgICAqICAgICAgICAgIH1cbiAgICAgKiAgICAgIH1cbiAgICAgKi9cbiAgICBsZXQgdGFyZ2V0Tm9kZUtleTtcbiAgICBpZiAoRE9UX0VYUFJfUkVYLnRlc3QodGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXROb2RlS2V5ID0gdGFyZ2V0LnJlcGxhY2UoL14oXFxbW1wiJ10pfChbXCInXVxcXSkkL2csICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXROb2RlS2V5ID0gdGFyZ2V0LnNwbGl0KCcuJykucG9wKCk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXROb2RlS2V5O1xufTtcblxuY29uc3Qgc2V0VmFsdWVUb05vZGUgPSAodGFyZ2V0LCBvYmosIHJvb3QsIHZhcmlhYmxlLCB2YWx1ZSwgbm9VcGRhdGU/KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZUtleSA9IGdldFRhcmdldE5vZGVLZXkodGFyZ2V0KSxcbiAgICAgICAgdGFyZ2V0T2JqID0gZ2V0VGFyZ2V0T2JqKG9iaiwgcm9vdCwgdmFyaWFibGUpO1xuICAgIHZhbHVlID0gIWlzVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogb2JqLnZhbHVlO1xuICAgIC8qIHNhbml0eSBjaGVjaywgdXNlciBjYW4gYmluZCBwYXJlbnQgbm9kZXMgdG8gbm9uLW9iamVjdCB2YWx1ZXMsIHNvIGNoaWxkIG5vZGUgYmluZGluZ3MgbWF5IGZhaWwgKi9cbiAgICBpZiAodGFyZ2V0T2JqKSB7XG4gICAgICAgIHRhcmdldE9ialt0YXJnZXROb2RlS2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICBwcm9jZXNzVmFyaWFibGVQb3N0QmluZFVwZGF0ZSh0YXJnZXROb2RlS2V5LCB2YWx1ZSwgb2JqLnR5cGUsIHZhcmlhYmxlLCBub1VwZGF0ZSk7XG59O1xuXG4vKipcbiAqIFRoZSBtb2RlbCBpbnRlcm5hbEJvdW5kTm9kZU1hcCBzdG9yZXMgdGhlIHJlZmVyZW5jZSB0byBsYXRlc3QgY29tcHV0ZWQgdmFsdWVzIGFnYWluc3QgaW50ZXJuYWwobmVzdGVkKSBib3VuZCBub2Rlc1xuICogVGhpcyBpcyBkb25lIHNvIHRoYXQgdGhlIGludGVybmFsIG5vZGUncyBjb21wdXRlZCB2YWx1ZSBpcyBub3QgbG9zdCwgb25jZSBpdHMgcGFyZW50IG5vZGUncyB2YWx1ZSBpcyBjb21wdXRlZCBhdCBhIGxhdGVyIHBvaW50XG4gKiBFLmcuXG4gKiBWYXJpYWJsZS5lbXBsb3llZVZhciBoYXMgZm9sbG93aW5nIGJpbmRpbmdzXG4gKiBcImRhdGFCaW5kaW5nXCI6IFtcbiAgICAge1xuICAgICAgICAgXCJ0YXJnZXRcIjogXCJkZXBhcnRtZW50LmJ1ZGdldFwiLFxuICAgICAgICAgXCJ2YWx1ZVwiOiBcImJpbmQ6VmFyaWFibGVzLmJ1ZGdldFZhci5kYXRhU2V0XCJcbiAgICAgfSxcbiAgICAge1xuICAgICAgICAgXCJ0YXJnZXRcIjogXCJkZXBhcnRtZW50XCIsXG4gICAgICAgICBcInZhbHVlXCI6IFwiYmluZDpWYXJpYWJsZXMuZGVwYXJ0bWVudFZhci5kYXRhU2V0XCJcbiAgICAgfVxuIF1cbiAqIFdoZW4gZGVwYXJ0bWVudC5idWRnZXQgaXMgY29tcHV0ZWQsIGVtcGxveWVlVmFyLmRhdGFTZXQgPSB7XG4gKiAgXCJkZXBhcnRtZW50XCI6IHtcbiAqICAgICAgXCJidWRnZXRcIjoge1wicTFcIjogMTExMX1cbiAqICB9XG4gKiB9XG4gKlxuICogV2hlbiBkZXBhcnRtZW50IGlzIGNvbXB1dGVkXG4gKiAgXCJkZXBhcnRtZW50XCI6IHtcbiAqICAgICAgXCJuYW1lXCI6IFwiSFJcIixcbiAqICAgICAgXCJsb2NhdGlvblwiOiBcIkh5ZGVyYWJhZFwiXG4gKiAgfVxuICogVGhlIGJ1ZGdldCBmaWVsZCAoY29tcHV0ZWQgZWFybGllcikgaXMgTE9TVC5cbiAqXG4gKiBUbyBhdm9pZCB0aGlzLCB0aGUgbGF0ZXN0IHZhbHVlcyBhZ2FpbnN0IGludGVybmFsIG5vZGVzIChpbiB0aGlzIGNhc2UgZGVwYXJ0bWVudC5idWRnZXQpIGFyZSBzdG9yZWQgaW4gYSBtYXBcbiAqIFRoZXNlIHZhbHVlcyBhcmUgYXNzaWduZWQgYmFjayB0byBpbnRlcm5hbCBmaWVsZHMgaWYgdGhlIHBhcmVudCBpcyBjb21wdXRlZCAoaW4gdGhpcyBjYXNlIGRlcGFydG1lbnQpXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gcm9vdFxuICogQHBhcmFtIHZhcmlhYmxlXG4gKi9cbmNvbnN0IHVwZGF0ZUludGVybmFsTm9kZXMgPSAodGFyZ2V0LCByb290LCB2YXJpYWJsZSkgPT4ge1xuICAgIGNvbnN0IGJvdW5kSW50ZXJuYWxOb2RlcyA9IGtleXMoZ2V0KGludGVybmFsQm91bmROb2RlTWFwLmdldCh2YXJpYWJsZSksIFt2YXJpYWJsZS5uYW1lLCByb290XSkpLFxuICAgICAgICB0YXJnZXROb2RlS2V5ID0gZ2V0VGFyZ2V0Tm9kZUtleSh0YXJnZXQpO1xuICAgIGxldCBpbnRlcm5hbE5vZGVzO1xuICAgIGZ1bmN0aW9uIGZpbmRJbnRlcm5hbE5vZGVCb3VuZCgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcihib3VuZEludGVybmFsTm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAvLyB0aGUgbGF0ZXIgY29uZGl0aW9uIGluIGNoZWNrICh0YXJnZXROb2RlS2V5ID09PSByb290IHx8IHRhcmdldE5vZGVLZXkgPT09ICdkYXRhQmluZGluZycpIGlzIHNwZWNpZmljYWxseSBmb3IgbGl2ZSB2YXJpYWJsZSBvZiBpbnNlcnQvdXBkYXRlIHR5cGVzXG4gICAgICAgICAgICByZXR1cm4gKG5vZGUgIT09IHRhcmdldE5vZGVLZXkgJiYgaW5jbHVkZXMobm9kZSwgdGFyZ2V0Tm9kZUtleSkpIHx8ICgodGFyZ2V0Tm9kZUtleSA9PT0gcm9vdCB8fCB0YXJnZXROb2RlS2V5ID09PSAnZGF0YUJpbmRpbmcnKSAmJiBub2RlICE9PSB0YXJnZXROb2RlS2V5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludGVybmFsTm9kZXMgPSBmaW5kSW50ZXJuYWxOb2RlQm91bmQoKTtcbiAgICBpZiAoKGludGVybmFsTm9kZXMubGVuZ3RoKSkge1xuICAgICAgICBmb3JFYWNoKGludGVybmFsTm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZVRvTm9kZShub2RlLCB7dGFyZ2V0OiBub2RlfSwgcm9vdCwgdmFyaWFibGUsIGdldChpbnRlcm5hbEJvdW5kTm9kZU1hcC5nZXQodmFyaWFibGUpLCBbdmFyaWFibGUubmFtZSwgcm9vdCwgbm9kZV0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBOZXcgSW1wbGVtZW50YXRpb24gKERhdGFCaW5kaW5nIEZsYXQgU3RydWN0dXJlIHdpdGggeC1wYXRoIHRhcmdldHMpXG4gKiBwcm9jZXNzZXMgYSBkYXRhQmluZGluZyBvYmplY3QsIGlmIGJvdW5kIHRvIGV4cHJlc3Npb24sIHdhdGNoZXMgb3ZlciBpdCwgZWxzZSBhc3NpZ25zIHZhbHVlIHRvIHRoZSBleHByZXNzaW9uXG4gKiBAcGFyYW0gb2JqIGRhdGFCaW5kaW5nIG9iamVjdFxuICogQHBhcmFtIHNjb3BlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZVxuICogQHBhcmFtIHJvb3Qgcm9vdCBub2RlIHN0cmluZyAoZGF0YUJpbmRpbmcgZm9yIGFsbCB2YXJpYWJsZXMsIGRhdGFTZXQgZm9yIHN0YXRpYyB2YXJpYWJsZSlcbiAqIEBwYXJhbSB2YXJpYWJsZSB2YXJpYWJsZSBvYmplY3RcbiAqL1xuY29uc3QgcHJvY2Vzc0JpbmRPYmplY3QgPSAob2JqLCBzY29wZSwgcm9vdCwgdmFyaWFibGUpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBvYmoudGFyZ2V0LFxuICAgICAgICB0YXJnZXRPYmogPSBnZXRUYXJnZXRPYmoob2JqLCByb290LCB2YXJpYWJsZSksXG4gICAgICAgIHRhcmdldE5vZGVLZXkgPSBnZXRUYXJnZXROb2RlS2V5KHRhcmdldCksXG4gICAgICAgIHJ1bk1vZGUgPSB0cnVlO1xuICAgIGNvbnN0IGRlc3Ryb3lGbiA9IHNjb3BlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyID8gc2NvcGUucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIuYmluZChzY29wZSkgOiBub29wO1xuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgob2JqLnZhbHVlLCAnYmluZDonKSkge1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9IChuZXdWYWwsIG9sZFZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKChuZXdWYWwgPT09IG9sZFZhbCAmJiBpc1VuZGVmaW5lZChuZXdWYWwpKSB8fCAoaXNVbmRlZmluZWQobmV3VmFsKSAmJiAoIWlzVW5kZWZpbmVkKG9sZFZhbCkgfHwgIWlzVW5kZWZpbmVkKHRhcmdldE9ialt0YXJnZXROb2RlS2V5XSkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNraXAgY2xvbmluZyBmb3IgYmxvYiBjb2x1bW5cbiAgICAgICAgICAgIGlmICghaW5jbHVkZXMoWydibG9iJywgJ2ZpbGUnXSwgb2JqLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gZ2V0Q2xvbmVkT2JqZWN0KG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRWYWx1ZVRvTm9kZSh0YXJnZXQsIG9iaiwgcm9vdCwgdmFyaWFibGUsIG5ld1ZhbCk7IC8vIGNsb25pbmcgbmV3VmFsIHRvIGtlZXAgdGhlIHNvdXJjZSBjbGVhblxuXG4gICAgICAgICAgICBpZiAocnVuTW9kZSkge1xuICAgICAgICAgICAgICAgIC8qc2V0IHRoZSBpbnRlcm5hbCBib3VuZCBub2RlIG1hcCB3aXRoIHRoZSBsYXRlc3QgdXBkYXRlZCB2YWx1ZSovXG4gICAgICAgICAgICAgICAgaWYgKCFpbnRlcm5hbEJvdW5kTm9kZU1hcC5oYXModmFyaWFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsQm91bmROb2RlTWFwLnNldCh2YXJpYWJsZSwge30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXQoaW50ZXJuYWxCb3VuZE5vZGVNYXAuZ2V0KHZhcmlhYmxlKSwgW3ZhcmlhYmxlLm5hbWUsIHJvb3QsIHRhcmdldF0sIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgLyp1cGRhdGUgdGhlIGludGVybmFsIG5vZGVzIGFmdGVyIGludGVybmFsIG5vZGUgbWFwIGlzIHNldCovXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW50ZXJuYWxOb2Rlcyh0YXJnZXQsIHJvb3QsIHZhcmlhYmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGRlc3Ryb3lGbigkd2F0Y2gob2JqLnZhbHVlLnJlcGxhY2UoJ2JpbmQ6JywgJycpLCBzY29wZSwge30sIGxpc3RlbmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAoKSA9PiB2YXJpYWJsZS5pc011dGVkKSk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQob2JqLnZhbHVlKSkge1xuICAgICAgICBzZXRWYWx1ZVRvTm9kZSh0YXJnZXQsIG9iaiwgcm9vdCwgdmFyaWFibGUsIG9iai52YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChydW5Nb2RlICYmIHJvb3QgIT09IHRhcmdldE5vZGVLZXkpIHtcbiAgICAgICAgICAgIGlmICghaW50ZXJuYWxCb3VuZE5vZGVNYXAuaGFzKHZhcmlhYmxlKSkge1xuICAgICAgICAgICAgICAgIGludGVybmFsQm91bmROb2RlTWFwLnNldCh2YXJpYWJsZSwge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0KGludGVybmFsQm91bmROb2RlTWFwLmdldCh2YXJpYWJsZSksIFt2YXJpYWJsZS5uYW1lLCByb290LCB0YXJnZXRdLCBvYmoudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUFVCTElDICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8vXG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgd2F0Y2hlcnMgZm9yIGJpbmRpbmcgZXhwcmVzc2lvbnMgY29uZmlndXJlZCBpbiB0aGUgdmFyaWFibGVcbiAqIEBwYXJhbSB2YXJpYWJsZVxuICogQHBhcmFtIGNvbnRleHQsIHNjb3BlIGNvbnRleHQgaW4gd2hpY2ggdGhlIHZhcmlhYmxlIGV4aXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGJpbmRTb3VyY2UsICB0aGUgZmllbGQgaW4gdmFyaWFibGUgd2hlcmUgdGhlIGRhdGFiaW5kaW5ncyBhcmUgY29uZmlndXJlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbW9zdCB2YXJpYWJsZXMsIGl0IHdpbGwgYmUgJ2RhdGFCaW5kaW5nJywgaGVuY2UgZGVmYXVsdCBmYWxsYmFjayBpcyB0byAnZGF0YUJpbmRpbmcnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzb21lIGl0IGNhbiBiZSAnZGF0YVNldCcgYW5kIGhlbmNlIHdpbGwgYmUgcGFzc2VkIGFzIHBhcmFtXG4gKiBAcGFyYW0ge3N0cmluZ30gYmluZFRhcmdldCwgdGhlIG9iamVjdCBmaWVsZCBpbiB2YXJpYWJsZSB3aGVyZSB0aGUgY29tcHV0ZWQgYmluZGluZ3Mgd2lsbCBiZSBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NCaW5kaW5nID0gKHZhcmlhYmxlOiBhbnksIGNvbnRleHQ6IGFueSwgYmluZFNvdXJjZT86IHN0cmluZywgYmluZFRhcmdldD86IHN0cmluZykgPT4ge1xuICAgIGJpbmRTb3VyY2UgPSBiaW5kU291cmNlIHx8ICdkYXRhQmluZGluZyc7XG4gICAgYmluZFRhcmdldCA9IGJpbmRUYXJnZXQgfHwgJ2RhdGFCaW5kaW5nJztcblxuICAgIGNvbnN0IGJpbmRNYXAgPSB2YXJpYWJsZVtiaW5kU291cmNlXTtcbiAgICB2YXJpYWJsZVtiaW5kU291cmNlXSA9IHt9O1xuICAgIHZhcmlhYmxlWydfYmluZCcgKyBiaW5kU291cmNlXSA9IGJpbmRNYXA7XG4gICAgaWYgKCFiaW5kTWFwIHx8ICFpc0FycmF5KGJpbmRNYXApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYmluZE1hcC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIC8qIGZvciBzdGF0aWMgdmFyaWFibGUgY2hhbmdlIHRoZSBiaW5kaW5nIHdpdGggdGFyZ2V0ICdkYXRhQmluZGluZycgdG8gJ2RhdGFTZXQnLCBhcyB0aGUgcmVzdWx0cyBoYXZlIHRvIHJlZmxlY3QgZGlyZWN0bHkgaW4gdGhlIGRhdGFTZXQgKi9cbiAgICAgICAgaWYgKHZhcmlhYmxlLmNhdGVnb3J5ID09PSAnd20uVmFyaWFibGUnICYmIG5vZGUudGFyZ2V0ID09PSAnZGF0YUJpbmRpbmcnKSB7XG4gICAgICAgICAgICBub2RlLnRhcmdldCA9ICdkYXRhU2V0JztcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQmluZE9iamVjdChub2RlLCBjb250ZXh0LCBiaW5kVGFyZ2V0LCB2YXJpYWJsZSk7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIERvd25sb2FkcyBhIGZpbGUgaW4gdGhlIGJyb3dzZXIuXG4gKiBUd28gbWV0aG9kcyB0byBkbyBzbywgbmFtZWx5OlxuICogMS4gZG93bmxvYWRUaHJvdWdoQW5jaG9yLCBjYWxsZWQgaWZcbiAqICAgICAgLSBpZiBhIGhlYWRlciBpcyB0byBiZSBwYXNzZWRcbiAqICAgICAgT1JcbiAqICAgICAgLSBpZiBzZWN1cml0eSBpcyBPTiBhbmQgWFNSRiB0b2tlbiBpcyB0byBiZSBzZW50IGFzIHdlbGxcbiAqIE5PVEU6IFRoaXMgbWV0aG9kIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgdmVyc2lvbiAxMC4wIGFuZCBiZWxvd1xuICpcbiAqIDIuIGRvd25sb2FkVGhyb3VnaElmcmFtZVxuICogICAgICAtIHRoaXMgbWV0aG9kIHdvcmtzIGFjcm9zcyBicm93c2VycyBhbmQgdXNlcyBhbiBpZnJhbWUgdG8gZG93bmxhZCB0aGUgZmlsZS5cbiAqIEBwYXJhbSByZXF1ZXN0UGFyYW1zIHJlcXVlc3QgcGFyYW1zIG9iamVjdFxuICogQHBhcmFtIGZpbGVOYW1lIHJlcHJlc2VudHMgdGhlIGZpbGUgbmFtZVxuICogQHBhcmFtIGV4cG9ydEZvcm1hdCBkb3dubG9hZGVkIGZpbGUgZm9ybWF0XG4gKiBAcGFyYW0gc3VjY2VzcyBzdWNjZXNzIGNhbGxiYWNrXG4gKiBAcGFyYW0gZXJyb3IgZXJyb3IgY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGNvbnN0IHNpbXVsYXRlRmlsZURvd25sb2FkID0gKHJlcXVlc3RQYXJhbXMsIGZpbGVOYW1lLCBleHBvcnRGb3JtYXQsIHN1Y2Nlc3MsIGVycm9yLCBkYXRhQmluZGluZykgPT4ge1xuICAgIC8qc3VjY2VzcyBhbmQgZXJyb3IgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCBpbmNhc2Ugb2YgZG93bmxvYWRUaHJvdWdoQW5jaG9yXG4gICAgIER1ZSB0byB0ZWNobmljYWwgbGltaXRhdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgaW5jYXNlIG9mIGlmcmFtZSovXG4gICAgaWYgKCFpc0VtcHR5KHJlcXVlc3RQYXJhbXMuaGVhZGVycykgfHwgaXNYc3JmRW5hYmxlZCgpKSB7XG4gICAgICAgIGRvd25sb2FkVGhyb3VnaEFuY2hvcihyZXF1ZXN0UGFyYW1zLCBzdWNjZXNzLCBlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZG93bmxvYWRUaHJvdWdoSWZyYW1lKHJlcXVlc3RQYXJhbXMsIHN1Y2Nlc3MsIGRhdGFCaW5kaW5nKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIHNldHMgdGhlIHZhbHVlIGFnYWluc3QgcGFzc2VkIGtleSBvbiB0aGUgXCJpbnB1dEZpZWxkc1wiIG9iamVjdCBpbiB0aGUgdmFyaWFibGVcbiAqIEBwYXJhbSB0YXJnZXRPYmo6IHRoZSBvYmplY3QgaW4gd2hpY2ggdGhlIGtleSwgdmFsdWUgaXMgdG8gYmUgc2V0XG4gKiBAcGFyYW0gdmFyaWFibGVcbiAqIEBwYXJhbSBrZXk6IGNhbiBiZTpcbiAqICAtIGEgc3RyaW5nIGUuZy4gXCJ1c2VybmFtZVwiXG4gKiAgLSBhbiBvYmplY3QsIGUuZy4ge1widXNlcm5hbWVcIjogXCJqb2huXCIsIFwic3NuXCI6IFwiMTExMTFcIn1cbiAqIEBwYXJhbSB2YWxcbiAqIC0gaWYga2V5IGlzIHN0cmluZywgdGhlIHZhbHVlIGFnYWluc3QgaXQgKGZvciB0aGF0IGRhdGEgdHlwZSlcbiAqIC0gaWYga2V5IGlzIG9iamVjdCwgbm90IHJlcXVpcmVkXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGNvbnN0IHNldElucHV0ID0gKHRhcmdldE9iajogYW55LCBrZXk6IGFueSwgdmFsOiBhbnksIG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIHRhcmdldE9iaiA9IHRhcmdldE9iaiB8fCB7fTtcbiAgICBsZXQga2V5cyxcbiAgICAgICAgbGFzdEtleSxcbiAgICAgICAgcGFyYW1PYmogPSB7fTtcblxuICAgIC8vIGNvbnRlbnQgdHlwZSBjaGVja1xuICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdmFsID0gZ2V0QmxvYih2YWwsIG9wdGlvbnMuY29udGVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICB2YWwgPSBpc051bWJlcih2YWwpID8gdmFsIDogcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgcGFzc2VkIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgaXRzZWxmXG4gICAgICAgIHBhcmFtT2JqID0ga2V5O1xuICAgIH0gZWxzZSBpZiAoa2V5LmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciAnLicgaW4ga2V5IGUuZy4gJ2VtcGxveWVlLmRlcGFydG1lbnQnXG4gICAgICAgIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgbGFzdEtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIC8vIEZpbmRpbmcgdGhlIG9iamVjdCBiYXNlZCBvbiB0aGUga2V5XG4gICAgICAgIHRhcmdldE9iaiA9IGZpbmRWYWx1ZU9mKHRhcmdldE9iaiwga2V5cy5qb2luKCcuJyksIHRydWUpO1xuICAgICAgICBrZXkgPSBsYXN0S2V5O1xuICAgICAgICBwYXJhbU9ialtrZXldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtT2JqW2tleV0gPSB2YWw7XG4gICAgfVxuXG4gICAgZm9yRWFjaChwYXJhbU9iaiwgZnVuY3Rpb24gKHBhcmFtVmFsLCBwYXJhbUtleSkge1xuICAgICAgICB0YXJnZXRPYmpbcGFyYW1LZXldID0gcGFyYW1WYWw7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldE9iajtcbn07XG5cbi8qKlxuICogcmV0dXJucyB0cnVlIGlmIEhUTUw1IEZpbGUgQVBJIGlzIGF2YWlsYWJsZSBlbHNlIGZhbHNlXG4gKiBAcmV0dXJucyB7e3Byb3RvdHlwZTogQmxvYjsgbmV3KGJsb2JQYXJ0cz86IGFueVtdLCBvcHRpb25zPzogQmxvYlByb3BlcnR5QmFnKTogQmxvYn19XG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbGVVcGxvYWRTdXBwb3J0ZWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuICh3aW5kb3cuRmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZUxpc3QgJiYgd2luZG93LkJsb2IpO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHZhck9yZGVyXG4gKiBAcGFyYW0gb3B0aW9uc09yZGVyXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkT3JkZXJCeSA9ICh2YXJPcmRlciwgb3B0aW9uc09yZGVyKSA9PiB7XG4gICAgbGV0IG9wdGlvbkZpZWxkcyxcbiAgICAgICAgdmFyT3JkZXJCeTtcbiAgICAvLyBJZiBvcHRpb25zIG9yZGVyIGJ5IGlzIG5vdCBkZWZpbmVkLCByZXR1cm4gdmFyaWFibGUgb3JkZXJcbiAgICBpZiAoIW9wdGlvbnNPcmRlciB8fCBpc0VtcHR5KG9wdGlvbnNPcmRlcikpIHtcbiAgICAgICAgcmV0dXJuIHZhck9yZGVyO1xuICAgIH1cbiAgICAvLyBJZiB2YXJpYWJsZSBvcmRlciBieSBpcyBub3QgZGVmaW5lZCwgcmV0dXJuIG9wdGlvbnMgb3JkZXJcbiAgICBpZiAoIXZhck9yZGVyKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zT3JkZXI7XG4gICAgfVxuICAgIC8vIElmIGJvdGggYXJlIHByZXNlbnQsIGNvbWJpbmUgdGhlIG9wdGlvbnMgb3JkZXIgYW5kIHZhcmlhYmxlIG9yZGVyLCB3aXRoIG9wdGlvbnMgb3JkZXIgYXMgcHJlY2VkZW5jZVxuICAgIHZhck9yZGVyID0gc3BsaXQodmFyT3JkZXIsICcsJyk7XG4gICAgb3B0aW9uc09yZGVyID0gc3BsaXQob3B0aW9uc09yZGVyLCAnLCcpO1xuICAgIG9wdGlvbkZpZWxkcyA9IG1hcChvcHRpb25zT3JkZXIsIGZ1bmN0aW9uIChvcmRlcikge1xuICAgICAgICByZXR1cm4gc3BsaXQodHJpbShvcmRlciksICcgJylbMF07XG4gICAgfSk7XG4gICAgLy8gSWYgYSBmaWVsZCBpcyBwcmVzZW50IGluIGJvdGggb3B0aW9ucyBhbmQgdmFyaWFibGUsIHJlbW92ZSB0aGUgdmFyaWFibGUgb3JkZXJieVxuICAgIHJlbW92ZSh2YXJPcmRlciwgZnVuY3Rpb24gKG9yZGVyQnk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gaW5jbHVkZXMob3B0aW9uRmllbGRzLCBzcGxpdCh0cmltKG9yZGVyQnkpLCAnICcpWzBdKTtcbiAgICB9KTtcbiAgICB2YXJPcmRlckJ5ID0gdmFyT3JkZXIubGVuZ3RoID8gJywnICsgam9pbih2YXJPcmRlciwgJywnKSA6ICcnO1xuICAgIHJldHVybiBqb2luKG9wdGlvbnNPcmRlciwgJywnKSArIHZhck9yZGVyQnk7XG59O1xuXG4vKipcbiAqIGZvcm1hdHRpbmcgdGhlIGV4cHJlc3Npb24gYXMgcmVxdWlyZWQgYnkgYmFja2VuZCB3aGljaCB3YXMgZW5jbG9zZWQgYnkgJHs8ZXhwcmVzc2lvbj59LlxuICogQHBhcmFtIGZpZWxkRGVmc1xuICogcmV0dXJucyBmaWVsZERlZnNcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEV4cG9ydEV4cHJlc3Npb24gPSBmaWVsZERlZnMgPT4ge1xuICAgIGZvckVhY2goZmllbGREZWZzLCBmdW5jdGlvbiAoZmllbGREZWYpIHtcbiAgICAgICAgaWYgKGZpZWxkRGVmLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkRGVmLmV4cHJlc3Npb24gPSAnJHsnICsgZmllbGREZWYuZXhwcmVzc2lvbiArICd9JztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWVsZERlZnM7XG59O1xuXG5leHBvcnQgY29uc3QgZGVib3VuY2VWYXJpYWJsZUNhbGwgPSBfaW52b2tlO1xuXG5jb25zdCBnZXREYXRlVGltZUZvcm1hdEZvclR5cGUgPSAodHlwZSkgPT4ge1xuICAgIHJldHVybiBERUZBVUxUX0ZPUk1BVFNbdG9VcHBlcih0eXBlKV07XG59O1xuXG4vLyBGb3JtYXQgdmFsdWUgZm9yIGRhdGV0aW1lIHR5cGVzXG5jb25zdCBfZm9ybWF0RGF0ZSA9IChkYXRlVmFsdWUsIHR5cGUpID0+IHtcbiAgICBsZXQgZXBvY2g7XG4gICAgaWYgKGlzRGF0ZShkYXRlVmFsdWUpKSB7XG4gICAgICAgIGVwb2NoID0gZGF0ZVZhbHVlLmdldFRpbWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWlzTmFOKGRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRhdGVWYWx1ZSA9IHBhcnNlSW50KGRhdGVWYWx1ZSwgMTApO1xuICAgICAgICB9XG4gICAgICAgIGVwb2NoID0gZGF0ZVZhbHVlICYmIG1vbWVudChkYXRlVmFsdWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKGVwb2NoKSAmJiB0eXBlICE9PSBEYXRhVHlwZS5USU1FKSB7XG4gICAgICAgIHJldHVybiBlcG9jaDtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IERhdGFUeXBlLlRJTUVTVEFNUCkge1xuICAgICAgICByZXR1cm4gZXBvY2g7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBEYXRhVHlwZS5USU1FICYmICFlcG9jaCkge1xuICAgICAgICBlcG9jaCA9IG1vbWVudChuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpICsgJyAnICsgZGF0ZVZhbHVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlVmFsdWUgJiYgYXBwTWFuYWdlci5nZXRQaXBlKCdkYXRlJykudHJhbnNmb3JtKGVwb2NoLCBnZXREYXRlVGltZUZvcm1hdEZvclR5cGUodHlwZSkpO1xufTtcblxuLy8gRnVuY3Rpb24gdG8gY29udmVydCB2YWx1ZXMgb2YgZGF0ZSB0aW1lIHR5cGVzIGludG8gZGVmYXVsdCBmb3JtYXRzXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZSA9ICh2YWx1ZSwgdHlwZSkgPT4ge1xuICAgIGlmIChpbmNsdWRlcyh0eXBlLCAnLicpKSB7XG4gICAgICAgIHR5cGUgPSB0b0xvd2VyKGV4dHJhY3RUeXBlKHR5cGUpKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBtYXAodmFsdWUsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBfZm9ybWF0RGF0ZSh2YWwsIHR5cGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIF9mb3JtYXREYXRlKHZhbHVlLCB0eXBlKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZGVjb2RlcyB0aGUgdmFyaWFibGUgZGF0YSB3aGljaCBpcyBlbmNvZGVkIGZyb20gYmFja2VuZCBiZWZvcmUgc2hvd2luZyBpbiB0aGUgd2lkZ2V0cy5cbiAqIEl0IHRha2VzIHZhcmlhYmxlIHJlc3BvbnNlIGNvbnRlbnQgYXMgaW5wdXQgYW5kIGl0ZXJhdGVzIHJlY3Vyc2l2ZWx5LFxuICogaWYgdGhlIHZhbHVlIGlzIHN0cmluZyB0eXBlIHRoZW4gaXQgd2lsbCBkZWNvZGUgdGhlIGRhdGEuXG4gKiBAcGFyYW0gcmVzcG9uc2VDb250ZW50IChBcnJheSBvZiBvYmplY3RzKVxuICovXG5leHBvcnQgY29uc3QgZGVjb2RlRGF0YSA9IChyZXNwb25zZUNvbnRlbnQpID0+IHtcbiAgICBpZiAoIXJlc3BvbnNlQ29udGVudCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250ZW50O1xuICAgIH1cbiAgICBpZiAoaXNBcnJheShyZXNwb25zZUNvbnRlbnQpKSB7XG4gICAgICAgIGZvckVhY2gocmVzcG9uc2VDb250ZW50LCBkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBodG1sRGVjb2RlKGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGZvckVhY2goZGF0YSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gaHRtbERlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVEYXRhKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHJlc3BvbnNlQ29udGVudCkpIHtcbiAgICAgICAgZm9yRWFjaChyZXNwb25zZUNvbnRlbnQsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50W2tleV0gPSBodG1sRGVjb2RlKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlRGF0YSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcocmVzcG9uc2VDb250ZW50KSkge1xuICAgICAgICByZXNwb25zZUNvbnRlbnQgPSBodG1sRGVjb2RlKHJlc3BvbnNlQ29udGVudCk7XG4gICAgICAgIHJldHVybiByZXNwb25zZUNvbnRlbnQ7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gaHRtbERlY29kZShpbnB1dCkge1xuICAgIHJldHVybiBoZS51bmVzY2FwZShpbnB1dCk7XG59XG4iXX0=
|