@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
|
@@ -2,6 +2,7 @@ import { Directive, Inject, Injector, Optional } from '@angular/core';
|
|
|
2
2
|
import { BaseComponent, provideAsWidgetRef } from '@wm/components/base';
|
|
3
3
|
import { registerProps } from './table-action.props';
|
|
4
4
|
import { TableComponent } from '../table.component';
|
|
5
|
+
import { isUndefined } from "lodash-es";
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../table.component";
|
|
7
8
|
const WIDGET_CONFIG = { widgetType: 'wm-table-action', hostClass: '' };
|
|
@@ -18,7 +19,7 @@ export class TableActionDirective extends BaseComponent {
|
|
|
18
19
|
show: this.show,
|
|
19
20
|
class: this.class || '',
|
|
20
21
|
iconclass: this.iconclass || '',
|
|
21
|
-
title:
|
|
22
|
+
title: isUndefined(this.title) ? (this['display-name'] || '') : this.title,
|
|
22
23
|
action: this.action,
|
|
23
24
|
accessroles: this.accessroles,
|
|
24
25
|
shortcutkey: this.shortcutkey,
|
|
@@ -71,4 +72,4 @@ export class TableActionDirective extends BaseComponent {
|
|
|
71
72
|
}, {
|
|
72
73
|
type: Optional
|
|
73
74
|
}] }], null); })();
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWN0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1hY3Rpb24vdGFibGUtYWN0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQVUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7OztBQUV0QyxNQUFNLGFBQWEsR0FBRyxFQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFDLENBQUM7QUFRckUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7YUFDNUMsb0JBQWUsR0FBRyxhQUFhLEVBQUUsQUFBbEIsQ0FBbUI7SUF3QnpDLFlBQVksR0FBYSxFQUFxQixLQUFxQixFQUEwQyxlQUFvQjtRQUM3SCxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQURELFVBQUssR0FBTCxLQUFLLENBQWdCO0lBRW5FLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNiLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQ3ZELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRTtZQUMvQixLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQ3pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1lBQzdDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1NBQ2hELENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksR0FBRyxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO3FGQXJFUSxvQkFBb0Isc0dBeUJnRCxrQkFBa0I7b0VBekJ0RixvQkFBb0IsMkVBSmxCO2dCQUNQLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO2FBQzNDOztpRkFFUSxvQkFBb0I7Y0FOaEMsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFNBQVMsRUFBRTtvQkFDUCxrQkFBa0Isc0JBQXNCO2lCQUMzQzthQUNKOztzQkEwQitCLFFBQVE7O3NCQUFrQyxNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbmplY3QsIEluamVjdG9yLCBPbkluaXQsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgcHJvdmlkZUFzV2lkZ2V0UmVmIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RhYmxlLWFjdGlvbi5wcm9wcyc7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVW5kZWZpbmVkfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXRhYmxlLWFjdGlvbicsIGhvc3RDbGFzczogJyd9O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlQWN0aW9uXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUYWJsZUFjdGlvbkRpcmVjdGl2ZSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQWN0aW9uRGlyZWN0aXZlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIGFjY2Vzc3JvbGVzO1xuICAgIGFjdGlvbjtcbiAgICBjYXB0aW9uO1xuICAgIGNsYXNzO1xuICAgIGRpc2FibGVkO1xuICAgIGRpc3BsYXlOYW1lO1xuICAgIGljb247XG4gICAgaWNvbmNsYXNzO1xuICAgIHBvc2l0aW9uO1xuICAgIHNob3J0Y3V0a2V5O1xuICAgIHNob3c7XG4gICAgdGFiaW5kZXg7XG4gICAgdGl0bGU7XG4gICAga2V5O1xuICAgIGh5cGVybGluaztcbiAgICB0YXJnZXQ7XG4gICAgYnV0dG9uRGVmO1xuICAgIGNvbmRpdGlvbmFsY2xhc3M7XG4gICAgY29uZGl0aW9uYWxzdHlsZTtcblxuICAgIHByaXZhdGUgX3Byb3BzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBAT3B0aW9uYWwoKSBwdWJsaWMgdGFibGU6IFRhYmxlQ29tcG9uZW50LCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlQWN0aW9uKCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkRlZiA9IHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpc1snZGlzcGxheS1uYW1lJ10gfHwgdGhpcy5jYXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc2hvdzogdGhpcy5zaG93LFxuICAgICAgICAgICAgY2xhc3M6IHRoaXMuY2xhc3MgfHwgJycsXG4gICAgICAgICAgICBpY29uY2xhc3M6IHRoaXMuaWNvbmNsYXNzIHx8ICcnLFxuICAgICAgICAgICAgdGl0bGU6IGlzVW5kZWZpbmVkKHRoaXMudGl0bGUpID8gKHRoaXNbJ2Rpc3BsYXktbmFtZSddIHx8ICcnKSA6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICBhY3Rpb246IHRoaXMuYWN0aW9uLFxuICAgICAgICAgICAgYWNjZXNzcm9sZXM6IHRoaXMuYWNjZXNzcm9sZXMsXG4gICAgICAgICAgICBzaG9ydGN1dGtleTogdGhpcy5zaG9ydGN1dGtleSxcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuICAgICAgICAgICAgdGFiaW5kZXg6IHRoaXMudGFiaW5kZXgsXG4gICAgICAgICAgICBpY29uOiB0aGlzLmljb24sXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcbiAgICAgICAgICAgIHdpZGdldFR5cGU6IHRoaXNbJ3dpZGdldC10eXBlJ10sXG4gICAgICAgICAgICBoeXBlcmxpbms6IHRoaXMuaHlwZXJsaW5rLFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldCB8fCAnJyxcbiAgICAgICAgICAgIGNvbmRpdGlvbmFsY2xhc3M6IHRoaXMuY29uZGl0aW9uYWxjbGFzcyB8fCAnJyxcbiAgICAgICAgICAgIGNvbmRpdGlvbmFsc3R5bGU6IHRoaXMuY29uZGl0aW9uYWxzdHlsZSB8fCB7fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9wcm9wc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFjdGlvbigpO1xuICAgICAgICB0aGlzLnRhYmxlLnJlZ2lzdGVyQWN0aW9ucyh0aGlzLmJ1dHRvbkRlZik7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52KSB7XG4gICAgICAgIGlmICghdGhpcy5fcHJvcHNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXktbmFtZScpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGVmLmRpc3BsYXlOYW1lID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkRlZltrZXldID0gbnY7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -5,6 +5,7 @@ import { registerProps } from './table-column.props';
|
|
|
5
5
|
import { TableComponent } from '../table.component';
|
|
6
6
|
import { TableColumnGroupDirective } from '../table-column-group/table-column-group.directive';
|
|
7
7
|
import { debounceTime } from 'rxjs/operators';
|
|
8
|
+
import { cloneDeep, forEach, head, includes, last, map, max, mean, min, round, split, sum } from "lodash-es";
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@wm/core";
|
|
10
11
|
import * as i2 from "../table.component";
|
|
@@ -52,22 +53,22 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
52
53
|
this.observeOnFields = [];
|
|
53
54
|
this.aggregate = {
|
|
54
55
|
sum: () => {
|
|
55
|
-
return
|
|
56
|
+
return sum(this._getColumnData());
|
|
56
57
|
},
|
|
57
58
|
average: (precision = 2) => {
|
|
58
|
-
return
|
|
59
|
+
return round(mean(this._getColumnData()), precision);
|
|
59
60
|
},
|
|
60
61
|
count: () => {
|
|
61
62
|
return this._getColumnData().length;
|
|
62
63
|
},
|
|
63
64
|
minimum: () => {
|
|
64
|
-
return
|
|
65
|
+
return min(this._getColumnData());
|
|
65
66
|
},
|
|
66
67
|
maximum: () => {
|
|
67
|
-
return
|
|
68
|
+
return max(this._getColumnData());
|
|
68
69
|
},
|
|
69
70
|
percent: (value, precision = 2) => {
|
|
70
|
-
return
|
|
71
|
+
return round((sum(this._getColumnData()) / value) * 100, precision);
|
|
71
72
|
}
|
|
72
73
|
};
|
|
73
74
|
this.notifyForFields = [];
|
|
@@ -324,7 +325,7 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
324
325
|
if (this.relatedEntityName) {
|
|
325
326
|
this.widget['is-related'] = true;
|
|
326
327
|
this.widget['lookup-type'] = this.relatedEntityName;
|
|
327
|
-
this.widget['lookup-field'] =
|
|
328
|
+
this.widget['lookup-field'] = last(split(this.field, '.'));
|
|
328
329
|
}
|
|
329
330
|
if (this.filterwidget === FormWidgetType.AUTOCOMPLETE) {
|
|
330
331
|
this.filterInstance.dataoptions = getDistinctFieldProperties(this.table.datasource, this);
|
|
@@ -351,11 +352,11 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
351
352
|
if (this['related-entity-name'] && this['primary-key']) {
|
|
352
353
|
// Fetch the data for the related fields
|
|
353
354
|
this.isDataSetBound = true;
|
|
354
|
-
const bindings =
|
|
355
|
+
const bindings = split(this.binding, '.');
|
|
355
356
|
this.showPendingSpinner = true;
|
|
356
357
|
fetchRelatedFieldData(dataSource, this.widget, {
|
|
357
|
-
relatedField:
|
|
358
|
-
datafield:
|
|
358
|
+
relatedField: head(bindings),
|
|
359
|
+
datafield: last(bindings),
|
|
359
360
|
widget: 'edit-widget-type'
|
|
360
361
|
});
|
|
361
362
|
}
|
|
@@ -384,7 +385,7 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
384
385
|
this.filterInstance.registerReadyStateListener(() => {
|
|
385
386
|
if (isDataSetWidget(this.filterwidget)) {
|
|
386
387
|
// if binding is department.deptId then field will be deptId
|
|
387
|
-
const field =
|
|
388
|
+
const field = last(this.binding.split('.'));
|
|
388
389
|
this.filterInstance.dataset = this._filterDataSet;
|
|
389
390
|
this.filterInstance.datafield = this.filterdatafield || field;
|
|
390
391
|
this.filterInstance.displayfield = this.filterdisplayfield || field;
|
|
@@ -401,7 +402,7 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
401
402
|
}
|
|
402
403
|
// Notifies all the dependent validation controls incase of any changes
|
|
403
404
|
notifyChanges(quickEdit) {
|
|
404
|
-
|
|
405
|
+
forEach(this.notifyForFields, field => {
|
|
405
406
|
if (quickEdit && this._isNewEditableRow) {
|
|
406
407
|
field.fieldValidations_new.validate();
|
|
407
408
|
}
|
|
@@ -412,7 +413,7 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
412
413
|
}
|
|
413
414
|
// Watches control for dependent validation changes
|
|
414
415
|
observeOn(fields) {
|
|
415
|
-
this.observeOnFields =
|
|
416
|
+
this.observeOnFields = cloneDeep(fields);
|
|
416
417
|
}
|
|
417
418
|
// Sets the default validators inline and quickedit new row using props
|
|
418
419
|
setUpValidators() {
|
|
@@ -423,11 +424,11 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
423
424
|
}
|
|
424
425
|
// Sets the Async validators on the inline and quickedit new row form control
|
|
425
426
|
setAsyncValidators(validators) {
|
|
426
|
-
this.asyncValidators =
|
|
427
|
+
this.asyncValidators = cloneDeep(validators);
|
|
427
428
|
}
|
|
428
429
|
// Sets the default/custom validators on the inline and quickedit new row form control
|
|
429
430
|
setValidators(validators) {
|
|
430
|
-
this.syncValidators =
|
|
431
|
+
this.syncValidators = cloneDeep(validators);
|
|
431
432
|
}
|
|
432
433
|
boundFn(fn) {
|
|
433
434
|
return fn();
|
|
@@ -442,7 +443,7 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
442
443
|
this._invokeSummaryRowData(newData);
|
|
443
444
|
}
|
|
444
445
|
_invokeSummaryRowData(data) {
|
|
445
|
-
|
|
446
|
+
forEach(data, (item, index) => {
|
|
446
447
|
const content = item;
|
|
447
448
|
if (content instanceof Promise) {
|
|
448
449
|
content.then(res => {
|
|
@@ -460,7 +461,7 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
460
461
|
});
|
|
461
462
|
}
|
|
462
463
|
_getColumnData() {
|
|
463
|
-
return
|
|
464
|
+
return map(this.table.dataset, this.binding);
|
|
464
465
|
}
|
|
465
466
|
/* Summary Row Logic end */
|
|
466
467
|
// Set the props on the inline edit widget
|
|
@@ -510,7 +511,7 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
510
511
|
this.limit = this.limit ? +this.limit : undefined;
|
|
511
512
|
this.editWidgetType = this['edit-widget-type'] = this['edit-widget-type'] || getEditModeWidget(this);
|
|
512
513
|
this.filterOn = this['filter-on'];
|
|
513
|
-
this.readonly = isDefined(this.getAttr('readonly')) ? this.getAttr('readonly') === 'true' : (this['related-entity-name'] ? !this['primary-key'] :
|
|
514
|
+
this.readonly = isDefined(this.getAttr('readonly')) ? this.getAttr('readonly') === 'true' : (this['related-entity-name'] ? !this['primary-key'] : includes(['identity', 'uniqueid', 'sequence'], this.generator));
|
|
514
515
|
this.filterwidget = this.filterwidget || getDataTableFilterWidget(this.type || 'string');
|
|
515
516
|
this.isFilterDataSetBound = !!this.bindfilterdataset;
|
|
516
517
|
this.defaultvalue = getDefaultValue(this.defaultvalue, this.type, this.editWidgetType);
|
|
@@ -645,4 +646,4 @@ export class TableColumnDirective extends BaseComponent {
|
|
|
645
646
|
type: ContentChild,
|
|
646
647
|
args: ['filterTmpl']
|
|
647
648
|
}] }); })();
|
|
648
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsV0FBVyxFQUNYLFNBQVMsRUFDVCxRQUFRLEVBRVIsUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsTUFBTSxFQUNOLFdBQVcsRUFDWCxVQUFVLEVBQ1YsUUFBUSxFQUVSLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsY0FBYyxFQUNkLFNBQVMsRUFDWixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMVYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBSTlDLE1BQU0sYUFBYSxHQUFHLEVBQUMsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUVyRSxJQUFJLGlC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aEMsQ0FBQztJQUNMLENBQUM7cUZBaHJCUSxvQkFBb0IsbU1BK0ZkLG9CQUFvQix3QkFDcEIsY0FBYyx3QkFDakIsa0JBQWtCO29FQWpHckIsb0JBQW9COzs7Ozs7Ozs7Ozs7Ozs7OENBSmxCO2dCQUNQLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO2FBQzNDOztpRkFFUSxvQkFBb0I7Y0FOaEMsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFNBQVMsRUFBRTtvQkFDUCxrQkFBa0Isc0JBQXNCO2lCQUMzQzthQUNKOztzQkE4RlEsUUFBUTs7c0JBQ1IsUUFBUTs7c0JBQ1IsU0FBUzt1QkFBQyxvQkFBb0I7O3NCQUM5QixTQUFTO3VCQUFDLGNBQWM7O3NCQUN4QixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkE5RmUsZ0JBQWdCO2tCQUF2RSxlQUFlO21CQUFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDRSxnQkFBZ0I7a0JBQXZFLGVBQWU7bUJBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUNLLG1CQUFtQjtrQkFBN0UsZUFBZTttQkFBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDekIsY0FBYztrQkFBN0MsWUFBWTttQkFBQyxnQkFBZ0I7WUFDSSxrQkFBa0I7a0JBQW5ELFlBQVk7bUJBQUMsa0JBQWtCO1lBaUZKLGlCQUFpQjtrQkFBNUMsWUFBWTttQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgJHdhdGNoLFxuICAgIEFwcERlZmF1bHRzLFxuICAgIERhdGFTb3VyY2UsXG4gICAgRGF0YVR5cGUsXG4gICAgZGVib3VuY2UsXG4gICAgRm9ybVdpZGdldFR5cGUsXG4gICAgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0LFxuICAgIGlzRGF0ZVRpbWVUeXBlLFxuICAgIGlzRGVmaW5lZFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBhcHBseUZpbHRlck9uRmllbGQsIEJhc2VGaWVsZFZhbGlkYXRpb25zLCBFRElUX01PREUsIGZldGNoUmVsYXRlZEZpZWxkRGF0YSwgZ2V0RGF0YVRhYmxlRmlsdGVyV2lkZ2V0LCBnZXREZWZhdWx0VmFsdWUsIGdldERpc3RpbmN0RmllbGRQcm9wZXJ0aWVzLCBnZXREaXN0aW5jdFZhbHVlcywgZ2V0RGlzdGluY3RWYWx1ZXNGb3JGaWVsZCwgZ2V0RWRpdE1vZGVXaWRnZXQsIGdldFdhdGNoSWRlbnRpZmllciwgaXNEYXRhU2V0V2lkZ2V0LCBwcm92aWRlQXNXaWRnZXRSZWYsIHNldEhlYWRlckNvbmZpZ0ZvclRhYmxlLCBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90YWJsZS1jb2x1bW4ucHJvcHMnO1xuaW1wb3J0IHsgVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5Hcm91cERpcmVjdGl2ZSB9IGZyb20gJy4uL3RhYmxlLWNvbHVtbi1ncm91cC90YWJsZS1jb2x1bW4tZ3JvdXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZGVjbGFyZSBjb25zdCBfO1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS10YWJsZS1jb2x1bW4nLCBob3N0Q2xhc3M6ICcnfTtcblxubGV0IGlubGluZVdpZGdldFByb3BzID0gWydkYXRhZmllbGQnLCAnZGlzcGxheWZpZWxkJywgJ3BsYWNlaG9sZGVyJywgJ3NlYXJjaGtleScsICdtYXRjaG1vZGUnLCAnZGlzcGxheWxhYmVsJywgJ2dyb3VwYnknLCAnbWF0Y2gnLCAnZGF0ZWZvcm1hdCcsICdzaG93Y291bnQnLCAnY29sbGFwc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGVja2VkdmFsdWUnLCAndW5jaGVja2VkdmFsdWUnLCAnc2hvd2Ryb3Bkb3dub24nLCAnZGF0YWVudHJ5bW9kZScsICdhdXRvY2xvc2UnLCAnZGF0YXNldCcsICdvdXRwdXRmb3JtYXQnXTtcbmNvbnN0IHZhbGlkYXRpb25Qcm9wcyA9IFsnbWF4Y2hhcnMnLCAncmVnZXhwJywgJ21pbnZhbHVlJywgJ21heHZhbHVlJywgJ3N0ZXAnLCAncmVxdWlyZWQnLCAnbWluZGF0ZScsICdtYXhkYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZWRhdGVzJywgJ2V4Y2x1ZGVkYXlzJywgJ21pbnRpbWUnLCAnbWF4dGltZSddO1xuaW5saW5lV2lkZ2V0UHJvcHMgPSBbLi4uaW5saW5lV2lkZ2V0UHJvcHMsIC4uLnZhbGlkYXRpb25Qcm9wc107XG5cbmNsYXNzIEZpZWxkRGVmIHtcbiAgICB3aWRnZXQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih3aWRnZXQpIHtcbiAgICAgICAgdGhpcy53aWRnZXQgPSB3aWRnZXQ7XG4gICAgfVxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkocHJvcCwgbmV3dmFsKSB7XG4gICAgICAgIC8vIEdldCB0aGUgc2NvcGUgb2YgdGhlIGN1cnJlbnQgZWRpdGFibGUgd2lkZ2V0IGFuZCBzZXQgdGhlIHZhbHVlXG4gICAgICAgIHByb3AgPSBwcm9wID09PSAndmFsdWUnID8gJ2RhdGF2YWx1ZScgOiBwcm9wO1xuICAgICAgICB0aGlzLndpZGdldFtwcm9wXSA9IG5ld3ZhbDtcbiAgICB9XG5cbiAgICBnZXRQcm9wZXJ0eShwcm9wKSB7XG4gICAgICAgIHByb3AgPSBwcm9wID09PSAndmFsdWUnID8gJ2RhdGF2YWx1ZScgOiBwcm9wO1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRbcHJvcF07XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlQ29sdW1uXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUYWJsZUNvbHVtbkRpcmVjdGl2ZSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uRGlyZWN0aXZlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2ZpbHRlcldpZGdldCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgX2ZpbHRlckluc3RhbmNlcztcbiAgICBAQ29udGVudENoaWxkcmVuKCdpbmxpbmVXaWRnZXQnLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIF9pbmxpbmVJbnN0YW5jZXM7XG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0TmV3JywgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBfaW5saW5lSW5zdGFuY2VzTmV3O1xuICAgIEBDb250ZW50Q2hpbGQoJ2N1c3RvbUV4cHJUbXBsJykgY3VzdG9tRXhwclRtcGw7XG4gICAgQENvbnRlbnRDaGlsZCgnaW5saW5lV2lkZ2V0VG1wbCcpIGlubGluZVdpZHRoVGVtcFJlZjtcblxuICAgIHByaXZhdGUgX3Byb3BzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGF0YVNldDtcbiAgICBwcml2YXRlIF9pc1Jvd0ZpbHRlcjtcbiAgICBwcml2YXRlIF9pc0lubGluZUVkaXRhYmxlO1xuICAgIHByaXZhdGUgX2lzTmV3RWRpdGFibGVSb3c7XG5cbiAgICBrZXk7XG4gICAgZmlsdGVySW5zdGFuY2U7XG4gICAgaW5saW5lSW5zdGFuY2U7XG4gICAgaW5saW5lSW5zdGFuY2VOZXc7XG5cbiAgICBiYWNrZ3JvdW5kY29sb3I7XG4gICAgYmluZGluZztcbiAgICBjYXB0aW9uO1xuICAgIGRhdGFzZXQ7XG4gICAgZGVmYXVsdHZhbHVlO1xuICAgIGVkaXRXaWRnZXRUeXBlO1xuICAgIGZpbHRlcndpZGdldDtcbiAgICBmaWVsZDtcbiAgICBmb3JtYXRwYXR0ZXJuO1xuICAgIGN1c3RvbXBpcGVmb3JtYXQ7XG4gICAgZ2VuZXJhdG9yO1xuICAgIGxpbWl0O1xuICAgIG1vYmlsZWRpc3BsYXk7XG4gICAgcGNkaXNwbGF5O1xuICAgIHRhYmxldGRpc3BsYXk7XG4gICAgcmVhZG9ubHk7XG4gICAgcmVxdWlyZWQ7XG4gICAgbWF4Y2hhcnM7XG4gICAgbWludmFsdWU7XG4gICAgbWF4dmFsdWU7XG4gICAgcmVnZXhwO1xuICAgIHNlYXJjaGFibGU7XG4gICAgc2hvd2luZmlsdGVyO1xuICAgIHNob3c7XG4gICAgc29ydGFibGU7XG4gICAgdGV4dGFsaWdubWVudDtcbiAgICB0ZXh0Y29sb3I7XG4gICAgdHlwZTtcbiAgICB3aWR0aDtcbiAgICBkYXRlcGF0dGVybjtcbiAgICBlZGl0ZGF0ZXBhdHRlcm47XG4gICAgZmlsdGVyZGF0YWZpZWxkO1xuICAgIGZpbHRlcmRpc3BsYXlmaWVsZDtcbiAgICBmaWx0ZXJkaXNwbGF5bGFiZWw7XG4gICAgZmlsdGVyc2VhcmNoa2V5O1xuICAgIGZpbHRlcnBsYWNlaG9sZGVyO1xuICAgIGRhdGFmaWVsZDtcbiAgICBkaXNwbGF5ZmllbGQ7XG4gICAgZGlzcGxheU5hbWU7XG4gICAgcGNEaXNwbGF5O1xuICAgIG1vYmlsZURpc3BsYXk7XG4gICAgdGFibGV0RGlzcGxheTtcbiAgICB0ZXh0QWxpZ25tZW50O1xuICAgIGJhY2tncm91bmRDb2xvcjtcbiAgICB0ZXh0Q29sb3I7XG4gICAgcHJpbWFyeUtleTtcbiAgICByZWxhdGVkRW50aXR5TmFtZTtcbiAgICBzdHlsZTtcbiAgICBjbGFzcztcbiAgICBuZ2NsYXNzO1xuICAgIGZpbHRlck9uO1xuICAgIGZpbHRlckNvbnRyb2w7XG4gICAgaXNEYXRhU2V0Qm91bmQ7XG4gICAgaXNGaWx0ZXJEYXRhU2V0Qm91bmQ7XG4gICAgc2hvd1BlbmRpbmdTcGlubmVyO1xuICAgIHNob3dQZW5kaW5nU3Bpbm5lck5ldztcbiAgICB2YWxpZGF0aW9ubWVzc2FnZTtcbiAgICBhY3RpdmVDb250cm9sVHlwZTtcbiAgICBwcml2YXRlIF9kYXRhb3B0aW9uczogYW55O1xuICAgIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueTtcbiAgICBwcml2YXRlIG5vdGlmeUZvckZpZWxkczogYW55O1xuICAgIHByaXZhdGUgZmllbGRWYWxpZGF0aW9ucztcbiAgICBwcml2YXRlIGZpZWxkVmFsaWRhdGlvbnNfbmV3O1xuXG4gICAgcHJpdmF0ZSBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICAgIHByaXZhdGUgYXN5bmNWYWxpZGF0b3JzID0gW107XG4gICAgcHJpdmF0ZSBvYnNlcnZlT25GaWVsZHMgPSBbXTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2ZpbHRlclRtcGwnKSBmaWx0ZXJUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGFwcERlZmF1bHRzOiBBcHBEZWZhdWx0cyxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIHRhYmxlOiBUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIGdyb3VwOiBUYWJsZUNvbHVtbkdyb3VwRGlyZWN0aXZlLFxuICAgICAgICBAQXR0cmlidXRlKCdmaWx0ZXJkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGZpbHRlcmRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNldCxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcblxuICAgICAgICB0aGlzLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuICAgIH1cblxuICAgIGdldCBkYXRhb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFvcHRpb25zO1xuICAgIH1cblxuICAgIHNldCBkYXRhb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2RhdGFvcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZGF0YXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgc2V0IGRhdGFzb3VyY2UoZHMpIHtcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IGRzO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHJlZ2lzdGVyIHdpdGggdGFibGVcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZpZWxkRGVmKCk7XG4gICAgICAgIC8vIHdoZW4gY29sdW1uIGlzIGluc2lkZSBhIGdyb3VwIHRoZW4gY29uc2lkZXIgdGhlIGNvbCBpbmRleCBhbmQgbm90IGhlYWRlciBpbmRleC5cbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBwYXJzZUludCh0aGlzLmdldEF0dHIoJ2luZGV4JyksIDEwKTtcbiAgICAgICAgY29uc3QgaGVhZGVySW5kZXggPSBwYXJzZUludCh0aGlzLmdldEF0dHIoJ2hlYWRlckluZGV4JyksIDEwKTtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm5hbWU7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNvbHVtbiB3aXRoIGhlYWRlciBjb25maWcgdG8gY3JlYXRlIGdyb3VwIHN0cnVjdHVyZVxuICAgICAgICBzZXRIZWFkZXJDb25maWdGb3JUYWJsZSh0aGlzLnRhYmxlLmhlYWRlckNvbmZpZywge1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5kaXNwbGF5TmFtZVxuICAgICAgICB9LCBmaWVsZE5hbWUsIGZpZWxkTmFtZSA/IGNvbEluZGV4IDogaGVhZGVySW5kZXgpO1xuXG4gICAgICAgIHRoaXMudGFibGUucmVnaXN0ZXJDb2x1bW5zKHRoaXMud2lkZ2V0LCBjb2xJbmRleCk7XG5cbiAgICAgICAgdGhpcy5faXNSb3dGaWx0ZXIgPSB0aGlzLnRhYmxlLmZpbHRlcm1vZGUgPT09ICdtdWx0aWNvbHVtbicgJiYgdGhpcy5zZWFyY2hhYmxlO1xuICAgICAgICB0aGlzLl9pc0lubGluZUVkaXRhYmxlID0gIXRoaXMucmVhZG9ubHkgJiYgKHRoaXMudGFibGUuZWRpdG1vZGUgIT09IEVESVRfTU9ERS5ESUFMT0cgJiYgdGhpcy50YWJsZS5lZGl0bW9kZSAhPT0gRURJVF9NT0RFLkZPUk0pO1xuICAgICAgICB0aGlzLl9pc05ld0VkaXRhYmxlUm93ID0gdGhpcy5faXNJbmxpbmVFZGl0YWJsZSAmJiB0aGlzLnRhYmxlLmVkaXRtb2RlID09PSBFRElUX01PREUuUVVJQ0tfRURJVCAmJiB0aGlzLnRhYmxlLnNob3duZXdyb3c7XG4gICAgICAgIHRoaXMuc2V0VXBDb250cm9scygpO1xuXG4gICAgICAgIHRoaXMuX3Byb3BzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIElubGluZSBjb250cm9sIHN0YXR1cyBjaGFuZ2Ugc3Vic2NyaWJlclxuICAgICAgICBpZiAodGhpcy5nZXRGb3JtQ29udHJvbCgpKSB7XG4gICAgICAgICAgICBjb25zdCBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKS5zdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShzdGF0dXMgPT4gdGhpcy5vblN0YXR1c0NoYW5nZShzdGF0dXMsICdpbmxpbmVJbnN0YW5jZScpKTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAvLyBJbnN0YW50aWF0ZSBjdXN0b20gdmFsaWRhdG9ycyBjbGFzcyBmb3IgaW5saW5lIGVkaXQgZm9ybSBjb250cm9sXG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMgPSBuZXcgQmFzZUZpZWxkVmFsaWRhdGlvbnModGhpcywgdGhpc1snaW5saW5lSW5zdGFuY2UnXSwgdGhpcy5lZGl0V2lkZ2V0VHlwZSwgdGhpcy5nZXRGb3JtQ29udHJvbCgpLCB0aGlzLnRhYmxlLCAnaW5saW5lSW5zdGFuY2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFF1aWNrIGVkaXQgbmV3IHJvdyBjb250cm9sIHN0YXR1cyBjaGFuZ2Ugc3Vic2NyaWJlclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tOZXdFZGl0YWJsZVJvd0NvbnRyb2woKSkge1xuICAgICAgICAgICAgY29uc3Qgb25TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb25fbmV3ID0gdGhpcy5nZXRGb3JtQ29udHJvbCgnX25ldycpLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB0aGlzLm9uU3RhdHVzQ2hhbmdlKHN0YXR1cywgJ2lubGluZUluc3RhbmNlTmV3JykpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbl9uZXcudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAvLyBJbnN0YW50aWF0ZSBjdXN0b20gdmFsaWRhdG9ycyBjbGFzcyBmb3IgUXVpY2sgZWRpdCBuZXdyb3cgZm9ybSBjb250cm9sXG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3ID0gbmV3IEJhc2VGaWVsZFZhbGlkYXRpb25zKHRoaXMsIHRoaXNbJ2lubGluZUluc3RhbmNlTmV3J10sIHRoaXMuZWRpdFdpZGdldFR5cGUsIHRoaXMuZ2V0Rm9ybUNvbnRyb2woJ19uZXcnKSwgdGhpcy50YWJsZSwgJ2lubGluZUluc3RhbmNlTmV3Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1Jvd0ZpbHRlcikge1xuICAgICAgICAgICAgLy8gTGlzdGVuIG9uIHRoZSBpbm5lciByb3cgZmlsdGVyIHdpZGdldCBhbmQgc2V0dXAgdGhlIHdpZGdldFxuICAgICAgICAgICAgY29uc3QgczEgPSB0aGlzLl9maWx0ZXJJbnN0YW5jZXMuY2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UgPSB2YWwuZmlyc3QgJiYgdmFsLmZpcnN0LndpZGdldDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwRmlsdGVyV2lkZ2V0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gczEudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNJbmxpbmVFZGl0YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgczIgPSB0aGlzLl9pbmxpbmVJbnN0YW5jZXMuY2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIExpc3RlbiBvbiB0aGUgaW5uZXIgaW5saW5lIHdpZGdldCBhbmQgc2V0dXAgdGhlIHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lSW5zdGFuY2UgPSB2YWwuZmlyc3QgJiYgdmFsLmZpcnN0LndpZGdldDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuZm9ybXdpZGdldCA9IHZhbC5maXJzdDtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnJlZ2lzdGVyRm9ybUZpZWxkKHRoaXMuYmluZGluZywgbmV3IEZpZWxkRGVmKHRoaXMuaW5saW5lSW5zdGFuY2UpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwSW5saW5lV2lkZ2V0KCdpbmxpbmVJbnN0YW5jZScpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IHMyLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5faXNOZXdFZGl0YWJsZVJvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMzID0gdGhpcy5faW5saW5lSW5zdGFuY2VzTmV3LmNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTGlzdGVuIG9uIHRoZSBpbm5lciBpbmxpbmUgd2lkZ2V0IGFuZCBzZXR1cCB0aGUgd2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lSW5zdGFuY2VOZXcgPSB2YWwuZmlyc3QgJiYgdmFsLmZpcnN0LndpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zX25ldy5mb3Jtd2lkZ2V0ID0gdmFsLmZpcnN0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFVwSW5saW5lV2lkZ2V0KCdpbmxpbmVJbnN0YW5jZU5ldycpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gczMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWdpc3RlclJlYWR5U3RhdGVMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IHRoaXMuZmllbGQgfHwgdGhpcy5iaW5kaW5nO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIGlmICgodGhpcyBhcyBhbnkpLnRhYmxlLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICAodGhpcy50YWJsZS5pbmxpbmVXaWRnZXRUbXBsIGFzIGFueSkuX3Jlc3VsdHMucHVzaCh0aGlzLmlubGluZVdpZHRoVGVtcFJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIG1hbnVhbGx5IGxpc3RpbmcgdGhlIHRhYmxlIGNvbHVtbiB0ZW1wbGF0ZVJlZiBhcyB0ZW1wbGF0ZVJlZiB3aWxsIG5vdCBiZSBhdmFpbGFibGUgcHJpb3IuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnJlbmRlckR5bmFtaWNGaWx0ZXJDb2x1bW4odGhpcy5maWx0ZXJUZW1wbGF0ZVJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0fHN5bmN8YXN5bmN8cHJvcCB2YWxpZGF0b3JzIGZvciBpbmxpbmUgZm9ybSBjb250cm9sXG4gICAgYXBwbHlWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldEZvcm1Db250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zeW5jVmFsaWRhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VmFsaWRhdG9ycyh0aGlzLnN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vYnNlcnZlT25GaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLm9ic2VydmVPbih0aGlzLm9ic2VydmVPbkZpZWxkcywgJ2NvbHVtbnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSB2YWxpZGF0b3JzIGZvciB0aGUgaW5saW5lIHdpZGdldCBhbmQgc2V0IGZvcm0gdG8gdW50b3VjaGVkXG4gICAgcmVtb3ZlVmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIHRoaXMudGFibGUubmdmb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICBjb250cm9sLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGRlZmF1bHR8c3luY3xhc3luY3xwcm9wIHZhbGlkYXRvcnMgZm9yIFF1aWNrRWRpdCBuZXcgcm93IGZvcm0gY29udHJvbFxuICAgIGFwcGx5TmV3Um93VmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tOZXdFZGl0YWJsZVJvd0NvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN5bmNWYWxpZGF0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc19uZXcuc2V0VmFsaWRhdG9ycyh0aGlzLnN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3LnNldFVwVmFsaWRhdG9ycygpO1xuICAgICAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zX25ldy5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5hc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9ic2VydmVPbkZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3Lm9ic2VydmVPbih0aGlzLm9ic2VydmVPbkZpZWxkcywgJ2NvbHVtbnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSB2YWxpZGF0b3JzIGZvciB0aGUgUXVpY2tFZGl0IG5ldyByb3cgd2lkZ2V0IGFuZCBzZXQgZm9ybSB0byB1bnRvdWNoZWRcbiAgICByZW1vdmVOZXdSb3dWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgdGhpcy50YWJsZS5uZ2Zvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tOZXdFZGl0YWJsZVJvd0NvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCdfbmV3Jyk7XG4gICAgICAgIGNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIGNvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgYWRkRm9ybUNvbnRyb2woc3VmZml4Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGN0cmxOYW1lID0gc3VmZml4ID8gKHRoaXMuYmluZGluZyArIHN1ZmZpeCkgOiB0aGlzLmJpbmRpbmc7XG4gICAgICAgIHRoaXMudGFibGUubmdmb3JtLmFkZENvbnRyb2woY3RybE5hbWUsIHRoaXMudGFibGUuZmIuY29udHJvbCgnJykpO1xuICAgIH1cblxuICAgIGdldEZvcm1Db250cm9sKHN1ZmZpeD86IHN0cmluZykge1xuICAgICAgICBjb25zdCBjdHJsTmFtZSA9IHN1ZmZpeCA/ICh0aGlzLmJpbmRpbmcgKyBzdWZmaXgpIDogdGhpcy5iaW5kaW5nO1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5uZ2Zvcm0uY29udHJvbHNbY3RybE5hbWVdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrTmV3RWRpdGFibGVSb3dDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNOZXdFZGl0YWJsZVJvdyAmJiB0aGlzLmdldEZvcm1Db250cm9sKCdfbmV3Jyk7XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgdGhlIGlubGluZSBlZGl0IGFuZCBmaWx0ZXIgd2lkZ2V0XG4gICAgc2V0VXBDb250cm9scygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5saW5lRWRpdGFibGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRXaWRnZXRUeXBlID09PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1Db250cm9sKCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gIGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25WYWx1ZUNoYW5nZSh2YWx1ZSwgJ2lubGluZUluc3RhbmNlJykpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTmV3RWRpdGFibGVSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZvcm1Db250cm9sKCdfbmV3Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woJ19uZXcnKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbk5ld1ZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gIG5ld0NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vblZhbHVlQ2hhbmdlKHZhbHVlLCAnaW5saW5lSW5zdGFuY2VOZXcnKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25OZXdWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNSb3dGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybUNvbnRyb2woJ19maWx0ZXInKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woJ19maWx0ZXInKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlckNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbkZpbHRlclZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5maWx0ZXJDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vbkZpbHRlclZhbHVlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25GaWx0ZXJWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSByb3cgZmlsdGVyIHZhbHVlXG4gICAgcmVzZXRGaWx0ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlckNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyd2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT24gZmllbGQgdmFsdWUgY2hhbmdlLCBwcm9wYWdhdGUgZXZlbnQgdG8gcGFyZW50IGZvcm1cbiAgICBvbkZpbHRlclZhbHVlQ2hhbmdlKHZhbCkge1xuICAgICAgICB0aGlzLnRhYmxlLnJvd0ZpbHRlclt0aGlzLmZpZWxkXS52YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvLyBHZXQgb2YgdGhlIGFjdGl2ZSBmcm9tIGNvbnRyb2xcbiAgICBnZXQgZGF0YXZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1t0aGlzLmFjdGl2ZUNvbnRyb2xUeXBlXSAmJiB0aGlzW3RoaXMuYWN0aXZlQ29udHJvbFR5cGVdLmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXZhbHVlKHZhbCkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCh0aGlzLmFjdGl2ZUNvbnRyb2xUeXBlID09PSAnaW5saW5lSW5zdGFuY2VOZXcnID8gJ19uZXcnIDogdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5lZGl0V2lkZ2V0VHlwZSAhPT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdmFsO1xuICAgIH1cblxuICAgIC8vIE9uIGZpZWxkIHZhbHVlIGNoYW5nZSwgYXBwbHkgY2FzY2FkaW5nIGZpbHRlciBhbmQgc2V0IHZhbGlkYXRpb24gbWVzc2FnZVxuICAgIG9uVmFsdWVDaGFuZ2UodmFsLCB3aWRnZXQpIHtcbiAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYXBwbHlGaWx0ZXJPbkZpZWxkKHRoaXMudGFibGUuZGF0YXNvdXJjZSwgdGhpcy53aWRnZXQsIHRoaXMudGFibGUuZmllbGREZWZzLCB2YWwsIHtcbiAgICAgICAgICAgICAgICB3aWRnZXQ6ICdlZGl0LXdpZGdldC10eXBlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGUubmdmb3JtLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29udHJvbFR5cGUgPSB3aWRnZXQ7XG4gICAgICAgICAgICBpZiAod2lkZ2V0ID09PSAnaW5saW5lSW5zdGFuY2UnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzTmV3RWRpdGFibGVSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXMoJ19uZXcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3LnNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRmlsdGVyRGF0YSgpIHtcbiAgICAgICAgLy8gSWYgZmlsdGVyZGF0YXNldCBpcyBub3QgYm91bmQsIGdldCB0aGUgZGF0YSBpbXBsaWNpdGx5XG4gICAgICAgIGlmICh0aGlzLl9pc1Jvd0ZpbHRlciAmJiBpc0RhdGFTZXRXaWRnZXQodGhpcy5maWx0ZXJ3aWRnZXQpICYmICF0aGlzLmJpbmRmaWx0ZXJkYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyBGb3IgbGl2ZSB2YXJpYWJsZSwgZ2V0IHRoZSBkYXRhIHVzaW5nIGRpc3RpbmN0IEFQSVxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX0RJU1RJTkNUX0FQSSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgcmVsYXRlZCBlbnRpdHkgY29sdW1uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbGF0ZWRFbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0Wydpcy1yZWxhdGVkJ10gID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXRbJ2xvb2t1cC10eXBlJ10gID0gdGhpcy5yZWxhdGVkRW50aXR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXRbJ2xvb2t1cC1maWVsZCddID0gXy5sYXN0KF8uc3BsaXQodGhpcy5maWVsZCwgJy4nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcndpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UuZGF0YW9wdGlvbnMgPSBnZXREaXN0aW5jdEZpZWxkUHJvcGVydGllcyh0aGlzLnRhYmxlLmRhdGFzb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckluc3RhbmNlLmRhdGFzb3VyY2UgPSB0aGlzLnRhYmxlLmRhdGFzb3VyY2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0RGlzdGluY3RWYWx1ZXModGhpcy50YWJsZS5kYXRhc291cmNlLCB0aGlzLndpZGdldCwgJ2ZpbHRlcndpZGdldCcpLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJEYXRhU2V0ID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlcldpZGdldERhdGFTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGb3Igb3RoZXIgZGF0YXNvdXJjZXMsIGdldCB0aGUgZGF0YSBmcm9tIGRhdGFzb3VyY2UgYm91bmQgdG8gdGFibGVcbiAgICAgICAgICAgICAgICAvL1tUb2RvLUNTUF06IHdhdGNoIGZuIHNob3VsZCBhbHJlYWR5IGJlIGdlbmVyYXRlZCBmcm9tIHRhYmxlIGRhdGFzZXQuYmluZCBleHByXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5iaW5kZGF0YXNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld1BhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbnYgPT4gdGhpcy53aWRnZXQuZmlsdGVyZGF0YXNldCA9IG52LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0V2F0Y2hJZGVudGlmaWVyKHRoaXMud2lkZ2V0SWQsICdmaWx0ZXJkYXRhc2V0JylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkSW5saW5lV2lkZ2V0RGF0YSgpIHtcbiAgICAgICAgLy8gSWYgZGF0YXNldCBpcyBub3QgYm91bmQsIGdldCB0aGUgZGF0YSBpbXBsaWNpdGx5XG4gICAgICAgIGlmIChpc0RhdGFTZXRXaWRnZXQodGhpc1snZWRpdC13aWRnZXQtdHlwZSddKSAmJiAhdGhpcy5iaW5kZGF0YXNldCAmJiAhdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMudGFibGUuZGF0YXNvdXJjZTtcbiAgICAgICAgICAgIGlmICh0aGlzWydyZWxhdGVkLWVudGl0eS1uYW1lJ10gJiYgdGhpc1sncHJpbWFyeS1rZXknXSkge1xuICAgICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBkYXRhIGZvciB0aGUgcmVsYXRlZCBmaWVsZHNcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YVNldEJvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kaW5ncyA9IF8uc3BsaXQodGhpcy5iaW5kaW5nLCAnLicpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BlbmRpbmdTcGlubmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmZXRjaFJlbGF0ZWRGaWVsZERhdGEoZGF0YVNvdXJjZSwgdGhpcy53aWRnZXQsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEZpZWxkOiBfLmhlYWQoYmluZGluZ3MpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhZmllbGQ6IF8ubGFzdChiaW5kaW5ncyksXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogJ2VkaXQtd2lkZ2V0LXR5cGUnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19ESVNUSU5DVF9BUEkpKSB7XG4gICAgICAgICAgICAgICAgZ2V0RGlzdGluY3RWYWx1ZXNGb3JGaWVsZChkYXRhU291cmNlLCB0aGlzLndpZGdldCwge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6ICdlZGl0LXdpZGdldC10eXBlJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT24gdGFibGUgZGF0YXNvdXJjZSBjaGFuZ2UsIGdldCB0aGUgZGF0YSBmb3Igcm93IGZpbHRlcnNcbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMubG9hZEZpbHRlckRhdGEoKTtcbiAgICAgICAgaWYgKHRoaXMudGFibGUuZWRpdG1vZGUgPT09IEVESVRfTU9ERS5RVUlDS19FRElUKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRJbmxpbmVXaWRnZXREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRhdGEgb24gdGhlIHJvdyBmaWx0ZXIgd2lkZ2V0XG4gICAgc2V0RmlsdGVyV2lkZ2V0RGF0YVNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVySW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UuZGF0YXNldCA9IHRoaXMuX2ZpbHRlckRhdGFTZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHByb3BzIG9uIHRoZSByb3cgZmlsdGVyIHdpZGdldFxuICAgIHNldFVwRmlsdGVyV2lkZ2V0KCkge1xuICAgICAgICB0aGlzLmZpbHRlckluc3RhbmNlLnJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RhdGFTZXRXaWRnZXQodGhpcy5maWx0ZXJ3aWRnZXQpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgYmluZGluZyBpcyBkZXBhcnRtZW50LmRlcHRJZCB0aGVuIGZpZWxkIHdpbGwgYmUgZGVwdElkXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBfLmxhc3QodGhpcy5iaW5kaW5nLnNwbGl0KCcuJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UuZGF0YXNldCA9IHRoaXMuX2ZpbHRlckRhdGFTZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnN0YW5jZS5kYXRhZmllbGQgPSB0aGlzLmZpbHRlcmRhdGFmaWVsZCB8fCBmaWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckluc3RhbmNlLmRpc3BsYXlmaWVsZCA9IHRoaXMuZmlsdGVyZGlzcGxheWZpZWxkIHx8IGZpZWxkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcndpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UuZGlzcGxheWxhYmVsID0gdGhpcy5maWx0ZXJkaXNwbGF5bGFiZWwgfHwgZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2Uuc2VhcmNoa2V5ID0gdGhpcy5maWx0ZXJzZWFyY2hrZXkgfHwgZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyd2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5USU1FKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnN0YW5jZS50aW1lcGF0dGVybiA9IHRoaXMuYXBwRGVmYXVsdHMudGltZUZvcm1hdCB8fCAnaGg6bW06c3MgYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlckluc3RhbmNlLnBsYWNlaG9sZGVyID0gdGhpcy5maWx0ZXJwbGFjZWhvbGRlciB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTm90aWZpZXMgYWxsIHRoZSBkZXBlbmRlbnQgdmFsaWRhdGlvbiBjb250cm9scyBpbmNhc2Ugb2YgYW55IGNoYW5nZXNcbiAgICBub3RpZnlDaGFuZ2VzKHF1aWNrRWRpdD8pIHtcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubm90aWZ5Rm9yRmllbGRzLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAocXVpY2tFZGl0ICYmIHRoaXMuX2lzTmV3RWRpdGFibGVSb3cpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5maWVsZFZhbGlkYXRpb25zX25ldy52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5maWVsZFZhbGlkYXRpb25zLnZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFdhdGNoZXMgY29udHJvbCBmb3IgZGVwZW5kZW50IHZhbGlkYXRpb24gY2hhbmdlc1xuICAgIG9ic2VydmVPbihmaWVsZHMpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlT25GaWVsZHMgPSBfLmNsb25lRGVlcChmaWVsZHMpO1xuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIGRlZmF1bHQgdmFsaWRhdG9ycyBpbmxpbmUgYW5kIHF1aWNrZWRpdCBuZXcgcm93IHVzaW5nIHByb3BzXG4gICAgc2V0VXBWYWxpZGF0b3JzKCkge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgIGlmICh0aGlzLl9jaGVja05ld0VkaXRhYmxlUm93Q29udHJvbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3LnNldFVwVmFsaWRhdG9ycygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgQXN5bmMgdmFsaWRhdG9ycyBvbiB0aGUgaW5saW5lIGFuZCBxdWlja2VkaXQgbmV3IHJvdyBmb3JtIGNvbnRyb2xcbiAgICBzZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycyA9IF8uY2xvbmVEZWVwKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIGRlZmF1bHQvY3VzdG9tIHZhbGlkYXRvcnMgb24gdGhlIGlubGluZSBhbmQgcXVpY2tlZGl0IG5ldyByb3cgZm9ybSBjb250cm9sXG4gICAgc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRoaXMuc3luY1ZhbGlkYXRvcnMgPSBfLmNsb25lRGVlcCh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICBib3VuZEZuKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgIH1cblxuICAgIC8vIFNob3dzIHNwaW5uZXIgZm9yIGFzeW5jIHZhbGlkYXRvcnMgYmFzZWQgb24gc3RhdHVzXG4gICAgb25TdGF0dXNDaGFuZ2Uoc3RhdHVzLCB0eXBlKSB7XG4gICAgICAgIHRoaXNbJ3Nob3dQZW5kaW5nU3Bpbm5lcicgKyAodHlwZSA9PT0gJ2lubGluZUluc3RhbmNlJyA/ICcnIDogJ05ldycpXSA9IChzdGF0dXMgPT09ICdQRU5ESU5HJyk7XG4gICAgfVxuXG4gICAgLyogU3VtbWFyeSBSb3cgTG9naWMgc3RhcnQgKi9cbiAgICBzZXRTdW1tYXJ5Um93RGF0YShkYXRhKSB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSAoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSA/IGRhdGEgOiBbZGF0YV07XG4gICAgICAgIHRoaXMuX2ludm9rZVN1bW1hcnlSb3dEYXRhKG5ld0RhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ludm9rZVN1bW1hcnlSb3dEYXRhKGRhdGEpIHtcbiAgICAgICAgXy5mb3JFYWNoKGRhdGEsIChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGl0ZW07XG4gICAgICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50LnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN1bW1hcnlSb3dEZWYnLCB0aGlzLmtleSwgcmVzLCBpbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnQudmFsdWUgJiYgY29udGVudC52YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50RGF0YSA9IGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgY29udGVudC52YWx1ZS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnREYXRhLnZhbHVlID0gcmVzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3VtbWFyeVJvd0RlZicsIHRoaXMua2V5LCBjb250ZW50RGF0YSwgaW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN1bW1hcnlSb3dEZWYnLCB0aGlzLmtleSwgY29udGVudCwgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZ2V0Q29sdW1uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIF8ubWFwKHRoaXMudGFibGUuZGF0YXNldCwgdGhpcy5iaW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWdncmVnYXRlID0ge1xuICAgICAgICBzdW06ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfLnN1bSh0aGlzLl9nZXRDb2x1bW5EYXRhKCkpO1xuICAgICAgICB9LFxuICAgICAgICBhdmVyYWdlOiAocHJlY2lzaW9uOiBudW1iZXIgPSAyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5yb3VuZChfLm1lYW4odGhpcy5fZ2V0Q29sdW1uRGF0YSgpKSwgcHJlY2lzaW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgY291bnQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRDb2x1bW5EYXRhKCkubGVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBtaW5pbXVtOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5taW4odGhpcy5fZ2V0Q29sdW1uRGF0YSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWF4aW11bTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8ubWF4KHRoaXMuX2dldENvbHVtbkRhdGEoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBlcmNlbnQ6ICh2YWx1ZSwgcHJlY2lzaW9uOiBudW1iZXIgPSAyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5yb3VuZCgoXy5zdW0odGhpcy5fZ2V0Q29sdW1uRGF0YSgpKSAvIHZhbHVlICkgKiAxMDAsIHByZWNpc2lvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qIFN1bW1hcnkgUm93IExvZ2ljIGVuZCAqL1xuXG4gICAgLy8gU2V0IHRoZSBwcm9wcyBvbiB0aGUgaW5saW5lIGVkaXQgd2lkZ2V0XG4gICAgc2V0SW5saW5lV2lkZ2V0UHJvcCh3aWRnZXQsIHByb3AsIG52KSB7XG4gICAgICAgIGlmIChwcm9wID09PSAnZGF0ZXBhdHRlcm4nICYmIHRoaXMuZWRpdFdpZGdldFR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRJTUUpIHtcbiAgICAgICAgICAgIHByb3AgPSAndGltZXBhdHRlcm4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzW3dpZGdldF0gJiYgaXNEZWZpbmVkKG52KSkge1xuICAgICAgICAgICAgdGhpc1t3aWRnZXRdW3Byb3BdID0gbnY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBpbmxpbmUgZWRpdCB3aWRnZXRcbiAgICBzZXRVcElubGluZVdpZGdldCh3aWRnZXQpIHtcbiAgICAgICAgdGhpc1t3aWRnZXRdLnJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RhdGFTZXRXaWRnZXQodGhpc1snZWRpdC13aWRnZXQtdHlwZSddKSkge1xuICAgICAgICAgICAgICAgIHRoaXNbd2lkZ2V0XS5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5saW5lV2lkZ2V0UHJvcHMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5saW5lV2lkZ2V0UHJvcCh3aWRnZXQsIGtleSwgdGhpc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpc1t3aWRnZXRdLmRhdGFzb3VyY2UgPSB0aGlzLl9kYXRhc291cmNlO1xuICAgICAgICAgICAgdGhpc1t3aWRnZXRdLmRhdGFvcHRpb25zID0gdGhpcy5fZGF0YW9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnNldElubGluZVdpZGdldFByb3Aod2lkZ2V0LCAnZGF0ZXBhdHRlcm4nLCB0aGlzLmVkaXRkYXRlcGF0dGVybik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFN0eWxlRGVmKCkge1xuICAgICAgICByZXR1cm4gYHdpZHRoOiAke3RoaXMud2lkdGggfHwgJyd9OyBiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMuYmFja2dyb3VuZGNvbG9yIHx8ICcnfTsgY29sb3I6ICR7dGhpcy50ZXh0Y29sb3IgfHwgJyd9O2A7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVGaWVsZERlZigpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMud2lkdGggPT09ICdweCcgPyAgJycgOiAodGhpcy53aWR0aCB8fCAnJyk7XG4gICAgICAgIHRoaXMuZmllbGQgPSB0aGlzLmJpbmRpbmc7XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSAgdGhpcy5jYXB0aW9uIHx8ICcnO1xuICAgICAgICB0aGlzLnBjRGlzcGxheSA9ICB0aGlzLnBjZGlzcGxheTtcbiAgICAgICAgdGhpcy5tb2JpbGVEaXNwbGF5ID0gIHRoaXMubW9iaWxlZGlzcGxheTtcbiAgICAgICAgdGhpcy50YWJsZXREaXNwbGF5ID0gIHRoaXMudGFibGV0ZGlzcGxheTtcbiAgICAgICAgdGhpcy50ZXh0QWxpZ25tZW50ID0gIHRoaXMudGV4dGFsaWdubWVudDtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSAgdGhpcy5iYWNrZ3JvdW5kY29sb3I7XG4gICAgICAgIHRoaXMudGV4dENvbG9yID0gIHRoaXMudGV4dGNvbG9yO1xuICAgICAgICB0aGlzLnByaW1hcnlLZXkgPSAgdGhpc1sncHJpbWFyeS1rZXknXTtcbiAgICAgICAgdGhpcy5yZWxhdGVkRW50aXR5TmFtZSA9ICB0aGlzWydyZWxhdGVkLWVudGl0eS1uYW1lJ107XG4gICAgICAgIHRoaXMuc3R5bGUgPSAgdGhpcy5nZXRTdHlsZURlZigpO1xuICAgICAgICB0aGlzLmNsYXNzID0gIHRoaXNbJ2NvbC1jbGFzcyddO1xuICAgICAgICB0aGlzLm5nY2xhc3MgPSAgdGhpc1snY29sLW5nLWNsYXNzJ107XG4gICAgICAgIHRoaXMuZm9ybWF0cGF0dGVybiA9ICB0aGlzLmZvcm1hdHBhdHRlcm4gPT09ICd0b051bWJlcicgPyAnbnVtYmVyVG9TdHJpbmcnICA6ICB0aGlzLmZvcm1hdHBhdHRlcm47XG4gICAgICAgIHRoaXMuc2VhcmNoYWJsZSA9ICAodGhpcy50eXBlID09PSAnYmxvYicgfHwgdGhpcy50eXBlID09PSAnY2xvYicpID8gZmFsc2UgIDogIHRoaXMuc2VhcmNoYWJsZTtcbiAgICAgICAgdGhpcy5zaG93aW5maWx0ZXIgPSAodGhpcy5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnc2hvd2luZmlsdGVyJykgJiYgISgodGhpcyBhcyBhbnkpLnRhYmxlICYmICh0aGlzIGFzIGFueSkudGFibGUuaXNkeW5hbWljdGFibGUpKSA/IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3Nob3dpbmZpbHRlcicpIDogKHRoaXMuc2hvdyk7XG4gICAgICAgIHRoaXMubGltaXQgPSAgdGhpcy5saW1pdCA/ICt0aGlzLmxpbWl0ICA6ICB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZWRpdFdpZGdldFR5cGUgPSB0aGlzWydlZGl0LXdpZGdldC10eXBlJ10gPSAgdGhpc1snZWRpdC13aWRnZXQtdHlwZSddIHx8IGdldEVkaXRNb2RlV2lkZ2V0KHRoaXMpO1xuICAgICAgICB0aGlzLmZpbHRlck9uID0gIHRoaXNbJ2ZpbHRlci1vbiddO1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gIGlzRGVmaW5lZCh0aGlzLmdldEF0dHIoJ3JlYWRvbmx5JykpID8gdGhpcy5nZXRBdHRyKCdyZWFkb25seScpID09PSAndHJ1ZScgOiAgKHRoaXNbJ3JlbGF0ZWQtZW50aXR5LW5hbWUnXSA/ICF0aGlzWydwcmltYXJ5LWtleSddIDogIF8uaW5jbHVkZXMoWydpZGVudGl0eScsICd1bmlxdWVpZCcsICdzZXF1ZW5jZSddLCB0aGlzLmdlbmVyYXRvcikpO1xuICAgICAgICB0aGlzLmZpbHRlcndpZGdldCA9ICB0aGlzLmZpbHRlcndpZGdldCB8fCBnZXREYXRhVGFibGVGaWx0ZXJXaWRnZXQodGhpcy50eXBlIHx8ICdzdHJpbmcnKTtcbiAgICAgICAgdGhpcy5pc0ZpbHRlckRhdGFTZXRCb3VuZCA9ICEhdGhpcy5iaW5kZmlsdGVyZGF0YXNldDtcbiAgICAgICAgdGhpcy5kZWZhdWx0dmFsdWUgPSBnZXREZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0dmFsdWUsIHRoaXMudHlwZSwgdGhpcy5lZGl0V2lkZ2V0VHlwZSk7XG5cbiAgICAgICAgLy8gRm9yIGRhdGUgdGltZSBkYXRhIHR5cGVzLCBpZiBkYXRlIHBhdHRlcm4gaXMgbm90IHNwZWNpZmllZCwgc2V0IHRoZSBhcHAgZm9ybWF0IG9yIGRlZmF1bHQgZm9ybWF0XG4gICAgICAgIGlmIChpc0RhdGVUaW1lVHlwZSh0aGlzLnR5cGUpICYmIHRoaXMuZm9ybWF0cGF0dGVybiA9PT0gJ3RvRGF0ZScgJiYgIXRoaXMuZGF0ZXBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGb3JtYXQgPSBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQodGhpcy50eXBlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IERhdGFUeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVwYXR0ZXJuICA9IHRoaXMuYXBwRGVmYXVsdHMuZGF0ZUZvcm1hdCB8fCBkZWZhdWx0Rm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IERhdGFUeXBlLlRJTUUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVwYXR0ZXJuICA9IHRoaXMuYXBwRGVmYXVsdHMudGltZUZvcm1hdCB8fCBkZWZhdWx0Rm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IERhdGFUeXBlLlRJTUVTVEFNUCB8fCB0aGlzLnR5cGUgPT09IERhdGFUeXBlLkRBVEVUSU1FKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlcGF0dGVybiAgPSB0aGlzLmFwcERlZmF1bHRzLmRhdGVUaW1lRm9ybWF0IHx8IGRlZmF1bHRGb3JtYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KSB7XG4gICAgICAgIGlmICghdGhpcy5fcHJvcHNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlOYW1lID0gbnYgfHwgJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eSgnZGlzcGxheU5hbWUnLCB0aGlzLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjU5MzRdOiB1cGRhdGUgdGhlIGhlYWRlckNvbmZpZyBsaXN0IHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIGRpc3BsYXkgbmFtZVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gY29sdW1uIGlzIGluc2lkZSBhIGdyb3VwIHRoZW4gY29uc2lkZXIgdGhlIGNvbCBpbmRleCBhbmQgbm90IGhlYWRlciBpbmRleC5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAubmFtZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gZmllbGROYW1lID8gcGFyc2VJbnQodGhpcy5nZXRBdHRyKCdpbmRleCcpLCAxMCkgOiBwYXJzZUludCh0aGlzLmdldEF0dHIoJ2hlYWRlckluZGV4JyksIDEwKTtcbiAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBjb2x1bW4gd2l0aCBoZWFkZXIgY29uZmlnIHRvIGNyZWF0ZSBncm91cCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgICAgICBzZXRIZWFkZXJDb25maWdGb3JUYWJsZSh0aGlzLnRhYmxlLmhlYWRlckNvbmZpZywge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZGlzcGxheU5hbWVcbiAgICAgICAgICAgICAgICB9LCBmaWVsZE5hbWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHR2YWx1ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0dmFsdWUgPSBnZXREZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0dmFsdWUsIHRoaXMudHlwZSwgdGhpcy5lZGl0V2lkZ2V0VHlwZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnJlZHJhdyh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dpbmZpbHRlciA9IHRoaXMubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3Nob3dpbmZpbHRlcicpID8gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2hvd2luZmlsdGVyJykgOiBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcmRhdGFzZXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckRhdGFTZXQgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlcldpZGdldERhdGFTZXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VkaXRkYXRlcGF0dGVybic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmxpbmVXaWRnZXRQcm9wKCdpbmxpbmVJbnN0YW5jZScsICdkYXRlcGF0dGVybicsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElubGluZVdpZGdldFByb3AoJ2lubGluZUluc3RhbmNlTmV3JywgJ2RhdGVwYXR0ZXJuJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvd2luZmlsdGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dpbmZpbHRlciA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoaW5saW5lV2lkZ2V0UHJvcHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldElubGluZVdpZGdldFByb3AoJ2lubGluZUluc3RhbmNlJywga2V5LCBudik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5saW5lV2lkZ2V0UHJvcCgnaW5saW5lSW5zdGFuY2VOZXcnLCBrZXksIG52KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eSwgbnYpIHtcbiAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBudjtcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgY2FzZSAnZGlzcGxheU5hbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRDb2x1bW5Qcm9wJywgdGhpcy5maWVsZCwgcHJvcGVydHksIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5yZWRyYXcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
649
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsV0FBVyxFQUNYLFNBQVMsRUFDVCxRQUFRLEVBRVIsUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsTUFBTSxFQUNOLFdBQVcsRUFDWCxVQUFVLEVBQ1YsUUFBUSxFQUVSLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsY0FBYyxFQUNkLFNBQVMsRUFDWixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMVYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUs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QUNwQixjQUFjLHdCQUNqQixrQkFBa0I7b0VBakdyQixvQkFBb0I7Ozs7Ozs7Ozs7Ozs7Ozs4Q0FKbEI7Z0JBQ1Asa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7YUFDM0M7O2lGQUVRLG9CQUFvQjtjQU5oQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsU0FBUyxFQUFFO29CQUNQLGtCQUFrQixzQkFBc0I7aUJBQzNDO2FBQ0o7O3NCQThGUSxRQUFROztzQkFDUixRQUFROztzQkFDUixTQUFTO3VCQUFDLG9CQUFvQjs7c0JBQzlCLFNBQVM7dUJBQUMsY0FBYzs7c0JBQ3hCLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQTlGZSxnQkFBZ0I7a0JBQXZFLGVBQWU7bUJBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUNFLGdCQUFnQjtrQkFBdkUsZUFBZTttQkFBQyxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1lBQ0ssbUJBQW1CO2tCQUE3RSxlQUFlO21CQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUN6QixjQUFjO2tCQUE3QyxZQUFZO21CQUFDLGdCQUFnQjtZQUNJLGtCQUFrQjtrQkFBbkQsWUFBWTttQkFBQyxrQkFBa0I7WUFpRkosaUJBQWlCO2tCQUE1QyxZQUFZO21CQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIEluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICAkd2F0Y2gsXG4gICAgQXBwRGVmYXVsdHMsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBEYXRhVHlwZSxcbiAgICBkZWJvdW5jZSxcbiAgICBGb3JtV2lkZ2V0VHlwZSxcbiAgICBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQsXG4gICAgaXNEYXRlVGltZVR5cGUsXG4gICAgaXNEZWZpbmVkXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IGFwcGx5RmlsdGVyT25GaWVsZCwgQmFzZUZpZWxkVmFsaWRhdGlvbnMsIEVESVRfTU9ERSwgZmV0Y2hSZWxhdGVkRmllbGREYXRhLCBnZXREYXRhVGFibGVGaWx0ZXJXaWRnZXQsIGdldERlZmF1bHRWYWx1ZSwgZ2V0RGlzdGluY3RGaWVsZFByb3BlcnRpZXMsIGdldERpc3RpbmN0VmFsdWVzLCBnZXREaXN0aW5jdFZhbHVlc0ZvckZpZWxkLCBnZXRFZGl0TW9kZVdpZGdldCwgZ2V0V2F0Y2hJZGVudGlmaWVyLCBpc0RhdGFTZXRXaWRnZXQsIHByb3ZpZGVBc1dpZGdldFJlZiwgc2V0SGVhZGVyQ29uZmlnRm9yVGFibGUsIEJhc2VDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5wcm9wcyc7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uLWdyb3VwL3RhYmxlLWNvbHVtbi1ncm91cC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtjbG9uZURlZXAsIGZvckVhY2gsIGhlYWQsIGluY2x1ZGVzLCBsYXN0LCBtYXAsIG1heCwgbWVhbiwgbWluLCByb3VuZCwgc3BsaXQsIHN1bX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS10YWJsZS1jb2x1bW4nLCBob3N0Q2xhc3M6ICcnfTtcblxubGV0IGlubGluZVdpZGdldFByb3BzID0gWydkYXRhZmllbGQnLCAnZGlzcGxheWZpZWxkJywgJ3BsYWNlaG9sZGVyJywgJ3NlYXJjaGtleScsICdtYXRjaG1vZGUnLCAnZGlzcGxheWxhYmVsJywgJ2dyb3VwYnknLCAnbWF0Y2gnLCAnZGF0ZWZvcm1hdCcsICdzaG93Y291bnQnLCAnY29sbGFwc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGVja2VkdmFsdWUnLCAndW5jaGVja2VkdmFsdWUnLCAnc2hvd2Ryb3Bkb3dub24nLCAnZGF0YWVudHJ5bW9kZScsICdhdXRvY2xvc2UnLCAnZGF0YXNldCcsICdvdXRwdXRmb3JtYXQnXTtcbmNvbnN0IHZhbGlkYXRpb25Qcm9wcyA9IFsnbWF4Y2hhcnMnLCAncmVnZXhwJywgJ21pbnZhbHVlJywgJ21heHZhbHVlJywgJ3N0ZXAnLCAncmVxdWlyZWQnLCAnbWluZGF0ZScsICdtYXhkYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZWRhdGVzJywgJ2V4Y2x1ZGVkYXlzJywgJ21pbnRpbWUnLCAnbWF4dGltZSddO1xuaW5saW5lV2lkZ2V0UHJvcHMgPSBbLi4uaW5saW5lV2lkZ2V0UHJvcHMsIC4uLnZhbGlkYXRpb25Qcm9wc107XG5cbmNsYXNzIEZpZWxkRGVmIHtcbiAgICB3aWRnZXQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih3aWRnZXQpIHtcbiAgICAgICAgdGhpcy53aWRnZXQgPSB3aWRnZXQ7XG4gICAgfVxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkocHJvcCwgbmV3dmFsKSB7XG4gICAgICAgIC8vIEdldCB0aGUgc2NvcGUgb2YgdGhlIGN1cnJlbnQgZWRpdGFibGUgd2lkZ2V0IGFuZCBzZXQgdGhlIHZhbHVlXG4gICAgICAgIHByb3AgPSBwcm9wID09PSAndmFsdWUnID8gJ2RhdGF2YWx1ZScgOiBwcm9wO1xuICAgICAgICB0aGlzLndpZGdldFtwcm9wXSA9IG5ld3ZhbDtcbiAgICB9XG5cbiAgICBnZXRQcm9wZXJ0eShwcm9wKSB7XG4gICAgICAgIHByb3AgPSBwcm9wID09PSAndmFsdWUnID8gJ2RhdGF2YWx1ZScgOiBwcm9wO1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRbcHJvcF07XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlQ29sdW1uXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUYWJsZUNvbHVtbkRpcmVjdGl2ZSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uRGlyZWN0aXZlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2ZpbHRlcldpZGdldCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgX2ZpbHRlckluc3RhbmNlcztcbiAgICBAQ29udGVudENoaWxkcmVuKCdpbmxpbmVXaWRnZXQnLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIF9pbmxpbmVJbnN0YW5jZXM7XG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0TmV3JywgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBfaW5saW5lSW5zdGFuY2VzTmV3O1xuICAgIEBDb250ZW50Q2hpbGQoJ2N1c3RvbUV4cHJUbXBsJykgY3VzdG9tRXhwclRtcGw7XG4gICAgQENvbnRlbnRDaGlsZCgnaW5saW5lV2lkZ2V0VG1wbCcpIGlubGluZVdpZHRoVGVtcFJlZjtcblxuICAgIHByaXZhdGUgX3Byb3BzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZmlsdGVyRGF0YVNldDtcbiAgICBwcml2YXRlIF9pc1Jvd0ZpbHRlcjtcbiAgICBwcml2YXRlIF9pc0lubGluZUVkaXRhYmxlO1xuICAgIHByaXZhdGUgX2lzTmV3RWRpdGFibGVSb3c7XG5cbiAgICBrZXk7XG4gICAgZmlsdGVySW5zdGFuY2U7XG4gICAgaW5saW5lSW5zdGFuY2U7XG4gICAgaW5saW5lSW5zdGFuY2VOZXc7XG5cbiAgICBiYWNrZ3JvdW5kY29sb3I7XG4gICAgYmluZGluZztcbiAgICBjYXB0aW9uO1xuICAgIGRhdGFzZXQ7XG4gICAgZGVmYXVsdHZhbHVlO1xuICAgIGVkaXRXaWRnZXRUeXBlO1xuICAgIGZpbHRlcndpZGdldDtcbiAgICBmaWVsZDtcbiAgICBmb3JtYXRwYXR0ZXJuO1xuICAgIGN1c3RvbXBpcGVmb3JtYXQ7XG4gICAgZ2VuZXJhdG9yO1xuICAgIGxpbWl0O1xuICAgIG1vYmlsZWRpc3BsYXk7XG4gICAgcGNkaXNwbGF5O1xuICAgIHRhYmxldGRpc3BsYXk7XG4gICAgcmVhZG9ubHk7XG4gICAgcmVxdWlyZWQ7XG4gICAgbWF4Y2hhcnM7XG4gICAgbWludmFsdWU7XG4gICAgbWF4dmFsdWU7XG4gICAgcmVnZXhwO1xuICAgIHNlYXJjaGFibGU7XG4gICAgc2hvd2luZmlsdGVyO1xuICAgIHNob3c7XG4gICAgc29ydGFibGU7XG4gICAgdGV4dGFsaWdubWVudDtcbiAgICB0ZXh0Y29sb3I7XG4gICAgdHlwZTtcbiAgICB3aWR0aDtcbiAgICBkYXRlcGF0dGVybjtcbiAgICBlZGl0ZGF0ZXBhdHRlcm47XG4gICAgZmlsdGVyZGF0YWZpZWxkO1xuICAgIGZpbHRlcmRpc3BsYXlmaWVsZDtcbiAgICBmaWx0ZXJkaXNwbGF5bGFiZWw7XG4gICAgZmlsdGVyc2VhcmNoa2V5O1xuICAgIGZpbHRlcnBsYWNlaG9sZGVyO1xuICAgIGRhdGFmaWVsZDtcbiAgICBkaXNwbGF5ZmllbGQ7XG4gICAgZGlzcGxheU5hbWU7XG4gICAgcGNEaXNwbGF5O1xuICAgIG1vYmlsZURpc3BsYXk7XG4gICAgdGFibGV0RGlzcGxheTtcbiAgICB0ZXh0QWxpZ25tZW50O1xuICAgIGJhY2tncm91bmRDb2xvcjtcbiAgICB0ZXh0Q29sb3I7XG4gICAgcHJpbWFyeUtleTtcbiAgICByZWxhdGVkRW50aXR5TmFtZTtcbiAgICBzdHlsZTtcbiAgICBjbGFzcztcbiAgICBuZ2NsYXNzO1xuICAgIGZpbHRlck9uO1xuICAgIGZpbHRlckNvbnRyb2w7XG4gICAgaXNEYXRhU2V0Qm91bmQ7XG4gICAgaXNGaWx0ZXJEYXRhU2V0Qm91bmQ7XG4gICAgc2hvd1BlbmRpbmdTcGlubmVyO1xuICAgIHNob3dQZW5kaW5nU3Bpbm5lck5ldztcbiAgICB2YWxpZGF0aW9ubWVzc2FnZTtcbiAgICBhY3RpdmVDb250cm9sVHlwZTtcbiAgICBwcml2YXRlIF9kYXRhb3B0aW9uczogYW55O1xuICAgIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueTtcbiAgICBwcml2YXRlIG5vdGlmeUZvckZpZWxkczogYW55O1xuICAgIHByaXZhdGUgZmllbGRWYWxpZGF0aW9ucztcbiAgICBwcml2YXRlIGZpZWxkVmFsaWRhdGlvbnNfbmV3O1xuXG4gICAgcHJpdmF0ZSBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICAgIHByaXZhdGUgYXN5bmNWYWxpZGF0b3JzID0gW107XG4gICAgcHJpdmF0ZSBvYnNlcnZlT25GaWVsZHMgPSBbXTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2ZpbHRlclRtcGwnKSBmaWx0ZXJUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGFwcERlZmF1bHRzOiBBcHBEZWZhdWx0cyxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIHRhYmxlOiBUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIGdyb3VwOiBUYWJsZUNvbHVtbkdyb3VwRGlyZWN0aXZlLFxuICAgICAgICBAQXR0cmlidXRlKCdmaWx0ZXJkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGZpbHRlcmRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNldCxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcblxuICAgICAgICB0aGlzLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuICAgIH1cblxuICAgIGdldCBkYXRhb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFvcHRpb25zO1xuICAgIH1cblxuICAgIHNldCBkYXRhb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2RhdGFvcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZGF0YXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgc2V0IGRhdGFzb3VyY2UoZHMpIHtcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IGRzO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHJlZ2lzdGVyIHdpdGggdGFibGVcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZpZWxkRGVmKCk7XG4gICAgICAgIC8vIHdoZW4gY29sdW1uIGlzIGluc2lkZSBhIGdyb3VwIHRoZW4gY29uc2lkZXIgdGhlIGNvbCBpbmRleCBhbmQgbm90IGhlYWRlciBpbmRleC5cbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBwYXJzZUludCh0aGlzLmdldEF0dHIoJ2luZGV4JyksIDEwKTtcbiAgICAgICAgY29uc3QgaGVhZGVySW5kZXggPSBwYXJzZUludCh0aGlzLmdldEF0dHIoJ2hlYWRlckluZGV4JyksIDEwKTtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm5hbWU7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNvbHVtbiB3aXRoIGhlYWRlciBjb25maWcgdG8gY3JlYXRlIGdyb3VwIHN0cnVjdHVyZVxuICAgICAgICBzZXRIZWFkZXJDb25maWdGb3JUYWJsZSh0aGlzLnRhYmxlLmhlYWRlckNvbmZpZywge1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5kaXNwbGF5TmFtZVxuICAgICAgICB9LCBmaWVsZE5hbWUsIGZpZWxkTmFtZSA/IGNvbEluZGV4IDogaGVhZGVySW5kZXgpO1xuXG4gICAgICAgIHRoaXMudGFibGUucmVnaXN0ZXJDb2x1bW5zKHRoaXMud2lkZ2V0LCBjb2xJbmRleCk7XG5cbiAgICAgICAgdGhpcy5faXNSb3dGaWx0ZXIgPSB0aGlzLnRhYmxlLmZpbHRlcm1vZGUgPT09ICdtdWx0aWNvbHVtbicgJiYgdGhpcy5zZWFyY2hhYmxlO1xuICAgICAgICB0aGlzLl9pc0lubGluZUVkaXRhYmxlID0gIXRoaXMucmVhZG9ubHkgJiYgKHRoaXMudGFibGUuZWRpdG1vZGUgIT09IEVESVRfTU9ERS5ESUFMT0cgJiYgdGhpcy50YWJsZS5lZGl0bW9kZSAhPT0gRURJVF9NT0RFLkZPUk0pO1xuICAgICAgICB0aGlzLl9pc05ld0VkaXRhYmxlUm93ID0gdGhpcy5faXNJbmxpbmVFZGl0YWJsZSAmJiB0aGlzLnRhYmxlLmVkaXRtb2RlID09PSBFRElUX01PREUuUVVJQ0tfRURJVCAmJiB0aGlzLnRhYmxlLnNob3duZXdyb3c7XG4gICAgICAgIHRoaXMuc2V0VXBDb250cm9scygpO1xuXG4gICAgICAgIHRoaXMuX3Byb3BzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIElubGluZSBjb250cm9sIHN0YXR1cyBjaGFuZ2Ugc3Vic2NyaWJlclxuICAgICAgICBpZiAodGhpcy5nZXRGb3JtQ29udHJvbCgpKSB7XG4gICAgICAgICAgICBjb25zdCBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKS5zdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShzdGF0dXMgPT4gdGhpcy5vblN0YXR1c0NoYW5nZShzdGF0dXMsICdpbmxpbmVJbnN0YW5jZScpKTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAvLyBJbnN0YW50aWF0ZSBjdXN0b20gdmFsaWRhdG9ycyBjbGFzcyBmb3IgaW5saW5lIGVkaXQgZm9ybSBjb250cm9sXG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMgPSBuZXcgQmFzZUZpZWxkVmFsaWRhdGlvbnModGhpcywgdGhpc1snaW5saW5lSW5zdGFuY2UnXSwgdGhpcy5lZGl0V2lkZ2V0VHlwZSwgdGhpcy5nZXRGb3JtQ29udHJvbCgpLCB0aGlzLnRhYmxlLCAnaW5saW5lSW5zdGFuY2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFF1aWNrIGVkaXQgbmV3IHJvdyBjb250cm9sIHN0YXR1cyBjaGFuZ2Ugc3Vic2NyaWJlclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tOZXdFZGl0YWJsZVJvd0NvbnRyb2woKSkge1xuICAgICAgICAgICAgY29uc3Qgb25TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb25fbmV3ID0gdGhpcy5nZXRGb3JtQ29udHJvbCgnX25ldycpLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB0aGlzLm9uU3RhdHVzQ2hhbmdlKHN0YXR1cywgJ2lubGluZUluc3RhbmNlTmV3JykpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbl9uZXcudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAvLyBJbnN0YW50aWF0ZSBjdXN0b20gdmFsaWRhdG9ycyBjbGFzcyBmb3IgUXVpY2sgZWRpdCBuZXdyb3cgZm9ybSBjb250cm9sXG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3ID0gbmV3IEJhc2VGaWVsZFZhbGlkYXRpb25zKHRoaXMsIHRoaXNbJ2lubGluZUluc3RhbmNlTmV3J10sIHRoaXMuZWRpdFdpZGdldFR5cGUsIHRoaXMuZ2V0Rm9ybUNvbnRyb2woJ19uZXcnKSwgdGhpcy50YWJsZSwgJ2lubGluZUluc3RhbmNlTmV3Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1Jvd0ZpbHRlcikge1xuICAgICAgICAgICAgLy8gTGlzdGVuIG9uIHRoZSBpbm5lciByb3cgZmlsdGVyIHdpZGdldCBhbmQgc2V0dXAgdGhlIHdpZGdldFxuICAgICAgICAgICAgY29uc3QgczEgPSB0aGlzLl9maWx0ZXJJbnN0YW5jZXMuY2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UgPSB2YWwuZmlyc3QgJiYgdmFsLmZpcnN0LndpZGdldDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwRmlsdGVyV2lkZ2V0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gczEudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNJbmxpbmVFZGl0YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgczIgPSB0aGlzLl9pbmxpbmVJbnN0YW5jZXMuY2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIExpc3RlbiBvbiB0aGUgaW5uZXIgaW5saW5lIHdpZGdldCBhbmQgc2V0dXAgdGhlIHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lSW5zdGFuY2UgPSB2YWwuZmlyc3QgJiYgdmFsLmZpcnN0LndpZGdldDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuZm9ybXdpZGdldCA9IHZhbC5maXJzdDtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnJlZ2lzdGVyRm9ybUZpZWxkKHRoaXMuYmluZGluZywgbmV3IEZpZWxkRGVmKHRoaXMuaW5saW5lSW5zdGFuY2UpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwSW5saW5lV2lkZ2V0KCdpbmxpbmVJbnN0YW5jZScpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IHMyLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5faXNOZXdFZGl0YWJsZVJvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMzID0gdGhpcy5faW5saW5lSW5zdGFuY2VzTmV3LmNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTGlzdGVuIG9uIHRoZSBpbm5lciBpbmxpbmUgd2lkZ2V0IGFuZCBzZXR1cCB0aGUgd2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lSW5zdGFuY2VOZXcgPSB2YWwuZmlyc3QgJiYgdmFsLmZpcnN0LndpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zX25ldy5mb3Jtd2lkZ2V0ID0gdmFsLmZpcnN0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFVwSW5saW5lV2lkZ2V0KCdpbmxpbmVJbnN0YW5jZU5ldycpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gczMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWdpc3RlclJlYWR5U3RhdGVMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IHRoaXMuZmllbGQgfHwgdGhpcy5iaW5kaW5nO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIGlmICgodGhpcyBhcyBhbnkpLnRhYmxlLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICAodGhpcy50YWJsZS5pbmxpbmVXaWRnZXRUbXBsIGFzIGFueSkuX3Jlc3VsdHMucHVzaCh0aGlzLmlubGluZVdpZHRoVGVtcFJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIG1hbnVhbGx5IGxpc3RpbmcgdGhlIHRhYmxlIGNvbHVtbiB0ZW1wbGF0ZVJlZiBhcyB0ZW1wbGF0ZVJlZiB3aWxsIG5vdCBiZSBhdmFpbGFibGUgcHJpb3IuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnJlbmRlckR5bmFtaWNGaWx0ZXJDb2x1bW4odGhpcy5maWx0ZXJUZW1wbGF0ZVJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0fHN5bmN8YXN5bmN8cHJvcCB2YWxpZGF0b3JzIGZvciBpbmxpbmUgZm9ybSBjb250cm9sXG4gICAgYXBwbHlWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldEZvcm1Db250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zeW5jVmFsaWRhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VmFsaWRhdG9ycyh0aGlzLnN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vYnNlcnZlT25GaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLm9ic2VydmVPbih0aGlzLm9ic2VydmVPbkZpZWxkcywgJ2NvbHVtbnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSB2YWxpZGF0b3JzIGZvciB0aGUgaW5saW5lIHdpZGdldCBhbmQgc2V0IGZvcm0gdG8gdW50b3VjaGVkXG4gICAgcmVtb3ZlVmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIHRoaXMudGFibGUubmdmb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICBjb250cm9sLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGRlZmF1bHR8c3luY3xhc3luY3xwcm9wIHZhbGlkYXRvcnMgZm9yIFF1aWNrRWRpdCBuZXcgcm93IGZvcm0gY29udHJvbFxuICAgIGFwcGx5TmV3Um93VmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tOZXdFZGl0YWJsZVJvd0NvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN5bmNWYWxpZGF0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc19uZXcuc2V0VmFsaWRhdG9ycyh0aGlzLnN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3LnNldFVwVmFsaWRhdG9ycygpO1xuICAgICAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zX25ldy5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5hc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9ic2VydmVPbkZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3Lm9ic2VydmVPbih0aGlzLm9ic2VydmVPbkZpZWxkcywgJ2NvbHVtbnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSB2YWxpZGF0b3JzIGZvciB0aGUgUXVpY2tFZGl0IG5ldyByb3cgd2lkZ2V0IGFuZCBzZXQgZm9ybSB0byB1bnRvdWNoZWRcbiAgICByZW1vdmVOZXdSb3dWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgdGhpcy50YWJsZS5uZ2Zvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tOZXdFZGl0YWJsZVJvd0NvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCdfbmV3Jyk7XG4gICAgICAgIGNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIGNvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgYWRkRm9ybUNvbnRyb2woc3VmZml4Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGN0cmxOYW1lID0gc3VmZml4ID8gKHRoaXMuYmluZGluZyArIHN1ZmZpeCkgOiB0aGlzLmJpbmRpbmc7XG4gICAgICAgIHRoaXMudGFibGUubmdmb3JtLmFkZENvbnRyb2woY3RybE5hbWUsIHRoaXMudGFibGUuZmIuY29udHJvbCgnJykpO1xuICAgIH1cblxuICAgIGdldEZvcm1Db250cm9sKHN1ZmZpeD86IHN0cmluZykge1xuICAgICAgICBjb25zdCBjdHJsTmFtZSA9IHN1ZmZpeCA/ICh0aGlzLmJpbmRpbmcgKyBzdWZmaXgpIDogdGhpcy5iaW5kaW5nO1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5uZ2Zvcm0uY29udHJvbHNbY3RybE5hbWVdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrTmV3RWRpdGFibGVSb3dDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNOZXdFZGl0YWJsZVJvdyAmJiB0aGlzLmdldEZvcm1Db250cm9sKCdfbmV3Jyk7XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgdGhlIGlubGluZSBlZGl0IGFuZCBmaWx0ZXIgd2lkZ2V0XG4gICAgc2V0VXBDb250cm9scygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5saW5lRWRpdGFibGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRXaWRnZXRUeXBlID09PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1Db250cm9sKCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gIGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25WYWx1ZUNoYW5nZSh2YWx1ZSwgJ2lubGluZUluc3RhbmNlJykpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTmV3RWRpdGFibGVSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZvcm1Db250cm9sKCdfbmV3Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woJ19uZXcnKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbk5ld1ZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gIG5ld0NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vblZhbHVlQ2hhbmdlKHZhbHVlLCAnaW5saW5lSW5zdGFuY2VOZXcnKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25OZXdWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNSb3dGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybUNvbnRyb2woJ19maWx0ZXInKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woJ19maWx0ZXInKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlckNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbkZpbHRlclZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5maWx0ZXJDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vbkZpbHRlclZhbHVlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25GaWx0ZXJWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSByb3cgZmlsdGVyIHZhbHVlXG4gICAgcmVzZXRGaWx0ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlckNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyd2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gT24gZmllbGQgdmFsdWUgY2hhbmdlLCBwcm9wYWdhdGUgZXZlbnQgdG8gcGFyZW50IGZvcm1cbiAgICBvbkZpbHRlclZhbHVlQ2hhbmdlKHZhbCkge1xuICAgICAgICB0aGlzLnRhYmxlLnJvd0ZpbHRlclt0aGlzLmZpZWxkXS52YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvLyBHZXQgb2YgdGhlIGFjdGl2ZSBmcm9tIGNvbnRyb2xcbiAgICBnZXQgZGF0YXZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1t0aGlzLmFjdGl2ZUNvbnRyb2xUeXBlXSAmJiB0aGlzW3RoaXMuYWN0aXZlQ29udHJvbFR5cGVdLmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXZhbHVlKHZhbCkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCh0aGlzLmFjdGl2ZUNvbnRyb2xUeXBlID09PSAnaW5saW5lSW5zdGFuY2VOZXcnID8gJ19uZXcnIDogdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5lZGl0V2lkZ2V0VHlwZSAhPT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdmFsO1xuICAgIH1cblxuICAgIC8vIE9uIGZpZWxkIHZhbHVlIGNoYW5nZSwgYXBwbHkgY2FzY2FkaW5nIGZpbHRlciBhbmQgc2V0IHZhbGlkYXRpb24gbWVzc2FnZVxuICAgIG9uVmFsdWVDaGFuZ2UodmFsLCB3aWRnZXQpIHtcbiAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYXBwbHlGaWx0ZXJPbkZpZWxkKHRoaXMudGFibGUuZGF0YXNvdXJjZSwgdGhpcy53aWRnZXQsIHRoaXMudGFibGUuZmllbGREZWZzLCB2YWwsIHtcbiAgICAgICAgICAgICAgICB3aWRnZXQ6ICdlZGl0LXdpZGdldC10eXBlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGUubmdmb3JtLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29udHJvbFR5cGUgPSB3aWRnZXQ7XG4gICAgICAgICAgICBpZiAod2lkZ2V0ID09PSAnaW5saW5lSW5zdGFuY2UnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzTmV3RWRpdGFibGVSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXMoJ19uZXcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNfbmV3LnNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRmlsdGVyRGF0YSgpIHtcbiAgICAgICAgLy8gSWYgZmlsdGVyZGF0YXNldCBpcyBub3QgYm91bmQsIGdldCB0aGUgZGF0YSBpbXBsaWNpdGx5XG4gICAgICAgIGlmICh0aGlzLl9pc1Jvd0ZpbHRlciAmJiBpc0RhdGFTZXRXaWRnZXQodGhpcy5maWx0ZXJ3aWRnZXQpICYmICF0aGlzLmJpbmRmaWx0ZXJkYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyBGb3IgbGl2ZSB2YXJpYWJsZSwgZ2V0IHRoZSBkYXRhIHVzaW5nIGRpc3RpbmN0IEFQSVxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX0RJU1RJTkNUX0FQSSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgcmVsYXRlZCBlbnRpdHkgY29sdW1uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbGF0ZWRFbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0Wydpcy1yZWxhdGVkJ10gID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXRbJ2xvb2t1cC10eXBlJ10gID0gdGhpcy5yZWxhdGVkRW50aXR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXRbJ2xvb2t1cC1maWVsZCddID0gbGFzdChzcGxpdCh0aGlzLmZpZWxkLCAnLicpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyd2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnN0YW5jZS5kYXRhb3B0aW9ucyA9IGdldERpc3RpbmN0RmllbGRQcm9wZXJ0aWVzKHRoaXMudGFibGUuZGF0YXNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UuZGF0YXNvdXJjZSA9IHRoaXMudGFibGUuZGF0YXNvdXJjZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXREaXN0aW5jdFZhbHVlcyh0aGlzLnRhYmxlLmRhdGFzb3VyY2UsIHRoaXMud2lkZ2V0LCAnZmlsdGVyd2lkZ2V0JykudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckRhdGFTZXQgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyV2lkZ2V0RGF0YVNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZvciBvdGhlciBkYXRhc291cmNlcywgZ2V0IHRoZSBkYXRhIGZyb20gZGF0YXNvdXJjZSBib3VuZCB0byB0YWJsZVxuICAgICAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogd2F0Y2ggZm4gc2hvdWxkIGFscmVhZHkgYmUgZ2VuZXJhdGVkIGZyb20gdGFibGUgZGF0YXNldC5iaW5kIGV4cHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBudiA9PiB0aGlzLndpZGdldC5maWx0ZXJkYXRhc2V0ID0gbnYsXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRXYXRjaElkZW50aWZpZXIodGhpcy53aWRnZXRJZCwgJ2ZpbHRlcmRhdGFzZXQnKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRJbmxpbmVXaWRnZXREYXRhKCkge1xuICAgICAgICAvLyBJZiBkYXRhc2V0IGlzIG5vdCBib3VuZCwgZ2V0IHRoZSBkYXRhIGltcGxpY2l0bHlcbiAgICAgICAgaWYgKGlzRGF0YVNldFdpZGdldCh0aGlzWydlZGl0LXdpZGdldC10eXBlJ10pICYmICF0aGlzLmJpbmRkYXRhc2V0ICYmICF0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy50YWJsZS5kYXRhc291cmNlO1xuICAgICAgICAgICAgaWYgKHRoaXNbJ3JlbGF0ZWQtZW50aXR5LW5hbWUnXSAmJiB0aGlzWydwcmltYXJ5LWtleSddKSB7XG4gICAgICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGRhdGEgZm9yIHRoZSByZWxhdGVkIGZpZWxkc1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhU2V0Qm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmdzID0gc3BsaXQodGhpcy5iaW5kaW5nLCAnLicpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BlbmRpbmdTcGlubmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmZXRjaFJlbGF0ZWRGaWVsZERhdGEoZGF0YVNvdXJjZSwgdGhpcy53aWRnZXQsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEZpZWxkOiBoZWFkKGJpbmRpbmdzKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YWZpZWxkOiBsYXN0KGJpbmRpbmdzKSxcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0OiAnZWRpdC13aWRnZXQtdHlwZSdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX0RJU1RJTkNUX0FQSSkpIHtcbiAgICAgICAgICAgICAgICBnZXREaXN0aW5jdFZhbHVlc0ZvckZpZWxkKGRhdGFTb3VyY2UsIHRoaXMud2lkZ2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogJ2VkaXQtd2lkZ2V0LXR5cGUnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbiB0YWJsZSBkYXRhc291cmNlIGNoYW5nZSwgZ2V0IHRoZSBkYXRhIGZvciByb3cgZmlsdGVyc1xuICAgIG9uRGF0YVNvdXJjZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5sb2FkRmlsdGVyRGF0YSgpO1xuICAgICAgICBpZiAodGhpcy50YWJsZS5lZGl0bW9kZSA9PT0gRURJVF9NT0RFLlFVSUNLX0VESVQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZElubGluZVdpZGdldERhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgZGF0YSBvbiB0aGUgcm93IGZpbHRlciB3aWRnZXRcbiAgICBzZXRGaWx0ZXJXaWRnZXREYXRhU2V0KCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnN0YW5jZS5kYXRhc2V0ID0gdGhpcy5fZmlsdGVyRGF0YVNldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgcHJvcHMgb24gdGhlIHJvdyBmaWx0ZXIgd2lkZ2V0XG4gICAgc2V0VXBGaWx0ZXJXaWRnZXQoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UucmVnaXN0ZXJSZWFkeVN0YXRlTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGF0YVNldFdpZGdldCh0aGlzLmZpbHRlcndpZGdldCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBiaW5kaW5nIGlzIGRlcGFydG1lbnQuZGVwdElkIHRoZW4gZmllbGQgd2lsbCBiZSBkZXB0SWRcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhc3QodGhpcy5iaW5kaW5nLnNwbGl0KCcuJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UuZGF0YXNldCA9IHRoaXMuX2ZpbHRlckRhdGFTZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnN0YW5jZS5kYXRhZmllbGQgPSB0aGlzLmZpbHRlcmRhdGFmaWVsZCB8fCBmaWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckluc3RhbmNlLmRpc3BsYXlmaWVsZCA9IHRoaXMuZmlsdGVyZGlzcGxheWZpZWxkIHx8IGZpZWxkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcndpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2UuZGlzcGxheWxhYmVsID0gdGhpcy5maWx0ZXJkaXNwbGF5bGFiZWwgfHwgZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5zdGFuY2Uuc2VhcmNoa2V5ID0gdGhpcy5maWx0ZXJzZWFyY2hrZXkgfHwgZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyd2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5USU1FKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnN0YW5jZS50aW1lcGF0dGVybiA9IHRoaXMuYXBwRGVmYXVsdHMudGltZUZvcm1hdCB8fCAnaGg6bW06c3MgYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlckluc3RhbmNlLnBsYWNlaG9sZGVyID0gdGhpcy5maWx0ZXJwbGFjZWhvbGRlciB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTm90aWZpZXMgYWxsIHRoZSBkZXBlbmRlbnQgdmFsaWRhdGlvbiBjb250cm9scyBpbmNhc2Ugb2YgYW55IGNoYW5nZXNcbiAgICBub3RpZnlDaGFuZ2VzKHF1aWNrRWRpdD8pIHtcbiAgICAgICAgZm9yRWFjaCh0aGlzLm5vdGlmeUZvckZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKHF1aWNrRWRpdCAmJiB0aGlzLl9pc05ld0VkaXRhYmxlUm93KSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRWYWxpZGF0aW9uc19uZXcudmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRWYWxpZGF0aW9ucy52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBXYXRjaGVzIGNvbnRyb2wgZm9yIGRlcGVuZGVudCB2YWxpZGF0aW9uIGNoYW5nZXNcbiAgICBvYnNlcnZlT24oZmllbGRzKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZU9uRmllbGRzID0gY2xvbmVEZWVwKGZpZWxkcyk7XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgZGVmYXVsdCB2YWxpZGF0b3JzIGlubGluZSBhbmQgcXVpY2tlZGl0IG5ldyByb3cgdXNpbmcgcHJvcHNcbiAgICBzZXRVcFZhbGlkYXRvcnMoKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5zZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoZWNrTmV3RWRpdGFibGVSb3dDb250cm9sKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc19uZXcuc2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBBc3luYyB2YWxpZGF0b3JzIG9uIHRoZSBpbmxpbmUgYW5kIHF1aWNrZWRpdCBuZXcgcm93IGZvcm0gY29udHJvbFxuICAgIHNldEFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzID0gY2xvbmVEZWVwKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIGRlZmF1bHQvY3VzdG9tIHZhbGlkYXRvcnMgb24gdGhlIGlubGluZSBhbmQgcXVpY2tlZGl0IG5ldyByb3cgZm9ybSBjb250cm9sXG4gICAgc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRoaXMuc3luY1ZhbGlkYXRvcnMgPSBjbG9uZURlZXAodmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgYm91bmRGbihmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICB9XG5cbiAgICAvLyBTaG93cyBzcGlubmVyIGZvciBhc3luYyB2YWxpZGF0b3JzIGJhc2VkIG9uIHN0YXR1c1xuICAgIG9uU3RhdHVzQ2hhbmdlKHN0YXR1cywgdHlwZSkge1xuICAgICAgICB0aGlzWydzaG93UGVuZGluZ1NwaW5uZXInICsgKHR5cGUgPT09ICdpbmxpbmVJbnN0YW5jZScgPyAnJyA6ICdOZXcnKV0gPSAoc3RhdHVzID09PSAnUEVORElORycpO1xuICAgIH1cblxuICAgIC8qIFN1bW1hcnkgUm93IExvZ2ljIHN0YXJ0ICovXG4gICAgc2V0U3VtbWFyeVJvd0RhdGEoZGF0YSkge1xuICAgICAgICBjb25zdCBuZXdEYXRhID0gKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkgPyBkYXRhIDogW2RhdGFdO1xuICAgICAgICB0aGlzLl9pbnZva2VTdW1tYXJ5Um93RGF0YShuZXdEYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbnZva2VTdW1tYXJ5Um93RGF0YShkYXRhKSB7XG4gICAgICAgIGZvckVhY2goZGF0YSwgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3VtbWFyeVJvd0RlZicsIHRoaXMua2V5LCByZXMsIGluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudC52YWx1ZSAmJiBjb250ZW50LnZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnREYXRhID0gY29udGVudDtcbiAgICAgICAgICAgICAgICBjb250ZW50LnZhbHVlLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudERhdGEudmFsdWUgPSByZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGUuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdW1tYXJ5Um93RGVmJywgdGhpcy5rZXksIGNvbnRlbnREYXRhLCBpbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3VtbWFyeVJvd0RlZicsIHRoaXMua2V5LCBjb250ZW50LCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIF9nZXRDb2x1bW5EYXRhKCkge1xuICAgICAgICByZXR1cm4gbWFwKHRoaXMudGFibGUuZGF0YXNldCwgdGhpcy5iaW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWdncmVnYXRlID0ge1xuICAgICAgICBzdW06ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdW0odGhpcy5fZ2V0Q29sdW1uRGF0YSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgYXZlcmFnZTogKHByZWNpc2lvbjogbnVtYmVyID0gMikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKG1lYW4odGhpcy5fZ2V0Q29sdW1uRGF0YSgpKSwgcHJlY2lzaW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgY291bnQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRDb2x1bW5EYXRhKCkubGVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBtaW5pbXVtOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWluKHRoaXMuX2dldENvbHVtbkRhdGEoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1heGltdW06ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtYXgodGhpcy5fZ2V0Q29sdW1uRGF0YSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGVyY2VudDogKHZhbHVlLCBwcmVjaXNpb246IG51bWJlciA9IDIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCgoc3VtKHRoaXMuX2dldENvbHVtbkRhdGEoKSkgLyB2YWx1ZSkgKiAxMDAsIHByZWNpc2lvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qIFN1bW1hcnkgUm93IExvZ2ljIGVuZCAqL1xuXG4gICAgLy8gU2V0IHRoZSBwcm9wcyBvbiB0aGUgaW5saW5lIGVkaXQgd2lkZ2V0XG4gICAgc2V0SW5saW5lV2lkZ2V0UHJvcCh3aWRnZXQsIHByb3AsIG52KSB7XG4gICAgICAgIGlmIChwcm9wID09PSAnZGF0ZXBhdHRlcm4nICYmIHRoaXMuZWRpdFdpZGdldFR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRJTUUpIHtcbiAgICAgICAgICAgIHByb3AgPSAndGltZXBhdHRlcm4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzW3dpZGdldF0gJiYgaXNEZWZpbmVkKG52KSkge1xuICAgICAgICAgICAgdGhpc1t3aWRnZXRdW3Byb3BdID0gbnY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBpbmxpbmUgZWRpdCB3aWRnZXRcbiAgICBzZXRVcElubGluZVdpZGdldCh3aWRnZXQpIHtcbiAgICAgICAgdGhpc1t3aWRnZXRdLnJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RhdGFTZXRXaWRnZXQodGhpc1snZWRpdC13aWRnZXQtdHlwZSddKSkge1xuICAgICAgICAgICAgICAgIHRoaXNbd2lkZ2V0XS5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5saW5lV2lkZ2V0UHJvcHMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5saW5lV2lkZ2V0UHJvcCh3aWRnZXQsIGtleSwgdGhpc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpc1t3aWRnZXRdLmRhdGFzb3VyY2UgPSB0aGlzLl9kYXRhc291cmNlO1xuICAgICAgICAgICAgdGhpc1t3aWRnZXRdLmRhdGFvcHRpb25zID0gdGhpcy5fZGF0YW9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnNldElubGluZVdpZGdldFByb3Aod2lkZ2V0LCAnZGF0ZXBhdHRlcm4nLCB0aGlzLmVkaXRkYXRlcGF0dGVybik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFN0eWxlRGVmKCkge1xuICAgICAgICByZXR1cm4gYHdpZHRoOiAke3RoaXMud2lkdGggfHwgJyd9OyBiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMuYmFja2dyb3VuZGNvbG9yIHx8ICcnfTsgY29sb3I6ICR7dGhpcy50ZXh0Y29sb3IgfHwgJyd9O2A7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVGaWVsZERlZigpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMud2lkdGggPT09ICdweCcgPyAgJycgOiAodGhpcy53aWR0aCB8fCAnJyk7XG4gICAgICAgIHRoaXMuZmllbGQgPSB0aGlzLmJpbmRpbmc7XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSAgdGhpcy5jYXB0aW9uIHx8ICcnO1xuICAgICAgICB0aGlzLnBjRGlzcGxheSA9ICB0aGlzLnBjZGlzcGxheTtcbiAgICAgICAgdGhpcy5tb2JpbGVEaXNwbGF5ID0gIHRoaXMubW9iaWxlZGlzcGxheTtcbiAgICAgICAgdGhpcy50YWJsZXREaXNwbGF5ID0gIHRoaXMudGFibGV0ZGlzcGxheTtcbiAgICAgICAgdGhpcy50ZXh0QWxpZ25tZW50ID0gIHRoaXMudGV4dGFsaWdubWVudDtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSAgdGhpcy5iYWNrZ3JvdW5kY29sb3I7XG4gICAgICAgIHRoaXMudGV4dENvbG9yID0gIHRoaXMudGV4dGNvbG9yO1xuICAgICAgICB0aGlzLnByaW1hcnlLZXkgPSAgdGhpc1sncHJpbWFyeS1rZXknXTtcbiAgICAgICAgdGhpcy5yZWxhdGVkRW50aXR5TmFtZSA9ICB0aGlzWydyZWxhdGVkLWVudGl0eS1uYW1lJ107XG4gICAgICAgIHRoaXMuc3R5bGUgPSAgdGhpcy5nZXRTdHlsZURlZigpO1xuICAgICAgICB0aGlzLmNsYXNzID0gIHRoaXNbJ2NvbC1jbGFzcyddO1xuICAgICAgICB0aGlzLm5nY2xhc3MgPSAgdGhpc1snY29sLW5nLWNsYXNzJ107XG4gICAgICAgIHRoaXMuZm9ybWF0cGF0dGVybiA9ICB0aGlzLmZvcm1hdHBhdHRlcm4gPT09ICd0b051bWJlcicgPyAnbnVtYmVyVG9TdHJpbmcnICA6ICB0aGlzLmZvcm1hdHBhdHRlcm47XG4gICAgICAgIHRoaXMuc2VhcmNoYWJsZSA9ICAodGhpcy50eXBlID09PSAnYmxvYicgfHwgdGhpcy50eXBlID09PSAnY2xvYicpID8gZmFsc2UgIDogIHRoaXMuc2VhcmNoYWJsZTtcbiAgICAgICAgdGhpcy5zaG93aW5maWx0ZXIgPSAodGhpcy5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnc2hvd2luZmlsdGVyJykgJiYgISgodGhpcyBhcyBhbnkpLnRhYmxlICYmICh0aGlzIGFzIGFueSkudGFibGUuaXNkeW5hbWljdGFibGUpKSA/IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3Nob3dpbmZpbHRlcicpIDogKHRoaXMuc2hvdyk7XG4gICAgICAgIHRoaXMubGltaXQgPSAgdGhpcy5saW1pdCA/ICt0aGlzLmxpbWl0ICA6ICB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZWRpdFdpZGdldFR5cGUgPSB0aGlzWydlZGl0LXdpZGdldC10eXBlJ10gPSAgdGhpc1snZWRpdC13aWRnZXQtdHlwZSddIHx8IGdldEVkaXRNb2RlV2lkZ2V0KHRoaXMpO1xuICAgICAgICB0aGlzLmZpbHRlck9uID0gIHRoaXNbJ2ZpbHRlci1vbiddO1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gaXNEZWZpbmVkKHRoaXMuZ2V0QXR0cigncmVhZG9ubHknKSkgPyB0aGlzLmdldEF0dHIoJ3JlYWRvbmx5JykgPT09ICd0cnVlJyA6ICh0aGlzWydyZWxhdGVkLWVudGl0eS1uYW1lJ10gPyAhdGhpc1sncHJpbWFyeS1rZXknXSA6IGluY2x1ZGVzKFsnaWRlbnRpdHknLCAndW5pcXVlaWQnLCAnc2VxdWVuY2UnXSwgdGhpcy5nZW5lcmF0b3IpKTtcbiAgICAgICAgdGhpcy5maWx0ZXJ3aWRnZXQgPSAgdGhpcy5maWx0ZXJ3aWRnZXQgfHwgZ2V0RGF0YVRhYmxlRmlsdGVyV2lkZ2V0KHRoaXMudHlwZSB8fCAnc3RyaW5nJyk7XG4gICAgICAgIHRoaXMuaXNGaWx0ZXJEYXRhU2V0Qm91bmQgPSAhIXRoaXMuYmluZGZpbHRlcmRhdGFzZXQ7XG4gICAgICAgIHRoaXMuZGVmYXVsdHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHRoaXMuZGVmYXVsdHZhbHVlLCB0aGlzLnR5cGUsIHRoaXMuZWRpdFdpZGdldFR5cGUpO1xuXG4gICAgICAgIC8vIEZvciBkYXRlIHRpbWUgZGF0YSB0eXBlcywgaWYgZGF0ZSBwYXR0ZXJuIGlzIG5vdCBzcGVjaWZpZWQsIHNldCB0aGUgYXBwIGZvcm1hdCBvciBkZWZhdWx0IGZvcm1hdFxuICAgICAgICBpZiAoaXNEYXRlVGltZVR5cGUodGhpcy50eXBlKSAmJiB0aGlzLmZvcm1hdHBhdHRlcm4gPT09ICd0b0RhdGUnICYmICF0aGlzLmRhdGVwYXR0ZXJuKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Rm9ybWF0ID0gZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0KHRoaXMudHlwZSk7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBEYXRhVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlcGF0dGVybiAgPSB0aGlzLmFwcERlZmF1bHRzLmRhdGVGb3JtYXQgfHwgZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBEYXRhVHlwZS5USU1FKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlcGF0dGVybiAgPSB0aGlzLmFwcERlZmF1bHRzLnRpbWVGb3JtYXQgfHwgZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBEYXRhVHlwZS5USU1FU1RBTVAgfHwgdGhpcy50eXBlID09PSBEYXRhVHlwZS5EQVRFVElNRSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZXBhdHRlcm4gID0gdGhpcy5hcHBEZWZhdWx0cy5kYXRlVGltZUZvcm1hdCB8fCBkZWZhdWx0Rm9ybWF0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdikge1xuICAgICAgICBpZiAoIXRoaXMuX3Byb3BzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IG52IHx8ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHkoJ2Rpc3BsYXlOYW1lJywgdGhpcy5kaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTI1OTM0XTogdXBkYXRlIHRoZSBoZWFkZXJDb25maWcgbGlzdCB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiBkaXNwbGF5IG5hbWVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGNvbHVtbiBpcyBpbnNpZGUgYSBncm91cCB0aGVuIGNvbnNpZGVyIHRoZSBjb2wgaW5kZXggYW5kIG5vdCBoZWFkZXIgaW5kZXguXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLm5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGZpZWxkTmFtZSA/IHBhcnNlSW50KHRoaXMuZ2V0QXR0cignaW5kZXgnKSwgMTApIDogcGFyc2VJbnQodGhpcy5nZXRBdHRyKCdoZWFkZXJJbmRleCcpLCAxMCk7XG4gICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgY29sdW1uIHdpdGggaGVhZGVyIGNvbmZpZyB0byBjcmVhdGUgZ3JvdXAgc3RydWN0dXJlXG4gICAgICAgICAgICAgICAgc2V0SGVhZGVyQ29uZmlnRm9yVGFibGUodGhpcy50YWJsZS5oZWFkZXJDb25maWcsIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICAgICAgfSwgZmllbGROYW1lLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0dmFsdWUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHRoaXMuZGVmYXVsdHZhbHVlLCB0aGlzLnR5cGUsIHRoaXMuZWRpdFdpZGdldFR5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5yZWRyYXcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93aW5maWx0ZXIgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdzaG93aW5maWx0ZXInKSA/IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3Nob3dpbmZpbHRlcicpIDogbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaWx0ZXJkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJEYXRhU2V0ID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJXaWRnZXREYXRhU2V0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlZGl0ZGF0ZXBhdHRlcm4nOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5saW5lV2lkZ2V0UHJvcCgnaW5saW5lSW5zdGFuY2UnLCAnZGF0ZXBhdHRlcm4nLCBudik7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmxpbmVXaWRnZXRQcm9wKCdpbmxpbmVJbnN0YW5jZU5ldycsICdkYXRlcGF0dGVybicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3dpbmZpbHRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93aW5maWx0ZXIgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGlubGluZVdpZGdldFByb3BzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbmxpbmVXaWRnZXRQcm9wKCdpbmxpbmVJbnN0YW5jZScsIGtleSwgbnYpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldElubGluZVdpZGdldFByb3AoJ2lubGluZUluc3RhbmNlTmV3Jywga2V5LCBudik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkocHJvcGVydHksIG52KSB7XG4gICAgICAgIHRoaXNbcHJvcGVydHldID0gbnY7XG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Rpc3BsYXlOYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0Q29sdW1uUHJvcCcsIHRoaXMuZmllbGQsIHByb3BlcnR5LCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMudGFibGUucmVkcmF3KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|