@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
|
@@ -5,6 +5,7 @@ import { ALLFIELDS, configureDnD, getConditionalClasses, getUniqObjsByDataField,
|
|
|
5
5
|
import { DatasetAwareFormComponent } from '@wm/components/input';
|
|
6
6
|
import { SearchComponent } from '@wm/components/basic/search';
|
|
7
7
|
import { registerProps } from './chips.props';
|
|
8
|
+
import { clone, filter, find, findIndex, forEach, isArray, isEqual, isObject, max, pullAt, reduce, slice, toString, trim } from "lodash-es";
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@angular/common";
|
|
10
11
|
import * as i2 from "@wm/components/basic/search";
|
|
@@ -84,7 +85,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
84
85
|
this._debounceUpdateQueryModel = debounce((val) => {
|
|
85
86
|
this.updateQueryModel(val).then(() => {
|
|
86
87
|
if (this.bindChipclass) {
|
|
87
|
-
|
|
88
|
+
forEach(this.chipsList, (item, index) => {
|
|
88
89
|
this.registerChipItemClass(item, index);
|
|
89
90
|
});
|
|
90
91
|
}
|
|
@@ -165,12 +166,12 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
165
166
|
return Promise.resolve();
|
|
166
167
|
}
|
|
167
168
|
// clone the data as the updations on data will change the datavalue.
|
|
168
|
-
let dataValue =
|
|
169
|
+
let dataValue = clone(data);
|
|
169
170
|
const prevChipsList = this.chipsList;
|
|
170
171
|
this.chipsList = [];
|
|
171
172
|
// update the model when model has items more than maxsize
|
|
172
173
|
if (this.maxsize && dataValue.length > this.maxsize) {
|
|
173
|
-
this._modelByValue = dataValue =
|
|
174
|
+
this._modelByValue = dataValue = slice(dataValue, 0, this.maxsize);
|
|
174
175
|
data = dataValue;
|
|
175
176
|
}
|
|
176
177
|
const searchQuery = [];
|
|
@@ -184,8 +185,8 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
184
185
|
* 6. If value is not object and allowonlyselect is false, then create a customModel and replace this value with customModel and prepare datasetItem from this value
|
|
185
186
|
*/
|
|
186
187
|
dataValue.forEach((val, i) => {
|
|
187
|
-
const itemFound =
|
|
188
|
-
return
|
|
188
|
+
const itemFound = find(this.datasetItems, item => {
|
|
189
|
+
return isObject(item.value) ? isEqual(item.value, val) : toString(item.value) === toString(val);
|
|
189
190
|
});
|
|
190
191
|
if (itemFound) {
|
|
191
192
|
this.chipsList.push(itemFound);
|
|
@@ -195,7 +196,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
195
196
|
}
|
|
196
197
|
else if (this.datafield === ALLFIELDS) {
|
|
197
198
|
let dataObj, isCustom = false;
|
|
198
|
-
if (!
|
|
199
|
+
if (!isObject(val)) {
|
|
199
200
|
dataObj = this.createCustomDataModel(val);
|
|
200
201
|
isCustom = true;
|
|
201
202
|
if (dataObj) {
|
|
@@ -206,7 +207,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
206
207
|
// if custom chips is already generated, val will be object as {'dataField_val': 'entered_val'}
|
|
207
208
|
// Hence check this val in previous chipList and assign the iscustom flag
|
|
208
209
|
const prevChipObj = prevChipsList.find(obj => {
|
|
209
|
-
return
|
|
210
|
+
return isEqual(obj.value, val);
|
|
210
211
|
});
|
|
211
212
|
if (prevChipObj) {
|
|
212
213
|
isCustom = prevChipObj.iscustom;
|
|
@@ -227,7 +228,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
227
228
|
.then(response => {
|
|
228
229
|
this.chipsList = this.chipsList.concat(response || []);
|
|
229
230
|
dataValue.forEach((val, i) => {
|
|
230
|
-
const isExists =
|
|
231
|
+
const isExists = find(this.chipsList, (obj) => {
|
|
231
232
|
return obj.value.toString() === val.toString();
|
|
232
233
|
});
|
|
233
234
|
if (!isExists) {
|
|
@@ -268,7 +269,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
268
269
|
let allowAdd;
|
|
269
270
|
let chipObj;
|
|
270
271
|
if (searchComponent && isDefined(searchComponent.datavalue) && searchComponent.queryModel !== '') {
|
|
271
|
-
if (!searchComponent.query || !
|
|
272
|
+
if (!searchComponent.query || !trim(searchComponent.query)) {
|
|
272
273
|
return;
|
|
273
274
|
}
|
|
274
275
|
chipObj = searchComponent.queryModel;
|
|
@@ -279,7 +280,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
279
280
|
}
|
|
280
281
|
let dataObj;
|
|
281
282
|
if (this.datafield === ALLFIELDS) {
|
|
282
|
-
if (!
|
|
283
|
+
if (!isObject(this.searchComponent.query) && trim(this.searchComponent.query)) {
|
|
283
284
|
dataObj = this.createCustomDataModel(this.searchComponent.query);
|
|
284
285
|
// return if the custom chip is empty
|
|
285
286
|
if (!dataObj) {
|
|
@@ -288,7 +289,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
288
289
|
}
|
|
289
290
|
}
|
|
290
291
|
}
|
|
291
|
-
const data = dataObj ||
|
|
292
|
+
const data = dataObj || trim(this.searchComponent.query);
|
|
292
293
|
if (data) {
|
|
293
294
|
const transformedData = this.getTransformedData(data, true);
|
|
294
295
|
chipObj = transformedData[0];
|
|
@@ -338,9 +339,9 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
338
339
|
// Check if newItem already exists
|
|
339
340
|
isDuplicate(item) {
|
|
340
341
|
if (this.datafield === ALLFIELDS) {
|
|
341
|
-
return
|
|
342
|
+
return findIndex(this.chipsList, { value: item.value }) > -1;
|
|
342
343
|
}
|
|
343
|
-
return
|
|
344
|
+
return findIndex(this.chipsList, { key: item.key }) > -1;
|
|
344
345
|
}
|
|
345
346
|
// Check if max size is reached
|
|
346
347
|
updateMaxSize() {
|
|
@@ -351,8 +352,9 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
351
352
|
this.nextItemIndex++;
|
|
352
353
|
return this.searchComponent.getDataSource(query, true, index)
|
|
353
354
|
.then((response) => {
|
|
354
|
-
|
|
355
|
-
|
|
355
|
+
// @ts-ignore
|
|
356
|
+
return filter(query, queryVal => {
|
|
357
|
+
find(response, { value: queryVal });
|
|
356
358
|
});
|
|
357
359
|
});
|
|
358
360
|
}
|
|
@@ -438,9 +440,9 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
438
440
|
// Remove the item from list
|
|
439
441
|
removeItem($event, item, index, canFocus) {
|
|
440
442
|
$event.stopPropagation();
|
|
441
|
-
const indexes =
|
|
442
|
-
const focusIndex =
|
|
443
|
-
const items =
|
|
443
|
+
const indexes = isArray(index) ? index : [index];
|
|
444
|
+
const focusIndex = max(indexes);
|
|
445
|
+
const items = reduce(indexes, (result, i) => {
|
|
444
446
|
result.push(this.chipsList[i]);
|
|
445
447
|
return result;
|
|
446
448
|
}, []);
|
|
@@ -449,7 +451,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
449
451
|
if (isDefined(allowRemove) && !toBoolean(allowRemove)) {
|
|
450
452
|
return;
|
|
451
453
|
}
|
|
452
|
-
const prevDatavalue =
|
|
454
|
+
const prevDatavalue = clone(this.datavalue);
|
|
453
455
|
// focus next chip after deletion.
|
|
454
456
|
// if there are no chips in the list focus search box
|
|
455
457
|
setTimeout(() => {
|
|
@@ -468,10 +470,10 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
468
470
|
$chipsList.get(focusIndex).focus();
|
|
469
471
|
}
|
|
470
472
|
});
|
|
471
|
-
const pulledItems =
|
|
473
|
+
const pulledItems = pullAt(this.chipsList, indexes);
|
|
472
474
|
pulledItems.forEach(datasetItem => {
|
|
473
|
-
this._modelByValue =
|
|
474
|
-
return !(
|
|
475
|
+
this._modelByValue = filter(this._modelByValue, val => {
|
|
476
|
+
return !(isObject(val) ? isEqual(val, datasetItem.value) : toString(val) === toString(datasetItem.value));
|
|
475
477
|
});
|
|
476
478
|
});
|
|
477
479
|
this._unsubscribeDv = false;
|
|
@@ -487,7 +489,7 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
487
489
|
* @param currentIndex :- the current index of the element.
|
|
488
490
|
*/
|
|
489
491
|
swapElementsInArray(data, newIndex, currentIndex) {
|
|
490
|
-
const draggedItem =
|
|
492
|
+
const draggedItem = pullAt(data, currentIndex)[0];
|
|
491
493
|
data.splice(newIndex, 0, draggedItem);
|
|
492
494
|
}
|
|
493
495
|
/**
|
|
@@ -669,5 +671,5 @@ export class ChipsComponent extends DatasetAwareFormComponent {
|
|
|
669
671
|
type: ViewChild,
|
|
670
672
|
args: [SearchComponent, /* TODO: add static flag */ { static: true }]
|
|
671
673
|
}] }); })();
|
|
672
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChipsComponent, { className: "ChipsComponent", filePath: "chips.component.ts", lineNumber:
|
|
673
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NoaXBzL3NyYy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvY2hpcHMvc3JjL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUVSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFlLHFCQUFxQixFQUFFLHNCQUFzQixFQUFpQixTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEwsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7SUNmdEMseUJBQStHOzs7SUFBekMsc0RBQW1COzs7O0lBRXpGLGtDQUF3SjtJQUE5RCxpU0FBUyw2Q0FBZ0MsS0FBRTtJQUNqSSx3QkFBb0M7SUFDeEMsaUJBQVM7Ozs7SUFiYixBQUZKLDZCQUM4RCxXQVNpQztJQUR4RixBQURBLEFBREEsQUFEQSxBQURBLEFBREEsQUFEQSxvTUFBUyx1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O3VCQUFDLGdCQUFnQjs7c0JBQzFCLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQTdCK0IsZUFBZTtrQkFBdEYsU0FBUzttQkFBQyxlQUFlLEVBQUUsMkJBQTJCLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDOztrRkFoQjdELGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIGRlYm91bmNlLFxuICAgIGlzQXBwbGVQcm9kdWN0LFxuICAgIGlzRGVmaW5lZCxcbiAgICB0b0Jvb2xlYW5cbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQUxMRklFTERTLCBjb25maWd1cmVEbkQsIERhdGFTZXRJdGVtLCBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldFVuaXFPYmpzQnlEYXRhRmllbGQsIElXaWRnZXRDb25maWcsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNpYy9zZWFyY2gnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9jaGlwcy5wcm9wcyc7XG5cbmRlY2xhcmUgY29uc3QgXztcblxuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tY2hpcHMnLFxuICAgIGhvc3RDbGFzczogJ2FwcC1jaGlwcyBuYXYgbmF2LXBpbGxzIGxpc3QtaW5saW5lJ1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21DaGlwc10nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGlwcy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhDaGlwc0NvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoQ2hpcHNDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDaGlwc0NvbXBvbmVudCBleHRlbmRzIERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG4gICAgcHVibGljIGFsbG93b25seXNlbGVjdDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZW5hYmxlcmVvcmRlcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWF4c2l6ZTogbnVtYmVyO1xuICAgIHB1YmxpYyBpbnB1dHdpZHRoOiBhbnk7XG4gICAgcHJpdmF0ZSBkZWJvdW5jZXRpbWU6IG51bWJlcjtcblxuICAgIHB1YmxpYyBjaGlwc0xpc3Q6IEFycmF5PGFueT4gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1heFNpemVSZWFjaGVkID0gJ01heCBzaXplIHJlYWNoZWQnO1xuICAgIHByaXZhdGUgc2F0dXJhdGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBuZXh0SXRlbUluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBnZXRUcmFuc2Zvcm1lZERhdGE6IChkYXRhLCBpdGVtSW5kZXg/KSA9PiBEYXRhU2V0SXRlbVtdO1xuICAgIHByaXZhdGUgaW5wdXRwb3NpdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgc2hvd3NlYXJjaGljb246IGJvb2xlYW47XG5cbiAgICBAVmlld0NoaWxkKFNlYXJjaENvbXBvbmVudCwgLyogVE9ETzogYWRkIHN0YXRpYyBmbGFnICovIHtzdGF0aWM6IHRydWV9KSBzZWFyY2hDb21wb25lbnQ6IFNlYXJjaENvbXBvbmVudDtcbiAgICBwcml2YXRlIF9kYXRhc291cmNlOiBhbnk7XG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VhcmNoa2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsOiBhbnk7XG4gICAgcHJpdmF0ZSBsaW1pdDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NsYXNzRXhwcjogYW55O1xuICAgIHByaXZhdGUgbWluY2hhcnM6IG51bWJlcjtcbiAgICBwcml2YXRlIG1hdGNobW9kZTogc3RyaW5nO1xuXG4gICAgLy8gZ2V0dGVyIHNldHRlciBpcyBhZGRlZCB0byBwYXNzIHRoZSBkYXRhc291cmNlIHRvIHNlYXJjaGNvbXBvbmVudC5cbiAgICBnZXQgZGF0YXNvdXJjZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhc291cmNlO1xuICAgIH1cblxuICAgIHNldCBkYXRhc291cmNlKG52KSB7XG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBudjtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YXNvdXJjZSA9IG52O1xuICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwodGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWZpZWxkLmJpbmQnKSBwcml2YXRlIGJpbmREaXNwbGF5RmllbGQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlleHByZXNzaW9uLmJpbmQnKSBwcml2YXRlIGJpbmREaXNwbGF5RXhwcixcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWltYWdlc3JjLmJpbmQnKSBwcml2YXRlIGJpbmREaXNwbGF5SW1nU3JjLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhZmllbGQuYmluZCcpIHByaXZhdGUgYmluZERhdGFGaWVsZCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHJpdmF0ZSBiaW5kRGF0YVNldCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnY2hpcGNsYXNzLmJpbmQnKSBwcml2YXRlIGJpbmRDaGlwY2xhc3MsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuXG4gICAgICAgIC8vIHNldCB0aGUgc2hvd3NlYXJjaGljb24gYXMgZmFsc2UgYnkgZGVmYXVsdC5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5zaG93c2VhcmNoaWNvbikpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd3NlYXJjaGljb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXggPSAwOyAvLyBkZWZhdWx0IGNoaXAgaW5kZXhcblxuICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwgPSBkZWJvdW5jZSgodmFsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5TW9kZWwodmFsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iaW5kQ2hpcGNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaCh0aGlzLmNoaXBzTGlzdCwgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hpcEl0ZW1DbGFzcyhpdGVtLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxNTApO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFzZXQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICAgICAgLy8gY2xlYXJpbmcgdGhlIGxhc3QgcmVzdWx0cyB3aGVuIGRhdGFzZXQgaXMgcmVhc3NpZ25lZFxuICAgICAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXggPSB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwodGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXNldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBjb25zdCBkYXRhdmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGF2YWx1ZSQuc3Vic2NyaWJlKCh2YWw6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBxdWVyeU1vZGVsIG9ubHkgd2hlbiBwYXJlbnRSZWYgaXMgYXZhaWxhYmxlLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YWZpZWxkIGlzIEFMTEZJTEVEUyBkbyBub3QgZmV0Y2ggdGhlIHJlY29yZHNcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHF1ZXJ5IG1vZGVsIHdpdGggdGhlIHZhbHVlcyB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmJpbmREaXNwbGF5SW1nU3JjO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmRpc3BsYXlpbWFnZXNyYztcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlsYWJlbCA9IHRoaXMuYmluZERpc3BsYXlFeHByO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5bGFiZWwgPSB0aGlzLmRpc3BsYXlmaWVsZDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YWZpZWxkID0gdGhpcy5iaW5kRGF0YUZpZWxkIHx8IHRoaXMuZGF0YWZpZWxkO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGF0YXNldCA9IHRoaXMuYmluZERhdGFTZXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LnNlYXJjaGtleSA9IHRoaXMuc2VhcmNoa2V5O1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5saW1pdCA9IHRoaXMubGltaXQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRlYm91bmNldGltZSA9IHRoaXMuZGVib3VuY2V0aW1lO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5tYXRjaG1vZGUgPSB0aGlzLm1hdGNobW9kZTtcblxuICAgICAgICB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSA9ICh2YWwsIGlzQ3VzdG9tKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hDb21wb25lbnQuZ2V0VHJhbnNmb3JtZWREYXRhKFt2YWxdLCB0aGlzLm5leHRJdGVtSW5kZXgrKywgaXNDdXN0b20pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRG5EKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBldmFsdWF0ZWQgY2xhc3MgZXhwcmVzc2lvbi5cbiAgICAgKiBAcGFyYW0gJGluZGV4IGluZGV4IG9mIHRoZSBjaGlwXG4gICAgICogQHBhcmFtIGl0ZW0gY2hpcCBvYmplY3QgY29udGFpbmluZyB0aGUga2V5LCB2YWx1ZSwgbGFiZWxcbiAgICAgKiBAcmV0dXJucyB7YW55fSBldmFsdWF0ZWQgY2xhc3MgZXhwcmVzc2lvbiB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVnaXN0ZXJDaGlwSXRlbUNsYXNzKGl0ZW0sICRpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5iaW5kQ2hpcGNsYXNzKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRjaE5hbWUgPSBgJHt0aGlzLndpZGdldElkfV9jaGlwSXRlbUNsYXNzXyR7JGluZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBzYW1lIGFzIGxpc3QgaXRlbSBjbGFzc1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2godGhpcy5iaW5kQ2hpcGNsYXNzLCB0aGlzLnZpZXdQYXJlbnQsIHtpdGVtLCAkaW5kZXh9LCAobnYsIG92KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUl0ZW1DbGFzcyhnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KSwgJGluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUl0ZW1DbGFzcyh2YWwsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNoaXBJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jaGlwLWl0ZW0nKS5pdGVtKGluZGV4KTtcbiAgICAgICAgJChjaGlwSXRlbSkucmVtb3ZlQ2xhc3ModmFsLnRvUmVtb3ZlKS5hZGRDbGFzcyh2YWwudG9BZGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRHVwbGljYXRlcygpIHtcbiAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkKHRoaXMuY2hpcHNMaXN0LCB0aGlzLmRhdGFmaWVsZCwgdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWwpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHF1ZXJ5TW9kZWwuXG4gICAgLy8gZGVmYXVsdCBjYWxsIHRvIGdldCB0aGUgZGVmYXVsdCBkYXRhIGNhbiBiZSBkb25lIG9ubHkgd2hlbiBkZWZhdWx0UXVlcnkgaXMgdHJ1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZVF1ZXJ5TW9kZWwoZGF0YTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsb25lIHRoZSBkYXRhIGFzIHRoZSB1cGRhdGlvbnMgb24gZGF0YSB3aWxsIGNoYW5nZSB0aGUgZGF0YXZhbHVlLlxuICAgICAgICBsZXQgZGF0YVZhbHVlID0gXy5jbG9uZShkYXRhKTtcbiAgICAgICAgY29uc3QgcHJldkNoaXBzTGlzdCA9IHRoaXMuY2hpcHNMaXN0O1xuICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFtdO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgbW9kZWwgd2hlbiBtb2RlbCBoYXMgaXRlbXMgbW9yZSB0aGFuIG1heHNpemVcbiAgICAgICAgaWYgKHRoaXMubWF4c2l6ZSAmJiBkYXRhVmFsdWUubGVuZ3RoID4gdGhpcy5tYXhzaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBkYXRhVmFsdWUgPSBfLnNsaWNlKGRhdGFWYWx1ZSwgMCwgdGhpcy5tYXhzaXplKTtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWFyY2hRdWVyeTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb3IgZWFjaCB2YWx1ZSBpbiBkYXRhdmFsdWUsXG4gICAgICAgICAqIDEuIGNoZWNrIHdoZXRoZXIgdmFsdWUgaXMgaW4gZGF0YXNldEl0ZW1zLCBpZiBpdGVtIGlzIGZvdW5kLCBhZGRkIHRvIHRoZSBjaGlwc0xpc3QuXG4gICAgICAgICAqIDIuIGVsc2UgbWFrZSBhIGRlZmF1bHQgcXVlcnkgdG8gdGhlIGZpbHRlciBhbmQgZ2V0IHRoZSByZWNvcmQuXG4gICAgICAgICAqIDMuIEluIHN0ZXAgMiwgaWYgZGF0YXZhbHVlIGlzIG5vdCBBTExGSUVMRFMsIHRoZW4gbWFrZSBhIHF1ZXJ5LiBFeHRyYWN0IHRoZSBjaGlwc0xpc3QgZnJvbSB0aGUgcXVlcnkgcmVzcG9uc2UuXG4gICAgICAgICAqIDQuIElmIHRoZXJlIGlzIG5vIHJlc3BvbnNlIGZvciB0aGUgdmFsdWUgYW5kIGFsbG93b25seXNlbGVjdCBpcyB0cnVlLCByZW1vdmUgdGhlIHZhbHVlIGZyb20gdGhlIGRhdGF2YWx1ZS4gU28gdGhhdCBkYXRhdmFsdWUganVzdCBjb250YWlucyB0aGUgdmFsaWQgdmFsdWVzLlxuICAgICAgICAgKiA1LiBJbiBzdGVwIDIsIGlmIGRhdGF2YWx1ZSBpcyBBTExGSUVMRFMgYW5kIHZhbHVlIGlzIG9iamVjdCwgdGhlbiBqdXN0IHByZXBhcmUgdGhlIGRhdGFzZXRJdGVtIGZyb20gdGhlIHZhbHVlLlxuICAgICAgICAgKiA2LiBJZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IGFuZCBhbGxvd29ubHlzZWxlY3QgaXMgZmFsc2UsIHRoZW4gY3JlYXRlIGEgY3VzdG9tTW9kZWwgYW5kIHJlcGxhY2UgdGhpcyB2YWx1ZSB3aXRoIGN1c3RvbU1vZGVsIGFuZCBwcmVwYXJlIGRhdGFzZXRJdGVtIGZyb20gdGhpcyB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZGF0YVZhbHVlLmZvckVhY2goKHZhbDogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Gb3VuZCA9IF8uZmluZCh0aGlzLmRhdGFzZXRJdGVtcywgaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNPYmplY3QoaXRlbS52YWx1ZSkgPyBfLmlzRXF1YWwoaXRlbS52YWx1ZSwgdmFsKSA6IF8udG9TdHJpbmcoaXRlbS52YWx1ZSkgPT09IF8udG9TdHJpbmcodmFsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXRlbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChpdGVtRm91bmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCAhPT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUXVlcnkucHVzaCh2YWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFPYmosIGlzQ3VzdG9tID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IHRoaXMuY3JlYXRlQ3VzdG9tRGF0YU1vZGVsKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGksIDEsIGRhdGFPYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgY3VzdG9tIGNoaXBzIGlzIGFscmVhZHkgZ2VuZXJhdGVkLCB2YWwgd2lsbCBiZSBvYmplY3QgYXMgeydkYXRhRmllbGRfdmFsJzogJ2VudGVyZWRfdmFsJ31cbiAgICAgICAgICAgICAgICAgICAgLy8gSGVuY2UgY2hlY2sgdGhpcyB2YWwgaW4gcHJldmlvdXMgY2hpcExpc3QgYW5kIGFzc2lnbiB0aGUgaXNjdXN0b20gZmxhZ1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2Q2hpcE9iaiA9IHByZXZDaGlwc0xpc3QuZmluZChvYmogPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNFcXVhbChvYmoudmFsdWUsIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNoaXBPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tID0gcHJldkNoaXBPYmouaXNjdXN0b207XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGFPYmogfHwgdmFsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEoZGF0YU9iaiwgaXNDdXN0b20pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaXBPYmogPSB0cmFuc2Zvcm1lZERhdGFbMF07XG4gICAgICAgICAgICAgICAgaWYgKGlzQ3VzdG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIChjaGlwT2JqIGFzIGFueSkuaXNjdXN0b20gPSBpc0N1c3RvbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChjaGlwT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbWFrZSBkZWZhdWx0IHF1ZXJ5IHdpdGggYWxsIHRoZSB2YWx1ZXMgYW5kIGlmIHJlc3BvbnNlIGZvciB0aGUgdmFsdWUgaXMgbm90IGluIGRhdGF2YWx1ZSB0aGVuIGFkZCBhIGN1c3RvbSBjaGlwIG9iamVjdC5cbiAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmdldERlZmF1bHRNb2RlbChzZWFyY2hRdWVyeSwgdGhpcy5uZXh0SXRlbUluZGV4KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSB0aGlzLmNoaXBzTGlzdC5jb25jYXQocmVzcG9uc2UgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdHMgPSBfLmZpbmQodGhpcy5jaGlwc0xpc3QsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGxvd29ubHlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKHZhbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpcE9iaiA9IHRyYW5zZm9ybWVkRGF0YVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hpcE9iaiBhcyBhbnkpLmlzY3VzdG9tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGNoaXBPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWZhdWx0IGNoaXAgZGF0YSBpcyBhZGRpbmcgZm9jdXMgb24gdG8gdGhlIHNlYXJjaCBpbnB1dC4gSGVuY2UgdGhpcyBmbGFnIGhlbHBzIG5vdCB0byBmb2N1cy5cbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKHRydWUpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVEdXBsaWNhdGVzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNlYXJjaE1vZGVsKGRlZmF1bHRRdWVyeT86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIC8vIGNsZWFyIHNlYXJjaCB3aWxsIGVtcHR5IHRoZSBxdWVyeSBtb2RlbCBhbmQgZ2V0cyB0aGUgZGF0YSB3aGVuIG1pbmNoYXJzIGlzIDAgKGkuZS4gYXV0b2NvbXBsZXRlKSBvbiBmb2N1c1xuICAgICAgICAvLyBkZWZhdWx0UXVlcnkgZmxhZyBpcyBzZXQgd2hlbiB3aWRnZXQgaXMgbm90IGFjdGl2ZS4gVGhpcyB3aWxsIG9ubHkgbG9hZCB0aGUgYXV0b2NvbXBsZXRlIGRyb3B1cCB3aXRoIG1pbmNoYXJzIGFzIDAgd2hlbiB3aWRnZXQgaXMgZm9jdXNlZC9hY3RpdmVcbiAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuY2xlYXJTZWFyY2godW5kZWZpbmVkLCAhdGhpcy5taW5jaGFycyAmJiAhZGVmYXVsdFF1ZXJ5KTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3SXRlbSB0byB0aGUgbGlzdFxuICAgIHByaXZhdGUgYWRkSXRlbSgkZXZlbnQ6IEV2ZW50LCB3aWRnZXQ/OiBTZWFyY2hDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoQ29tcG9uZW50ID0gd2lkZ2V0O1xuICAgICAgICBsZXQgYWxsb3dBZGQ7XG4gICAgICAgIGxldCBjaGlwT2JqO1xuXG4gICAgICAgIGlmIChzZWFyY2hDb21wb25lbnQgJiYgaXNEZWZpbmVkKHNlYXJjaENvbXBvbmVudC5kYXRhdmFsdWUpICYmIHNlYXJjaENvbXBvbmVudC5xdWVyeU1vZGVsICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKCFzZWFyY2hDb21wb25lbnQucXVlcnkgfHwgIV8udHJpbShzZWFyY2hDb21wb25lbnQucXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpcE9iaiA9IHNlYXJjaENvbXBvbmVudC5xdWVyeU1vZGVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dvbmx5c2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGRhdGFPYmo7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgICAgIGlmICghXy5pc09iamVjdCh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSkgJiYgXy50cmltKHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gdGhpcy5jcmVhdGVDdXN0b21EYXRhTW9kZWwodGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gaWYgdGhlIGN1c3RvbSBjaGlwIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhT2JqIHx8IF8udHJpbSh0aGlzLnNlYXJjaENvbXBvbmVudC5xdWVyeSk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKGRhdGEsIHRydWUpO1xuICAgICAgICAgICAgICAgIGNoaXBPYmogPSB0cmFuc2Zvcm1lZERhdGFbMF07XG4gICAgICAgICAgICAgICAgY2hpcE9iai5pc2N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRGVmaW5lZChjaGlwT2JqKSB8fCBjaGlwT2JqID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWxsb3dBZGQgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWFkZCcsIHskZXZlbnQsIG5ld0l0ZW06IGNoaXBPYmp9KTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKGFsbG93QWRkKSAmJiAhdG9Cb29sZWFuKGFsbG93QWRkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEdXBsaWNhdGUoY2hpcE9iaikpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGlwSXRlbUNsYXNzKGNoaXBPYmosIHRoaXMuY2hpcHNMaXN0Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY2hpcHNMaXN0LnB1c2goY2hpcE9iaik7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gW2NoaXBPYmoudmFsdWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gWy4uLnRoaXMuX21vZGVsQnlWYWx1ZSwgY2hpcE9iai52YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLl9tb2RlbEJ5VmFsdWUsICRldmVudCB8fCB7fSwgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdhZGQnLCB7JGV2ZW50LCAkaXRlbTogY2hpcE9ian0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlTWF4U2l6ZSgpO1xuXG4gICAgICAgIC8vIHJlc2V0IGlucHV0IGJveCB3aGVuIGl0ZW0gaXMgYWRkZWQuXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hNb2RlbCgpO1xuXG4gICAgICAgIC8vIHN0b3AgdGhlIGV2ZW50IHRvIG5vdCB0byBjYWxsIHRoZSBzdWJtaXQgZXZlbnQgb24gZW50ZXIgcHJlc3MuXG4gICAgICAgIGlmICgkZXZlbnQgJiYgKCgkZXZlbnQgYXMgYW55KS5rZXkgPT09ICdFbnRlcicgfHwgKCRldmVudCBhcyBhbnkpLmtleUNvZGUgPT09IDEzKSkge1xuICAgICAgICAgICAgdGhpcy5zdG9wRXZlbnQoJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgZGF0YXZhbHVlIG9iamVjdCBmcm9tIGEgc3RyaW5nKGp1bmspIHZhbHVlIHdoZW4gZGF0YWZpZWxkIGlzIGFsbEZpZWxkcy5cbiAgICBwcml2YXRlIGNyZWF0ZUN1c3RvbURhdGFNb2RlbCh2YWw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmRpc3BsYXlmaWVsZCB8fCAodGhpcy5kYXRhZmllbGQgIT09IEFMTEZJRUxEUyA/IHRoaXMuZGF0YWZpZWxkIDogdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21PYmogPSB7fTtcbiAgICAgICAgICAgIGN1c3RvbU9ialtrZXldID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbU9iajtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIG5ld0l0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICBwcml2YXRlIGlzRHVwbGljYXRlKGl0ZW06IERhdGFTZXRJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICByZXR1cm4gXy5maW5kSW5kZXgodGhpcy5jaGlwc0xpc3QsIHt2YWx1ZTogaXRlbS52YWx1ZX0pID4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF8uZmluZEluZGV4KHRoaXMuY2hpcHNMaXN0LCB7a2V5OiBpdGVtLmtleX0pID4gLTE7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgbWF4IHNpemUgaXMgcmVhY2hlZFxuICAgIHByaXZhdGUgdXBkYXRlTWF4U2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zYXR1cmF0ZSA9IHRoaXMubWF4c2l6ZSA+IDAgJiYgdGhpcy5jaGlwc0xpc3QubGVuZ3RoID09PSB0aGlzLm1heHNpemU7XG4gICAgfVxuXG4gICAgLy8gTWFrZXMgY2FsbCB0byBzZWFyY2hDb21wb25lbnQgdG8gZmlsdGVyIHRoZSBkYXRhU291cmNlIGJhc2VkIG9uIHRoZSBxdWVyeS5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdE1vZGVsKHF1ZXJ5OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ29tcG9uZW50LmdldERhdGFTb3VyY2UocXVlcnksIHRydWUsIGluZGV4KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uZmlsdGVyKHF1ZXJ5LCBxdWVyeVZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF8uZmluZChyZXNwb25zZSwge3ZhbHVlOiBxdWVyeVZhbH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGlwQ2xpY2soJGV2ZW50OiBFdmVudCwgY2hpcDogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoJGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgYW55KS5mb2N1cygpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoaXBjbGljaycsIHskZXZlbnQsICRpdGVtOiBjaGlwfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGlwRm9jdXMoJGV2ZW50OiBFdmVudCwgY2hpcDogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoY2hpcCBhcyBhbnkpLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hpcHNlbGVjdCcsIHskZXZlbnQsICRpdGVtOiBjaGlwfSk7XG4gICAgfVxuXG4gICAgLy8gVG8gYXZvaWQgZm9ybSBzdWJtaXQgb24gcHJlc3NpbmcgZW50ZXIga2V5XG4gICAgcHVibGljIHN0b3BFdmVudCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGV4dERlbGV0ZSgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmIChpc0FwcGxlUHJvZHVjdCkge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2xlYXIoJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbklucHV0Q2xlYXIoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hpcHNMaXN0IHx8ICF0aGlzLmNoaXBzTGlzdC5sZW5ndGggfHwgdGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5sYXN0KCkuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQmFja3NwYWNlKCRldmVudDogRXZlbnQsICRpdGVtOiBEYXRhU2V0SXRlbSwgJGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oJGV2ZW50LCAkaXRlbSwgJGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGVsZXRlKCRldmVudDogRXZlbnQsICRpdGVtOiBEYXRhU2V0SXRlbSwgJGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oJGV2ZW50LCAkaXRlbSwgJGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BcnJvd0xlZnQoJGl0ZW0/OiBEYXRhU2V0SXRlbSwgJGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBsZWZ0IGFycm93IGNsaWNrIHdoZW4gc2VhcmNoIGlucHV0IHF1ZXJ5IGlzIGVtcHR5LlxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5ICYmICFpc0RlZmluZWQoJGluZGV4KSAmJiAhaXNEZWZpbmVkKCRpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykubGFzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZ2V0KCRpbmRleCAtIDEpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BcnJvd1JpZ2h0KCRpdGVtPzogRGF0YVNldEl0ZW0sICRpbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9uIHJpZ2h0IGFycm93IGNsaWNrIHdoZW4gc2VhcmNoIGlucHV0IHF1ZXJ5IGlzIGVtcHR5LlxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5ICYmICFpc0RlZmluZWQoJGluZGV4KSAmJiAhaXNEZWZpbmVkKCRpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRpbmRleCA8ICh0aGlzLmNoaXBzTGlzdC5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZ2V0KCRpbmRleCArIDEpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb2N1cyBzZWFyY2ggYm94LlxuICAgIHByaXZhdGUgZm9jdXNTZWFyY2hCb3goKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1jaGlwLWlucHV0ID4gaW5wdXQuYXBwLXRleHRib3gnKS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgaXRlbSBmcm9tIGxpc3RcbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oJGV2ZW50OiBFdmVudCwgaXRlbTogRGF0YVNldEl0ZW0sIGluZGV4OiBudW1iZXIsIGNhbkZvY3VzPzogYm9vbGVhbikge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgaW5kZXhlcyA9IF8uaXNBcnJheShpbmRleCkgPyBpbmRleCA6IFtpbmRleF07XG4gICAgICAgIGNvbnN0IGZvY3VzSW5kZXggPSBfLm1heChpbmRleGVzKTtcblxuICAgICAgICBjb25zdCBpdGVtcyA9IF8ucmVkdWNlKGluZGV4ZXMsIChyZXN1bHQsIGkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY2hpcHNMaXN0W2ldKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBwcmV2ZW50IGRlbGV0aW9uIGlmIHRoZSBiZWZvcmUtcmVtb3ZlIGV2ZW50IGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAgICAgICAgY29uc3QgYWxsb3dSZW1vdmUgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlbW92ZScsIHskZXZlbnQsICRpdGVtOiBpdGVtcy5sZW5ndGggPT09IDEgPyBpdGVtc1swXSA6IGl0ZW1zfSk7XG4gICAgICAgIGlmIChpc0RlZmluZWQoYWxsb3dSZW1vdmUpICYmICF0b0Jvb2xlYW4oYWxsb3dSZW1vdmUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2RGF0YXZhbHVlID0gXy5jbG9uZSh0aGlzLmRhdGF2YWx1ZSk7XG5cbiAgICAgICAgLy8gZm9jdXMgbmV4dCBjaGlwIGFmdGVyIGRlbGV0aW9uLlxuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gY2hpcHMgaW4gdGhlIGxpc3QgZm9jdXMgc2VhcmNoIGJveFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaXBzTGVuZ3RoID0gdGhpcy5jaGlwc0xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgJGNoaXBzTGlzdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuY2hpcC1pdGVtID4gYS5hcHAtY2hpcCcpO1xuXG4gICAgICAgICAgICBpZiAoIWNoaXBzTGVuZ3RoIHx8ICFjYW5Gb2N1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hCb3goKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoaXBzTGVuZ3RoIC0gMSkgPCBmb2N1c0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZm9jdXMgaW5kZXggaXMgZ3JlYXRlciB0aGFuIGNoaXBzIGxlbmd0aCBzZWxlY3QgbGFzdCBjaGlwXG4gICAgICAgICAgICAgICAgJGNoaXBzTGlzdC5nZXQoY2hpcHNMZW5ndGggLSAxKS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBzZXQgdGhlIHN1Y2NlZWRpbmcgY2hpcCBhcyBhY3RpdmUgaWYgdGhlcmUgaXMgYSBjaGlwIG5leHQgdG8gdGhlIGN1cnJlbnQgY2hpcC5cbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdFtmb2N1c0luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICRjaGlwc0xpc3QuZ2V0KGZvY3VzSW5kZXgpLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHB1bGxlZEl0ZW1zID0gXy5wdWxsQXQodGhpcy5jaGlwc0xpc3QsIGluZGV4ZXMpO1xuXG4gICAgICAgIHB1bGxlZEl0ZW1zLmZvckVhY2goZGF0YXNldEl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gXy5maWx0ZXIodGhpcy5fbW9kZWxCeVZhbHVlLCB2YWwgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhKF8uaXNPYmplY3QodmFsKSA/IF8uaXNFcXVhbCh2YWwsIGRhdGFzZXRJdGVtLnZhbHVlKSA6IF8udG9TdHJpbmcodmFsKSA9PT0gXy50b1N0cmluZyhkYXRhc2V0SXRlbS52YWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuX21vZGVsQnlWYWx1ZSwgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCB7JGV2ZW50LCBuZXdWYWw6IHRoaXMuZGF0YXZhbHVlLCBvbGRWYWw6IHByZXZEYXRhdmFsdWV9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcblxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3JlbW92ZScsIHskZXZlbnQsICRpdGVtOiBpdGVtcy5sZW5ndGggPT09IDEgPyBpdGVtc1swXSA6IGl0ZW1zfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3dhcHMgaXRlbXMgaW4gYW4gYXJyYXkgaWYgcHJvdmlkZWQgd2l0aCBpbmRleGVzLlxuICAgICAqIEBwYXJhbSBkYXRhIDotIGFycmF5IHRvIGJlIHN3YXBwZWRcbiAgICAgKiBAcGFyYW0gbmV3SW5kZXggOi0gbmV3IGluZGV4IGZvciB0aGUgZWxlbWVudCB0byBiZSBwbGFjZWRcbiAgICAgKiBAcGFyYW0gY3VycmVudEluZGV4IDotIHRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3dhcEVsZW1lbnRzSW5BcnJheShkYXRhOiBBcnJheTxhbnk+LCBuZXdJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IF8ucHVsbEF0KGRhdGEsIGN1cnJlbnRJbmRleClbMF07XG4gICAgICAgIGRhdGEuc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkSXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FuY2VscyB0aGUgcmVvcmRlciBieSByZXNldGluZyB0aGUgZWxlbWVudHMgdG8gdGhlIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzZXRSZW9yZGVyKCkge1xuICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZURhdGEoJ29sZEluZGV4Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnZva2VPbkJlZm9yZVNlcnZpY2VDYWxsKGlucHV0RGF0YSkge1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXNlcnZpY2VjYWxsJywge2lucHV0RGF0YX0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAncmVtb3ZlJyB8fCBldmVudE5hbWUgPT09ICdiZWZvcmVyZW1vdmUnIHx8IGV2ZW50TmFtZSA9PT0gJ2NoaXBzZWxlY3QnXG4gICAgICAgICAgICB8fCBldmVudE5hbWUgPT09ICdjaGlwY2xpY2snIHx8IGV2ZW50TmFtZSA9PT0gJ2FkZCcgfHwgZXZlbnROYW1lID09PSAncmVvcmRlcicgfHwgZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQobm9kZSwgZXZlbnROYW1lLCBldmVudENhbGxiYWNrLCBsb2NhbHMpO1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZXMgdGhlIHJlb3JkYWJsZSBmZWF0dXJlIGluIGNoaXBzIHdpZGdldHMuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEbkQoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpdGVtczogJz4gbGk6bm90KC5hcHAtY2hpcC1zZWFyY2gpJyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnY2hpcC1wbGFjZWhvbGRlcidcbiAgICAgICAgfTtcblxuICAgICAgICBjb25maWd1cmVEbkQodGhpcy4kZWxlbWVudCwgb3B0aW9ucywgdGhpcy5vblJlb3JkZXJTdGFydC5iaW5kKHRoaXMpLCB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyZWQgb24gZHJhZyBzdGFydCB3aGlsZSByZW9yZGVyaW5nLlxuICAgIHByaXZhdGUgb25SZW9yZGVyU3RhcnQoZXZ0OiBFdmVudCwgdWk6IE9iamVjdCkge1xuICAgICAgICBjb25zdCBoZWxwZXIgPSAodWkgYXMgYW55KS5oZWxwZXI7XG4gICAgICAgIC8vIGluY3JlYXNpbmcgdGhlIHdpZHRoIG9mIHRoZSBkcmFnZ2VkIGl0ZW0gYnkgMVxuICAgICAgICBoZWxwZXIud2lkdGgoaGVscGVyLndpZHRoKCkgKyAxKTtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5kYXRhKCdvbGRJbmRleCcsICh1aSBhcyBhbnkpLml0ZW0uaW5kZXgoKSAtICh0aGlzLmlucHV0cG9zaXRpb24gPT09ICdmaXJzdCcgPyAxIDogMCkpO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIGNoaXBzTGlzdCBhbmQgZGF0YXZhbHVlIG9uIHJlb3JkZXIuXG4gICAgcHJpdmF0ZSB1cGRhdGUoJGV2ZW50OiBFdmVudCwgdWk6IE9iamVjdCkge1xuICAgICAgICBsZXQgY2hhbmdlZEl0ZW0sXG4gICAgICAgICAgICBuZXdJbmRleCxcbiAgICAgICAgICAgIG9sZEluZGV4O1xuXG4gICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gYXQgcG9zaXRpb24gYmVmb3JlIGRyYWcgYW5kIGFmdGVyIHRoZSByZW9yZGVyLlxuICAgICAgICBuZXdJbmRleCA9ICh1aSBhcyBhbnkpLml0ZW0uaW5kZXgoKSAtICh0aGlzLmlucHV0cG9zaXRpb24gPT09ICdmaXJzdCcgPyAxIDogMCk7XG4gICAgICAgIG9sZEluZGV4ID0gdGhpcy4kZWxlbWVudC5kYXRhKCdvbGRJbmRleCcpO1xuXG4gICAgICAgIG5ld0luZGV4ID0gdGhpcy5jaGlwc0xpc3QubGVuZ3RoID09PSBuZXdJbmRleCA/IG5ld0luZGV4IC0gMSA6IG5ld0luZGV4O1xuICAgICAgICBjaGFuZ2VkSXRlbSA9IHtcbiAgICAgICAgICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICAgICAgICAgIG5ld0luZGV4OiBuZXdJbmRleCxcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuY2hpcHNMaXN0W29sZEluZGV4XVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdJbmRleCA9PT0gb2xkSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZW9yZGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZEl0ZW0uaXRlbSA9IHRoaXMuY2hpcHNMaXN0W29sZEluZGV4XTtcblxuICAgICAgICBjb25zdCBhbGxvd1Jlb3JkZXIgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlb3JkZXInLCB7JGV2ZW50LCAkZGF0YTogdGhpcy5jaGlwc0xpc3QsICRjaGFuZ2VkSXRlbTogY2hhbmdlZEl0ZW19KTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKGFsbG93UmVvcmRlcikgJiYgdG9Cb29sZWFuKGFsbG93UmVvcmRlcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVvcmRlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW9kaWZ5IHRoZSBjaGlwc0xpc3QgYW5kIGRhdGF2YWx1ZSBhZnRlciB0aGUgcmVvcmRlci5cbiAgICAgICAgdGhpcy5zd2FwRWxlbWVudHNJbkFycmF5KHRoaXMuY2hpcHNMaXN0LCBuZXdJbmRleCwgb2xkSW5kZXgpO1xuICAgICAgICB0aGlzLnN3YXBFbGVtZW50c0luQXJyYXkodGhpcy5fbW9kZWxCeVZhbHVlLCBuZXdJbmRleCwgb2xkSW5kZXgpO1xuXG4gICAgICAgIGNoYW5nZWRJdGVtLml0ZW0gPSB0aGlzLmNoaXBzTGlzdFtuZXdJbmRleF07XG5cbiAgICAgICAgdGhpcy5jaGlwc0xpc3QgPSBbLi4udGhpcy5jaGlwc0xpc3RdO1xuXG4gICAgICAgIHRoaXMucmVzZXRSZW9yZGVyKCk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncmVvcmRlcicsIHskZXZlbnQsICRkYXRhOiB0aGlzLmNoaXBzTGlzdCwgJGNoYW5nZWRJdGVtOiBjaGFuZ2VkSXRlbX0pO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhb3B0aW9ucycpIHtcbiAgICAgICAgICAgICh0aGlzLnNlYXJjaENvbXBvbmVudCBhcyBhbnkpLmRhdGFvcHRpb25zID0gbnY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFmaWVsZCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFmaWVsZCA9IHRoaXMuZGF0YWZpZWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5ZmllbGQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kaXNwbGF5bGFiZWwgPSB0aGlzLmRpc3BsYXlmaWVsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGlzcGxheWxhYmVsID0gdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24gPyB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbiA6IHRoaXMuZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlpbWFnZXNyYycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5aW1hZ2VzcmMgPSB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMgPyB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMgOiB0aGlzLmRpc3BsYXlpbWFnZXNyYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5saW1pdCA9IHRoaXMubGltaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ21hdGNobW9kZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lm1hdGNobW9kZSA9IHRoaXMubWF0Y2htb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdncm91cGJ5Jykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZ3JvdXBieSA9IHRoaXMuZ3JvdXBieTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZW5hYmxlcmVvcmRlcicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCd1aS1zb3J0YWJsZScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5zb3J0YWJsZSgnb3B0aW9uJywgJ2Rpc2FibGVkJywgIW52ICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAncmVhZG9ubHknKSB7XG4gICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdyZWFkb25seScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdyZWFkb25seScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdpbnB1dHBvc2l0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgJGlucHV0RWwgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmFwcC1jaGlwLXNlYXJjaCcpO1xuICAgICAgICAgICAgaWYgKG52ID09PSAnZmlyc3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5wcmVwZW5kKCRpbnB1dEVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hcHBlbmQoJGlucHV0RWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdhdXRvZm9jdXMnICYmIG52KSB7XG4gICAgICAgICAgICAvLyBzZXR0aW5nIHRoZSBhdXRvZm9jdXMgb24gdGhlIGlucHV0IG9uY2UgYWZ0ZXIgZG9tIGlzIHVwZGF0ZWRcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRjaGlwc0xpc3QgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5hcHAtY2hpcC1pbnB1dCA+IGlucHV0LmFwcC10ZXh0Ym94Jyk7XG4gICAgICAgICAgICAgICAgaWYgKCRjaGlwc0xpc3QgJiYgJGNoaXBzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaEJveCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cbn1cbiIsIjxsaSBjbGFzcz1cImNoaXAtaXRlbSB7e2NoaXBjbGFzcyAmJiAhYmluZENoaXBjbGFzcyA/IGNoaXBjbGFzcyA6ICcnfX1cIiByb2xlPVwib3B0aW9uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hpcHNMaXN0OyBsZXQgJGluZGV4ID0gaW5kZXg7XCJcbiAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGl0ZW0uYWN0aXZlLCAnZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cbiAgICA8YSBjbGFzcz1cImFwcC1jaGlwXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2hpcENsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvbkRlbGV0ZSgkZXZlbnQsIGl0ZW0sICRpbmRleClcIlxuICAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJvbkJhY2tzcGFjZSgkZXZlbnQsIGl0ZW0sICRpbmRleClcIlxuICAgICAgIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkFycm93TGVmdChpdGVtLCAkaW5kZXgpXCJcbiAgICAgICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uQXJyb3dSaWdodChpdGVtLCAkaW5kZXgpXCJcbiAgICAgICAoZm9jdXMpPVwiaGFuZGxlQ2hpcEZvY3VzKCRldmVudCwgaXRlbSlcIlxuICAgICAgIChibHVyKT1cInJlYWRvbmx5ID8gMCA6IGl0ZW0uYWN0aXZlID0gZmFsc2VcIlxuICAgICAgIFtuZ0NsYXNzXT1cInsnY2hpcC1kdXBsaWNhdGUgYmctZGFuZ2VyJzogaXRlbS5pc0R1cGxpY2F0ZSwgJ2NoaXAtcGljdHVyZSc6IGl0ZW0uaW1nU3JjfVwiPlxuICAgICAgICA8aW1nIGRhdGEtaWRlbnRpZmllcj1cImltZ1wiIGFsdD1cIkNoaXAgSW1hZ2VcIiBjbGFzcz1cImJ1dHRvbi1pbWFnZS1pY29uXCIgW3NyY109XCJpdGVtLmltZ1NyY1wiICpuZ0lmPVwiaXRlbS5pbWdTcmNcIi8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWNoaXAtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiaXRlbS5sYWJlbFwiIFt0aXRsZV09XCJpdGVtLmxhYmVsXCI+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbD1cIkNsZWFyIEJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi10cmFuc3BhcmVudFwiIChjbGljayk9XCJyZW1vdmVJdGVtKCRldmVudCwgaXRlbSwgJGluZGV4KTtcIiAqbmdJZj1cIiFyZWFkb25seVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB3aSB3aS1jbG9zZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9hPlxuPC9saT5cbjxsaSBjbGFzcz1cImFwcC1jaGlwLXNlYXJjaFwiIFtuZ0NsYXNzXT1cInsnZnVsbC13aWR0aCc6IGlucHV0d2lkdGggPT09ICdmdWxsJ31cIj5cbiAgICA8ZGl2ICNzZWFyY2ggd21TZWFyY2ggY2xhc3M9XCJhcHAtY2hpcC1pbnB1dFwiXG4gICAgICAgICBuYW1lPVwiYXBwLWNoaXAtc2VhcmNoXCJcbiAgICAgICAgIHN1Ym1pdC5ldmVudD1cImFkZEl0ZW0oJGV2ZW50LCB3aWRnZXQpXCJcbiAgICAgICAgIGJlZm9yZXNlcnZpY2VjYWxsLmV2ZW50PVwiaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpXCJcbiAgICAgICAgIGRpc2FibGVkLmJpbmQ9XCJkaXNhYmxlZCB8fCByZWFkb25seSB8fCBzYXR1cmF0ZVwiXG4gICAgICAgICBkYXRhZmllbGQuYmluZD1cImRhdGFmaWVsZFwiXG4gICAgICAgICBhbGxvd29ubHlzZWxlY3QuYmluZD1cImFsbG93b25seXNlbGVjdFwiXG4gICAgICAgICBzZWFyY2hrZXkuYmluZD1cInNlYXJjaGtleVwiXG4gICAgICAgICBvcmRlcmJ5LmJpbmQ9XCJvcmRlcmJ5XCJcbiAgICAgICAgIHBsYWNlaG9sZGVyLmJpbmQ9XCJzYXR1cmF0ZSA/IG1heFNpemVSZWFjaGVkIDogcGxhY2Vob2xkZXJcIlxuICAgICAgICAgc2hvd3NlYXJjaGljb24uYmluZD1cInNob3dzZWFyY2hpY29uXCJcbiAgICAgICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgICAgICBtaW5jaGFycy5iaW5kPVwibWluY2hhcnNcIlxuICAgICAgICAgZGVib3VuY2V0aW1lLmJpbmQ9XCJkZWJvdW5jZXRpbWVcIlxuICAgICAgICAgbWF0Y2htb2RlLmJpbmQ9XCJtYXRjaG1vZGVcIlxuICAgICAgICAgZ3JvdXBieS5iaW5kPVwiZ3JvdXBieVwiXG4gICAgICAgICBtYXRjaC5iaW5kPVwibWF0Y2hcIlxuICAgICAgICAgZGF0ZWZvcm1hdC5iaW5kPVwiZGF0ZWZvcm1hdFwiXG4gICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzdG9wRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAoa2V5ZG93bi5kZWxldGUpPVwib25UZXh0RGVsZXRlKCRldmVudClcIlxuICAgICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cIm9uSW5wdXRDbGVhcigkZXZlbnQpXCJcbiAgICAgICAgIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkFycm93TGVmdCgpXCJcbiAgICAgICAgIChrZXlkb3duLmFycm93cmlnaHQpPVwib25BcnJvd1JpZ2h0KClcIj5cbiAgICA8L2Rpdj5cbjwvbGk+XG4iXX0=
|
|
674
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChipsComponent, { className: "ChipsComponent", filePath: "chips.component.ts", lineNumber: 54 }); })();
|
|
675
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2NoaXBzL3NyYy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvY2hpcHMvc3JjL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUVSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFlLHFCQUFxQixFQUFFLHNCQUFzQixFQUFpQixTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEwsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEVBQUUsT0FBTyxFQUNoQixPQUFPLEVBQ1AsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUM3QixLQUFLLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLFdBQVcsQ0FB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QUUsSUFBSSxFQUFDOztrRkFoQjdELGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIGRlYm91bmNlLFxuICAgIGlzQXBwbGVQcm9kdWN0LFxuICAgIGlzRGVmaW5lZCxcbiAgICB0b0Jvb2xlYW5cbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQUxMRklFTERTLCBjb25maWd1cmVEbkQsIERhdGFTZXRJdGVtLCBnZXRDb25kaXRpb25hbENsYXNzZXMsIGdldFVuaXFPYmpzQnlEYXRhRmllbGQsIElXaWRnZXRDb25maWcsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNpYy9zZWFyY2gnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9jaGlwcy5wcm9wcyc7XG5pbXBvcnQge1xuICAgIGNsb25lLFxuICAgIGZpbHRlcixcbiAgICBmaW5kLFxuICAgIGZpbmRJbmRleCxcbiAgICBmb3JFYWNoLCBpc0FycmF5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNPYmplY3QsIG1heCwgcHVsbEF0LCByZWR1Y2UsXG4gICAgc2xpY2UsXG4gICAgdG9TdHJpbmcsXG4gICAgdHJpbVxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLWNoaXBzJyxcbiAgICBob3N0Q2xhc3M6ICdhcHAtY2hpcHMgbmF2IG5hdi1waWxscyBsaXN0LWlubGluZSdcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtQ2hpcHNdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoQ2hpcHNDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoaXBzQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2hpcHNDb21wb25lbnQgZXh0ZW5kcyBEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIHB1YmxpYyBhbGxvd29ubHlzZWxlY3Q6IGJvb2xlYW47XG4gICAgcHVibGljIGVuYWJsZXJlb3JkZXI6IGJvb2xlYW47XG4gICAgcHVibGljIG1heHNpemU6IG51bWJlcjtcbiAgICBwdWJsaWMgaW5wdXR3aWR0aDogYW55O1xuICAgIHByaXZhdGUgZGVib3VuY2V0aW1lOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY2hpcHNMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXhTaXplUmVhY2hlZCA9ICdNYXggc2l6ZSByZWFjaGVkJztcbiAgICBwcml2YXRlIHNhdHVyYXRlOiBib29sZWFuO1xuICAgIHByaXZhdGUgbmV4dEl0ZW1JbmRleDogbnVtYmVyO1xuICAgIHByaXZhdGUgZ2V0VHJhbnNmb3JtZWREYXRhOiAoZGF0YSwgaXRlbUluZGV4PykgPT4gRGF0YVNldEl0ZW1bXTtcbiAgICBwcml2YXRlIGlucHV0cG9zaXRpb246IHN0cmluZztcbiAgICBwcml2YXRlIHNob3dzZWFyY2hpY29uOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZChTZWFyY2hDb21wb25lbnQsIC8qIFRPRE86IGFkZCBzdGF0aWMgZmxhZyAqLyB7c3RhdGljOiB0cnVlfSkgc2VhcmNoQ29tcG9uZW50OiBTZWFyY2hDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfZGF0YXNvdXJjZTogYW55O1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICBwcml2YXRlIHNlYXJjaGtleTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbDogYW55O1xuICAgIHByaXZhdGUgbGltaXQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9jbGFzc0V4cHI6IGFueTtcbiAgICBwcml2YXRlIG1pbmNoYXJzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBtYXRjaG1vZGU6IHN0cmluZztcblxuICAgIC8vIGdldHRlciBzZXR0ZXIgaXMgYWRkZWQgdG8gcGFzcyB0aGUgZGF0YXNvdXJjZSB0byBzZWFyY2hjb21wb25lbnQuXG4gICAgZ2V0IGRhdGFzb3VyY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXNvdXJjZShudikge1xuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gbnY7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFzb3VyY2UgPSBudjtcbiAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsKHRoaXMuZGF0YXZhbHVlIHx8IHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlmaWVsZC5iaW5kJykgcHJpdmF0ZSBiaW5kRGlzcGxheUZpZWxkLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5ZXhwcmVzc2lvbi5iaW5kJykgcHJpdmF0ZSBiaW5kRGlzcGxheUV4cHIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlpbWFnZXNyYy5iaW5kJykgcHJpdmF0ZSBiaW5kRGlzcGxheUltZ1NyYyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YWZpZWxkLmJpbmQnKSBwcml2YXRlIGJpbmREYXRhRmllbGQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHByaXZhdGUgYmluZERhdGFTZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2NoaXBjbGFzcy5iaW5kJykgcHJpdmF0ZSBiaW5kQ2hpcGNsYXNzLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICAvLyBzZXQgdGhlIHNob3dzZWFyY2hpY29uIGFzIGZhbHNlIGJ5IGRlZmF1bHQuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMuc2hvd3NlYXJjaGljb24pKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dzZWFyY2hpY29uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5uZXh0SXRlbUluZGV4ID0gMDsgLy8gZGVmYXVsdCBjaGlwIGluZGV4XG5cbiAgICAgICAgdGhpcy5fZGVib3VuY2VVcGRhdGVRdWVyeU1vZGVsID0gZGVib3VuY2UoKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVyeU1vZGVsKHZhbCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmluZENoaXBjbGFzcykge1xuICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHRoaXMuY2hpcHNMaXN0LCAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJDaGlwSXRlbUNsYXNzKGl0ZW0sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDE1MCk7XG5cbiAgICAgICAgY29uc3QgZGF0YXNldFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXNldCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgICAgICAvLyBjbGVhcmluZyB0aGUgbGFzdCByZXN1bHRzIHdoZW4gZGF0YXNldCBpcyByZWFzc2lnbmVkXG4gICAgICAgICAgICAodGhpcy5zZWFyY2hDb21wb25lbnQgYXMgYW55KS5fbGFzdFJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubmV4dEl0ZW1JbmRleCA9IHRoaXMuZGF0YXNldEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlVXBkYXRlUXVlcnlNb2RlbCh0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXZhbHVlJC5zdWJzY3JpYmUoKHZhbDogQXJyYXk8c3RyaW5nPiB8IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHF1ZXJ5TW9kZWwgb25seSB3aGVuIHBhcmVudFJlZiBpcyBhdmFpbGFibGUuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhZmllbGQgaXMgQUxMRklMRURTIGRvIG5vdCBmZXRjaCB0aGUgcmVjb3Jkc1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcXVlcnkgbW9kZWwgd2l0aCB0aGUgdmFsdWVzIHdlIGhhdmVcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZVVwZGF0ZVF1ZXJ5TW9kZWwodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlpbWFnZXNyYyA9IHRoaXMuYmluZERpc3BsYXlJbWdTcmM7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRpc3BsYXlpbWFnZXNyYyA9IHRoaXMuZGlzcGxheWltYWdlc3JjO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5iaW5kZGlzcGxheWxhYmVsID0gdGhpcy5iaW5kRGlzcGxheUV4cHI7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRpc3BsYXlsYWJlbCA9IHRoaXMuZGlzcGxheWZpZWxkO1xuICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5kYXRhZmllbGQgPSB0aGlzLmJpbmREYXRhRmllbGQgfHwgdGhpcy5kYXRhZmllbGQ7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkYXRhc2V0ID0gdGhpcy5iaW5kRGF0YVNldDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YXNldCA9IHRoaXMuZGF0YXNldDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuc2VhcmNoa2V5ID0gdGhpcy5zZWFyY2hrZXk7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmxpbWl0ID0gdGhpcy5saW1pdDtcbiAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGVib3VuY2V0aW1lID0gdGhpcy5kZWJvdW5jZXRpbWU7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50Lm1hdGNobW9kZSA9IHRoaXMubWF0Y2htb2RlO1xuXG4gICAgICAgIHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhID0gKHZhbCwgaXNDdXN0b20pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaENvbXBvbmVudC5nZXRUcmFuc2Zvcm1lZERhdGEoW3ZhbF0sIHRoaXMubmV4dEl0ZW1JbmRleCsrLCBpc0N1c3RvbSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlcmVvcmRlcikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGV2YWx1YXRlZCBjbGFzcyBleHByZXNzaW9uLlxuICAgICAqIEBwYXJhbSAkaW5kZXggaW5kZXggb2YgdGhlIGNoaXBcbiAgICAgKiBAcGFyYW0gaXRlbSBjaGlwIG9iamVjdCBjb250YWluaW5nIHRoZSBrZXksIHZhbHVlLCBsYWJlbFxuICAgICAqIEByZXR1cm5zIHthbnl9IGV2YWx1YXRlZCBjbGFzcyBleHByZXNzaW9uIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWdpc3RlckNoaXBJdGVtQ2xhc3MoaXRlbSwgJGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRDaGlwY2xhc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X2NoaXBJdGVtQ2xhc3NfJHskaW5kZXh9YDtcbiAgICAgICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IHNhbWUgYXMgbGlzdCBpdGVtIGNsYXNzXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCh0aGlzLmJpbmRDaGlwY2xhc3MsIHRoaXMudmlld1BhcmVudCwge2l0ZW0sICRpbmRleH0sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5SXRlbUNsYXNzKGdldENvbmRpdGlvbmFsQ2xhc3Nlcyhudiwgb3YpLCAkaW5kZXgpO1xuICAgICAgICAgICAgfSwgd2F0Y2hOYW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5SXRlbUNsYXNzKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgY2hpcEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNoaXAtaXRlbScpLml0ZW0oaW5kZXgpO1xuICAgICAgICAkKGNoaXBJdGVtKS5yZW1vdmVDbGFzcyh2YWwudG9SZW1vdmUpLmFkZENsYXNzKHZhbC50b0FkZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVzKCkge1xuICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IGdldFVuaXFPYmpzQnlEYXRhRmllbGQodGhpcy5jaGlwc0xpc3QsIHRoaXMuZGF0YWZpZWxkLCB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgcXVlcnlNb2RlbC5cbiAgICAvLyBkZWZhdWx0IGNhbGwgdG8gZ2V0IHRoZSBkZWZhdWx0IGRhdGEgY2FuIGJlIGRvbmUgb25seSB3aGVuIGRlZmF1bHRRdWVyeSBpcyB0cnVlLlxuICAgIHByaXZhdGUgdXBkYXRlUXVlcnlNb2RlbChkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xvbmUgdGhlIGRhdGEgYXMgdGhlIHVwZGF0aW9ucyBvbiBkYXRhIHdpbGwgY2hhbmdlIHRoZSBkYXRhdmFsdWUuXG4gICAgICAgIGxldCBkYXRhVmFsdWUgPSBjbG9uZShkYXRhKTtcbiAgICAgICAgY29uc3QgcHJldkNoaXBzTGlzdCA9IHRoaXMuY2hpcHNMaXN0O1xuICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFtdO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgbW9kZWwgd2hlbiBtb2RlbCBoYXMgaXRlbXMgbW9yZSB0aGFuIG1heHNpemVcbiAgICAgICAgaWYgKHRoaXMubWF4c2l6ZSAmJiBkYXRhVmFsdWUubGVuZ3RoID4gdGhpcy5tYXhzaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBkYXRhVmFsdWUgPSBzbGljZShkYXRhVmFsdWUsIDAsIHRoaXMubWF4c2l6ZSk7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoUXVlcnk6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRm9yIGVhY2ggdmFsdWUgaW4gZGF0YXZhbHVlLFxuICAgICAgICAgKiAxLiBjaGVjayB3aGV0aGVyIHZhbHVlIGlzIGluIGRhdGFzZXRJdGVtcywgaWYgaXRlbSBpcyBmb3VuZCwgYWRkZCB0byB0aGUgY2hpcHNMaXN0LlxuICAgICAgICAgKiAyLiBlbHNlIG1ha2UgYSBkZWZhdWx0IHF1ZXJ5IHRvIHRoZSBmaWx0ZXIgYW5kIGdldCB0aGUgcmVjb3JkLlxuICAgICAgICAgKiAzLiBJbiBzdGVwIDIsIGlmIGRhdGF2YWx1ZSBpcyBub3QgQUxMRklFTERTLCB0aGVuIG1ha2UgYSBxdWVyeS4gRXh0cmFjdCB0aGUgY2hpcHNMaXN0IGZyb20gdGhlIHF1ZXJ5IHJlc3BvbnNlLlxuICAgICAgICAgKiA0LiBJZiB0aGVyZSBpcyBubyByZXNwb25zZSBmb3IgdGhlIHZhbHVlIGFuZCBhbGxvd29ubHlzZWxlY3QgaXMgdHJ1ZSwgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRhdmFsdWUuIFNvIHRoYXQgZGF0YXZhbHVlIGp1c3QgY29udGFpbnMgdGhlIHZhbGlkIHZhbHVlcy5cbiAgICAgICAgICogNS4gSW4gc3RlcCAyLCBpZiBkYXRhdmFsdWUgaXMgQUxMRklFTERTIGFuZCB2YWx1ZSBpcyBvYmplY3QsIHRoZW4ganVzdCBwcmVwYXJlIHRoZSBkYXRhc2V0SXRlbSBmcm9tIHRoZSB2YWx1ZS5cbiAgICAgICAgICogNi4gSWYgdmFsdWUgaXMgbm90IG9iamVjdCBhbmQgYWxsb3dvbmx5c2VsZWN0IGlzIGZhbHNlLCB0aGVuIGNyZWF0ZSBhIGN1c3RvbU1vZGVsIGFuZCByZXBsYWNlIHRoaXMgdmFsdWUgd2l0aCBjdXN0b21Nb2RlbCBhbmQgcHJlcGFyZSBkYXRhc2V0SXRlbSBmcm9tIHRoaXMgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGRhdGFWYWx1ZS5mb3JFYWNoKCh2YWw6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRm91bmQgPSBmaW5kKHRoaXMuZGF0YXNldEl0ZW1zLCBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNPYmplY3QoaXRlbS52YWx1ZSkgPyBpc0VxdWFsKGl0ZW0udmFsdWUsIHZhbCkgOiB0b1N0cmluZyhpdGVtLnZhbHVlKSA9PT0gdG9TdHJpbmcodmFsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXRlbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3QucHVzaChpdGVtRm91bmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCAhPT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUXVlcnkucHVzaCh2YWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFPYmosIGlzQ3VzdG9tID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSB0aGlzLmNyZWF0ZUN1c3RvbURhdGFNb2RlbCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpLCAxLCBkYXRhT2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGN1c3RvbSBjaGlwcyBpcyBhbHJlYWR5IGdlbmVyYXRlZCwgdmFsIHdpbGwgYmUgb2JqZWN0IGFzIHsnZGF0YUZpZWxkX3ZhbCc6ICdlbnRlcmVkX3ZhbCd9XG4gICAgICAgICAgICAgICAgICAgIC8vIEhlbmNlIGNoZWNrIHRoaXMgdmFsIGluIHByZXZpb3VzIGNoaXBMaXN0IGFuZCBhc3NpZ24gdGhlIGlzY3VzdG9tIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkNoaXBPYmogPSBwcmV2Q2hpcHNMaXN0LmZpbmQob2JqID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKG9iai52YWx1ZSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Q2hpcE9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNDdXN0b20gPSBwcmV2Q2hpcE9iai5pc2N1c3RvbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YU9iaiB8fCB2YWw7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShkYXRhT2JqLCBpc0N1c3RvbSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpcE9iaiA9IHRyYW5zZm9ybWVkRGF0YVswXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDdXN0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgKGNoaXBPYmogYXMgYW55KS5pc2N1c3RvbSA9IGlzQ3VzdG9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGNoaXBPYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBtYWtlIGRlZmF1bHQgcXVlcnkgd2l0aCBhbGwgdGhlIHZhbHVlcyBhbmQgaWYgcmVzcG9uc2UgZm9yIHRoZSB2YWx1ZSBpcyBub3QgaW4gZGF0YXZhbHVlIHRoZW4gYWRkIGEgY3VzdG9tIGNoaXAgb2JqZWN0LlxuICAgICAgICBpZiAoc2VhcmNoUXVlcnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZ2V0RGVmYXVsdE1vZGVsKHNlYXJjaFF1ZXJ5LCB0aGlzLm5leHRJdGVtSW5kZXgpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IHRoaXMuY2hpcHNMaXN0LmNvbmNhdChyZXNwb25zZSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFWYWx1ZS5mb3JFYWNoKCh2YWw6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0V4aXN0cyA9IGZpbmQodGhpcy5jaGlwc0xpc3QsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnZhbHVlLnRvU3RyaW5nKCkgPT09IHZhbC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGxvd29ubHlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRoaXMuZ2V0VHJhbnNmb3JtZWREYXRhKHZhbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpcE9iaiA9IHRyYW5zZm9ybWVkRGF0YVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hpcE9iaiBhcyBhbnkpLmlzY3VzdG9tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGNoaXBPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWZhdWx0IGNoaXAgZGF0YSBpcyBhZGRpbmcgZm9jdXMgb24gdG8gdGhlIHNlYXJjaCBpbnB1dC4gSGVuY2UgdGhpcyBmbGFnIGhlbHBzIG5vdCB0byBmb2N1cy5cbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKHRydWUpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVEdXBsaWNhdGVzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNlYXJjaE1vZGVsKGRlZmF1bHRRdWVyeT86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIC8vIGNsZWFyIHNlYXJjaCB3aWxsIGVtcHR5IHRoZSBxdWVyeSBtb2RlbCBhbmQgZ2V0cyB0aGUgZGF0YSB3aGVuIG1pbmNoYXJzIGlzIDAgKGkuZS4gYXV0b2NvbXBsZXRlKSBvbiBmb2N1c1xuICAgICAgICAvLyBkZWZhdWx0UXVlcnkgZmxhZyBpcyBzZXQgd2hlbiB3aWRnZXQgaXMgbm90IGFjdGl2ZS4gVGhpcyB3aWxsIG9ubHkgbG9hZCB0aGUgYXV0b2NvbXBsZXRlIGRyb3B1cCB3aXRoIG1pbmNoYXJzIGFzIDAgd2hlbiB3aWRnZXQgaXMgZm9jdXNlZC9hY3RpdmVcbiAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuY2xlYXJTZWFyY2godW5kZWZpbmVkLCAhdGhpcy5taW5jaGFycyAmJiAhZGVmYXVsdFF1ZXJ5KTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3SXRlbSB0byB0aGUgbGlzdFxuICAgIHByaXZhdGUgYWRkSXRlbSgkZXZlbnQ6IEV2ZW50LCB3aWRnZXQ/OiBTZWFyY2hDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoQ29tcG9uZW50ID0gd2lkZ2V0O1xuICAgICAgICBsZXQgYWxsb3dBZGQ7XG4gICAgICAgIGxldCBjaGlwT2JqO1xuXG4gICAgICAgIGlmIChzZWFyY2hDb21wb25lbnQgJiYgaXNEZWZpbmVkKHNlYXJjaENvbXBvbmVudC5kYXRhdmFsdWUpICYmIHNlYXJjaENvbXBvbmVudC5xdWVyeU1vZGVsICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKCFzZWFyY2hDb21wb25lbnQucXVlcnkgfHwgIXRyaW0oc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaXBPYmogPSBzZWFyY2hDb21wb25lbnQucXVlcnlNb2RlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93b25seXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkYXRhT2JqO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YWZpZWxkID09PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSAmJiB0cmltKHRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gdGhpcy5jcmVhdGVDdXN0b21EYXRhTW9kZWwodGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gaWYgdGhlIGN1c3RvbSBjaGlwIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaE1vZGVsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhT2JqIHx8IHRyaW0odGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShkYXRhLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjaGlwT2JqID0gdHJhbnNmb3JtZWREYXRhWzBdO1xuICAgICAgICAgICAgICAgIGNoaXBPYmouaXNjdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQoY2hpcE9iaikgfHwgY2hpcE9iaiA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsbG93QWRkID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVhZGQnLCB7JGV2ZW50LCBuZXdJdGVtOiBjaGlwT2JqfSk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChhbGxvd0FkZCkgJiYgIXRvQm9vbGVhbihhbGxvd0FkZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRHVwbGljYXRlKGNoaXBPYmopKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoTW9kZWwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hpcEl0ZW1DbGFzcyhjaGlwT2JqLCB0aGlzLmNoaXBzTGlzdC5sZW5ndGgpO1xuICAgICAgICB0aGlzLmNoaXBzTGlzdC5wdXNoKGNoaXBPYmopO1xuXG4gICAgICAgIGlmICghdGhpcy5kYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IFtjaGlwT2JqLnZhbHVlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IFsuLi50aGlzLl9tb2RlbEJ5VmFsdWUsIGNoaXBPYmoudmFsdWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52b2tlT25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5fbW9kZWxCeVZhbHVlLCAkZXZlbnQgfHwge30sIHRydWUpO1xuXG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYWRkJywgeyRldmVudCwgJGl0ZW06IGNoaXBPYmp9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZU1heFNpemUoKTtcblxuICAgICAgICAvLyByZXNldCBpbnB1dCBib3ggd2hlbiBpdGVtIGlzIGFkZGVkLlxuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoTW9kZWwoKTtcblxuICAgICAgICAvLyBzdG9wIHRoZSBldmVudCB0byBub3QgdG8gY2FsbCB0aGUgc3VibWl0IGV2ZW50IG9uIGVudGVyIHByZXNzLlxuICAgICAgICBpZiAoJGV2ZW50ICYmICgoJGV2ZW50IGFzIGFueSkua2V5ID09PSAnRW50ZXInIHx8ICgkZXZlbnQgYXMgYW55KS5rZXlDb2RlID09PSAxMykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcEV2ZW50KCRldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGRhdGF2YWx1ZSBvYmplY3QgZnJvbSBhIHN0cmluZyhqdW5rKSB2YWx1ZSB3aGVuIGRhdGFmaWVsZCBpcyBhbGxGaWVsZHMuXG4gICAgcHJpdmF0ZSBjcmVhdGVDdXN0b21EYXRhTW9kZWwodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5kaXNwbGF5ZmllbGQgfHwgKHRoaXMuZGF0YWZpZWxkICE9PSBBTExGSUVMRFMgPyB0aGlzLmRhdGFmaWVsZCA6IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tT2JqID0ge307XG4gICAgICAgICAgICBjdXN0b21PYmpba2V5XSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBjdXN0b21PYmo7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBuZXdJdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgcHJpdmF0ZSBpc0R1cGxpY2F0ZShpdGVtOiBEYXRhU2V0SXRlbSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRJbmRleCh0aGlzLmNoaXBzTGlzdCwge3ZhbHVlOiBpdGVtLnZhbHVlfSkgPiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluZEluZGV4KHRoaXMuY2hpcHNMaXN0LCB7a2V5OiBpdGVtLmtleX0pID4gLTE7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgbWF4IHNpemUgaXMgcmVhY2hlZFxuICAgIHByaXZhdGUgdXBkYXRlTWF4U2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zYXR1cmF0ZSA9IHRoaXMubWF4c2l6ZSA+IDAgJiYgdGhpcy5jaGlwc0xpc3QubGVuZ3RoID09PSB0aGlzLm1heHNpemU7XG4gICAgfVxuXG4gICAgLy8gTWFrZXMgY2FsbCB0byBzZWFyY2hDb21wb25lbnQgdG8gZmlsdGVyIHRoZSBkYXRhU291cmNlIGJhc2VkIG9uIHRoZSBxdWVyeS5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdE1vZGVsKHF1ZXJ5OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICB0aGlzLm5leHRJdGVtSW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQ29tcG9uZW50LmdldERhdGFTb3VyY2UocXVlcnksIHRydWUsIGluZGV4KVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIocXVlcnksIHF1ZXJ5VmFsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmluZChyZXNwb25zZSwge3ZhbHVlOiBxdWVyeVZhbH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGlwQ2xpY2soJGV2ZW50OiBFdmVudCwgY2hpcDogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoJGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgYW55KS5mb2N1cygpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoaXBjbGljaycsIHskZXZlbnQsICRpdGVtOiBjaGlwfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGlwRm9jdXMoJGV2ZW50OiBFdmVudCwgY2hpcDogRGF0YVNldEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoY2hpcCBhcyBhbnkpLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hpcHNlbGVjdCcsIHskZXZlbnQsICRpdGVtOiBjaGlwfSk7XG4gICAgfVxuXG4gICAgLy8gVG8gYXZvaWQgZm9ybSBzdWJtaXQgb24gcHJlc3NpbmcgZW50ZXIga2V5XG4gICAgcHVibGljIHN0b3BFdmVudCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGV4dERlbGV0ZSgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmIChpc0FwcGxlUHJvZHVjdCkge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2xlYXIoJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbklucHV0Q2xlYXIoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hpcHNMaXN0IHx8ICF0aGlzLmNoaXBzTGlzdC5sZW5ndGggfHwgdGhpcy5zZWFyY2hDb21wb25lbnQucXVlcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKS5sYXN0KCkuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQmFja3NwYWNlKCRldmVudDogRXZlbnQsICRpdGVtOiBEYXRhU2V0SXRlbSwgJGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oJGV2ZW50LCAkaXRlbSwgJGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGVsZXRlKCRldmVudDogRXZlbnQsICRpdGVtOiBEYXRhU2V0SXRlbSwgJGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oJGV2ZW50LCAkaXRlbSwgJGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BcnJvd0xlZnQoJGl0ZW0/OiBEYXRhU2V0SXRlbSwgJGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBsZWZ0IGFycm93IGNsaWNrIHdoZW4gc2VhcmNoIGlucHV0IHF1ZXJ5IGlzIGVtcHR5LlxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5ICYmICFpc0RlZmluZWQoJGluZGV4KSAmJiAhaXNEZWZpbmVkKCRpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykubGFzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZ2V0KCRpbmRleCAtIDEpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BcnJvd1JpZ2h0KCRpdGVtPzogRGF0YVNldEl0ZW0sICRpbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9uIHJpZ2h0IGFycm93IGNsaWNrIHdoZW4gc2VhcmNoIGlucHV0IHF1ZXJ5IGlzIGVtcHR5LlxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQ29tcG9uZW50LnF1ZXJ5ICYmICFpc0RlZmluZWQoJGluZGV4KSAmJiAhaXNEZWZpbmVkKCRpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZmlyc3QoKS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRpbmRleCA8ICh0aGlzLmNoaXBzTGlzdC5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCdsaS5jaGlwLWl0ZW0gPiBhLmFwcC1jaGlwJykuZ2V0KCRpbmRleCArIDEpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb2N1cyBzZWFyY2ggYm94LlxuICAgIHByaXZhdGUgZm9jdXNTZWFyY2hCb3goKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1jaGlwLWlucHV0ID4gaW5wdXQuYXBwLXRleHRib3gnKS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgaXRlbSBmcm9tIGxpc3RcbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oJGV2ZW50OiBFdmVudCwgaXRlbTogRGF0YVNldEl0ZW0sIGluZGV4OiBudW1iZXIsIGNhbkZvY3VzPzogYm9vbGVhbikge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgaW5kZXhlcyA9IGlzQXJyYXkoaW5kZXgpID8gaW5kZXggOiBbaW5kZXhdO1xuICAgICAgICBjb25zdCBmb2N1c0luZGV4ID0gbWF4KGluZGV4ZXMpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcmVkdWNlKGluZGV4ZXMsIChyZXN1bHQsIGkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY2hpcHNMaXN0W2ldKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBwcmV2ZW50IGRlbGV0aW9uIGlmIHRoZSBiZWZvcmUtcmVtb3ZlIGV2ZW50IGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAgICAgICAgY29uc3QgYWxsb3dSZW1vdmUgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJlbW92ZScsIHskZXZlbnQsICRpdGVtOiBpdGVtcy5sZW5ndGggPT09IDEgPyBpdGVtc1swXSA6IGl0ZW1zfSk7XG4gICAgICAgIGlmIChpc0RlZmluZWQoYWxsb3dSZW1vdmUpICYmICF0b0Jvb2xlYW4oYWxsb3dSZW1vdmUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2RGF0YXZhbHVlID0gY2xvbmUodGhpcy5kYXRhdmFsdWUpO1xuXG4gICAgICAgIC8vIGZvY3VzIG5leHQgY2hpcCBhZnRlciBkZWxldGlvbi5cbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIGNoaXBzIGluIHRoZSBsaXN0IGZvY3VzIHNlYXJjaCBib3hcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlwc0xlbmd0aCA9IHRoaXMuY2hpcHNMaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0ICRjaGlwc0xpc3QgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2xpLmNoaXAtaXRlbSA+IGEuYXBwLWNoaXAnKTtcblxuICAgICAgICAgICAgaWYgKCFjaGlwc0xlbmd0aCB8fCAhY2FuRm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChjaGlwc0xlbmd0aCAtIDEpIDwgZm9jdXNJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGZvY3VzIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBjaGlwcyBsZW5ndGggc2VsZWN0IGxhc3QgY2hpcFxuICAgICAgICAgICAgICAgICRjaGlwc0xpc3QuZ2V0KGNoaXBzTGVuZ3RoIC0gMSkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgc2V0IHRoZSBzdWNjZWVkaW5nIGNoaXAgYXMgYWN0aXZlIGlmIHRoZXJlIGlzIGEgY2hpcCBuZXh0IHRvIHRoZSBjdXJyZW50IGNoaXAuXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwc0xpc3RbZm9jdXNJbmRleF0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAkY2hpcHNMaXN0LmdldChmb2N1c0luZGV4KS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwdWxsZWRJdGVtcyA9IHB1bGxBdCh0aGlzLmNoaXBzTGlzdCwgaW5kZXhlcyk7XG5cbiAgICAgICAgcHVsbGVkSXRlbXMuZm9yRWFjaChkYXRhc2V0SXRlbSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBmaWx0ZXIodGhpcy5fbW9kZWxCeVZhbHVlLCB2YWwgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhKGlzT2JqZWN0KHZhbCkgPyBpc0VxdWFsKHZhbCwgZGF0YXNldEl0ZW0udmFsdWUpIDogdG9TdHJpbmcodmFsKSA9PT0gdG9TdHJpbmcoZGF0YXNldEl0ZW0udmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLl9tb2RlbEJ5VmFsdWUsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywgeyRldmVudCwgbmV3VmFsOiB0aGlzLmRhdGF2YWx1ZSwgb2xkVmFsOiBwcmV2RGF0YXZhbHVlfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVNYXhTaXplKCk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyZW1vdmUnLCB7JGV2ZW50LCAkaXRlbTogaXRlbXMubGVuZ3RoID09PSAxID8gaXRlbXNbMF0gOiBpdGVtc30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN3YXBzIGl0ZW1zIGluIGFuIGFycmF5IGlmIHByb3ZpZGVkIHdpdGggaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0gZGF0YSA6LSBhcnJheSB0byBiZSBzd2FwcGVkXG4gICAgICogQHBhcmFtIG5ld0luZGV4IDotIG5ldyBpbmRleCBmb3IgdGhlIGVsZW1lbnQgdG8gYmUgcGxhY2VkXG4gICAgICogQHBhcmFtIGN1cnJlbnRJbmRleCA6LSB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN3YXBFbGVtZW50c0luQXJyYXkoZGF0YTogQXJyYXk8YW55PiwgbmV3SW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZHJhZ2dlZEl0ZW0gPSBwdWxsQXQoZGF0YSwgY3VycmVudEluZGV4KVswXTtcbiAgICAgICAgZGF0YS5zcGxpY2UobmV3SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWxzIHRoZSByZW9yZGVyIGJ5IHJlc2V0aW5nIHRoZSBlbGVtZW50cyB0byB0aGUgb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldFJlb3JkZXIoKSB7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlRGF0YSgnb2xkSW5kZXgnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGludm9rZU9uQmVmb3JlU2VydmljZUNhbGwoaW5wdXREYXRhKSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlc2VydmljZWNhbGwnLCB7aW5wdXREYXRhfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdyZW1vdmUnIHx8IGV2ZW50TmFtZSA9PT0gJ2JlZm9yZXJlbW92ZScgfHwgZXZlbnROYW1lID09PSAnY2hpcHNlbGVjdCdcbiAgICAgICAgICAgIHx8IGV2ZW50TmFtZSA9PT0gJ2NoaXBjbGljaycgfHwgZXZlbnROYW1lID09PSAnYWRkJyB8fCBldmVudE5hbWUgPT09ICdyZW9yZGVyJyB8fCBldmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlndXJlcyB0aGUgcmVvcmRhYmxlIGZlYXR1cmUgaW4gY2hpcHMgd2lkZ2V0cy5cbiAgICBwcml2YXRlIGNvbmZpZ3VyZURuRCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGl0ZW1zOiAnPiBsaTpub3QoLmFwcC1jaGlwLXNlYXJjaCknLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdjaGlwLXBsYWNlaG9sZGVyJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbmZpZ3VyZURuRCh0aGlzLiRlbGVtZW50LCBvcHRpb25zLCB0aGlzLm9uUmVvcmRlclN0YXJ0LmJpbmQodGhpcyksIHRoaXMudXBkYXRlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXJlZCBvbiBkcmFnIHN0YXJ0IHdoaWxlIHJlb3JkZXJpbmcuXG4gICAgcHJpdmF0ZSBvblJlb3JkZXJTdGFydChldnQ6IEV2ZW50LCB1aTogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGhlbHBlciA9ICh1aSBhcyBhbnkpLmhlbHBlcjtcbiAgICAgICAgLy8gaW5jcmVhc2luZyB0aGUgd2lkdGggb2YgdGhlIGRyYWdnZWQgaXRlbSBieSAxXG4gICAgICAgIGhlbHBlci53aWR0aChoZWxwZXIud2lkdGgoKSArIDEpO1xuICAgICAgICB0aGlzLiRlbGVtZW50LmRhdGEoJ29sZEluZGV4JywgKHVpIGFzIGFueSkuaXRlbS5pbmRleCgpIC0gKHRoaXMuaW5wdXRwb3NpdGlvbiA9PT0gJ2ZpcnN0JyA/IDEgOiAwKSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlcyB0aGUgY2hpcHNMaXN0IGFuZCBkYXRhdmFsdWUgb24gcmVvcmRlci5cbiAgICBwcml2YXRlIHVwZGF0ZSgkZXZlbnQ6IEV2ZW50LCB1aTogT2JqZWN0KSB7XG4gICAgICAgIGxldCBjaGFuZ2VkSXRlbSxcbiAgICAgICAgICAgIG5ld0luZGV4LFxuICAgICAgICAgICAgb2xkSW5kZXg7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgaXRlbSBhdCBwb3NpdGlvbiBiZWZvcmUgZHJhZyBhbmQgYWZ0ZXIgdGhlIHJlb3JkZXIuXG4gICAgICAgIG5ld0luZGV4ID0gKHVpIGFzIGFueSkuaXRlbS5pbmRleCgpIC0gKHRoaXMuaW5wdXRwb3NpdGlvbiA9PT0gJ2ZpcnN0JyA/IDEgOiAwKTtcbiAgICAgICAgb2xkSW5kZXggPSB0aGlzLiRlbGVtZW50LmRhdGEoJ29sZEluZGV4Jyk7XG5cbiAgICAgICAgbmV3SW5kZXggPSB0aGlzLmNoaXBzTGlzdC5sZW5ndGggPT09IG5ld0luZGV4ID8gbmV3SW5kZXggLSAxIDogbmV3SW5kZXg7XG4gICAgICAgIGNoYW5nZWRJdGVtID0ge1xuICAgICAgICAgICAgb2xkSW5kZXg6IG9sZEluZGV4LFxuICAgICAgICAgICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgICAgICAgICAgaXRlbTogdGhpcy5jaGlwc0xpc3Rbb2xkSW5kZXhdXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0luZGV4ID09PSBvbGRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlb3JkZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjaGFuZ2VkSXRlbS5pdGVtID0gdGhpcy5jaGlwc0xpc3Rbb2xkSW5kZXhdO1xuXG4gICAgICAgIGNvbnN0IGFsbG93UmVvcmRlciA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVvcmRlcicsIHskZXZlbnQsICRkYXRhOiB0aGlzLmNoaXBzTGlzdCwgJGNoYW5nZWRJdGVtOiBjaGFuZ2VkSXRlbX0pO1xuXG4gICAgICAgIGlmIChpc0RlZmluZWQoYWxsb3dSZW9yZGVyKSAmJiB0b0Jvb2xlYW4oYWxsb3dSZW9yZGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZW9yZGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtb2RpZnkgdGhlIGNoaXBzTGlzdCBhbmQgZGF0YXZhbHVlIGFmdGVyIHRoZSByZW9yZGVyLlxuICAgICAgICB0aGlzLnN3YXBFbGVtZW50c0luQXJyYXkodGhpcy5jaGlwc0xpc3QsIG5ld0luZGV4LCBvbGRJbmRleCk7XG4gICAgICAgIHRoaXMuc3dhcEVsZW1lbnRzSW5BcnJheSh0aGlzLl9tb2RlbEJ5VmFsdWUsIG5ld0luZGV4LCBvbGRJbmRleCk7XG5cbiAgICAgICAgY2hhbmdlZEl0ZW0uaXRlbSA9IHRoaXMuY2hpcHNMaXN0W25ld0luZGV4XTtcblxuICAgICAgICB0aGlzLmNoaXBzTGlzdCA9IFsuLi50aGlzLmNoaXBzTGlzdF07XG5cbiAgICAgICAgdGhpcy5yZXNldFJlb3JkZXIoKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyZW9yZGVyJywgeyRldmVudCwgJGRhdGE6IHRoaXMuY2hpcHNMaXN0LCAkY2hhbmdlZEl0ZW06IGNoYW5nZWRJdGVtfSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y6IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFvcHRpb25zJykge1xuICAgICAgICAgICAgKHRoaXMuc2VhcmNoQ29tcG9uZW50IGFzIGFueSkuZGF0YW9wdGlvbnMgPSBudjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGF0YWZpZWxkJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuZGF0YWZpZWxkID0gdGhpcy5kYXRhZmllbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlmaWVsZCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmRpc3BsYXlsYWJlbCA9IHRoaXMuZGlzcGxheWZpZWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNwbGF5ZXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmJpbmRkaXNwbGF5bGFiZWwgPSB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbiA/IHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uIDogdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWltYWdlc3JjJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQuYmluZGRpc3BsYXlpbWFnZXNyYyA9IHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyA/IHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyA6IHRoaXMuZGlzcGxheWltYWdlc3JjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29tcG9uZW50LmxpbWl0ID0gdGhpcy5saW1pdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnbWF0Y2htb2RlJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb21wb25lbnQubWF0Y2htb2RlID0gdGhpcy5tYXRjaG1vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2dyb3VwYnknKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENvbXBvbmVudC5ncm91cGJ5ID0gdGhpcy5ncm91cGJ5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdlbmFibGVyZW9yZGVyJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3VpLXNvcnRhYmxlJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnNvcnRhYmxlKCdvcHRpb24nLCAnZGlzYWJsZWQnLCAhbnYgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZURuRCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdyZWFkb25seScpIHtcbiAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2lucHV0cG9zaXRpb24nKSB7XG4gICAgICAgICAgICBjb25zdCAkaW5wdXRFbCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnbGkuYXBwLWNoaXAtc2VhcmNoJyk7XG4gICAgICAgICAgICBpZiAobnYgPT09ICdmaXJzdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnByZXBlbmQoJGlucHV0RWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZCgkaW5wdXRFbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9mb2N1cycgJiYgbnYpIHtcbiAgICAgICAgICAgIC8vIHNldHRpbmcgdGhlIGF1dG9mb2N1cyBvbiB0aGUgaW5wdXQgb25jZSBhZnRlciBkb20gaXMgdXBkYXRlZFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgJGNoaXBzTGlzdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1jaGlwLWlucHV0ID4gaW5wdXQuYXBwLXRleHRib3gnKTtcbiAgICAgICAgICAgICAgICBpZiAoJGNoaXBzTGlzdCAmJiAkY2hpcHNMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxufVxuIiwiPGxpIGNsYXNzPVwiY2hpcC1pdGVtIHt7Y2hpcGNsYXNzICYmICFiaW5kQ2hpcGNsYXNzID8gY2hpcGNsYXNzIDogJyd9fVwiIHJvbGU9XCJvcHRpb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGlwc0xpc3Q7IGxldCAkaW5kZXggPSBpbmRleDtcIlxuICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXRlbS5hY3RpdmUsICdkaXNhYmxlZCc6IGRpc2FibGVkfVwiPlxuICAgIDxhIGNsYXNzPVwiYXBwLWNoaXBcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgIChjbGljayk9XCJoYW5kbGVDaGlwQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgKGtleWRvd24uZGVsZXRlKT1cIm9uRGVsZXRlKCRldmVudCwgaXRlbSwgJGluZGV4KVwiXG4gICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cIm9uQmFja3NwYWNlKCRldmVudCwgaXRlbSwgJGluZGV4KVwiXG4gICAgICAgKGtleWRvd24uYXJyb3dsZWZ0KT1cIm9uQXJyb3dMZWZ0KGl0ZW0sICRpbmRleClcIlxuICAgICAgIChrZXlkb3duLmFycm93cmlnaHQpPVwib25BcnJvd1JpZ2h0KGl0ZW0sICRpbmRleClcIlxuICAgICAgIChmb2N1cyk9XCJoYW5kbGVDaGlwRm9jdXMoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgKGJsdXIpPVwicmVhZG9ubHkgPyAwIDogaXRlbS5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgW25nQ2xhc3NdPVwieydjaGlwLWR1cGxpY2F0ZSBiZy1kYW5nZXInOiBpdGVtLmlzRHVwbGljYXRlLCAnY2hpcC1waWN0dXJlJzogaXRlbS5pbWdTcmN9XCI+XG4gICAgICAgIDxpbWcgZGF0YS1pZGVudGlmaWVyPVwiaW1nXCIgYWx0PVwiQ2hpcCBJbWFnZVwiIGNsYXNzPVwiYnV0dG9uLWltYWdlLWljb25cIiBbc3JjXT1cIml0ZW0uaW1nU3JjXCIgKm5nSWY9XCJpdGVtLmltZ1NyY1wiLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtY2hpcC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCJpdGVtLmxhYmVsXCIgW3RpdGxlXT1cIml0ZW0ubGFiZWxcIj48L3NwYW4+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsPVwiQ2xlYXIgQnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXRyYW5zcGFyZW50XCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oJGV2ZW50LCBpdGVtLCAkaW5kZXgpO1wiICpuZ0lmPVwiIXJlYWRvbmx5XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHdpIHdpLWNsb3NlXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2E+XG48L2xpPlxuPGxpIGNsYXNzPVwiYXBwLWNoaXAtc2VhcmNoXCIgW25nQ2xhc3NdPVwieydmdWxsLXdpZHRoJzogaW5wdXR3aWR0aCA9PT0gJ2Z1bGwnfVwiPlxuICAgIDxkaXYgI3NlYXJjaCB3bVNlYXJjaCBjbGFzcz1cImFwcC1jaGlwLWlucHV0XCJcbiAgICAgICAgIG5hbWU9XCJhcHAtY2hpcC1zZWFyY2hcIlxuICAgICAgICAgc3VibWl0LmV2ZW50PVwiYWRkSXRlbSgkZXZlbnQsIHdpZGdldClcIlxuICAgICAgICAgYmVmb3Jlc2VydmljZWNhbGwuZXZlbnQ9XCJpbnZva2VPbkJlZm9yZVNlcnZpY2VDYWxsKGlucHV0RGF0YSlcIlxuICAgICAgICAgZGlzYWJsZWQuYmluZD1cImRpc2FibGVkIHx8IHJlYWRvbmx5IHx8IHNhdHVyYXRlXCJcbiAgICAgICAgIGRhdGFmaWVsZC5iaW5kPVwiZGF0YWZpZWxkXCJcbiAgICAgICAgIGFsbG93b25seXNlbGVjdC5iaW5kPVwiYWxsb3dvbmx5c2VsZWN0XCJcbiAgICAgICAgIHNlYXJjaGtleS5iaW5kPVwic2VhcmNoa2V5XCJcbiAgICAgICAgIG9yZGVyYnkuYmluZD1cIm9yZGVyYnlcIlxuICAgICAgICAgcGxhY2Vob2xkZXIuYmluZD1cInNhdHVyYXRlID8gbWF4U2l6ZVJlYWNoZWQgOiBwbGFjZWhvbGRlclwiXG4gICAgICAgICBzaG93c2VhcmNoaWNvbi5iaW5kPVwic2hvd3NlYXJjaGljb25cIlxuICAgICAgICAgdGFiaW5kZXguYmluZD1cInRhYmluZGV4XCJcbiAgICAgICAgIG1pbmNoYXJzLmJpbmQ9XCJtaW5jaGFyc1wiXG4gICAgICAgICBkZWJvdW5jZXRpbWUuYmluZD1cImRlYm91bmNldGltZVwiXG4gICAgICAgICBtYXRjaG1vZGUuYmluZD1cIm1hdGNobW9kZVwiXG4gICAgICAgICBncm91cGJ5LmJpbmQ9XCJncm91cGJ5XCJcbiAgICAgICAgIG1hdGNoLmJpbmQ9XCJtYXRjaFwiXG4gICAgICAgICBkYXRlZm9ybWF0LmJpbmQ9XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInN0b3BFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvblRleHREZWxldGUoJGV2ZW50KVwiXG4gICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwib25JbnB1dENsZWFyKCRldmVudClcIlxuICAgICAgICAgKGtleWRvd24uYXJyb3dsZWZ0KT1cIm9uQXJyb3dMZWZ0KClcIlxuICAgICAgICAgKGtleWRvd24uYXJyb3dyaWdodCk9XCJvbkFycm93UmlnaHQoKVwiPlxuICAgIDwvZGl2PlxuPC9saT5cbiJdfQ==
|