@wavemaker/app-ng-runtime 11.8.0-next.24904 → 11.8.0-next.27301
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.
- app-ng-runtime/build-task/bundles/index.umd.js +5 -5
- app-ng-runtime/build-task/esm2022/basic/progress/progress-bar/progress-bar.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/page/page.build.mjs +3 -2
- app-ng-runtime/build-task/fesm2022/index.mjs +2 -1
- app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +5 -5
- app-ng-runtime/components/advanced/carousel/esm2022/carousel.animator.mjs +3 -2
- app-ng-runtime/components/advanced/carousel/esm2022/carousel.directive.mjs +1 -1
- app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs +2 -1
- app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/login/bundles/index.umd.js +6 -6
- app-ng-runtime/components/advanced/login/esm2022/login.component.mjs +4 -3
- app-ng-runtime/components/advanced/login/fesm2022/index.mjs +3 -2
- app-ng-runtime/components/advanced/login/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/bundles/index.umd.js +203 -171
- app-ng-runtime/components/base/esm2022/directives/show-in-device.directive.mjs +1 -1
- app-ng-runtime/components/base/esm2022/pipes/custom-pipes.mjs +12 -11
- app-ng-runtime/components/base/esm2022/pipes/wm-pipe.mjs +3 -2
- app-ng-runtime/components/base/esm2022/utils/data-utils.mjs +30 -29
- app-ng-runtime/components/base/esm2022/utils/form-utils.mjs +47 -41
- app-ng-runtime/components/base/esm2022/utils/live-utils.mjs +8 -7
- app-ng-runtime/components/base/esm2022/utils/widget-utils.mjs +28 -27
- app-ng-runtime/components/base/esm2022/widgets/common/base/base-container.component.mjs +4 -3
- app-ng-runtime/components/base/esm2022/widgets/common/base/base-field-validations.mjs +24 -21
- app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +12 -11
- app-ng-runtime/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +40 -14
- app-ng-runtime/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/common/partial/partial.directive.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +6 -5
- app-ng-runtime/components/base/esm2022/widgets/framework/deviceview.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/framework/property-change-handler.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +4 -3
- app-ng-runtime/components/base/fesm2022/index.mjs +206 -173
- app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/pipes/custom-pipes.d.ts +1 -1
- app-ng-runtime/components/base/utils/data-utils.d.ts +0 -1
- app-ng-runtime/components/base/utils/widget-utils.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/base/base-field-validations.d.ts +1 -1
- app-ng-runtime/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
- app-ng-runtime/components/basic/default/bundles/index.umd.js +10 -10
- app-ng-runtime/components/basic/default/esm2022/label/label.directive.mjs +4 -3
- app-ng-runtime/components/basic/default/esm2022/spinner/spinner.component.mjs +6 -5
- app-ng-runtime/components/basic/default/fesm2022/index.mjs +7 -6
- app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/progress/bundles/index.umd.js +13 -13
- app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +5 -4
- app-ng-runtime/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +6 -5
- app-ng-runtime/components/basic/progress/esm2022/utils.mjs +3 -3
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs +10 -9
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +15 -10
- app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +14 -8
- app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs +13 -7
- app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -2
- app-ng-runtime/components/basic/search/bundles/index.umd.js +67 -65
- app-ng-runtime/components/basic/search/esm2022/data-provider/data-provider.mjs +1 -1
- app-ng-runtime/components/basic/search/esm2022/data-provider/local-data-provider.mjs +26 -23
- app-ng-runtime/components/basic/search/esm2022/data-provider/remote-data-provider.mjs +12 -11
- app-ng-runtime/components/basic/search/esm2022/search.component.mjs +31 -30
- app-ng-runtime/components/basic/search/fesm2022/index.mjs +66 -63
- app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/tree/bundles/index.umd.js +9 -9
- app-ng-runtime/components/basic/tree/esm2022/tree.component.mjs +7 -6
- app-ng-runtime/components/basic/tree/fesm2022/index.mjs +6 -5
- app-ng-runtime/components/basic/tree/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/chart/bundles/index.umd.js +72 -63
- app-ng-runtime/components/chart/chart.component.d.ts +1 -1
- app-ng-runtime/components/chart/chart.utils.d.ts +3 -3
- app-ng-runtime/components/chart/esm2022/chart.component.mjs +58 -48
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +14 -13
- app-ng-runtime/components/chart/fesm2022/index.mjs +69 -59
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/accordion/bundles/index.umd.js +16 -16
- app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +14 -13
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +13 -12
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/panel/bundles/index.umd.js +5 -5
- app-ng-runtime/components/containers/panel/esm2022/panel.component.mjs +3 -2
- app-ng-runtime/components/containers/panel/fesm2022/index.mjs +2 -1
- app-ng-runtime/components/containers/panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/panel/panel.component.d.ts +1 -1
- app-ng-runtime/components/containers/tabs/bundles/index.umd.js +17 -17
- app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +15 -14
- app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +14 -13
- app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/bundles/index.umd.js +75 -75
- app-ng-runtime/components/data/form/esm2022/form-action/form-action.directive.mjs +3 -2
- app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +10 -9
- app-ng-runtime/components/data/form/esm2022/form.component.mjs +54 -53
- app-ng-runtime/components/data/form/esm2022/live-filter/live-filter.directive.mjs +3 -2
- app-ng-runtime/components/data/form/esm2022/live-form/live-form.directive.mjs +11 -10
- app-ng-runtime/components/data/form/fesm2022/index.mjs +77 -76
- app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/form.component.d.ts +2 -2
- app-ng-runtime/components/data/form/live-form/live-form.directive.d.ts +1 -1
- app-ng-runtime/components/data/list/bundles/index.umd.js +692 -687
- app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +1 -1
- app-ng-runtime/components/data/list/esm2022/list.animator.mjs +5 -3
- app-ng-runtime/components/data/list/esm2022/list.component.mjs +687 -682
- app-ng-runtime/components/data/list/fesm2022/index.mjs +690 -684
- app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/list/list.component.d.ts +53 -53
- app-ng-runtime/components/data/live-table/bundles/index.umd.js +1 -1
- app-ng-runtime/components/data/live-table/esm2022/live-table.component.mjs +2 -2
- app-ng-runtime/components/data/live-table/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/data/live-table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/pagination/bundles/index.umd.js +14 -14
- app-ng-runtime/components/data/pagination/esm2022/pagination.component.mjs +12 -11
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs +11 -10
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/bundles/index.umd.js +175 -172
- app-ng-runtime/components/data/table/esm2022/table-action/table-action.directive.mjs +3 -2
- app-ng-runtime/components/data/table/esm2022/table-column/table-column.directive.mjs +19 -18
- app-ng-runtime/components/data/table/esm2022/table-cud.directive.mjs +7 -6
- app-ng-runtime/components/data/table/esm2022/table-filter.directive.mjs +53 -55
- app-ng-runtime/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +3 -2
- app-ng-runtime/components/data/table/esm2022/table.component.mjs +98 -91
- app-ng-runtime/components/data/table/fesm2022/index.mjs +172 -168
- app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +6 -6
- app-ng-runtime/components/data/table/table.component.d.ts +2 -2
- app-ng-runtime/components/dialogs/default/bundles/index.umd.js +2 -2
- app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +3 -3
- app-ng-runtime/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +1 -1
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/calendar/bundles/index.umd.js +33 -31
- app-ng-runtime/components/input/calendar/esm2022/calendar.component.mjs +31 -28
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs +30 -27
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/chips/bundles/index.umd.js +29 -28
- app-ng-runtime/components/input/chips/chips.component.d.ts +1 -1
- app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +27 -25
- app-ng-runtime/components/input/chips/fesm2022/index.mjs +26 -24
- app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/base-form.component.d.ts +3 -3
- app-ng-runtime/components/input/default/bundles/index.umd.js +75 -62
- app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +1 -0
- app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +4 -4
- app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +14 -8
- app-ng-runtime/components/input/default/esm2022/caption-position.directive.mjs +3 -2
- app-ng-runtime/components/input/default/esm2022/checkbox/checkbox.component.mjs +2 -2
- app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +6 -4
- app-ng-runtime/components/input/default/esm2022/dataset-aware-form.component.mjs +29 -23
- app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +4 -3
- app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +4 -3
- app-ng-runtime/components/input/default/esm2022/switch/switch.component.mjs +6 -5
- app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +4 -3
- app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +20 -18
- app-ng-runtime/components/input/default/esm2022/text/text/input-text.component.mjs +2 -2
- app-ng-runtime/components/input/default/fesm2022/index.mjs +75 -62
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -1
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +53 -51
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +34 -31
- app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +5 -4
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +5 -4
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +7 -6
- app-ng-runtime/components/input/epoch/esm2022/picker/picker.component.mjs +1 -1
- app-ng-runtime/components/input/epoch/esm2022/time/time.component.mjs +6 -5
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +48 -45
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/bundles/index.umd.js +15 -15
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +13 -12
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +12 -11
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/rating/bundles/index.umd.js +12 -12
- app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +10 -9
- app-ng-runtime/components/input/rating/fesm2022/index.mjs +9 -8
- app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +1 -1
- app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +2 -2
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +23 -22
- app-ng-runtime/components/navigation/menu/esm2022/menu-adapator.component.mjs +3 -2
- app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +6 -5
- app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +8 -7
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +10 -8
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +20 -18
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +12 -1
- app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +1 -1
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/bundles/index.umd.js +6 -6
- app-ng-runtime/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +3 -2
- app-ng-runtime/components/prefab/esm2022/prefab.directive.mjs +3 -2
- app-ng-runtime/components/prefab/fesm2022/index.mjs +3 -2
- app-ng-runtime/components/prefab/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +119 -130
- app-ng-runtime/core/esm2022/public_api.mjs +2 -2
- app-ng-runtime/core/esm2022/services/field-type.service.mjs +3 -2
- app-ng-runtime/core/esm2022/services/field-widget.service.mjs +3 -2
- app-ng-runtime/core/esm2022/services/pagination.service.mjs +7 -6
- app-ng-runtime/core/esm2022/services/state-persistence.service.mjs +17 -16
- app-ng-runtime/core/esm2022/services/utils.service.mjs +3 -2
- app-ng-runtime/core/esm2022/services/viewport.service.mjs +3 -2
- app-ng-runtime/core/esm2022/utils/build-utils.mjs +5 -4
- app-ng-runtime/core/esm2022/utils/expression-parser.mjs +5 -4
- app-ng-runtime/core/esm2022/utils/lru-cache.mjs +3 -2
- app-ng-runtime/core/esm2022/utils/utils.mjs +79 -82
- app-ng-runtime/core/esm2022/utils/watcher.mjs +9 -7
- app-ng-runtime/core/fesm2022/index.mjs +117 -123
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/public_api.d.ts +1 -1
- app-ng-runtime/core/services/pagination.service.d.ts +1 -1
- app-ng-runtime/core/utils/utils.d.ts +5 -9
- app-ng-runtime/http/bundles/index.umd.js +7 -7
- app-ng-runtime/http/esm2022/http.service.mjs +5 -4
- app-ng-runtime/http/esm2022/wm-http-request.mjs +1 -1
- app-ng-runtime/http/esm2022/wm-http-response.mjs +1 -1
- app-ng-runtime/http/fesm2022/index.mjs +4 -3
- app-ng-runtime/http/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +24 -20
- app-ng-runtime/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +5 -4
- app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +12 -8
- app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +5 -3
- app-ng-runtime/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +3 -2
- app-ng-runtime/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +5 -4
- app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs +21 -16
- app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +7 -7
- app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +2 -2
- app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +4 -3
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs +4 -3
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +8 -8
- app-ng-runtime/mobile/components/data/media-list/esm2022/media-list.component.mjs +4 -3
- app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs +3 -2
- app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +5 -5
- app-ng-runtime/mobile/components/page/default/esm2022/page.directive.mjs +3 -2
- app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs +2 -1
- app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +9 -9
- app-ng-runtime/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +7 -6
- app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs +6 -5
- app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/core/bundles/index.umd.js +25 -25
- app-ng-runtime/mobile/core/esm2022/services/device-file-download.service.mjs +5 -4
- app-ng-runtime/mobile/core/esm2022/services/device-file-opener.service.mjs +3 -2
- app-ng-runtime/mobile/core/esm2022/services/device-file-upload.service.mjs +4 -3
- app-ng-runtime/mobile/core/esm2022/services/device-file.service.mjs +6 -5
- app-ng-runtime/mobile/core/esm2022/services/device.service.mjs +3 -2
- app-ng-runtime/mobile/core/esm2022/services/ext-app-message.service.mjs +5 -4
- app-ng-runtime/mobile/core/esm2022/services/network.service.mjs +9 -8
- app-ng-runtime/mobile/core/fesm2022/index.mjs +22 -21
- app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/core/services/ext-app-message.service.d.ts +1 -1
- app-ng-runtime/mobile/core/services/network.service.d.ts +7 -1
- app-ng-runtime/mobile/offline/bundles/index.umd.js +161 -144
- app-ng-runtime/mobile/offline/esm2022/models/local-db-store.mjs +23 -21
- app-ng-runtime/mobile/offline/esm2022/services/change-log.service.mjs +7 -6
- app-ng-runtime/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +37 -35
- app-ng-runtime/mobile/offline/esm2022/services/local-db-management.service.mjs +54 -45
- app-ng-runtime/mobile/offline/esm2022/services/local-db.service.mjs +5 -4
- app-ng-runtime/mobile/offline/esm2022/services/workers/error-blocker.mjs +4 -3
- app-ng-runtime/mobile/offline/esm2022/services/workers/file-handler.mjs +18 -13
- app-ng-runtime/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +9 -5
- app-ng-runtime/mobile/offline/esm2022/utils/live-variable.utils.mjs +12 -11
- app-ng-runtime/mobile/offline/esm2022/utils/query-executor.utils.mjs +5 -4
- app-ng-runtime/mobile/offline/esm2022/utils/security.utils.mjs +3 -2
- app-ng-runtime/mobile/offline/fesm2022/index.mjs +156 -138
- app-ng-runtime/mobile/offline/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/runtime/bundles/index.umd.js +11 -8
- app-ng-runtime/mobile/runtime/esm2022/mobile-runtime.module.mjs +3 -2
- app-ng-runtime/mobile/runtime/esm2022/services/cookie.service.mjs +6 -2
- app-ng-runtime/mobile/runtime/esm2022/services/http-interceptor.service.mjs +4 -3
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs +8 -4
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +2 -2
- app-ng-runtime/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +3 -3
- app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs +2 -2
- app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/variables/bundles/index.umd.js +23 -16
- app-ng-runtime/mobile/variables/esm2022/services/camera-service.mjs +2 -2
- app-ng-runtime/mobile/variables/esm2022/services/datasync-service.mjs +10 -9
- app-ng-runtime/mobile/variables/esm2022/services/file-service.mjs +11 -3
- app-ng-runtime/mobile/variables/fesm2022/index.mjs +19 -11
- app-ng-runtime/mobile/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/oAuth/bundles/index.umd.js +12 -12
- app-ng-runtime/oAuth/esm2022/oAuth.service.mjs +4 -3
- app-ng-runtime/oAuth/esm2022/oAuth.utils.mjs +8 -7
- app-ng-runtime/oAuth/fesm2022/index.mjs +9 -8
- app-ng-runtime/oAuth/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/bundles/index.umd.js +121 -120
- app-ng-runtime/runtime/base/esm2022/components/base-layout.component.mjs +4 -3
- app-ng-runtime/runtime/base/esm2022/components/base-page.component.mjs +14 -13
- app-ng-runtime/runtime/base/esm2022/components/base-partial.component.mjs +13 -12
- app-ng-runtime/runtime/base/esm2022/components/base-prefab.component.mjs +15 -14
- app-ng-runtime/runtime/base/esm2022/components/base-spa-page.component.mjs +14 -13
- app-ng-runtime/runtime/base/esm2022/components/custom-toaster.component.mjs +6 -5
- app-ng-runtime/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -10
- app-ng-runtime/runtime/base/esm2022/guards/page-not-found.guard.mjs +1 -1
- app-ng-runtime/runtime/base/esm2022/guards/role.guard.mjs +3 -2
- app-ng-runtime/runtime/base/esm2022/services/app-defaults.service.mjs +1 -1
- app-ng-runtime/runtime/base/esm2022/services/app.manager.service.mjs +17 -14
- app-ng-runtime/runtime/base/esm2022/services/app.service.mjs +7 -6
- app-ng-runtime/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +3 -2
- app-ng-runtime/runtime/base/esm2022/services/http-interceptor.services.mjs +4 -3
- app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +12 -10
- app-ng-runtime/runtime/base/esm2022/services/navigation.service.mjs +8 -7
- app-ng-runtime/runtime/base/esm2022/services/prefab-manager.service.mjs +3 -2
- app-ng-runtime/runtime/base/esm2022/services/spinner.service.mjs +7 -6
- app-ng-runtime/runtime/base/esm2022/services/toaster.service.mjs +6 -5
- app-ng-runtime/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +6 -7
- app-ng-runtime/runtime/base/fesm2022/index.mjs +119 -117
- app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/runtime/base/services/i18n.service.d.ts +1 -1
- app-ng-runtime/runtime/dynamic/bundles/index.umd.js +7 -7
- app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +4 -3
- app-ng-runtime/runtime/dynamic/esm2022/main.mjs +3 -2
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +4 -3
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/scripts/jquery-ui/ui/widgets/droppable.js +7 -7
- app-ng-runtime/scripts/jquery-ui/ui/widgets/resizable.js +13 -10
- app-ng-runtime/scripts/jquery-ui/ui/widgets/sortable.js +7 -7
- app-ng-runtime/security/bundles/index.umd.js +14 -14
- app-ng-runtime/security/esm2022/security.service.mjs +12 -11
- app-ng-runtime/security/fesm2022/index.mjs +11 -10
- app-ng-runtime/security/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/security/security.service.d.ts +1 -1
- app-ng-runtime/swipey/esm2022/swipe.animation.mjs +1 -1
- app-ng-runtime/swipey/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/transpiler/bundles/index.umd.js +10 -9
- app-ng-runtime/transpiler/esm2022/build.mjs +8 -6
- app-ng-runtime/transpiler/fesm2022/index.mjs +7 -5
- app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/bundles/index.umd.js +155 -145
- app-ng-runtime/variables/esm2022/manager/action/login-action.manager.mjs +15 -14
- app-ng-runtime/variables/esm2022/manager/action/notification-action.manager.mjs +9 -8
- app-ng-runtime/variables/esm2022/manager/variable/base-variable.manager.mjs +3 -2
- app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +11 -10
- app-ng-runtime/variables/esm2022/service/variables.service.mjs +7 -6
- app-ng-runtime/variables/esm2022/util/action/navigation-action.utils.mjs +4 -4
- app-ng-runtime/variables/esm2022/util/variable/pagination.utils.mjs +30 -23
- app-ng-runtime/variables/esm2022/util/variable/service-variable.utils.mjs +29 -28
- app-ng-runtime/variables/esm2022/util/variable/variables.utils.mjs +75 -70
- app-ng-runtime/variables/fesm2022/index.mjs +169 -158
- app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/util/variable/service-variable.utils.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../projects/mobile/runtime-dynamic/src/services/live-sync.service.ts","../../../../projects/mobile/runtime-dynamic/src/mobile-runtime-dynamic.module.ts","../../../../projects/mobile/runtime-dynamic/src/index.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { File } from '@awesome-cordova-plugins/file/ngx';\n\nimport { App, hasCordova, transformFileURI } from '@wm/core';\nimport { DeviceService, NetworkService } from '@wm/mobile/core';\n\ndeclare const window, location, cordova;\ndeclare const $, _;\n\ninterface Settings {\n enabled: boolean,\n position: {\n left: number,\n top: number,\n },\n show: boolean,\n cordovaPlugins: {}\n}\n\n@Injectable()\nexport class LiveSyncInterceptor implements HttpInterceptor {\n\n private urlsToSkip: string[] = [];\n private deployedUrl = '';\n private localAppUrl = '';\n private syncAppUrl = '';\n private urlsToLoadFromLocal = {\n 'config.json': 'config.json',\n };\n private urlsToLoadFromLive = {\n 'metadata/app/service-definitions.json': 'services/servicedefs',\n 'metadata/app/security-config.json': 'services/security/info'\n };\n private prefabServicePattern = /^metadata\\/prefabs\\/.*\\/service-definitions.json$/;\n private isLiveSyncEnabled = false;\n private settings: Settings = {\n enabled: false,\n position: null,\n show: true,\n cordovaPlugins: null\n };\n\n constructor(private app: App,\n private deviceService: DeviceService,\n private networkService: NetworkService,\n private file: File) {\n this.loadSettings();\n this.isLiveSyncEnabled = this.settings.enabled && hasCordova();\n this.deployedUrl = $('meta[name=\"liveSync.deployedUrl\"]').attr('value');\n this.localAppUrl = $('meta[name=\"liveSync.localAppUrl\"]').attr('value');\n this.syncAppUrl = $('meta[name=\"liveSync.syncAppUrl\"]').attr('value');\n this.defineAPI();\n if (!this.isLiveSyncEnabled) {\n this.goToLocalApp();\n if (this.deviceService.isAppConnectedToPreview()) {\n this.deviceService.whenReady().then(() => {\n this.deployedUrl = app.deployedUrl;\n if (!this.networkService.isConnected()) {\n return;\n }\n this.renderUI();\n if (!this.localAppUrl && !this.settings.cordovaPlugins) {\n this.getPlugins().then(plugins => {\n this.settings.cordovaPlugins = plugins;\n this.saveSettings();\n });\n }\n });\n }\n return;\n }\n if (this.syncAppUrl && this.deployedUrl) {\n this.deviceService.getConfig().baseUrl = this.deployedUrl;\n this.patchSQLite();\n this.patchHistoryApi();\n Object.keys(this.urlsToLoadFromLocal).forEach(k => {\n this.urlsToLoadFromLocal[k] = this.syncAppUrl + this.urlsToLoadFromLocal[k];\n });\n this.patchApp();\n this.renderUI();\n } else {\n window.navigator.splashscreen.hide = () => {};\n this.deployedUrl = app.deployedUrl;\n this.isLiveSyncEnabled = false;\n this.deviceService.whenReady().then(() => {\n this.networkService.isConnected() && this.launch();\n });\n }\n }\n\n private goToLocalApp() {\n if (this.localAppUrl) {\n location.href = this.localAppUrl;\n }\n }\n\n private defineAPI() {\n (window as any).liveSync = (flag) => {\n if (this.settings.enabled === !!flag \n || !this.networkService.isConnected()) {\n return;\n }\n this.settings.enabled = !!flag;\n this.saveSettings();\n setTimeout(() => {\n window.navigator.splashscreen.show();\n location.reload();\n }, 100);\n };\n }\n\n private transformPrefabServicedefinitions(url: string) {\n let isValid = this.prefabServicePattern.test(url),\n prefabName = '',\n prefabLoc = 0;\n if (isValid) {\n prefabLoc = 'metadata/prefabs/'.length;\n prefabName = url.substring(prefabLoc, url.indexOf('/', prefabLoc));\n return 'services/prefabs/' + prefabName + '/servicedefs';\n }\n return url;\n }\n\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isLiveSyncEnabled) {\n return next.handle(request);\n }\n const deployedUrl = this.app.deployedUrl;\n let url = request.url;\n url = this.urlsToLoadFromLive[url] || this.urlsToLoadFromLocal[url] || url;\n url = this.transformPrefabServicedefinitions(url);\n if (url.startsWith('//')) {\n url = deployedUrl.split('//')[0] + url;\n }\n if (url.indexOf('://') < 0\n || this.urlsToSkip.indexOf(url) >= 0) {\n url = deployedUrl + '/' + url;\n }\n request = request.clone({url: url});\n return next.handle(request);\n }\n\n private mashUpHtmlFile() {\n const localDir = cordova.file.cacheDirectory;\n return new Promise((resolve, reject) => {\n $.ajax({\n url: this.deployedUrl + 'index.html',\n dataType: 'html',\n success: resolve,\n error: reject\n });\n }).then((fileContent: string) => {\n const port = location.port ? ':' + location.port : '';\n let path = this.localAppUrl || \n (`${location.protocol}//${location.hostname}${port}${location.pathname}`);\n let cordovaPath = path;\n if (cordovaPath.endsWith('.html')) {\n const splits = cordovaPath.split('/').slice(0, );\n cordovaPath = splits.slice(0, splits.length - 1).join('/');\n }\n cordovaPath += '/cordova.js';\n const mAppUrl = `${location.protocol}//${location.hostname}${port}${transformFileURI(localDir + 'live-index.html')}`;\n fileContent = fileContent.replace('cordova.js', cordovaPath);\n fileContent = fileContent.replace('<head>', `\n <head>\n <base href=\"${this.deployedUrl}\">\n <meta name=\"liveSync.deployedUrl\" value=\"${this.deployedUrl}\">\n <meta name=\"liveSync.syncAppUrl\" value=\"${mAppUrl}\">\n <meta name=\"liveSync.localAppUrl\" value=\"${path}\">`);\n return this.file.writeFile(localDir, 'live-index.html', fileContent, {\n replace: true\n }).then(() => mAppUrl);\n });\n }\n\n private getPlugins() {\n return new Promise((resolve, reject) => {\n $.get(this.deployedUrl + 'config.xml').done(function (res) {\n const plugins = {};\n $(res).find('plugin').each(function(p) { \n plugins[$(this).attr('name')] = $(this).attr('spec');\n });\n resolve(plugins);\n }).fail(reject);\n });\n }\n\n private hasPluginsChanged() {\n return this.deviceService.whenReady()\n .then(() => this.getPlugins())\n .then(plugins => {\n const pluginsInApk = this.settings.cordovaPlugins || {};\n return !!Object.keys(plugins)\n .find(k => !pluginsInApk[k] || pluginsInApk[k] !== plugins[k]);\n });\n }\n\n private launch() {\n return this.mashUpHtmlFile()\n .then((filePath) => {\n localStorage.setItem('WM.NetworkService.isConnected', 'true');\n localStorage.setItem('WM.NetworkService._autoConnect', 'true');\n sessionStorage.setItem('debugMode', 'true');\n \n setTimeout(() => {\n window.navigator.splashscreen.show();\n window.location.href = filePath;\n }, 2000);\n });\n }\n\n private patchSQLite() {\n // Offline sql is not supported.\n delete window['SQLitePlugin'];\n }\n\n private patchApp() {\n this.app.reload = () => {\n if (this.networkService.isConnected()){\n window.navigator.splashscreen.show();\n this.launch();\n }\n };\n window['reloadApp'] = this.app.reload;\n }\n\n private patchHistoryApi() {\n const location = this.syncAppUrl;\n const origReplace = window.history.replaceState;\n window.history.replaceState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origReplace.call(window.history, state, title, url);\n };\n const origPush = window.history.pushState;\n window.history.pushState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origPush.call(window.history, state, title, url);\n };\n }\n\n public loadSettings() {\n const value = sessionStorage.getItem('wm.liveSync.settings');\n try {\n this.settings = value ? JSON.parse(value) : this.settings;\n } catch(e) {\n this.saveSettings();\n }\n }\n\n public saveSettings() {\n sessionStorage.setItem('wm.liveSync.settings', JSON.stringify(this.settings));\n }\n\n public renderUI() {\n if (this.settings.enabled) {\n this.hasPluginsChanged().then((changed) => {\n if (changed) {\n new DialogComponent({\n title: 'Require new build',\n info: 'Cordova Plugins in this app do not match with configuration of project in Studio.' + \n ' So, new Cordova Build is required for Live Sync to work properly.',\n iconClass: 'fa fa-warning fa-4x live-sync-warning-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n }\n });\n }\n new LiveSyncComponent(this.settings, () => {\n this.saveSettings();\n }).render();\n }\n\n}\n\nclass DialogComponent {\n private $ele: any = $('<div><div>');\n\n constructor(public options: {\n title? : string,\n info? : string,\n iconClass?: string,\n actions? : {\n title: string,\n action?: (dialog: DialogComponent) => void,\n primary?: boolean\n }[]\n }) {\n \n }\n\n dismiss() {\n this.$ele.remove();\n }\n\n render() {\n this.$ele = $(\n `<div class=\"live-sync-modal live-sync-control\">\n <div class=\"live-sync-info-container\">\n <span class=\"${this.options.iconClass}\">\n </span>\n <label class=\"live-sync-title\">\n ${this.options.title}\n </label>\n <label class=\"live-sync-description\"> \n ${this.options.info}\n </label>\n <div class=\"live-sync-action-panel\">\n ${this.options.actions.map((a) => {\n return a ? `\n <button \n type=\"button\"\n class=\"live-sync-action ${a.primary ? ' live-sync-primary-action' : ''}\">\n ${a.title}\n </button>` : '';\n }).join('')}\n </div>\n </div>\n </div>\n `\n );\n $('body').append(this.$ele);\n const _this = this;\n this.$ele.find('.live-sync-action').each(function(index) {\n $(this).bind('click', () => {\n const action = _this.options.actions[index].action;\n if (action) {\n action(_this);\n }\n _this.dismiss();\n });\n });\n }\n}\n\nclass LiveSyncComponent {\n private $ele = $(\n `<div class=\"live-sync-control\">\n <button class=\"live-sync-control-btn\" type=\"button\">\n </button>\n </div>`);\n\n constructor(private settings: Settings, private onChange: () => void) {\n\n }\n\n private setPosition() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n const position = this.settings.position;\n if(position) {\n menuIcon.css('left', position.left + 'px');\n menuIcon.css('top', position.top + 'px');\n }\n }\n\n private listenForShowEvent() {\n $('body').bind('touchstart', () => {\n const timerId = setTimeout(() => {\n this.settings.show = true;\n this.onChange();\n this.showConfirmation();\n }, 5000);\n $('body').bind('touchend', () => {\n clearTimeout(timerId);\n });\n });\n }\n\n private showConfirmation() {\n new DialogComponent({\n title: 'Enable Live Sync?',\n info: 'App UI is pulled from studio. But, offline functionality is turned off.',\n iconClass: 'live-sync-control-icon',\n actions: [{\n title: 'No',\n action: () => {\n this.settings.show = false;\n this.onChange();\n this.showHelpInfo();\n }\n }, {\n title: 'Yes',\n action: () => {\n window.liveSync(true);\n },\n primary: true\n }]\n }).render();\n };\n\n private showHelpInfo() {\n new DialogComponent({\n title: '',\n info: 'Tap and hold anywhere for 5 seconds to turn on Live Sync.',\n iconClass: 'live-sync-retrieval-info-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n };\n\n private renderButton() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n this.$ele.on('touchstart', (event) => {\n event.stopPropagation();\n let addClass = true;\n $(document).on('touchmove.liveSync', (event) => {\n var origEvent = event.originalEvent.touches[0];\n if (origEvent && origEvent.pageX) {\n this.settings.position = {\n left: origEvent.pageX,\n top: origEvent.pageY\n };\n }\n this.setPosition();\n if (addClass) {\n menuIcon.addClass('touched');\n addClass = false;\n }\n });\n $(document).one('touchend', (event) => {\n this.onChange();\n menuIcon.removeClass('touched');\n $(document).off('touchmove.liveSync');\n });\n });\n menuIcon.click(() => window.reloadApp());\n $('body').append(this.$ele);\n }\n\n public render() {\n this.setPosition();\n if (this.settings.enabled) {\n this.renderButton();\n } else if (this.settings.show) {\n this.showConfirmation();\n }\n this.listenForShowEvent();\n }\n}","import { NgModule } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\n\nimport { BasicModule } from '@wm/mobile/components/basic';\nimport { SearchModule } from '@wm/mobile/components/basic/search';\n\nimport { SegmentedControlModule } from '@wm/mobile/components/containers/segmented-control';\n\nimport { MediaListModule } from '@wm/mobile/components/data/media-list';\n\nimport { BarcodeScannerModule } from '@wm/mobile/components/device/barcode-scanner';\nimport { CameraModule } from '@wm/mobile/components/device/camera';\n\nimport { FileUploadModule } from '@wm/mobile/components/input/file-upload';\n\nimport { PageModule } from '@wm/mobile/components/page';\nimport { LeftPanelModule } from '@wm/mobile/components/page/left-panel';\nimport { MobileNavbarModule } from '@wm/mobile/components/page/mobile-navbar';\nimport { TabBarModule } from '@wm/mobile/components/page/tab-bar';\nimport { LiveSyncInterceptor } from './services/live-sync.service';\n\nexport const MOBILE_COMPONENT_MODULES_FOR_ROOT = [\n BasicModule,\n SearchModule,\n SegmentedControlModule,\n MediaListModule,\n BarcodeScannerModule,\n CameraModule,\n FileUploadModule,\n PageModule,\n LeftPanelModule,\n MobileNavbarModule,\n TabBarModule\n];\n\n@NgModule({\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: LiveSyncInterceptor,\n multi: true\n }]\n})\nexport class MobileRuntimeDynamicModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../projects/mobile/runtime-dynamic/src/services/live-sync.service.ts","../../../../projects/mobile/runtime-dynamic/src/mobile-runtime-dynamic.module.ts","../../../../projects/mobile/runtime-dynamic/src/index.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { File } from '@awesome-cordova-plugins/file/ngx';\n\nimport { App, hasCordova, transformFileURI } from '@wm/core';\nimport { DeviceService, NetworkService } from '@wm/mobile/core';\n\ndeclare const $;\ndeclare const window, location, cordova;\n\ninterface Settings {\n enabled: boolean,\n position: {\n left: number,\n top: number,\n },\n show: boolean,\n cordovaPlugins: {}\n}\n\n@Injectable()\nexport class LiveSyncInterceptor implements HttpInterceptor {\n\n private urlsToSkip: string[] = [];\n private deployedUrl = '';\n private localAppUrl = '';\n private syncAppUrl = '';\n private urlsToLoadFromLocal = {\n 'config.json': 'config.json',\n };\n private urlsToLoadFromLive = {\n 'metadata/app/service-definitions.json': 'services/servicedefs',\n 'metadata/app/security-config.json': 'services/security/info'\n };\n private prefabServicePattern = /^metadata\\/prefabs\\/.*\\/service-definitions.json$/;\n private isLiveSyncEnabled = false;\n private settings: Settings = {\n enabled: false,\n position: null,\n show: true,\n cordovaPlugins: null\n };\n\n constructor(private app: App,\n private deviceService: DeviceService,\n private networkService: NetworkService,\n private file: File) {\n this.loadSettings();\n this.isLiveSyncEnabled = this.settings.enabled && hasCordova();\n this.deployedUrl = $('meta[name=\"liveSync.deployedUrl\"]').attr('value');\n this.localAppUrl = $('meta[name=\"liveSync.localAppUrl\"]').attr('value');\n this.syncAppUrl = $('meta[name=\"liveSync.syncAppUrl\"]').attr('value');\n this.defineAPI();\n if (!this.isLiveSyncEnabled) {\n this.goToLocalApp();\n if (this.deviceService.isAppConnectedToPreview()) {\n this.deviceService.whenReady().then(() => {\n this.deployedUrl = app.deployedUrl;\n if (!this.networkService.isConnected()) {\n return;\n }\n this.renderUI();\n if (!this.localAppUrl && !this.settings.cordovaPlugins) {\n this.getPlugins().then(plugins => {\n this.settings.cordovaPlugins = plugins;\n this.saveSettings();\n });\n }\n });\n }\n return;\n }\n if (this.syncAppUrl && this.deployedUrl) {\n this.deviceService.getConfig().baseUrl = this.deployedUrl;\n this.patchSQLite();\n this.patchHistoryApi();\n Object.keys(this.urlsToLoadFromLocal).forEach(k => {\n this.urlsToLoadFromLocal[k] = this.syncAppUrl + this.urlsToLoadFromLocal[k];\n });\n this.patchApp();\n this.renderUI();\n } else {\n window.navigator.splashscreen.hide = () => {};\n this.deployedUrl = app.deployedUrl;\n this.isLiveSyncEnabled = false;\n this.deviceService.whenReady().then(() => {\n this.networkService.isConnected() && this.launch();\n });\n }\n }\n\n private goToLocalApp() {\n if (this.localAppUrl) {\n location.href = this.localAppUrl;\n }\n }\n\n private defineAPI() {\n (window as any).liveSync = (flag) => {\n if (this.settings.enabled === !!flag\n || !this.networkService.isConnected()) {\n return;\n }\n this.settings.enabled = !!flag;\n this.saveSettings();\n setTimeout(() => {\n window.navigator.splashscreen.show();\n location.reload();\n }, 100);\n };\n }\n\n private transformPrefabServicedefinitions(url: string) {\n let isValid = this.prefabServicePattern.test(url),\n prefabName = '',\n prefabLoc = 0;\n if (isValid) {\n prefabLoc = 'metadata/prefabs/'.length;\n prefabName = url.substring(prefabLoc, url.indexOf('/', prefabLoc));\n return 'services/prefabs/' + prefabName + '/servicedefs';\n }\n return url;\n }\n\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isLiveSyncEnabled) {\n return next.handle(request);\n }\n const deployedUrl = this.app.deployedUrl;\n let url = request.url;\n url = this.urlsToLoadFromLive[url] || this.urlsToLoadFromLocal[url] || url;\n url = this.transformPrefabServicedefinitions(url);\n if (url.startsWith('//')) {\n url = deployedUrl.split('//')[0] + url;\n }\n if (url.indexOf('://') < 0\n || this.urlsToSkip.indexOf(url) >= 0) {\n url = deployedUrl + '/' + url;\n }\n request = request.clone({url: url});\n return next.handle(request);\n }\n\n private mashUpHtmlFile() {\n const localDir = cordova.file.cacheDirectory;\n return new Promise((resolve, reject) => {\n $.ajax({\n url: this.deployedUrl + 'index.html',\n dataType: 'html',\n success: resolve,\n error: reject\n });\n }).then((fileContent: string) => {\n const port = location.port ? ':' + location.port : '';\n let path = this.localAppUrl ||\n (`${location.protocol}//${location.hostname}${port}${location.pathname}`);\n let cordovaPath = path;\n if (cordovaPath.endsWith('.html')) {\n const splits = cordovaPath.split('/').slice(0, );\n cordovaPath = splits.slice(0, splits.length - 1).join('/');\n }\n cordovaPath += '/cordova.js';\n const mAppUrl = `${location.protocol}//${location.hostname}${port}${transformFileURI(localDir + 'live-index.html')}`;\n fileContent = fileContent.replace('cordova.js', cordovaPath);\n fileContent = fileContent.replace('<head>', `\n <head>\n <base href=\"${this.deployedUrl}\">\n <meta name=\"liveSync.deployedUrl\" value=\"${this.deployedUrl}\">\n <meta name=\"liveSync.syncAppUrl\" value=\"${mAppUrl}\">\n <meta name=\"liveSync.localAppUrl\" value=\"${path}\">`);\n return this.file.writeFile(localDir, 'live-index.html', fileContent, {\n replace: true\n }).then(() => mAppUrl);\n });\n }\n\n private getPlugins() {\n return new Promise((resolve, reject) => {\n $.get(this.deployedUrl + 'config.xml').done(function (res) {\n const plugins = {};\n $(res).find('plugin').each(function (p) {\n plugins[$(this).attr('name')] = $(this).attr('spec');\n });\n resolve(plugins);\n }).fail(reject);\n });\n }\n\n private hasPluginsChanged() {\n return this.deviceService.whenReady()\n .then(() => this.getPlugins())\n .then(plugins => {\n const pluginsInApk = this.settings.cordovaPlugins || {};\n return !!Object.keys(plugins)\n .find(k => !pluginsInApk[k] || pluginsInApk[k] !== plugins[k]);\n });\n }\n\n private launch() {\n return this.mashUpHtmlFile()\n .then((filePath) => {\n localStorage.setItem('WM.NetworkService.isConnected', 'true');\n localStorage.setItem('WM.NetworkService._autoConnect', 'true');\n sessionStorage.setItem('debugMode', 'true');\n\n setTimeout(() => {\n window.navigator.splashscreen.show();\n window.location.href = filePath;\n }, 2000);\n });\n }\n\n private patchSQLite() {\n // Offline sql is not supported.\n delete window['SQLitePlugin'];\n }\n\n private patchApp() {\n this.app.reload = () => {\n if (this.networkService.isConnected()){\n window.navigator.splashscreen.show();\n this.launch();\n }\n };\n window['reloadApp'] = this.app.reload;\n }\n\n private patchHistoryApi() {\n const location = this.syncAppUrl;\n const origReplace = window.history.replaceState;\n window.history.replaceState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origReplace.call(window.history, state, title, url);\n };\n const origPush = window.history.pushState;\n window.history.pushState = (state: any, title: string, url: string) => {\n if (url.startsWith('#')) {\n url = location + url;\n }\n origPush.call(window.history, state, title, url);\n };\n }\n\n public loadSettings() {\n const value = sessionStorage.getItem('wm.liveSync.settings');\n try {\n this.settings = value ? JSON.parse(value) : this.settings;\n } catch(e) {\n this.saveSettings();\n }\n }\n\n public saveSettings() {\n sessionStorage.setItem('wm.liveSync.settings', JSON.stringify(this.settings));\n }\n\n public renderUI() {\n if (this.settings.enabled) {\n this.hasPluginsChanged().then((changed) => {\n if (changed) {\n new DialogComponent({\n title: 'Require new build',\n info: 'Cordova Plugins in this app do not match with configuration of project in Studio.' +\n ' So, new Cordova Build is required for Live Sync to work properly.',\n iconClass: 'fa fa-warning fa-4x live-sync-warning-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n }\n });\n }\n new LiveSyncComponent(this.settings, () => {\n this.saveSettings();\n }).render();\n }\n\n}\n\nclass DialogComponent {\n private $ele: any = $('<div><div>');\n\n constructor(public options: {\n title? : string,\n info? : string,\n iconClass?: string,\n actions? : {\n title: string,\n action?: (dialog: DialogComponent) => void,\n primary?: boolean\n }[]\n }) {\n\n }\n\n dismiss() {\n this.$ele.remove();\n }\n\n render() {\n this.$ele = $(\n `<div class=\"live-sync-modal live-sync-control\">\n <div class=\"live-sync-info-container\">\n <span class=\"${this.options.iconClass}\">\n </span>\n <label class=\"live-sync-title\">\n ${this.options.title}\n </label>\n <label class=\"live-sync-description\">\n ${this.options.info}\n </label>\n <div class=\"live-sync-action-panel\">\n ${this.options.actions.map((a) => {\n return a ? `\n <button\n type=\"button\"\n class=\"live-sync-action ${a.primary ? ' live-sync-primary-action' : ''}\">\n ${a.title}\n </button>` : '';\n }).join('')}\n </div>\n </div>\n </div>\n `\n );\n $('body').append(this.$ele);\n const _this = this;\n this.$ele.find('.live-sync-action').each(function(index) {\n $(this).bind('click', () => {\n const action = _this.options.actions[index].action;\n if (action) {\n action(_this);\n }\n _this.dismiss();\n });\n });\n }\n}\n\nclass LiveSyncComponent {\n private $ele = $(\n `<div class=\"live-sync-control\">\n <button class=\"live-sync-control-btn\" type=\"button\">\n </button>\n </div>`);\n\n constructor(private settings: Settings, private onChange: () => void) {\n\n }\n\n private setPosition() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n const position = this.settings.position;\n if(position) {\n menuIcon.css('left', position.left + 'px');\n menuIcon.css('top', position.top + 'px');\n }\n }\n\n private listenForShowEvent() {\n $('body').bind('touchstart', () => {\n const timerId = setTimeout(() => {\n this.settings.show = true;\n this.onChange();\n this.showConfirmation();\n }, 5000);\n $('body').bind('touchend', () => {\n clearTimeout(timerId);\n });\n });\n }\n\n private showConfirmation() {\n new DialogComponent({\n title: 'Enable Live Sync?',\n info: 'App UI is pulled from studio. But, offline functionality is turned off.',\n iconClass: 'live-sync-control-icon',\n actions: [{\n title: 'No',\n action: () => {\n this.settings.show = false;\n this.onChange();\n this.showHelpInfo();\n }\n }, {\n title: 'Yes',\n action: () => {\n window.liveSync(true);\n },\n primary: true\n }]\n }).render();\n };\n\n private showHelpInfo() {\n new DialogComponent({\n title: '',\n info: 'Tap and hold anywhere for 5 seconds to turn on Live Sync.',\n iconClass: 'live-sync-retrieval-info-icon',\n actions: [{\n title: 'Got it',\n primary: true\n }]\n }).render();\n };\n\n private renderButton() {\n const menuIcon = this.$ele.find('.live-sync-control-btn');\n this.$ele.on('touchstart', (event) => {\n event.stopPropagation();\n let addClass = true;\n $(document).on('touchmove.liveSync', (event) => {\n var origEvent = event.originalEvent.touches[0];\n if (origEvent && origEvent.pageX) {\n this.settings.position = {\n left: origEvent.pageX,\n top: origEvent.pageY\n };\n }\n this.setPosition();\n if (addClass) {\n menuIcon.addClass('touched');\n addClass = false;\n }\n });\n $(document).one('touchend', (event) => {\n this.onChange();\n menuIcon.removeClass('touched');\n $(document).off('touchmove.liveSync');\n });\n });\n menuIcon.click(() => window.reloadApp());\n $('body').append(this.$ele);\n }\n\n public render() {\n this.setPosition();\n if (this.settings.enabled) {\n this.renderButton();\n } else if (this.settings.show) {\n this.showConfirmation();\n }\n this.listenForShowEvent();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\n\nimport { BasicModule } from '@wm/mobile/components/basic';\nimport { SearchModule } from '@wm/mobile/components/basic/search';\n\nimport { SegmentedControlModule } from '@wm/mobile/components/containers/segmented-control';\n\nimport { MediaListModule } from '@wm/mobile/components/data/media-list';\n\nimport { BarcodeScannerModule } from '@wm/mobile/components/device/barcode-scanner';\nimport { CameraModule } from '@wm/mobile/components/device/camera';\n\nimport { FileUploadModule } from '@wm/mobile/components/input/file-upload';\n\nimport { PageModule } from '@wm/mobile/components/page';\nimport { LeftPanelModule } from '@wm/mobile/components/page/left-panel';\nimport { MobileNavbarModule } from '@wm/mobile/components/page/mobile-navbar';\nimport { TabBarModule } from '@wm/mobile/components/page/tab-bar';\nimport { LiveSyncInterceptor } from './services/live-sync.service';\n\nexport const MOBILE_COMPONENT_MODULES_FOR_ROOT = [\n BasicModule,\n SearchModule,\n SegmentedControlModule,\n MediaListModule,\n BarcodeScannerModule,\n CameraModule,\n FileUploadModule,\n PageModule,\n LeftPanelModule,\n MobileNavbarModule,\n TabBarModule\n];\n\n@NgModule({\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: LiveSyncInterceptor,\n multi: true\n }]\n})\nexport class MobileRuntimeDynamicModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@awesome-cordova-plugins/app-version/ngx'), require('@awesome-cordova-plugins/barcode-scanner/ngx'), require('@awesome-cordova-plugins/calendar/ngx'), require('@awesome-cordova-plugins/camera/ngx'), require('@awesome-cordova-plugins/device/ngx'), require('@awesome-cordova-plugins/media-capture/ngx'), require('@awesome-cordova-plugins/geolocation/ngx'), require('@awesome-cordova-plugins/vibration/ngx'), require('@awesome-cordova-plugins/location-accuracy/ngx'), require('@awesome-cordova-plugins/diagnostic/ngx'), require('@wm/core'), require('@wm/mobile/core'), require('@wm/mobile/offline'), require('@wm/security'), require('@wm/variables'), require('@wm/mobile/components/basic')) :
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@awesome-cordova-plugins/app-version/ngx', '@awesome-cordova-plugins/barcode-scanner/ngx', '@awesome-cordova-plugins/calendar/ngx', '@awesome-cordova-plugins/camera/ngx', '@awesome-cordova-plugins/device/ngx', '@awesome-cordova-plugins/media-capture/ngx', '@awesome-cordova-plugins/geolocation/ngx', '@awesome-cordova-plugins/vibration/ngx', '@awesome-cordova-plugins/location-accuracy/ngx', '@awesome-cordova-plugins/diagnostic/ngx', '@wm/core', '@wm/mobile/core', '@wm/mobile/offline', '@wm/security', '@wm/variables', '@wm/mobile/components/basic'], factory) :
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.mobile = global.wm.mobile || {}, global.wm.mobile.variables = {}), global.ng.core, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.wm.core, global.wm.mobile.core, global.wm.mobile.offline, global.wm.security, global.wm.variables, global.wm.mobile.components.basic));
|
|
5
|
-
})(this, (function (exports, i0, i2, i3, i5, i6, i9, i11, i10, i13, i14, i15, i1, i7, i4, i12, variables, i8) { 'use strict';
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@awesome-cordova-plugins/app-version/ngx'), require('@awesome-cordova-plugins/barcode-scanner/ngx'), require('@awesome-cordova-plugins/calendar/ngx'), require('@awesome-cordova-plugins/camera/ngx'), require('@awesome-cordova-plugins/device/ngx'), require('@awesome-cordova-plugins/media-capture/ngx'), require('@awesome-cordova-plugins/geolocation/ngx'), require('@awesome-cordova-plugins/vibration/ngx'), require('@awesome-cordova-plugins/location-accuracy/ngx'), require('@awesome-cordova-plugins/diagnostic/ngx'), require('@wm/core'), require('@wm/mobile/core'), require('@wm/mobile/offline'), require('@wm/security'), require('@wm/variables'), require('lodash-es'), require('@wm/mobile/components/basic')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@awesome-cordova-plugins/app-version/ngx', '@awesome-cordova-plugins/barcode-scanner/ngx', '@awesome-cordova-plugins/calendar/ngx', '@awesome-cordova-plugins/camera/ngx', '@awesome-cordova-plugins/device/ngx', '@awesome-cordova-plugins/media-capture/ngx', '@awesome-cordova-plugins/geolocation/ngx', '@awesome-cordova-plugins/vibration/ngx', '@awesome-cordova-plugins/location-accuracy/ngx', '@awesome-cordova-plugins/diagnostic/ngx', '@wm/core', '@wm/mobile/core', '@wm/mobile/offline', '@wm/security', '@wm/variables', 'lodash-es', '@wm/mobile/components/basic'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.mobile = global.wm.mobile || {}, global.wm.mobile.variables = {}), global.ng.core, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.awesomeCordova.plugins, global.wm.core, global.wm.mobile.core, global.wm.mobile.offline, global.wm.security, global.wm.variables, global._, global.wm.mobile.components.basic));
|
|
5
|
+
})(this, (function (exports, i0, i2, i3, i5, i6, i9, i11, i10, i13, i14, i15, i1, i7, i4, i12, variables, lodashEs, i8) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function _interopNamespaceDefault(e) {
|
|
8
8
|
var n = Object.create(null);
|
|
@@ -153,8 +153,8 @@
|
|
|
153
153
|
encodingType: imageEncodingType,
|
|
154
154
|
mediaType: 0, // always picture
|
|
155
155
|
correctOrientation: dataBindings.get('correctOrientation'),
|
|
156
|
-
targetWidth:
|
|
157
|
-
targetHeight:
|
|
156
|
+
targetWidth: lodashEs.isNumber(imageTargetWidth) ? imageTargetWidth : undefined,
|
|
157
|
+
targetHeight: lodashEs.isNumber(imageTargetHeight) ? imageTargetHeight : undefined,
|
|
158
158
|
};
|
|
159
159
|
return this.camera.getPicture(cameraOptions).then(data => {
|
|
160
160
|
return { imagePath: data };
|
|
@@ -203,7 +203,14 @@
|
|
|
203
203
|
this.model = {};
|
|
204
204
|
this.properties = [
|
|
205
205
|
{ target: 'filePath', type: 'string', value: '', dataBinding: true },
|
|
206
|
-
{
|
|
206
|
+
{
|
|
207
|
+
target: 'fileType',
|
|
208
|
+
type: 'list',
|
|
209
|
+
options: lodashEs.mapValues(this._defaultFileTypesToOpen, 'label'),
|
|
210
|
+
value: 'pdf',
|
|
211
|
+
dataBinding: true,
|
|
212
|
+
hide: true
|
|
213
|
+
},
|
|
207
214
|
{ target: 'spinnerContext', hide: false },
|
|
208
215
|
{ target: 'spinnerMessage', hide: false }
|
|
209
216
|
];
|
|
@@ -252,7 +259,7 @@
|
|
|
252
259
|
};
|
|
253
260
|
return this.fileUploader.upload(serverUrl, 'files', filePath, fileName)
|
|
254
261
|
.then(uploadResponse => {
|
|
255
|
-
|
|
262
|
+
lodashEs.assignIn(data, JSON.parse(uploadResponse.text)[0]);
|
|
256
263
|
data.loaded = data.length;
|
|
257
264
|
return data;
|
|
258
265
|
});
|
|
@@ -518,7 +525,7 @@
|
|
|
518
525
|
.then(() => getOfflineChanges(this.changeLogService))
|
|
519
526
|
.then(changes => {
|
|
520
527
|
if (changes.pendingToSync.total <= 0) {
|
|
521
|
-
return Promise.reject(
|
|
528
|
+
return Promise.reject(lodashEs.clone(this.model));
|
|
522
529
|
}
|
|
523
530
|
}).then(() => {
|
|
524
531
|
if (variable.showProgress) {
|
|
@@ -566,7 +573,7 @@
|
|
|
566
573
|
* @returns {*}
|
|
567
574
|
*/
|
|
568
575
|
const addOldPropertiesForPushData = data => {
|
|
569
|
-
const result =
|
|
576
|
+
const result = lodashEs.clone(data);
|
|
570
577
|
result.success = data.successfulTaskCount;
|
|
571
578
|
result.error = data.failedTaskCount;
|
|
572
579
|
result.completed = data.completedTaskCount;
|
|
@@ -590,11 +597,11 @@
|
|
|
590
597
|
});
|
|
591
598
|
};
|
|
592
599
|
const generateChangeSet = (changes) => {
|
|
593
|
-
const createChanges =
|
|
600
|
+
const createChanges = lodashEs.filter(changes, c => {
|
|
594
601
|
return c.service === 'DatabaseService' &&
|
|
595
602
|
(c.operation === 'insertTableData'
|
|
596
603
|
|| c.operation === 'insertMultiPartTableData');
|
|
597
|
-
}), updateChanges =
|
|
604
|
+
}), updateChanges = lodashEs.filter(changes, c => {
|
|
598
605
|
return c.service === 'DatabaseService' &&
|
|
599
606
|
(c.operation === 'updateTableData'
|
|
600
607
|
|| c.operation === 'updateMultiPartTableData');
|
|
@@ -604,17 +611,17 @@
|
|
|
604
611
|
database: {
|
|
605
612
|
create: createChanges,
|
|
606
613
|
update: updateChanges,
|
|
607
|
-
delete:
|
|
614
|
+
delete: lodashEs.filter(changes, { service: 'DatabaseService', operation: 'deleteTableData' })
|
|
608
615
|
},
|
|
609
|
-
uploads:
|
|
616
|
+
uploads: lodashEs.filter(changes, { service: 'OfflineFileUploadService', operation: 'uploadToServer' })
|
|
610
617
|
};
|
|
611
618
|
};
|
|
612
619
|
const getOfflineChanges = (changeLogService) => {
|
|
613
620
|
return changeLogService.getChanges().then(changes => {
|
|
614
621
|
return {
|
|
615
622
|
'total': changes ? changes.length : 0,
|
|
616
|
-
'pendingToSync': generateChangeSet(
|
|
617
|
-
'failedToSync': generateChangeSet(
|
|
623
|
+
'pendingToSync': generateChangeSet(lodashEs.filter(changes, { 'hasError': 0 })),
|
|
624
|
+
'failedToSync': generateChangeSet(lodashEs.filter(changes, { 'hasError': 1 }))
|
|
618
625
|
};
|
|
619
626
|
});
|
|
620
627
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isNumber } from '
|
|
1
|
+
import { isNumber } from 'lodash-es';
|
|
2
2
|
import { DeviceVariableService } from '@wm/variables';
|
|
3
3
|
export class CameraService extends DeviceVariableService {
|
|
4
4
|
constructor(camera, mediaCapture) {
|
|
@@ -67,4 +67,4 @@ class CaptureVideoOperation {
|
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb2JpbGUvdmFyaWFibGVzL3NyYy9zZXJ2aWNlcy9jYW1lcmEtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxxQkFBcUIsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFaEYsTUFBTSxPQUFPLGFBQWMsU0FBUSxxQkFBcUI7SUFJcEQsWUFBWSxNQUFjLEVBQUUsWUFBMEI7UUFDbEQsS0FBSyxFQUFFLENBQUM7UUFKSSxTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2hCLGVBQVUsR0FBK0IsRUFBRSxDQUFDO1FBSXhELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQ2xELElBQUkscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0o7QUFFRCxNQUFNLHFCQUFxQjtJQWV2QixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWRsQixTQUFJLEdBQUcsY0FBYyxDQUFDO1FBQ3RCLFVBQUssR0FBRztZQUNwQixTQUFTLEVBQUUsK0NBQStDO1NBQzdELENBQUM7UUFDYyxlQUFVLEdBQUc7WUFDckIsRUFBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUM7WUFDNUUsRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDO1lBQ3RFLEVBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFF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QUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzVCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVELE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYW1lcmEgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvY2FtZXJhL25neCc7XG5pbXBvcnQgeyBNZWRpYUNhcHR1cmUgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbWVkaWEtY2FwdHVyZS9uZ3gnO1xuXG5pbXBvcnQge2lzTnVtYmVyfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgRGV2aWNlVmFyaWFibGVTZXJ2aWNlLCBJRGV2aWNlVmFyaWFibGVPcGVyYXRpb24gfSBmcm9tICdAd20vdmFyaWFibGVzJztcblxuZXhwb3J0IGNsYXNzIENhbWVyYVNlcnZpY2UgZXh0ZW5kcyBEZXZpY2VWYXJpYWJsZVNlcnZpY2Uge1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gJ2NhbWVyYSc7XG4gICAgcHVibGljIHJlYWRvbmx5IG9wZXJhdGlvbnM6IElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihjYW1lcmE6IENhbWVyYSwgbWVkaWFDYXB0dXJlOiBNZWRpYUNhcHR1cmUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gobmV3IENhcHR1cmVJbWFnZU9wZXJhdGlvbihjYW1lcmEpLFxuICAgICAgICAgICAgbmV3IENhcHR1cmVWaWRlb09wZXJhdGlvbihtZWRpYUNhcHR1cmUpKTtcbiAgICB9XG59XG5cbmNsYXNzIENhcHR1cmVJbWFnZU9wZXJhdGlvbiBpbXBsZW1lbnRzIElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbiB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnY2FwdHVyZUltYWdlJztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwgPSB7XG4gICAgICAgIGltYWdlUGF0aDogJ3Jlc291cmNlcy9pbWFnZXMvaW1hZ2VsaXN0cy9kZWZhdWx0LWltYWdlLnBuZydcbiAgICB9O1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAge3RhcmdldDogJ2FsbG93SW1hZ2VFZGl0JywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogZmFsc2UsIGRhdGFCaW5kaW5nOiB0cnVlfSxcbiAgICAgICAgICAgIHt0YXJnZXQ6ICdpbWFnZVF1YWxpdHknLCB0eXBlOiAnbnVtYmVyJywgdmFsdWU6IDgwLCBkYXRhQmluZGluZzogdHJ1ZX0sXG4gICAgICAgICAgICB7dGFyZ2V0OiAnaW1hZ2VFbmNvZGluZ1R5cGUnLCB0eXBlOiAnbGlzdCcsIG9wdGlvbnM6IHsnMCc6ICdKUEVHJywgJzEnOiAnUE5HJ30sIHZhbHVlOiAnMCcsIGRhdGFCaW5kaW5nOiB0cnVlfSxcbiAgICAgICAgICAgIHt0YXJnZXQ6ICdjb3JyZWN0T3JpZW50YXRpb24nLCB0eXBlOiAnYm9vbGVhbicsIHZhbHVlOiB0cnVlLCBkYXRhQmluZGluZzogdHJ1ZX0sXG4gICAgICAgICAgICB7dGFyZ2V0OiAnaW1hZ2VUYXJnZXRXaWR0aCcsIHR5cGU6ICdudW1iZXInLCBkYXRhQmluZGluZzogdHJ1ZX0sXG4gICAgICAgICAgICB7dGFyZ2V0OiAnaW1hZ2VUYXJnZXRIZWlnaHQnLCB0eXBlOiAnbnVtYmVyJywgZGF0YUJpbmRpbmc6IHRydWV9XG4gICAgICAgIF07XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVpcmVkQ29yZG92YVBsdWdpbnMgPSBbJ0NBTUVSQScsICdDQVBUVVJFJ107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbWVyYTogQ2FtZXJhKSB7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgaW52b2tlKHZhcmlhYmxlOiBhbnksIG9wdGlvbnM6IGFueSwgZGF0YUJpbmRpbmdzOiBNYXA8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VUYXJnZXRXaWR0aCA9IGRhdGFCaW5kaW5ncy5nZXQoJ2ltYWdlVGFyZ2V0V2lkdGgnKSxcbiAgICAgICAgICAgIGltYWdlVGFyZ2V0SGVpZ2h0ID0gZGF0YUJpbmRpbmdzLmdldCgnaW1hZ2VUYXJnZXRIZWlnaHQnKTtcbiAgICAgICAgbGV0IGltYWdlRW5jb2RpbmdUeXBlID0gcGFyc2VJbnQoZGF0YUJpbmRpbmdzLmdldCgnaW1hZ2VFbmNvZGluZ1R5cGUnKSwgMTApLFxuICAgICAgICAgICAgY2FtZXJhT3B0aW9ucztcbiAgICAgICAgaWYgKGlzTmFOKGltYWdlRW5jb2RpbmdUeXBlKSkge1xuICAgICAgICAgICAgaW1hZ2VFbmNvZGluZ1R5cGUgPSAoZGF0YUJpbmRpbmdzLmdldCgnaW1hZ2VFbmNvZGluZ1R5cGUnKSA9PT0gJ0pQRUcnID8gMCA6IDEpO1xuICAgICAgICB9XG4gICAgICAgIGNhbWVyYU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgcXVhbGl0eSAgICAgICAgICAgOiBkYXRhQmluZGluZ3MuZ2V0KCdpbWFnZVF1YWxpdHknKSxcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblR5cGUgICA6IDEsIC8vIG9ubHkgZmlsZSB1cmxcbiAgICAgICAgICAgICAgICBzb3VyY2VUeXBlICAgICAgICA6IDEsIC8vIGNhbWVyYVxuICAgICAgICAgICAgICAgIGFsbG93RWRpdCAgICAgICAgIDogZGF0YUJpbmRpbmdzLmdldCgnYWxsb3dJbWFnZUVkaXQnKSxcbiAgICAgICAgICAgICAgICBlbmNvZGluZ1R5cGUgICAgICA6IGltYWdlRW5jb2RpbmdUeXBlLFxuICAgICAgICAgICAgICAgIG1lZGlhVHlwZSAgICAgICAgIDogMCwgLy8gYWx3YXlzIHBpY3R1cmVcbiAgICAgICAgICAgICAgICBjb3JyZWN0T3JpZW50YXRpb246IGRhdGFCaW5kaW5ncy5nZXQoJ2NvcnJlY3RPcmllbnRhdGlvbicpLFxuICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoICAgICAgIDogaXNOdW1iZXIoaW1hZ2VUYXJnZXRXaWR0aCkgPyAgaW1hZ2VUYXJnZXRXaWR0aCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0YXJnZXRIZWlnaHQgICAgICA6IGlzTnVtYmVyKGltYWdlVGFyZ2V0SGVpZ2h0KSA/IGltYWdlVGFyZ2V0SGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FtZXJhLmdldFBpY3R1cmUoY2FtZXJhT3B0aW9ucykudGhlbiggZGF0YSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge2ltYWdlUGF0aDogZGF0YX07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuY2xhc3MgQ2FwdHVyZVZpZGVvT3BlcmF0aW9uIGltcGxlbWVudHMgSURldmljZVZhcmlhYmxlT3BlcmF0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9ICdjYXB0dXJlVmlkZW8nO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHtcbiAgICAgICAgdmlkZW9QYXRoOiAnJ1xuICAgIH07XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3BlcnRpZXMgPSBbXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWlyZWRDb3Jkb3ZhUGx1Z2lucyA9IFsnQ0FNRVJBJywgJ0NBUFRVUkUnXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVkaWFDYXB0dXJlOiBNZWRpYUNhcHR1cmUpIHtcblxuICAgIH1cblxuICAgIHB1YmxpYyBpbnZva2UodmFyaWFibGU6IGFueSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFDYXB0dXJlLmNhcHR1cmVWaWRlbyh7XG4gICAgICAgICAgICBsaW1pdCA6IDFcbiAgICAgICAgfSkudGhlbiggZGF0YSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGRhdGFbMF0uZnVsbFBhdGg7XG4gICAgICAgICAgICBwYXRoID0gKHBhdGguc3RhcnRzV2l0aCgnZmlsZTovLycpID8gJycgOiAnZmlsZTovLycpICsgcGF0aDtcbiAgICAgICAgICAgIHJldHVybiB7dmlkZW9QYXRoOiBwYXRofTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { noop, toPromise } from '@wm/core';
|
|
2
2
|
import { DeviceVariableService, initiateCallback, VARIABLE_CONSTANTS } from '@wm/variables';
|
|
3
|
+
import { clone, filter } from "lodash-es";
|
|
3
4
|
const APP_IS_OFFLINE = 'App is offline.';
|
|
4
5
|
const OFFLINE_PLUGIN_NOT_FOUND = 'Offline DB Plugin is required, but missing.';
|
|
5
6
|
const ON_BEFORE_BLOCKED = 'onBefore callback returned false.';
|
|
@@ -259,7 +260,7 @@ class PushOperation {
|
|
|
259
260
|
.then(() => getOfflineChanges(this.changeLogService))
|
|
260
261
|
.then(changes => {
|
|
261
262
|
if (changes.pendingToSync.total <= 0) {
|
|
262
|
-
return Promise.reject(
|
|
263
|
+
return Promise.reject(clone(this.model));
|
|
263
264
|
}
|
|
264
265
|
}).then(() => {
|
|
265
266
|
if (variable.showProgress) {
|
|
@@ -307,7 +308,7 @@ class PushOperation {
|
|
|
307
308
|
* @returns {*}
|
|
308
309
|
*/
|
|
309
310
|
const addOldPropertiesForPushData = data => {
|
|
310
|
-
const result =
|
|
311
|
+
const result = clone(data);
|
|
311
312
|
result.success = data.successfulTaskCount;
|
|
312
313
|
result.error = data.failedTaskCount;
|
|
313
314
|
result.completed = data.completedTaskCount;
|
|
@@ -331,11 +332,11 @@ const canExecute = (variable, networkService, securityService) => {
|
|
|
331
332
|
});
|
|
332
333
|
};
|
|
333
334
|
const generateChangeSet = (changes) => {
|
|
334
|
-
const createChanges =
|
|
335
|
+
const createChanges = filter(changes, c => {
|
|
335
336
|
return c.service === 'DatabaseService' &&
|
|
336
337
|
(c.operation === 'insertTableData'
|
|
337
338
|
|| c.operation === 'insertMultiPartTableData');
|
|
338
|
-
}), updateChanges =
|
|
339
|
+
}), updateChanges = filter(changes, c => {
|
|
339
340
|
return c.service === 'DatabaseService' &&
|
|
340
341
|
(c.operation === 'updateTableData'
|
|
341
342
|
|| c.operation === 'updateMultiPartTableData');
|
|
@@ -345,18 +346,18 @@ const generateChangeSet = (changes) => {
|
|
|
345
346
|
database: {
|
|
346
347
|
create: createChanges,
|
|
347
348
|
update: updateChanges,
|
|
348
|
-
delete:
|
|
349
|
+
delete: filter(changes, { service: 'DatabaseService', operation: 'deleteTableData' })
|
|
349
350
|
},
|
|
350
|
-
uploads:
|
|
351
|
+
uploads: filter(changes, { service: 'OfflineFileUploadService', operation: 'uploadToServer' })
|
|
351
352
|
};
|
|
352
353
|
};
|
|
353
354
|
const getOfflineChanges = (changeLogService) => {
|
|
354
355
|
return changeLogService.getChanges().then(changes => {
|
|
355
356
|
return {
|
|
356
357
|
'total': changes ? changes.length : 0,
|
|
357
|
-
'pendingToSync': generateChangeSet(
|
|
358
|
-
'failedToSync': generateChangeSet(
|
|
358
|
+
'pendingToSync': generateChangeSet(filter(changes, { 'hasError': 0 })),
|
|
359
|
+
'failedToSync': generateChangeSet(filter(changes, { 'hasError': 1 }))
|
|
359
360
|
};
|
|
360
361
|
});
|
|
361
362
|
};
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXN5bmMtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vYmlsZS92YXJpYWJsZXMvc3JjL3NlcnZpY2VzL2RhdGFzeW5jLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFPLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJaEQsT0FBTyxFQUFFLHFCQUFxQixFQUE0QixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt0SCxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztBQUN6QyxNQUFNLHdCQUF3QixHQUFHLDZDQUE2QyxDQUFDO0FBQy9FLE1BQU0saUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7QUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVuRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxxQkFBcUI7SUFJdEQsWUFBWSxHQUFRLEVBQ1IsZ0JBQWtDLEVBQ2xDLG1CQUF3QyxFQUN4Qyx3QkFBa0QsRUFDbEQsc0JBQThDLEVBQzlDLHdCQUFrRCxFQUNsRCxlQUFnQyxFQUNoQyxjQUE4QjtRQUN0QyxLQUFLLEVBQUUsQ0FBQztRQVhJLFNBQUksR0FBRyxVQUFVLENBQUM7UUFDbEIsZUFBVSxHQUErQixFQUFFLENBQUM7UUFXeEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7UUFDM0YsSUFB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QUFNLEVBQUUsYUFBYTtZQUNyQixNQUFNLEVBQUUsYUFBYTtZQUNyQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFDLENBQUM7U0FDeEY7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFDLENBQUM7S0FDakcsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxnQkFBa0MsRUFBRSxFQUFFO0lBQzdELE9BQU8sZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2hELE9BQU87WUFDSCxPQUFPLEVBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLGVBQWUsRUFBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFDLFVBQVUsRUFBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQ3hFLGNBQWMsRUFBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFDLFVBQVUsRUFBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1NBQzFFLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcCwgbm9vcCwgdG9Qcm9taXNlIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICdAd20vbW9iaWxlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVNlbGVjdG9yU2VydmljZSwgUHJvY2Vzc0FwaSwgUHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnQHdtL21vYmlsZS9jb21wb25lbnRzL2Jhc2ljJztcbmltcG9ydCB7IENoYW5nZSwgQ2hhbmdlTG9nU2VydmljZSwgTG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlLCBMb2NhbERCRGF0YVB1bGxTZXJ2aWNlLCBQdXNoSW5mbywgUHVsbEluZm8gfSBmcm9tICdAd20vbW9iaWxlL29mZmxpbmUnO1xuaW1wb3J0IHsgRGV2aWNlVmFyaWFibGVTZXJ2aWNlLCBJRGV2aWNlVmFyaWFibGVPcGVyYXRpb24sIGluaXRpYXRlQ2FsbGJhY2ssIFZBUklBQkxFX0NPTlNUQU5UUyB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcblxuZGVjbGFyZSBjb25zdCBfO1xuXG5jb25zdCBBUFBfSVNfT0ZGTElORSA9ICdBcHAgaXMgb2ZmbGluZS4nO1xuY29uc3QgT0ZGTElORV9QTFVHSU5fTk9UX0ZPVU5EID0gJ09mZmxpbmUgREIgUGx1Z2luIGlzIHJlcXVpcmVkLCBidXQgbWlzc2luZy4nO1xuY29uc3QgT05fQkVGT1JFX0JMT0NLRUQgPSAnb25CZWZvcmUgY2FsbGJhY2sgcmV0dXJuZWQgZmFsc2UuJztcbmNvbnN0IFJFUVVJUkVEX1BMVUdJTlMgPSBbJ09GRkxJTkVfREInLCAnTkVUV09SSyddO1xuXG5leHBvcnQgY2xhc3MgRGF0YXN5bmNTZXJ2aWNlIGV4dGVuZHMgRGV2aWNlVmFyaWFibGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9ICdkYXRhc3luYyc7XG4gICAgcHVibGljIHJlYWRvbmx5IG9wZXJhdGlvbnM6IElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCxcbiAgICAgICAgICAgICAgICBjaGFuZ2VMb2dTZXJ2aWNlOiBDaGFuZ2VMb2dTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGZpbGVTZWxlY3RvclNlcnZpY2U6IEZpbGVTZWxlY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgbG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlOiBMb2NhbERCTWFuYWdlbWVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgbG9jYWxEQkRhdGFQdWxsU2VydmljZTogTG9jYWxEQkRhdGFQdWxsU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzTWFuYWdlbWVudFNlcnZpY2U6IFByb2Nlc3NNYW5hZ2VtZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgICAgICAgICBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gobmV3IEV4cG9ydERCT3BlcmF0aW9uKGxvY2FsREJNYW5hZ2VtZW50U2VydmljZSkpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMucHVzaChuZXcgR2V0T2ZmbGluZUNoYW5nZXNPcGVyYXRpb24oY2hhbmdlTG9nU2VydmljZSkpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMucHVzaChuZXcgSW1wb3J0REJPcGVyYXRpb24oZmlsZVNlbGVjdG9yU2VydmljZSwgbG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlKSk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKG5ldyBMYXN0UHVsbEluZm9PcGVyYXRpb24obG9jYWxEQkRhdGFQdWxsU2VydmljZSkpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMucHVzaChuZXcgTGFzdFB1c2hJbmZvT3BlcmF0aW9uKGNoYW5nZUxvZ1NlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gobmV3IFB1bGxPcGVyYXRpb24oYXBwLCBwcm9jZXNzTWFuYWdlbWVudFNlcnZpY2UsIG5ldHdvcmtTZXJ2aWNlLCBzZWN1cml0eVNlcnZpY2UsIGxvY2FsREJEYXRhUHVsbFNlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gobmV3IFB1c2hPcGVyYXRpb24oYXBwLCBjaGFuZ2VMb2dTZXJ2aWNlLCBwcm9jZXNzTWFuYWdlbWVudFNlcnZpY2UsIG5ldHdvcmtTZXJ2aWNlLCBzZWN1cml0eVNlcnZpY2UpKTtcbiAgICB9XG59XG5cbmNsYXNzIEV4cG9ydERCT3BlcmF0aW9uIGltcGxlbWVudHMgSURldmljZVZhcmlhYmxlT3BlcmF0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9ICdleHBvcnREQic7XG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsID0ge3BhdGg6ICcnfTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvcGVydGllcyA9IFtcbiAgICAgICAge3RhcmdldDogJ3NwaW5uZXJDb250ZXh0JywgaGlkZTogZmFsc2V9LFxuICAgICAgICB7dGFyZ2V0OiAnc3Bpbm5lck1lc3NhZ2UnLCBoaWRlOiBmYWxzZX1cbiAgICBdO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1aXJlZENvcmRvdmFQbHVnaW5zID0gUkVRVUlSRURfUExVR0lOUztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlOiBMb2NhbERCTWFuYWdlbWVudFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW52b2tlKHZhcmlhYmxlOiBhbnksIG9wdGlvbnM6IGFueSwgZGF0YUJpbmRpbmdzOiBNYXA8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHdpbmRvd1snU1FMaXRlUGx1Z2luJ10pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsREJNYW5hZ2VtZW50U2VydmljZS5leHBvcnREQigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChPRkZMSU5FX1BMVUdJTl9OT1RfRk9VTkQpO1xuICAgIH1cbn1cblxuXG5jbGFzcyBHZXRPZmZsaW5lQ2hhbmdlc09wZXJhdGlvbiBpbXBsZW1lbnRzIElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbiB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgREFUQV9DSEFOR0VfVEVNUExBVEUgPSB7XG4gICAgICAgIHNlcnZpY2U6ICdEYXRhYmFzZVNlcnZpY2UnLFxuICAgICAgICBvcGVyYXRpb246ICdvcGVyYXRpb24nLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgICAgZGF0YU1vZGVsTmFtZTogJ2RhdGFNb2RlbE5hbWUnLFxuICAgICAgICAgICAgZW50aXR5TmFtZTogJ2VudGl0eU5hbWUnXG4gICAgICAgIH0sXG4gICAgICAgIGhhc0Vycm9yOiAwLFxuICAgICAgICBlcnJvck1lc3NhZ2U6ICcnXG4gICAgfTtcbiAgICBwcml2YXRlIHN0YXRpYyBDSEFOR0VfTE9HX1NFVCA9IHtcbiAgICAgICAgdG90YWw6IDAsXG4gICAgICAgIGRhdGFiYXNlOiB7XG4gICAgICAgICAgICBjcmVhdGU6IFtHZXRPZmZsaW5lQ2hhbmdlc09wZXJhdGlvbi5EQVRBX0NIQU5HRV9URU1QTEFURV0sXG4gICAgICAgICAgICB1cGRhdGU6IFtHZXRPZmZsaW5lQ2hhbmdlc09wZXJhdGlvbi5EQVRBX0NIQU5HRV9URU1QTEFURV0sXG4gICAgICAgICAgICBkZWxldGU6IFtHZXRPZmZsaW5lQ2hhbmdlc09wZXJhdGlvbi5EQVRBX0NIQU5HRV9URU1QTEFURV1cbiAgICAgICAgfSxcbiAgICAgICAgdXBsb2FkczogW3tcbiAgICAgICAgICAgIHNlcnZpY2U6ICdPZmZsaW5lRmlsZVVwbG9hZFNlcnZpY2UnLFxuICAgICAgICAgICAgb3BlcmF0aW9uOiAndXBsb2FkVG9TZXJ2ZXInLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgZmlsZTogJ2xvY2FsRmlsZVBhdGgnLFxuICAgICAgICAgICAgICAgIHNlcnZlclVybDogJ3NlcnZlclVybCcsXG4gICAgICAgICAgICAgICAgZnRPcHRpb25zOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc0Vycm9yOiAwLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiAnJ1xuICAgICAgICB9XVxuICAgIH07XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnZ2V0T2ZmbGluZUNoYW5nZXMnO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHtcbiAgICAgICAgdG90YWw6IDAsXG4gICAgICAgIHBlbmRpbmdUb1N5bmM6IEdldE9mZmxpbmVDaGFuZ2VzT3BlcmF0aW9uLkNIQU5HRV9MT0dfU0VULFxuICAgICAgICBmYWlsZWRUb1N5bmM6IEdldE9mZmxpbmVDaGFuZ2VzT3BlcmF0aW9uLkNIQU5HRV9MT0dfU0VUXG4gICAgfTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvcGVydGllcyA9IFtcbiAgICAgICAge3RhcmdldDogJ3N0YXJ0VXBkYXRlJywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogdHJ1ZSwgaGlkZTogdHJ1ZX0sXG4gICAgICAgIHt0YXJnZXQ6ICdhdXRvVXBkYXRlJywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogdHJ1ZSwgaGlkZTogdHJ1ZX1cbiAgICBdO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1aXJlZENvcmRvdmFQbHVnaW5zID0gUkVRVUlSRURfUExVR0lOUztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlTG9nU2VydmljZTogQ2hhbmdlTG9nU2VydmljZSkge1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnZva2UodmFyaWFibGU6IGFueSwgb3B0aW9uczogYW55LCBkYXRhQmluZGluZ3M6IE1hcDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAod2luZG93WydTUUxpdGVQbHVnaW4nXSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldE9mZmxpbmVDaGFuZ2VzKHRoaXMuY2hhbmdlTG9nU2VydmljZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KE9GRkxJTkVfUExVR0lOX05PVF9GT1VORCk7XG4gICAgfVxufVxuXG5jbGFzcyBMYXN0UHVsbEluZm9PcGVyYXRpb24gaW1wbGVtZW50cyBJRGV2aWNlVmFyaWFibGVPcGVyYXRpb24ge1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gJ2xhc3RQdWxsSW5mbyc7XG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsID0ge1xuICAgICAgICBkYXRhYmFzZXMgOiBbe1xuICAgICAgICAgICAgbmFtZSA6ICdkYXRiYXNlTmFtZScsXG4gICAgICAgICAgICBlbnRpdGllczogW3tcbiAgICAgICAgICAgICAgICBlbnRpdHlOYW1lOiAnZW50aXR5TmFtZScsXG4gICAgICAgICAgICAgICAgcHVsbGVkUmVjb3JkQ291bnQ6IDBcbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgcHVsbGVkUmVjb3JkQ291bnQ6IDBcbiAgICAgICAgfV0sXG4gICAgICAgIHRvdGFsUHVsbGVkUmVjb3JkQ291bnQ6IDAsXG4gICAgICAgIHN0YXJ0VGltZTogbmV3IERhdGUoKS50b0pTT04oKSxcbiAgICAgICAgZW5kVGltZTogbmV3IERhdGUoKS50b0pTT04oKVxuICAgIH07XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3BlcnRpZXMgPSBbXG4gICAgICAgIHt0YXJnZXQ6ICdzdGFydFVwZGF0ZScsIHR5cGU6ICdib29sZWFuJywgdmFsdWU6IHRydWUsIGhpZGU6IHRydWV9LFxuICAgICAgICB7dGFyZ2V0OiAnc3Bpbm5lckNvbnRleHQnLCBoaWRlOiBmYWxzZX0sXG4gICAgICAgIHt0YXJnZXQ6ICdzcGlubmVyTWVzc2FnZScsIGhpZGU6IGZhbHNlfVxuICAgIF07XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVpcmVkQ29yZG92YVBsdWdpbnMgPSBSRVFVSVJFRF9QTFVHSU5TO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2NhbERCRGF0YVB1bGxTZXJ2aWNlOiBMb2NhbERCRGF0YVB1bGxTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGludm9rZSh2YXJpYWJsZTogYW55LCBvcHRpb25zOiBhbnksIGRhdGFCaW5kaW5nczogTWFwPHN0cmluZywgYW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh3aW5kb3dbJ1NRTGl0ZVBsdWdpbiddKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbERCRGF0YVB1bGxTZXJ2aWNlLmdldExhc3RQdWxsSW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChPRkZMSU5FX1BMVUdJTl9OT1RfRk9VTkQpO1xuICAgIH1cbn1cblxuY2xhc3MgTGFzdFB1c2hJbmZvT3BlcmF0aW9uIGltcGxlbWVudHMgSURldmljZVZhcmlhYmxlT3BlcmF0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9ICdsYXN0UHVzaEluZm8nO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHtcbiAgICAgICAgc3VjY2Vzc2Z1bFRhc2tDb3VudDogMCxcbiAgICAgICAgZmFpbGVkVGFza0NvdW50OiAwLFxuICAgICAgICBjb21wbGV0ZWRUYXNrQ291bnQ6IDAsXG4gICAgICAgIHRvdGFsVGFza0NvdW50OiAwLFxuICAgICAgICBzdGFydFRpbWU6IG5ldyBEYXRlKCkudG9KU09OKCksXG4gICAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKCkudG9KU09OKClcbiAgICB9O1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9wZXJ0aWVzID0gW1xuICAgICAgICB7dGFyZ2V0OiAnc3RhcnRVcGRhdGUnLCB0eXBlOiAnYm9vbGVhbicsIHZhbHVlOiB0cnVlLCBoaWRlOiB0cnVlfSxcbiAgICAgICAge3RhcmdldDogJ3NwaW5uZXJDb250ZXh0JywgaGlkZTogZmFsc2V9LFxuICAgICAgICB7dGFyZ2V0OiAnc3Bpbm5lck1lc3NhZ2UnLCBoaWRlOiBmYWxzZX1cbiAgICBdO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1aXJlZENvcmRvdmFQbHVnaW5zID0gUkVRVUlSRURfUExVR0lOUztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlTG9nU2VydmljZTogQ2hhbmdlTG9nU2VydmljZSkge1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnZva2UodmFyaWFibGU6IGFueSwgb3B0aW9uczogYW55LCBkYXRhQmluZGluZ3M6IE1hcDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAod2luZG93WydTUUxpdGVQbHVnaW4nXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlTG9nU2VydmljZS5nZXRMYXN0UHVzaEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoT0ZGTElORV9QTFVHSU5fTk9UX0ZPVU5EKTtcbiAgICB9XG59XG5cbmNsYXNzIEltcG9ydERCT3BlcmF0aW9uIGltcGxlbWVudHMgSURldmljZVZhcmlhYmxlT3BlcmF0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9ICdpbXBvcnREQic7XG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsID0ge307XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3BlcnRpZXMgPSBbXG4gICAgICAgIHt0YXJnZXQ6ICdzcGlubmVyQ29udGV4dCcsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ3NwaW5uZXJNZXNzYWdlJywgaGlkZTogZmFsc2V9XG4gICAgXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWlyZWRDb3Jkb3ZhUGx1Z2lucyA9IFJFUVVJUkVEX1BMVUdJTlM7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBmaWxlU2VsZWN0b3JTZXJ2aWNlOiBGaWxlU2VsZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvY2FsREJNYW5hZ2VtZW50U2VydmljZTogTG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGludm9rZSh2YXJpYWJsZTogYW55LCBvcHRpb25zOiBhbnksIGRhdGFCaW5kaW5nczogTWFwPHN0cmluZywgYW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh3aW5kb3dbJ1NRTGl0ZVBsdWdpbiddKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlU2VsZWN0b3JTZXJ2aWNlLnNlbGVjdEZpbGVzKGZhbHNlLCAgJ3ppcCcpXG4gICAgICAgICAgICAgICAgLnRoZW4oZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlLmltcG9ydERCKGZpbGVzWzBdLnBhdGgsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChPRkZMSU5FX1BMVUdJTl9OT1RfRk9VTkQpO1xuICAgIH1cbn1cblxuY2xhc3MgUHVsbE9wZXJhdGlvbiBpbXBsZW1lbnRzIElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbiB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAncHVsbCc7XG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsID0ge1xuICAgICAgICB0b3RhbFRhc2tDb3VudDogMCxcbiAgICAgICAgY29tcGxldGVkVGFza0NvdW50OiAwLFxuICAgICAgICBpblByb2dyZXNzOiBmYWxzZVxuICAgIH07XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3BlcnRpZXMgPSBbXG4gICAgICAgIHt0YXJnZXQ6ICdjbGVhckRhdGEnLCB0eXBlOiAnYm9vbGVhbicsIHdpZGdldHR5cGU6ICdib29sZWFuLWlucHV0Zmlyc3QnLCB2YWx1ZTogdHJ1ZSwgZ3JvdXA6ICdwcm9wZXJ0aWVzJywgc3ViR3JvdXA6ICdiZWhhdmlvcid9LFxuICAgICAgICB7dGFyZ2V0OiAnc3RhcnRVcGRhdGUnLCB0eXBlOiAnYm9vbGVhbicsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ29uQmVmb3JlJywgaGlkZTogZmFsc2V9LFxuICAgICAgICB7dGFyZ2V0OiAnb25Qcm9ncmVzcycsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ3Nob3dQcm9ncmVzcycsIGhpZGU6IGZhbHNlfVxuICAgIF07XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVpcmVkQ29yZG92YVBsdWdpbnMgPSBSRVFVSVJFRF9QTFVHSU5TO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYXBwOiBBcHAsXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlOiBQcm9jZXNzTWFuYWdlbWVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvY2FsREJEYXRhUHVsbFNlcnZpY2U6IExvY2FsREJEYXRhUHVsbFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW52b2tlKHZhcmlhYmxlOiBhbnksIG9wdGlvbnM6IGFueSwgZGF0YUJpbmRpbmdzOiBNYXA8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgbGV0IHByb2dyZXNzSW5zdGFuY2U7XG4gICAgICAgIHJldHVybiBjYW5FeGVjdXRlKHZhcmlhYmxlLCB0aGlzLm5ldHdvcmtTZXJ2aWNlLCB0aGlzLnNlY3VyaXR5U2VydmljZSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuc2hvd1Byb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNYW5hZ2VtZW50U2VydmljZS5jcmVhdGVJbnN0YW5jZSh0aGlzLmFwcC5hcHBMb2NhbGUuTEFCRUxfREFUQV9QVUxMX1BST0dSRVNTLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KS50aGVuKChpbnN0YW5jZTogUHJvY2Vzc0FwaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzT2JzZXJ2ZXI6IE9ic2VydmVyPFB1bGxJbmZvPiA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKHB1bGxJbmZvOiBQdWxsSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUuZGF0YVNldCA9IHByb2dyZXNzOyBUb2RvOiBwcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhdGVDYWxsYmFjaygnb25Qcm9ncmVzcycsIHZhcmlhYmxlLCBwdWxsSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2Uuc2V0KCdtYXgnLCBwdWxsSW5mby50b3RhbFJlY29yZHNUb1B1bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2Uuc2V0KCd2YWx1ZScsIHB1bGxJbmZvLnRvdGFsUHVsbGVkUmVjb3JkQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvcjogbm9vcCwgY29tcGxldGU6IG5vb3B9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYXJEYXRhID0gdmFyaWFibGUuY2xlYXJEYXRhID09PSAndHJ1ZScgfHwgdmFyaWFibGUuY2xlYXJEYXRhID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwdWxsUHJvbWlzZSA9IHRoaXMubG9jYWxEQkRhdGFQdWxsU2VydmljZS5wdWxsQWxsRGJEYXRhKGNsZWFyRGF0YSwgcHJvZ3Jlc3NPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NJbnN0YW5jZS5zZXQoJ3N0b3BCdXR0b25MYWJlbCcsIHRoaXMuYXBwLmFwcExvY2FsZS5MQUJFTF9EQVRBX1BVTExfUFJPR1JFU1NfU1RPUF9CVE4pO1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlLnNldCgnb25TdG9wJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbERCRGF0YVB1bGxTZXJ2aWNlLmNhbmNlbChwdWxsUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwdWxsUHJvbWlzZTtcbiAgICAgICAgfSkuY2F0Y2gocHVsbEluZm8gPT4gcHVsbEluZm8pXG4gICAgICAgICAgICAudGhlbihwdWxsSW5mbyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwdWxsSW5mbztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cblxuY2xhc3MgUHVzaE9wZXJhdGlvbiBpbXBsZW1lbnRzIElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbiB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAncHVzaCc7XG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsID0ge1xuICAgICAgICBzdWNjZXNzZnVsVGFza0NvdW50OiAwLFxuICAgICAgICBmYWlsZWRUYXNrQ291bnQ6IDAsXG4gICAgICAgIGNvbXBsZXRlZFRhc2tDb3VudDogMCxcbiAgICAgICAgdG90YWxUYXNrQ291bnQ6IDAsXG4gICAgICAgIGluUHJvZ3Jlc3M6IGZhbHNlXG4gICAgfTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvcGVydGllcyA9IFtcbiAgICAgICAge3RhcmdldDogJ29uQmVmb3JlJywgaGlkZTogZmFsc2V9LFxuICAgICAgICB7dGFyZ2V0OiAnb25Qcm9ncmVzcycsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ3Nob3dQcm9ncmVzcycsICdoaWRlJzogZmFsc2UsICd2YWx1ZSc6IHRydWV9XG4gICAgXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWlyZWRDb3Jkb3ZhUGx1Z2lucyA9IFJFUVVJUkVEX1BMVUdJTlM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcDogQXBwLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlTG9nU2VydmljZTogQ2hhbmdlTG9nU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2Nlc3NNYW5hZ2VtZW50U2VydmljZTogUHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW52b2tlKHZhcmlhYmxlOiBhbnksIG9wdGlvbnM6IGFueSwgZGF0YUJpbmRpbmdzOiBNYXA8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgbGV0IHByb2dyZXNzSW5zdGFuY2U7XG4gICAgICAgIGlmICh0aGlzLmNoYW5nZUxvZ1NlcnZpY2UuaXNGbHVzaEluUHJvZ3Jlc3MoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5FeGVjdXRlKHZhcmlhYmxlLCB0aGlzLm5ldHdvcmtTZXJ2aWNlLCB0aGlzLnNlY3VyaXR5U2VydmljZSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGdldE9mZmxpbmVDaGFuZ2VzKHRoaXMuY2hhbmdlTG9nU2VydmljZSkpXG4gICAgICAgICAgICAudGhlbihjaGFuZ2VzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlcy5wZW5kaW5nVG9TeW5jLnRvdGFsIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KF8uY2xvbmUodGhpcy5tb2RlbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS5zaG93UHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKHRoaXMuYXBwLmFwcExvY2FsZS5MQUJFTF9EQVRBX1BVU0hfUFJPR1JFU1MsIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pLnRoZW4oKGluc3RhbmNlOiBQcm9jZXNzQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3NPYnNlcnZlcjogT2JzZXJ2ZXI8UHVzaEluZm8+ID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAocHVzaEluZm86IFB1c2hJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoSW5mbyA9IGFkZE9sZFByb3BlcnRpZXNGb3JQdXNoRGF0YShwdXNoSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKCdvblByb2dyZXNzJywgdmFyaWFibGUsIHB1c2hJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0luc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NJbnN0YW5jZS5zZXQoJ21heCcsIHB1c2hJbmZvLnRvdGFsVGFza0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlLnNldCgndmFsdWUnLCBwdXNoSW5mby5jb21wbGV0ZWRUYXNrQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvcjogbm9vcCwgY29tcGxldGU6IG5vb3B9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1c2hQcm9taXNlID0gdGhpcy5jaGFuZ2VMb2dTZXJ2aWNlLmZsdXNoKHByb2dyZXNzT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2Uuc2V0KCdzdG9wQnV0dG9uTGFiZWwnLCB0aGlzLmFwcC5hcHBMb2NhbGUuTEFCRUxfREFUQV9QVVNIX1BST0dSRVNTX1NUT1BfQlROKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NJbnN0YW5jZS5zZXQoJ29uU3RvcCcsICgpID0+IHRoaXMuY2hhbmdlTG9nU2VydmljZS5zdG9wKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaFByb21pc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKHB1c2hJbmZvID0+IHB1c2hJbmZvKVxuICAgICAgICAgICAgLnRoZW4ocHVzaEluZm8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0luc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHVzaEluZm8gJiYgcHVzaEluZm8udG90YWxUYXNrQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBwdXNoSW5mbyA9IGFkZE9sZFByb3BlcnRpZXNGb3JQdXNoRGF0YShwdXNoSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwdXNoSW5mby5mYWlsZWRUYXNrQ291bnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChwdXNoSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1c2hJbmZvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocHVzaEluZm8pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgb2xkIHByb3BlcnRpZXMgdG8gdGhlIHB1c2ggZGF0YVNldCB0byBzdXBwb3J0IG9sZCBwcm9qZWN0cy5cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuY29uc3QgYWRkT2xkUHJvcGVydGllc0ZvclB1c2hEYXRhID0gZGF0YSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gXy5jbG9uZShkYXRhKTtcbiAgICByZXN1bHQuc3VjY2VzcyA9IGRhdGEuc3VjY2Vzc2Z1bFRhc2tDb3VudDtcbiAgICByZXN1bHQuZXJyb3IgPSBkYXRhLmZhaWxlZFRhc2tDb3VudDtcbiAgICByZXN1bHQuY29tcGxldGVkID0gZGF0YS5jb21wbGV0ZWRUYXNrQ291bnQ7XG4gICAgcmVzdWx0LnRvdGFsID0gZGF0YS50b3RhbFRhc2tDb3VudDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgY2FuRXhlY3V0ZSA9ICh2YXJpYWJsZTogYW55LCBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2UsIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlKSA9PiB7XG4gICAgaWYgKCF3aW5kb3dbJ1NRTGl0ZVBsdWdpbiddKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChPRkZMSU5FX1BMVUdJTl9OT1RfRk9VTkQpO1xuICAgIH1cbiAgICBpZiAoIW5ldHdvcmtTZXJ2aWNlLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KEFQUF9JU19PRkZMSU5FKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvUHJvbWlzZShpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5CRUZPUkUsIHZhcmlhYmxlLCBudWxsKSlcbiAgICAgICAgLnRoZW4ocHJvY2VlZCA9PiB7XG4gICAgICAgICAgICBpZiAocHJvY2VlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoT05fQkVGT1JFX0JMT0NLRUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdXNlciBpcyBhdXRoZW50aWNhdGVkIGFuZCBvbmxpbmUsIHRoZW4gc3RhcnQgdGhlIGRhdGEgcHVsbCBwcm9jZXNzLlxuICAgICAgICAgICAgcmV0dXJuIHNlY3VyaXR5U2VydmljZS5vblVzZXJMb2dpbigpO1xuICAgICAgICB9KTtcbn07XG5cbmNvbnN0IGdlbmVyYXRlQ2hhbmdlU2V0ID0gKGNoYW5nZXM6IENoYW5nZVtdKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlQ2hhbmdlcyA9ICBfLmZpbHRlcihjaGFuZ2VzLCBjID0+IHtcbiAgICAgICAgcmV0dXJuIGMuc2VydmljZSA9PT0gJ0RhdGFiYXNlU2VydmljZScgJiZcbiAgICAgICAgICAgIChjLm9wZXJhdGlvbiA9PT0gJ2luc2VydFRhYmxlRGF0YSdcbiAgICAgICAgICAgICAgICB8fCBjLm9wZXJhdGlvbiA9PT0gJ2luc2VydE11bHRpUGFydFRhYmxlRGF0YScpO1xuICAgIH0pLCB1cGRhdGVDaGFuZ2VzID0gIF8uZmlsdGVyKGNoYW5nZXMsIGMgPT4ge1xuICAgICAgICByZXR1cm4gYy5zZXJ2aWNlID09PSAnRGF0YWJhc2VTZXJ2aWNlJyAmJlxuICAgICAgICAgICAgKGMub3BlcmF0aW9uID09PSAndXBkYXRlVGFibGVEYXRhJ1xuICAgICAgICAgICAgICAgIHx8IGMub3BlcmF0aW9uID09PSAndXBkYXRlTXVsdGlQYXJ0VGFibGVEYXRhJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWw6IGNoYW5nZXMgPyBjaGFuZ2VzLmxlbmd0aCA6IDAsXG4gICAgICAgIGRhdGFiYXNlOiB7XG4gICAgICAgICAgICBjcmVhdGU6IGNyZWF0ZUNoYW5nZXMsXG4gICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZUNoYW5nZXMsXG4gICAgICAgICAgICBkZWxldGU6IF8uZmlsdGVyKGNoYW5nZXMsIHtzZXJ2aWNlOiAnRGF0YWJhc2VTZXJ2aWNlJywgb3BlcmF0aW9uOiAnZGVsZXRlVGFibGVEYXRhJ30pXG4gICAgICAgIH0sXG4gICAgICAgIHVwbG9hZHM6IF8uZmlsdGVyKGNoYW5nZXMsIHtzZXJ2aWNlOiAnT2ZmbGluZUZpbGVVcGxvYWRTZXJ2aWNlJywgb3BlcmF0aW9uOiAndXBsb2FkVG9TZXJ2ZXInfSlcbiAgICB9O1xufTtcblxuY29uc3QgZ2V0T2ZmbGluZUNoYW5nZXMgPSAoY2hhbmdlTG9nU2VydmljZTogQ2hhbmdlTG9nU2VydmljZSkgPT4ge1xuICAgIHJldHVybiBjaGFuZ2VMb2dTZXJ2aWNlLmdldENoYW5nZXMoKS50aGVuKGNoYW5nZXMgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RvdGFsJyA6IGNoYW5nZXMgPyBjaGFuZ2VzLmxlbmd0aCA6IDAsXG4gICAgICAgICAgICAncGVuZGluZ1RvU3luYycgOiBnZW5lcmF0ZUNoYW5nZVNldChfLmZpbHRlcihjaGFuZ2VzLCB7J2hhc0Vycm9yJyA6IDB9KSksXG4gICAgICAgICAgICAnZmFpbGVkVG9TeW5jJyA6IGdlbmVyYXRlQ2hhbmdlU2V0KF8uZmlsdGVyKGNoYW5nZXMsIHsnaGFzRXJyb3InIDogMX0pKVxuICAgICAgICB9O1xuICAgIH0pO1xufTtcbiJdfQ==
|
|
363
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXN5bmMtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vYmlsZS92YXJpYWJsZXMvc3JjL3NlcnZpY2VzL2RhdGFzeW5jLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFPLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJaEQsT0FBTyxFQUFFLHFCQUFxQixFQUE0QixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0SCxPQUFPLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUV4QyxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztBQUN6QyxNQUFNLHdCQUF3QixHQUFHLDZDQUE2QyxDQUFDO0FBQy9FLE1BQU0saUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7QUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVuRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxxQkFBcUI7SUFJdEQsWUFBWSxHQUFRLEVBQ1IsZ0JBQWtDLEVBQ2xDLG1CQUF3QyxFQUN4Qyx3QkFBa0QsRUFDbEQsc0JBQThDLEVBQzlDLHdCQUFrRCxFQUNsRCxlQUFnQyxFQUNoQyxjQUE4QjtRQUN0QyxLQUFLLEVBQUUsQ0FBQztRQVhJLFNBQUksR0FBRyxVQUFVLENBQUM7UUFDbEIsZUFBVSxHQUErQixFQUFFLENBQUM7UUFXeEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFB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RUFBRTtZQUNOLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQyxDQUFDO1NBQ3RGO1FBQ0QsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFDLENBQUM7S0FDL0YsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxnQkFBa0MsRUFBRSxFQUFFO0lBQzdELE9BQU8sZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2hELE9BQU87WUFDSCxPQUFPLEVBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUMsVUFBVSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7WUFDcEUsY0FBYyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBQyxVQUFVLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztTQUN0RSxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcHAsIG5vb3AsIHRvUHJvbWlzZSB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnQHdtL21vYmlsZS9jb3JlJztcbmltcG9ydCB7IEZpbGVTZWxlY3RvclNlcnZpY2UsIFByb2Nlc3NBcGksIFByb2Nlc3NNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJ0B3bS9tb2JpbGUvY29tcG9uZW50cy9iYXNpYyc7XG5pbXBvcnQgeyBDaGFuZ2UsIENoYW5nZUxvZ1NlcnZpY2UsIExvY2FsREJNYW5hZ2VtZW50U2VydmljZSwgTG9jYWxEQkRhdGFQdWxsU2VydmljZSwgUHVzaEluZm8sIFB1bGxJbmZvIH0gZnJvbSAnQHdtL21vYmlsZS9vZmZsaW5lJztcbmltcG9ydCB7IERldmljZVZhcmlhYmxlU2VydmljZSwgSURldmljZVZhcmlhYmxlT3BlcmF0aW9uLCBpbml0aWF0ZUNhbGxiYWNrLCBWQVJJQUJMRV9DT05TVEFOVFMgfSBmcm9tICdAd20vdmFyaWFibGVzJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5pbXBvcnQge2Nsb25lLCBmaWx0ZXJ9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgQVBQX0lTX09GRkxJTkUgPSAnQXBwIGlzIG9mZmxpbmUuJztcbmNvbnN0IE9GRkxJTkVfUExVR0lOX05PVF9GT1VORCA9ICdPZmZsaW5lIERCIFBsdWdpbiBpcyByZXF1aXJlZCwgYnV0IG1pc3NpbmcuJztcbmNvbnN0IE9OX0JFRk9SRV9CTE9DS0VEID0gJ29uQmVmb3JlIGNhbGxiYWNrIHJldHVybmVkIGZhbHNlLic7XG5jb25zdCBSRVFVSVJFRF9QTFVHSU5TID0gWydPRkZMSU5FX0RCJywgJ05FVFdPUksnXTtcblxuZXhwb3J0IGNsYXNzIERhdGFzeW5jU2VydmljZSBleHRlbmRzIERldmljZVZhcmlhYmxlU2VydmljZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnZGF0YXN5bmMnO1xuICAgIHB1YmxpYyByZWFkb25seSBvcGVyYXRpb25zOiBJRGV2aWNlVmFyaWFibGVPcGVyYXRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsXG4gICAgICAgICAgICAgICAgY2hhbmdlTG9nU2VydmljZTogQ2hhbmdlTG9nU2VydmljZSxcbiAgICAgICAgICAgICAgICBmaWxlU2VsZWN0b3JTZXJ2aWNlOiBGaWxlU2VsZWN0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGxvY2FsREJNYW5hZ2VtZW50U2VydmljZTogTG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGxvY2FsREJEYXRhUHVsbFNlcnZpY2U6IExvY2FsREJEYXRhUHVsbFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlOiBQcm9jZXNzTWFuYWdlbWVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKG5ldyBFeHBvcnREQk9wZXJhdGlvbihsb2NhbERCTWFuYWdlbWVudFNlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gobmV3IEdldE9mZmxpbmVDaGFuZ2VzT3BlcmF0aW9uKGNoYW5nZUxvZ1NlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gobmV3IEltcG9ydERCT3BlcmF0aW9uKGZpbGVTZWxlY3RvclNlcnZpY2UsIGxvY2FsREJNYW5hZ2VtZW50U2VydmljZSkpO1xuICAgICAgICB0aGlzLm9wZXJhdGlvbnMucHVzaChuZXcgTGFzdFB1bGxJbmZvT3BlcmF0aW9uKGxvY2FsREJEYXRhUHVsbFNlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25zLnB1c2gobmV3IExhc3RQdXNoSW5mb09wZXJhdGlvbihjaGFuZ2VMb2dTZXJ2aWNlKSk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKG5ldyBQdWxsT3BlcmF0aW9uKGFwcCwgcHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlLCBuZXR3b3JrU2VydmljZSwgc2VjdXJpdHlTZXJ2aWNlLCBsb2NhbERCRGF0YVB1bGxTZXJ2aWNlKSk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKG5ldyBQdXNoT3BlcmF0aW9uKGFwcCwgY2hhbmdlTG9nU2VydmljZSwgcHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlLCBuZXR3b3JrU2VydmljZSwgc2VjdXJpdHlTZXJ2aWNlKSk7XG4gICAgfVxufVxuXG5jbGFzcyBFeHBvcnREQk9wZXJhdGlvbiBpbXBsZW1lbnRzIElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbiB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnZXhwb3J0REInO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHtwYXRoOiAnJ307XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3BlcnRpZXMgPSBbXG4gICAgICAgIHt0YXJnZXQ6ICdzcGlubmVyQ29udGV4dCcsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ3NwaW5uZXJNZXNzYWdlJywgaGlkZTogZmFsc2V9XG4gICAgXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWlyZWRDb3Jkb3ZhUGx1Z2lucyA9IFJFUVVJUkVEX1BMVUdJTlM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2FsREJNYW5hZ2VtZW50U2VydmljZTogTG9jYWxEQk1hbmFnZW1lbnRTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGludm9rZSh2YXJpYWJsZTogYW55LCBvcHRpb25zOiBhbnksIGRhdGFCaW5kaW5nczogTWFwPHN0cmluZywgYW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh3aW5kb3dbJ1NRTGl0ZVBsdWdpbiddKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbERCTWFuYWdlbWVudFNlcnZpY2UuZXhwb3J0REIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoT0ZGTElORV9QTFVHSU5fTk9UX0ZPVU5EKTtcbiAgICB9XG59XG5cblxuY2xhc3MgR2V0T2ZmbGluZUNoYW5nZXNPcGVyYXRpb24gaW1wbGVtZW50cyBJRGV2aWNlVmFyaWFibGVPcGVyYXRpb24ge1xuICAgIHByaXZhdGUgc3RhdGljIERBVEFfQ0hBTkdFX1RFTVBMQVRFID0ge1xuICAgICAgICBzZXJ2aWNlOiAnRGF0YWJhc2VTZXJ2aWNlJyxcbiAgICAgICAgb3BlcmF0aW9uOiAnb3BlcmF0aW9uJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgIGRhdGFNb2RlbE5hbWU6ICdkYXRhTW9kZWxOYW1lJyxcbiAgICAgICAgICAgIGVudGl0eU5hbWU6ICdlbnRpdHlOYW1lJ1xuICAgICAgICB9LFxuICAgICAgICBoYXNFcnJvcjogMCxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiAnJ1xuICAgIH07XG4gICAgcHJpdmF0ZSBzdGF0aWMgQ0hBTkdFX0xPR19TRVQgPSB7XG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBkYXRhYmFzZToge1xuICAgICAgICAgICAgY3JlYXRlOiBbR2V0T2ZmbGluZUNoYW5nZXNPcGVyYXRpb24uREFUQV9DSEFOR0VfVEVNUExBVEVdLFxuICAgICAgICAgICAgdXBkYXRlOiBbR2V0T2ZmbGluZUNoYW5nZXNPcGVyYXRpb24uREFUQV9DSEFOR0VfVEVNUExBVEVdLFxuICAgICAgICAgICAgZGVsZXRlOiBbR2V0T2ZmbGluZUNoYW5nZXNPcGVyYXRpb24uREFUQV9DSEFOR0VfVEVNUExBVEVdXG4gICAgICAgIH0sXG4gICAgICAgIHVwbG9hZHM6IFt7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnT2ZmbGluZUZpbGVVcGxvYWRTZXJ2aWNlJyxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ3VwbG9hZFRvU2VydmVyJyxcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIGZpbGU6ICdsb2NhbEZpbGVQYXRoJyxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJVcmw6ICdzZXJ2ZXJVcmwnLFxuICAgICAgICAgICAgICAgIGZ0T3B0aW9uczoge31cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNFcnJvcjogMCxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogJydcbiAgICAgICAgfV1cbiAgICB9O1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gJ2dldE9mZmxpbmVDaGFuZ2VzJztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwgPSB7XG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBwZW5kaW5nVG9TeW5jOiBHZXRPZmZsaW5lQ2hhbmdlc09wZXJhdGlvbi5DSEFOR0VfTE9HX1NFVCxcbiAgICAgICAgZmFpbGVkVG9TeW5jOiBHZXRPZmZsaW5lQ2hhbmdlc09wZXJhdGlvbi5DSEFOR0VfTE9HX1NFVFxuICAgIH07XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3BlcnRpZXMgPSBbXG4gICAgICAgIHt0YXJnZXQ6ICdzdGFydFVwZGF0ZScsIHR5cGU6ICdib29sZWFuJywgdmFsdWU6IHRydWUsIGhpZGU6IHRydWV9LFxuICAgICAgICB7dGFyZ2V0OiAnYXV0b1VwZGF0ZScsIHR5cGU6ICdib29sZWFuJywgdmFsdWU6IHRydWUsIGhpZGU6IHRydWV9XG4gICAgXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWlyZWRDb3Jkb3ZhUGx1Z2lucyA9IFJFUVVJUkVEX1BMVUdJTlM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZUxvZ1NlcnZpY2U6IENoYW5nZUxvZ1NlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW52b2tlKHZhcmlhYmxlOiBhbnksIG9wdGlvbnM6IGFueSwgZGF0YUJpbmRpbmdzOiBNYXA8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHdpbmRvd1snU1FMaXRlUGx1Z2luJ10pIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRPZmZsaW5lQ2hhbmdlcyh0aGlzLmNoYW5nZUxvZ1NlcnZpY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChPRkZMSU5FX1BMVUdJTl9OT1RfRk9VTkQpO1xuICAgIH1cbn1cblxuY2xhc3MgTGFzdFB1bGxJbmZvT3BlcmF0aW9uIGltcGxlbWVudHMgSURldmljZVZhcmlhYmxlT3BlcmF0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9ICdsYXN0UHVsbEluZm8nO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHtcbiAgICAgICAgZGF0YWJhc2VzIDogW3tcbiAgICAgICAgICAgIG5hbWUgOiAnZGF0YmFzZU5hbWUnLFxuICAgICAgICAgICAgZW50aXRpZXM6IFt7XG4gICAgICAgICAgICAgICAgZW50aXR5TmFtZTogJ2VudGl0eU5hbWUnLFxuICAgICAgICAgICAgICAgIHB1bGxlZFJlY29yZENvdW50OiAwXG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIHB1bGxlZFJlY29yZENvdW50OiAwXG4gICAgICAgIH1dLFxuICAgICAgICB0b3RhbFB1bGxlZFJlY29yZENvdW50OiAwLFxuICAgICAgICBzdGFydFRpbWU6IG5ldyBEYXRlKCkudG9KU09OKCksXG4gICAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKCkudG9KU09OKClcbiAgICB9O1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9wZXJ0aWVzID0gW1xuICAgICAgICB7dGFyZ2V0OiAnc3RhcnRVcGRhdGUnLCB0eXBlOiAnYm9vbGVhbicsIHZhbHVlOiB0cnVlLCBoaWRlOiB0cnVlfSxcbiAgICAgICAge3RhcmdldDogJ3NwaW5uZXJDb250ZXh0JywgaGlkZTogZmFsc2V9LFxuICAgICAgICB7dGFyZ2V0OiAnc3Bpbm5lck1lc3NhZ2UnLCBoaWRlOiBmYWxzZX1cbiAgICBdO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1aXJlZENvcmRvdmFQbHVnaW5zID0gUkVRVUlSRURfUExVR0lOUztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYWxEQkRhdGFQdWxsU2VydmljZTogTG9jYWxEQkRhdGFQdWxsU2VydmljZSkge1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnZva2UodmFyaWFibGU6IGFueSwgb3B0aW9uczogYW55LCBkYXRhQmluZGluZ3M6IE1hcDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAod2luZG93WydTUUxpdGVQbHVnaW4nXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxEQkRhdGFQdWxsU2VydmljZS5nZXRMYXN0UHVsbEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoT0ZGTElORV9QTFVHSU5fTk9UX0ZPVU5EKTtcbiAgICB9XG59XG5cbmNsYXNzIExhc3RQdXNoSW5mb09wZXJhdGlvbiBpbXBsZW1lbnRzIElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbiB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnbGFzdFB1c2hJbmZvJztcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwgPSB7XG4gICAgICAgIHN1Y2Nlc3NmdWxUYXNrQ291bnQ6IDAsXG4gICAgICAgIGZhaWxlZFRhc2tDb3VudDogMCxcbiAgICAgICAgY29tcGxldGVkVGFza0NvdW50OiAwLFxuICAgICAgICB0b3RhbFRhc2tDb3VudDogMCxcbiAgICAgICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpLnRvSlNPTigpLFxuICAgICAgICBlbmRUaW1lOiBuZXcgRGF0ZSgpLnRvSlNPTigpXG4gICAgfTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvcGVydGllcyA9IFtcbiAgICAgICAge3RhcmdldDogJ3N0YXJ0VXBkYXRlJywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogdHJ1ZSwgaGlkZTogdHJ1ZX0sXG4gICAgICAgIHt0YXJnZXQ6ICdzcGlubmVyQ29udGV4dCcsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ3NwaW5uZXJNZXNzYWdlJywgaGlkZTogZmFsc2V9XG4gICAgXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWlyZWRDb3Jkb3ZhUGx1Z2lucyA9IFJFUVVJUkVEX1BMVUdJTlM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZUxvZ1NlcnZpY2U6IENoYW5nZUxvZ1NlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW52b2tlKHZhcmlhYmxlOiBhbnksIG9wdGlvbnM6IGFueSwgZGF0YUJpbmRpbmdzOiBNYXA8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHdpbmRvd1snU1FMaXRlUGx1Z2luJ10pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5nZUxvZ1NlcnZpY2UuZ2V0TGFzdFB1c2hJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KE9GRkxJTkVfUExVR0lOX05PVF9GT1VORCk7XG4gICAgfVxufVxuXG5jbGFzcyBJbXBvcnREQk9wZXJhdGlvbiBpbXBsZW1lbnRzIElEZXZpY2VWYXJpYWJsZU9wZXJhdGlvbiB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnaW1wb3J0REInO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHt9O1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9wZXJ0aWVzID0gW1xuICAgICAgICB7dGFyZ2V0OiAnc3Bpbm5lckNvbnRleHQnLCBoaWRlOiBmYWxzZX0sXG4gICAgICAgIHt0YXJnZXQ6ICdzcGlubmVyTWVzc2FnZScsIGhpZGU6IGZhbHNlfVxuICAgIF07XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVpcmVkQ29yZG92YVBsdWdpbnMgPSBSRVFVSVJFRF9QTFVHSU5TO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZmlsZVNlbGVjdG9yU2VydmljZTogRmlsZVNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NhbERCTWFuYWdlbWVudFNlcnZpY2U6IExvY2FsREJNYW5hZ2VtZW50U2VydmljZSkge1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnZva2UodmFyaWFibGU6IGFueSwgb3B0aW9uczogYW55LCBkYXRhQmluZGluZ3M6IE1hcDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAod2luZG93WydTUUxpdGVQbHVnaW4nXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZVNlbGVjdG9yU2VydmljZS5zZWxlY3RGaWxlcyhmYWxzZSwgICd6aXAnKVxuICAgICAgICAgICAgICAgIC50aGVuKGZpbGVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsREJNYW5hZ2VtZW50U2VydmljZS5pbXBvcnREQihmaWxlc1swXS5wYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoT0ZGTElORV9QTFVHSU5fTk9UX0ZPVU5EKTtcbiAgICB9XG59XG5cbmNsYXNzIFB1bGxPcGVyYXRpb24gaW1wbGVtZW50cyBJRGV2aWNlVmFyaWFibGVPcGVyYXRpb24ge1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gJ3B1bGwnO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHtcbiAgICAgICAgdG90YWxUYXNrQ291bnQ6IDAsXG4gICAgICAgIGNvbXBsZXRlZFRhc2tDb3VudDogMCxcbiAgICAgICAgaW5Qcm9ncmVzczogZmFsc2VcbiAgICB9O1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9wZXJ0aWVzID0gW1xuICAgICAgICB7dGFyZ2V0OiAnY2xlYXJEYXRhJywgdHlwZTogJ2Jvb2xlYW4nLCB3aWRnZXR0eXBlOiAnYm9vbGVhbi1pbnB1dGZpcnN0JywgdmFsdWU6IHRydWUsIGdyb3VwOiAncHJvcGVydGllcycsIHN1Ykdyb3VwOiAnYmVoYXZpb3InfSxcbiAgICAgICAge3RhcmdldDogJ3N0YXJ0VXBkYXRlJywgdHlwZTogJ2Jvb2xlYW4nLCBoaWRlOiBmYWxzZX0sXG4gICAgICAgIHt0YXJnZXQ6ICdvbkJlZm9yZScsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ29uUHJvZ3Jlc3MnLCBoaWRlOiBmYWxzZX0sXG4gICAgICAgIHt0YXJnZXQ6ICdzaG93UHJvZ3Jlc3MnLCBoaWRlOiBmYWxzZX1cbiAgICBdO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1aXJlZENvcmRvdmFQbHVnaW5zID0gUkVRVUlSRURfUExVR0lOUztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFwcDogQXBwLFxuICAgICAgICBwcml2YXRlIHByb2Nlc3NNYW5hZ2VtZW50U2VydmljZTogUHJvY2Vzc01hbmFnZW1lbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5ldHdvcmtTZXJ2aWNlOiBOZXR3b3JrU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZWN1cml0eVNlcnZpY2U6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NhbERCRGF0YVB1bGxTZXJ2aWNlOiBMb2NhbERCRGF0YVB1bGxTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGludm9rZSh2YXJpYWJsZTogYW55LCBvcHRpb25zOiBhbnksIGRhdGFCaW5kaW5nczogTWFwPHN0cmluZywgYW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGxldCBwcm9ncmVzc0luc3RhbmNlO1xuICAgICAgICByZXR1cm4gY2FuRXhlY3V0ZSh2YXJpYWJsZSwgdGhpcy5uZXR3b3JrU2VydmljZSwgdGhpcy5zZWN1cml0eVNlcnZpY2UpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLnNob3dQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTWFuYWdlbWVudFNlcnZpY2UuY3JlYXRlSW5zdGFuY2UodGhpcy5hcHAuYXBwTG9jYWxlLkxBQkVMX0RBVEFfUFVMTF9QUk9HUkVTUywgMCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSkudGhlbigoaW5zdGFuY2U6IFByb2Nlc3NBcGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzc09ic2VydmVyOiBPYnNlcnZlcjxQdWxsSW5mbz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChwdWxsSW5mbzogUHVsbEluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlLmRhdGFTZXQgPSBwcm9ncmVzczsgVG9kbzogcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYXRlQ2FsbGJhY2soJ29uUHJvZ3Jlc3MnLCB2YXJpYWJsZSwgcHVsbEluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlLnNldCgnbWF4JywgcHVsbEluZm8udG90YWxSZWNvcmRzVG9QdWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlLnNldCgndmFsdWUnLCBwdWxsSW5mby50b3RhbFB1bGxlZFJlY29yZENvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3I6IG5vb3AsIGNvbXBsZXRlOiBub29wfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFyRGF0YSA9IHZhcmlhYmxlLmNsZWFyRGF0YSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLmNsZWFyRGF0YSA9PT0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHVsbFByb21pc2UgPSB0aGlzLmxvY2FsREJEYXRhUHVsbFNlcnZpY2UucHVsbEFsbERiRGF0YShjbGVhckRhdGEsIHByb2dyZXNzT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2Uuc2V0KCdzdG9wQnV0dG9uTGFiZWwnLCB0aGlzLmFwcC5hcHBMb2NhbGUuTEFCRUxfREFUQV9QVUxMX1BST0dSRVNTX1NUT1BfQlROKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NJbnN0YW5jZS5zZXQoJ29uU3RvcCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxEQkRhdGFQdWxsU2VydmljZS5jYW5jZWwocHVsbFByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHVsbFByb21pc2U7XG4gICAgICAgIH0pLmNhdGNoKHB1bGxJbmZvID0+IHB1bGxJbmZvKVxuICAgICAgICAgICAgLnRoZW4ocHVsbEluZm8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0luc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHVsbEluZm87XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNsYXNzIFB1c2hPcGVyYXRpb24gaW1wbGVtZW50cyBJRGV2aWNlVmFyaWFibGVPcGVyYXRpb24ge1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gJ3B1c2gnO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IHtcbiAgICAgICAgc3VjY2Vzc2Z1bFRhc2tDb3VudDogMCxcbiAgICAgICAgZmFpbGVkVGFza0NvdW50OiAwLFxuICAgICAgICBjb21wbGV0ZWRUYXNrQ291bnQ6IDAsXG4gICAgICAgIHRvdGFsVGFza0NvdW50OiAwLFxuICAgICAgICBpblByb2dyZXNzOiBmYWxzZVxuICAgIH07XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3BlcnRpZXMgPSBbXG4gICAgICAgIHt0YXJnZXQ6ICdvbkJlZm9yZScsIGhpZGU6IGZhbHNlfSxcbiAgICAgICAge3RhcmdldDogJ29uUHJvZ3Jlc3MnLCBoaWRlOiBmYWxzZX0sXG4gICAgICAgIHt0YXJnZXQ6ICdzaG93UHJvZ3Jlc3MnLCAnaGlkZSc6IGZhbHNlLCAndmFsdWUnOiB0cnVlfVxuICAgIF07XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVpcmVkQ29yZG92YVBsdWdpbnMgPSBSRVFVSVJFRF9QTFVHSU5TO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZUxvZ1NlcnZpY2U6IENoYW5nZUxvZ1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwcm9jZXNzTWFuYWdlbWVudFNlcnZpY2U6IFByb2Nlc3NNYW5hZ2VtZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIG5ldHdvcmtTZXJ2aWNlOiBOZXR3b3JrU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGludm9rZSh2YXJpYWJsZTogYW55LCBvcHRpb25zOiBhbnksIGRhdGFCaW5kaW5nczogTWFwPHN0cmluZywgYW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGxldCBwcm9ncmVzc0luc3RhbmNlO1xuICAgICAgICBpZiAodGhpcy5jaGFuZ2VMb2dTZXJ2aWNlLmlzRmx1c2hJblByb2dyZXNzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuRXhlY3V0ZSh2YXJpYWJsZSwgdGhpcy5uZXR3b3JrU2VydmljZSwgdGhpcy5zZWN1cml0eVNlcnZpY2UpXG4gICAgICAgICAgICAudGhlbigoKSA9PiBnZXRPZmZsaW5lQ2hhbmdlcyh0aGlzLmNoYW5nZUxvZ1NlcnZpY2UpKVxuICAgICAgICAgICAgLnRoZW4oY2hhbmdlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZXMucGVuZGluZ1RvU3luYy50b3RhbCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjbG9uZSh0aGlzLm1vZGVsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLnNob3dQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTWFuYWdlbWVudFNlcnZpY2UuY3JlYXRlSW5zdGFuY2UodGhpcy5hcHAuYXBwTG9jYWxlLkxBQkVMX0RBVEFfUFVTSF9QUk9HUkVTUywgMCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSkudGhlbigoaW5zdGFuY2U6IFByb2Nlc3NBcGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzc09ic2VydmVyOiBPYnNlcnZlcjxQdXNoSW5mbz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChwdXNoSW5mbzogUHVzaEluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hJbmZvID0gYWRkT2xkUHJvcGVydGllc0ZvclB1c2hEYXRhKHB1c2hJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYXRlQ2FsbGJhY2soJ29uUHJvZ3Jlc3MnLCB2YXJpYWJsZSwgcHVzaEluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlLnNldCgnbWF4JywgcHVzaEluZm8udG90YWxUYXNrQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2Uuc2V0KCd2YWx1ZScsIHB1c2hJbmZvLmNvbXBsZXRlZFRhc2tDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yOiBub29wLCBjb21wbGV0ZTogbm9vcH07XG4gICAgICAgICAgICAgICAgY29uc3QgcHVzaFByb21pc2UgPSB0aGlzLmNoYW5nZUxvZ1NlcnZpY2UuZmx1c2gocHJvZ3Jlc3NPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NJbnN0YW5jZS5zZXQoJ3N0b3BCdXR0b25MYWJlbCcsIHRoaXMuYXBwLmFwcExvY2FsZS5MQUJFTF9EQVRBX1BVU0hfUFJPR1JFU1NfU1RPUF9CVE4pO1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0luc3RhbmNlLnNldCgnb25TdG9wJywgKCkgPT4gdGhpcy5jaGFuZ2VMb2dTZXJ2aWNlLnN0b3AoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwdXNoUHJvbWlzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2gocHVzaEluZm8gPT4gcHVzaEluZm8pXG4gICAgICAgICAgICAudGhlbihwdXNoSW5mbyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwdXNoSW5mbyAmJiBwdXNoSW5mby50b3RhbFRhc2tDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hJbmZvID0gYWRkT2xkUHJvcGVydGllc0ZvclB1c2hEYXRhKHB1c2hJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHB1c2hJbmZvLmZhaWxlZFRhc2tDb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHB1c2hJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVzaEluZm87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChwdXNoSW5mbyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBvbGQgcHJvcGVydGllcyB0byB0aGUgcHVzaCBkYXRhU2V0IHRvIHN1cHBvcnQgb2xkIHByb2plY3RzLlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zIHsqfVxuICovXG5jb25zdCBhZGRPbGRQcm9wZXJ0aWVzRm9yUHVzaERhdGEgPSBkYXRhID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBjbG9uZShkYXRhKTtcbiAgICByZXN1bHQuc3VjY2VzcyA9IGRhdGEuc3VjY2Vzc2Z1bFRhc2tDb3VudDtcbiAgICByZXN1bHQuZXJyb3IgPSBkYXRhLmZhaWxlZFRhc2tDb3VudDtcbiAgICByZXN1bHQuY29tcGxldGVkID0gZGF0YS5jb21wbGV0ZWRUYXNrQ291bnQ7XG4gICAgcmVzdWx0LnRvdGFsID0gZGF0YS50b3RhbFRhc2tDb3VudDtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgY2FuRXhlY3V0ZSA9ICh2YXJpYWJsZTogYW55LCBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2UsIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlKSA9PiB7XG4gICAgaWYgKCF3aW5kb3dbJ1NRTGl0ZVBsdWdpbiddKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChPRkZMSU5FX1BMVUdJTl9OT1RfRk9VTkQpO1xuICAgIH1cbiAgICBpZiAoIW5ldHdvcmtTZXJ2aWNlLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KEFQUF9JU19PRkZMSU5FKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvUHJvbWlzZShpbml0aWF0ZUNhbGxiYWNrKFZBUklBQkxFX0NPTlNUQU5UUy5FVkVOVC5CRUZPUkUsIHZhcmlhYmxlLCBudWxsKSlcbiAgICAgICAgLnRoZW4ocHJvY2VlZCA9PiB7XG4gICAgICAgICAgICBpZiAocHJvY2VlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoT05fQkVGT1JFX0JMT0NLRUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdXNlciBpcyBhdXRoZW50aWNhdGVkIGFuZCBvbmxpbmUsIHRoZW4gc3RhcnQgdGhlIGRhdGEgcHVsbCBwcm9jZXNzLlxuICAgICAgICAgICAgcmV0dXJuIHNlY3VyaXR5U2VydmljZS5vblVzZXJMb2dpbigpO1xuICAgICAgICB9KTtcbn07XG5cbmNvbnN0IGdlbmVyYXRlQ2hhbmdlU2V0ID0gKGNoYW5nZXM6IENoYW5nZVtdKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlQ2hhbmdlcyA9IGZpbHRlcihjaGFuZ2VzLCBjID0+IHtcbiAgICAgICAgcmV0dXJuIGMuc2VydmljZSA9PT0gJ0RhdGFiYXNlU2VydmljZScgJiZcbiAgICAgICAgICAgIChjLm9wZXJhdGlvbiA9PT0gJ2luc2VydFRhYmxlRGF0YSdcbiAgICAgICAgICAgICAgICB8fCBjLm9wZXJhdGlvbiA9PT0gJ2luc2VydE11bHRpUGFydFRhYmxlRGF0YScpO1xuICAgIH0pLCB1cGRhdGVDaGFuZ2VzID0gZmlsdGVyKGNoYW5nZXMsIGMgPT4ge1xuICAgICAgICByZXR1cm4gYy5zZXJ2aWNlID09PSAnRGF0YWJhc2VTZXJ2aWNlJyAmJlxuICAgICAgICAgICAgKGMub3BlcmF0aW9uID09PSAndXBkYXRlVGFibGVEYXRhJ1xuICAgICAgICAgICAgICAgIHx8IGMub3BlcmF0aW9uID09PSAndXBkYXRlTXVsdGlQYXJ0VGFibGVEYXRhJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWw6IGNoYW5nZXMgPyBjaGFuZ2VzLmxlbmd0aCA6IDAsXG4gICAgICAgIGRhdGFiYXNlOiB7XG4gICAgICAgICAgICBjcmVhdGU6IGNyZWF0ZUNoYW5nZXMsXG4gICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZUNoYW5nZXMsXG4gICAgICAgICAgICBkZWxldGU6IGZpbHRlcihjaGFuZ2VzLCB7c2VydmljZTogJ0RhdGFiYXNlU2VydmljZScsIG9wZXJhdGlvbjogJ2RlbGV0ZVRhYmxlRGF0YSd9KVxuICAgICAgICB9LFxuICAgICAgICB1cGxvYWRzOiBmaWx0ZXIoY2hhbmdlcywge3NlcnZpY2U6ICdPZmZsaW5lRmlsZVVwbG9hZFNlcnZpY2UnLCBvcGVyYXRpb246ICd1cGxvYWRUb1NlcnZlcid9KVxuICAgIH07XG59O1xuXG5jb25zdCBnZXRPZmZsaW5lQ2hhbmdlcyA9IChjaGFuZ2VMb2dTZXJ2aWNlOiBDaGFuZ2VMb2dTZXJ2aWNlKSA9PiB7XG4gICAgcmV0dXJuIGNoYW5nZUxvZ1NlcnZpY2UuZ2V0Q2hhbmdlcygpLnRoZW4oY2hhbmdlcyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndG90YWwnIDogY2hhbmdlcyA/IGNoYW5nZXMubGVuZ3RoIDogMCxcbiAgICAgICAgICAgICdwZW5kaW5nVG9TeW5jJzogZ2VuZXJhdGVDaGFuZ2VTZXQoZmlsdGVyKGNoYW5nZXMsIHsnaGFzRXJyb3InOiAwfSkpLFxuICAgICAgICAgICAgJ2ZhaWxlZFRvU3luYyc6IGdlbmVyYXRlQ2hhbmdlU2V0KGZpbHRlcihjaGFuZ2VzLCB7J2hhc0Vycm9yJzogMX0pKVxuICAgICAgICB9O1xuICAgIH0pO1xufTtcbiJdfQ==
|