qms-angular 1.0.55 → 1.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/qms-angular.umd.js +4003 -12241
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/app-icon/app-icon.module.js +16 -29
- package/esm2015/lib/components/app-icon/icon-registry.service.js +7 -9
- package/esm2015/lib/components/badges/qms-badges.component.js +15 -24
- package/esm2015/lib/components/badges/qms-badges.module.js +18 -33
- package/esm2015/lib/components/banner/qms-banner/qms-banner.component.js +16 -28
- package/esm2015/lib/components/banner/qms-banner/qms-banner.module.js +19 -36
- package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.js +16 -28
- package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.js +19 -36
- package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.component.js +13 -19
- package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.module.js +17 -30
- package/esm2015/lib/components/breadcrumb/breadcrumb-direction-icon.directive.js +10 -11
- package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +17 -20
- package/esm2015/lib/components/breadcrumb/breadcrumb.js +28 -40
- package/esm2015/lib/components/breadcrumb/breadcrumb.module.js +26 -50
- package/esm2015/lib/components/button/button-toggle.js +85 -120
- package/esm2015/lib/components/button/button.js +78 -86
- package/esm2015/lib/components/button/button.module.js +27 -51
- package/esm2015/lib/components/comment/comment.js +18 -29
- package/esm2015/lib/components/dialog/dialog.js +28 -38
- package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +16 -24
- package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.js +31 -71
- package/esm2015/lib/components/list/list.js +89 -101
- package/esm2015/lib/components/list/list.module.js +50 -94
- package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +29 -55
- package/esm2015/lib/components/qms-app-bar/qms-app-bar.module.js +20 -39
- package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +22 -32
- package/esm2015/lib/components/qms-stepper/qms-stepper.module.js +25 -35
- package/esm2015/lib/components/related/content/related-content.component.js +12 -19
- package/esm2015/lib/components/related/list-other-related/list-related.component.js +25 -29
- package/esm2015/lib/components/related/popup/related-popup.component.js +33 -50
- package/esm2015/lib/components/related/related.module.js +43 -96
- package/esm2015/lib/components/related/risk/analysis/analysis.component.js +17 -23
- package/esm2015/lib/components/related/risk/list/list.component.js +18 -22
- package/esm2015/lib/components/related/risk/result/result.component.js +16 -23
- package/esm2015/lib/components/related/service/related-global.service.js +6 -7
- package/esm2015/lib/components/related/sidenav/sidenav.component.js +12 -21
- package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +18 -22
- package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +18 -22
- package/esm2015/lib/components/reports/qms-reports.module.js +20 -29
- package/esm2015/lib/components/rich-text/rich-text.js +32 -47
- package/esm2015/lib/components/rich-text/rich-text.module.js +21 -35
- package/esm2015/lib/components/select-dialog/select-dialog.js +16 -31
- package/esm2015/lib/components/select-include-children/select-include-children.component.js +33 -47
- package/esm2015/lib/components/select-include-children/select-include-children.module.js +33 -78
- package/esm2015/lib/components/select-include-children/services/select-global.service.js +6 -7
- package/esm2015/lib/components/suffix-field/suffix-field.directive.js +21 -22
- package/esm2015/lib/components/table/table-action.js +31 -31
- package/esm2015/lib/components/table/table.module.js +21 -37
- package/esm2015/lib/components/test-only/test-only.component.js +11 -14
- package/esm2015/lib/components/tooltip/tooltip.js +19 -24
- package/esm2015/lib/components/tooltip/tooltip.module.js +20 -38
- package/esm2015/lib/components/tree/tree.component.js +33 -46
- package/esm2015/lib/components/tree/tree.module.js +30 -69
- package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +16 -22
- package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.js +31 -71
- package/esm2015/lib/directives/chip-input/chip-input-chip-list.directive.js +13 -13
- package/esm2015/lib/directives/chip-input/chip-input-field.directive.js +10 -11
- package/esm2015/lib/directives/chip-input/chip-input-select-dropdown.directive.js +10 -11
- package/esm2015/lib/directives/chip-input/chip-input-select-field.directive.js +14 -17
- package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +13 -14
- package/esm2015/lib/directives/chips/chip-body.directive.js +10 -11
- package/esm2015/lib/directives/chips/chip.directive.js +13 -13
- package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +14 -16
- package/esm2015/lib/directives/file-upload/file-upload-attachment-list.directive.js +10 -11
- package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +16 -19
- package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +14 -16
- package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +20 -26
- package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +15 -19
- package/esm2015/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.js +10 -11
- package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +18 -25
- package/esm2015/lib/directives/file-upload/file-upload.directive.js +20 -24
- package/esm2015/lib/directives/form.directive.js +51 -48
- package/esm2015/lib/directives/margin.directive.js +14 -15
- package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +10 -11
- package/esm2015/lib/directives/range-slider/range-slider.directive.js +14 -17
- package/esm2015/lib/directives/scroll-selected/scroll-to-selected.directive.js +15 -16
- package/esm2015/lib/directives/scrollbar/scrollbar.directive.js +13 -13
- package/esm2015/lib/directives/search-field.directive.js +22 -21
- package/esm2015/lib/directives/side-sheet/drawer-content.directive.js +10 -11
- package/esm2015/lib/directives/side-sheet/drawer-header-action.directive.js +10 -11
- package/esm2015/lib/directives/side-sheet/drawer-header.directive.js +10 -11
- package/esm2015/lib/directives/side-sheet/drawer.directive.js +10 -11
- package/esm2015/lib/directives/tab/tab-group-advanced.directive.js +14 -15
- package/esm2015/lib/directives/tab/tab-group.directive.js +10 -11
- package/esm2015/lib/directives/tab/tab-label.directive.js +10 -11
- package/esm2015/lib/directives/text-block/text-block-line.directive.js +16 -20
- package/esm2015/lib/directives/text-block/text-block.directive.js +14 -17
- package/esm2015/lib/directives/tooltip/tooltip-image.directive.js +13 -14
- package/esm2015/lib/directives/tooltip/tooltip-renderer.directive.js +22 -35
- package/esm2015/lib/material-module.js +16 -35
- package/esm2015/lib/model/en.js +4 -35
- package/esm2015/lib/model/no.js +3 -34
- package/esm2015/lib/pipe/dateFormat.pipe.js +10 -11
- package/esm2015/lib/qms-angular.component.js +11 -13
- package/esm2015/lib/qms-angular.module.js +121 -232
- package/esm2015/lib/qms-angular.service.js +8 -9
- package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +12 -32
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +1 -5
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +1 -10
- package/esm2015/lib/qms-ckeditor-components/common/enums/document-type.enum.js +1 -2
- package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +16 -23
- package/esm2015/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.js +19 -34
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +53 -577
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +35 -69
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +8 -12
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +30 -39
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +18 -22
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +20 -29
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +18 -22
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +23 -35
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +20 -30
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +18 -27
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor-base.component.js +4 -7
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +44 -118
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +55 -131
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.js +10 -10
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +9 -9
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +26 -66
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.js +8 -9
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.js +9 -9
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +9 -9
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.js +9 -9
- package/esm2015/lib/services/translation-registry.service.js +8 -9
- package/esm2015/lib/shared.module.js +4 -9
- package/esm2015/public-api.js +1 -16
- package/esm2015/qms-angular.js +9 -1
- package/fesm2015/qms-angular.js +3031 -11134
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/app-icon/app-icon.module.d.ts +0 -7
- package/lib/components/app-icon/icon-registry.service.d.ts +0 -3
- package/lib/components/badges/qms-badges.component.d.ts +0 -3
- package/lib/components/badges/qms-badges.module.d.ts +0 -9
- package/lib/components/banner/qms-banner/qms-banner.component.d.ts +0 -3
- package/lib/components/banner/qms-banner/qms-banner.module.d.ts +0 -10
- package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.d.ts +0 -3
- package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.d.ts +0 -10
- package/lib/components/banner/qms-banner-loading/qms-banner-loading.component.d.ts +0 -3
- package/lib/components/banner/qms-banner-loading/qms-banner-loading.module.d.ts +0 -8
- package/lib/components/breadcrumb/breadcrumb-direction-icon.directive.d.ts +0 -3
- package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +0 -3
- package/lib/components/breadcrumb/breadcrumb.d.ts +0 -3
- package/lib/components/breadcrumb/breadcrumb.module.d.ts +0 -13
- package/lib/components/button/button-toggle.d.ts +0 -5
- package/lib/components/button/button.d.ts +0 -7
- package/lib/components/button/button.module.d.ts +0 -9
- package/lib/components/comment/comment.d.ts +0 -3
- package/lib/components/dialog/dialog.d.ts +0 -5
- package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +0 -3
- package/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.d.ts +0 -16
- package/lib/components/list/list.d.ts +0 -15
- package/lib/components/list/list.module.d.ts +0 -11
- package/lib/components/qms-app-bar/qms-app-bar.component.d.ts +0 -3
- package/lib/components/qms-app-bar/qms-app-bar.module.d.ts +0 -12
- package/lib/components/qms-stepper/qms-stepper.component.d.ts +0 -3
- package/lib/components/qms-stepper/qms-stepper.module.d.ts +0 -8
- package/lib/components/related/content/related-content.component.d.ts +0 -3
- package/lib/components/related/list-other-related/list-related.component.d.ts +0 -3
- package/lib/components/related/popup/related-popup.component.d.ts +0 -3
- package/lib/components/related/related.module.d.ts +0 -29
- package/lib/components/related/risk/analysis/analysis.component.d.ts +0 -3
- package/lib/components/related/risk/list/list.component.d.ts +0 -3
- package/lib/components/related/risk/result/result.component.d.ts +0 -3
- package/lib/components/related/service/related-global.service.d.ts +0 -3
- package/lib/components/related/sidenav/sidenav.component.d.ts +0 -3
- package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +0 -3
- package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +0 -3
- package/lib/components/reports/qms-reports.module.d.ts +0 -7
- package/lib/components/rich-text/rich-text.d.ts +0 -3
- package/lib/components/rich-text/rich-text.module.d.ts +0 -8
- package/lib/components/select-dialog/select-dialog.d.ts +0 -3
- package/lib/components/select-include-children/select-include-children.component.d.ts +0 -3
- package/lib/components/select-include-children/select-include-children.module.d.ts +0 -25
- package/lib/components/select-include-children/services/select-global.service.d.ts +0 -3
- package/lib/components/suffix-field/suffix-field.directive.d.ts +0 -5
- package/lib/components/table/table-action.d.ts +0 -5
- package/lib/components/table/table.module.d.ts +0 -8
- package/lib/components/test-only/test-only.component.d.ts +0 -3
- package/lib/components/tooltip/tooltip.d.ts +0 -3
- package/lib/components/tooltip/tooltip.module.d.ts +0 -9
- package/lib/components/tree/tree.component.d.ts +0 -3
- package/lib/components/tree/tree.module.d.ts +0 -22
- package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +0 -3
- package/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.d.ts +0 -16
- package/lib/directives/chip-input/chip-input-chip-list.directive.d.ts +0 -3
- package/lib/directives/chip-input/chip-input-field.directive.d.ts +0 -3
- package/lib/directives/chip-input/chip-input-select-dropdown.directive.d.ts +0 -3
- package/lib/directives/chip-input/chip-input-select-field.directive.d.ts +0 -3
- package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +0 -3
- package/lib/directives/chips/chip-body.directive.d.ts +0 -3
- package/lib/directives/chips/chip.directive.d.ts +0 -3
- package/lib/directives/dropdown-menu/dropdown-item.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload-attachment-list.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload-display.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload-multiple-selector.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload-selector.directive.d.ts +0 -3
- package/lib/directives/file-upload/file-upload.directive.d.ts +0 -5
- package/lib/directives/form.directive.d.ts +0 -11
- package/lib/directives/margin.directive.d.ts +0 -3
- package/lib/directives/range-slider/range-slider-lockup.directive.d.ts +0 -3
- package/lib/directives/range-slider/range-slider.directive.d.ts +0 -3
- package/lib/directives/scroll-selected/scroll-to-selected.directive.d.ts +0 -3
- package/lib/directives/scrollbar/scrollbar.directive.d.ts +0 -3
- package/lib/directives/search-field.directive.d.ts +0 -5
- package/lib/directives/side-sheet/drawer-content.directive.d.ts +0 -3
- package/lib/directives/side-sheet/drawer-header-action.directive.d.ts +0 -3
- package/lib/directives/side-sheet/drawer-header.directive.d.ts +0 -3
- package/lib/directives/side-sheet/drawer.directive.d.ts +0 -3
- package/lib/directives/tab/tab-group-advanced.directive.d.ts +0 -3
- package/lib/directives/tab/tab-group.directive.d.ts +0 -3
- package/lib/directives/tab/tab-label.directive.d.ts +0 -3
- package/lib/directives/text-block/text-block-line.directive.d.ts +0 -3
- package/lib/directives/text-block/text-block.directive.d.ts +0 -3
- package/lib/directives/tooltip/tooltip-image.directive.d.ts +0 -3
- package/lib/directives/tooltip/tooltip-renderer.directive.d.ts +0 -3
- package/lib/material-module.d.ts +0 -12
- package/lib/model/en.d.ts +0 -31
- package/lib/model/no.d.ts +0 -31
- package/lib/pipe/dateFormat.pipe.d.ts +0 -3
- package/lib/qms-angular.component.d.ts +0 -3
- package/lib/qms-angular.module.d.ts +0 -49
- package/lib/qms-angular.service.d.ts +0 -3
- package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +2 -2
- package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +0 -4
- package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +0 -9
- package/lib/qms-ckeditor-components/common/enums/document-type.enum.d.ts +0 -1
- package/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +4 -88
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +2 -11
- package/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.d.ts +0 -4
- package/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/qms-ckeditor-base.component.d.ts +0 -3
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +0 -8
- package/lib/qms-ckeditor-components/qms-ckeditor.module.d.ts +0 -44
- package/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.d.ts +0 -3
- package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +0 -3
- package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +0 -4
- package/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.d.ts +0 -3
- package/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.d.ts +0 -3
- package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +0 -3
- package/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.d.ts +0 -3
- package/lib/services/translation-registry.service.d.ts +0 -3
- package/lib/shared.module.d.ts +0 -4
- package/lib.theme.scss +0 -8
- package/package.json +2 -1
- package/public-api.d.ts +0 -14
- package/qms-angular.d.ts +8 -1
- package/qms-angular.metadata.json +1 -0
- package/src/assets/jointjs/scss/bpmn.scss +35 -36
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
- package/src/assets/qms-ckeditor-plugin/package-lock.json +12177 -17
- package/src/assets/qms-ckeditor-plugin/package.json +0 -1
- package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +3 -22
- package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +173 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +5 -24
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +1 -7
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +0 -20
- package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +87 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +43 -47
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +108 -72
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +3 -4
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +0 -13
- package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +8 -8
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +24 -23
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +50 -1
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
- package/src/lib/components/tree/tree.component.scss +1 -1
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +1 -15
- package/src/lib/qms-ckeditor-components/styles/_layout.scss +0 -24
- package/src/lib/qms-ckeditor-components/styles/_modules.scss +0 -8
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.js +0 -7
- package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +0 -8
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.js +0 -16
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/halo-service.js +0 -105
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.js +0 -3762
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +0 -68
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +0 -372
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.js +0 -1041
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.js +0 -326
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.js +0 -318
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +0 -80
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.js +0 -9
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.js +0 -9
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +0 -3
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +0 -43
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +0 -322
- package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +0 -8
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.js +0 -26
- package/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.d.ts +0 -6
- package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +0 -6
- package/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.d.ts +0 -14
- package/lib/qms-ckeditor-components/common/flowchart/service/halo-service.d.ts +0 -48
- package/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.d.ts +0 -18
- package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +0 -17
- package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +0 -62
- package/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.d.ts +0 -1183
- package/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.d.ts +0 -216
- package/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.d.ts +0 -61
- package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +0 -36
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.d.ts +0 -7
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.d.ts +0 -7
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +0 -7
- package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +0 -18
- package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +0 -44
- package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +0 -7
- package/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.d.ts +0 -13
- package/src/assets/images/ckeditor5.svg +0 -1
- package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Bold.ttf +0 -0
- package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Light.ttf +0 -0
- package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf +0 -0
- package/src/assets/jointjs/fonts/Alegreya_Sans/OFL.txt +0 -92
- package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Bold.ttf +0 -0
- package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Light.ttf +0 -0
- package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Regular.ttf +0 -0
- package/src/assets/jointjs/fonts/Averia_Libre/OFL.txt +0 -93
- package/src/assets/jointjs/fonts/Roboto_Condensed/LICENSE.txt +0 -202
- package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Bold.ttf +0 -0
- package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Light.ttf +0 -0
- package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf +0 -0
- package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
- package/src/assets/jointjs/images/image-icon1.svg +0 -1
- package/src/assets/jointjs/images/image-icon2.svg +0 -6
- package/src/assets/jointjs/images/image-icon3.svg +0 -11
- package/src/assets/jointjs/images/image-icon4.svg +0 -8
- package/src/assets/jointjs/images/member-female.png +0 -0
- package/src/assets/jointjs/images/member-male.png +0 -0
- package/src/assets/jointjs/images/no-color-icon.svg +0 -72
- package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
- package/src/assets/jointjs/images/save-icon-modern.png +0 -0
- package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
- package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
- package/src/assets/jointjs/images/toolbar-icons-dark.woff +0 -0
- package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
- package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
- package/src/assets/jointjs/images/transparent-icon.svg +0 -50
- package/src/assets/jointjs/scss/style.dark.scss +0 -233
- package/src/assets/jointjs/scss/style.material.scss +0 -234
- package/src/assets/jointjs/scss/style.modern.scss +0 -225
- package/src/assets/jointjs/scss/style.scss +0 -216
- package/src/assets/jointjs/scss/theme-picker.scss +0 -21
- package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +0 -28
- package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +0 -63
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/openimagemapcommand.js +0 -58
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +0 -507
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +0 -1
- package/src/lib/components/select-one/select-one.component.scss +0 -240
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +0 -16
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +0 -5
- package/src/themes/_non-bg-srcollbar.scss +0 -4
@@ -152,7 +152,6 @@ export class BpmnService {
|
|
152
152
|
}).on({
|
153
153
|
'blank:pointerdown': (evt, x, y) => {
|
154
154
|
closeTools();
|
155
|
-
this.setSelectedCellView(null);
|
156
155
|
// selection.startSelecting(evt, x, y);
|
157
156
|
if (keyboard.isActive('shift', evt)) {
|
158
157
|
selection.startSelecting(evt, x, y);
|
@@ -167,7 +166,6 @@ export class BpmnService {
|
|
167
166
|
},
|
168
167
|
'cell:pointerup': (cellView) => {
|
169
168
|
openTools(cellView);
|
170
|
-
this.setSelectedCellView(cellView);
|
171
169
|
},
|
172
170
|
'link:mouseenter': (linkView) => {
|
173
171
|
// Open tool only if there is none yet
|
@@ -402,12 +400,10 @@ export class BpmnService {
|
|
402
400
|
verticalGap: 20,
|
403
401
|
resizeToFit: false
|
404
402
|
});
|
405
|
-
const setSelectedCellView = this.setSelectedCellView;
|
406
403
|
// Create tooltips for all the shapes in stencil.
|
407
404
|
stencil.on('element:drop', (elementView) => {
|
408
405
|
// open inspector after a new element dropped from stencil
|
409
406
|
openTools(elementView);
|
410
|
-
setSelectedCellView(elementView);
|
411
407
|
});
|
412
408
|
/* KEYBOARD */
|
413
409
|
if (editMode === FlowchartViewMode.Edit) {
|
@@ -433,32 +429,21 @@ export class BpmnService {
|
|
433
429
|
},
|
434
430
|
'ctrl+x shift+delete': () => {
|
435
431
|
clipboard.cutElements(selection.collection, graph);
|
436
|
-
setSelectedCellView(null);
|
437
432
|
},
|
438
433
|
'delete backspace': (evt) => {
|
439
434
|
evt.preventDefault();
|
440
435
|
graph.removeCells(selection.collection.toArray());
|
441
|
-
setSelectedCellView(null);
|
442
436
|
},
|
443
437
|
'ctrl+z': () => {
|
444
|
-
const notify = isSelectedCellViewInSelection(selection);
|
445
438
|
commandManager.undo();
|
446
439
|
selection.cancelSelection();
|
447
|
-
if (notify) {
|
448
|
-
setSelectedCellView(null);
|
449
|
-
}
|
450
440
|
},
|
451
441
|
'ctrl+y': () => {
|
452
|
-
const notify = isSelectedCellViewInSelection(selection);
|
453
442
|
commandManager.redo();
|
454
443
|
selection.cancelSelection();
|
455
|
-
if (notify) {
|
456
|
-
setSelectedCellView(null);
|
457
|
-
}
|
458
444
|
},
|
459
445
|
'ctrl+a': () => {
|
460
446
|
selection.collection.reset(graph.getElements());
|
461
|
-
setSelectedCellView(null);
|
462
447
|
},
|
463
448
|
'ctrl+plus': (evt) => {
|
464
449
|
evt.preventDefault();
|
@@ -481,6 +466,7 @@ export class BpmnService {
|
|
481
466
|
return;
|
482
467
|
}
|
483
468
|
closeTools();
|
469
|
+
window[`my_cellView`] = cellView;
|
484
470
|
const cell = cellView.model;
|
485
471
|
const type = cell.get('type');
|
486
472
|
// const tablName = window[FlowChartConst.TAB_NAME];
|
@@ -496,7 +482,7 @@ export class BpmnService {
|
|
496
482
|
// }
|
497
483
|
// });
|
498
484
|
// }
|
499
|
-
joint.ui.Inspector.create('#inspector-container', {
|
485
|
+
const inspector = joint.ui.Inspector.create('#inspector-container', {
|
500
486
|
cell,
|
501
487
|
inputs: inputs[type],
|
502
488
|
groups: {
|
@@ -660,6 +646,8 @@ export class BpmnService {
|
|
660
646
|
// }
|
661
647
|
/* QMS-2125: Show process connect type */
|
662
648
|
window[FlowChartConst.IS_SHOW_CONNECTYPE] = true;
|
649
|
+
window[FlowChartConst.SELECTED_SHAPE_ID] = cellView.model.attributes.id;
|
650
|
+
window[FlowChartConst.SHAPE_TYPE] = cellView.model.attributes.type;
|
663
651
|
window[FlowChartConst.SHAPE_FLOWCHART_LOADING] = true;
|
664
652
|
/* QMS-1404: Customization */
|
665
653
|
window[FlowChartConst.PAPER] = paper;
|
@@ -671,11 +659,6 @@ export class BpmnService {
|
|
671
659
|
freeTransform = null;
|
672
660
|
joint.ui.Halo.clear(paper);
|
673
661
|
}
|
674
|
-
function isSelectedCellViewInSelection(selection) {
|
675
|
-
const models = selection.collection.toArray() || [];
|
676
|
-
const selectedShapeId = window[FlowChartConst.SELECTED_SHAPE_ID];
|
677
|
-
return !!selectedShapeId && models.filter(model => model.attributes.id == selectedShapeId);
|
678
|
-
}
|
679
662
|
function showStatus(message, type) {
|
680
663
|
$('.status').removeClass('info error success').addClass(type).html(message);
|
681
664
|
$('#statusbar-container')
|
@@ -763,13 +746,8 @@ export class BpmnService {
|
|
763
746
|
this.jsonOriginalContent = JSON.stringify(graph.toJSON());
|
764
747
|
window[FlowChartConst.ORG_JSONCONTENT] = this.jsonOriginalContent;
|
765
748
|
window.postMessage(FlowChartConst.CHANGING_TEMPLATE, this.getOriginForSelf());
|
766
|
-
this.setSelectedCellView(null);
|
767
749
|
}
|
768
750
|
},
|
769
|
-
onClear: () => {
|
770
|
-
graph.clear();
|
771
|
-
this.setSelectedCellView(null);
|
772
|
-
},
|
773
751
|
onDeleteTemplate: () => {
|
774
752
|
this.isSelectedTemplate = window[FlowChartConst.IS_SELECTED_TEMPLATE];
|
775
753
|
if (this.isSelectedTemplate) {
|
@@ -810,7 +788,7 @@ export class BpmnService {
|
|
810
788
|
'tojson:pointerclick': toolbarCommands.toJSON,
|
811
789
|
'load:pointerclick': toolbarCommands.loadGraph,
|
812
790
|
'save:pointerclick': toolbarCommands.saveGraph,
|
813
|
-
'clear:pointerclick':
|
791
|
+
'clear:pointerclick': _.bind(graph.clear, graph),
|
814
792
|
'print:pointerclick': _.bind(paper.print, paper),
|
815
793
|
'saveAsTemplate:pointerclick': toolbarCommands.onSaveAsTemplate,
|
816
794
|
'selectTemplate:option:select': toolbarCommands.onSelected,
|
@@ -932,19 +910,6 @@ export class BpmnService {
|
|
932
910
|
}
|
933
911
|
}
|
934
912
|
}
|
935
|
-
setSelectedCellView(cellView) {
|
936
|
-
if (cellView) {
|
937
|
-
window[FlowChartConst.MY_CELL_VIEW] = cellView;
|
938
|
-
window[FlowChartConst.SELECTED_SHAPE_ID] = cellView.model.attributes.id;
|
939
|
-
window[FlowChartConst.SHAPE_TYPE] = cellView.model.attributes.type;
|
940
|
-
}
|
941
|
-
else {
|
942
|
-
window[FlowChartConst.MY_CELL_VIEW] = null;
|
943
|
-
window[FlowChartConst.SELECTED_SHAPE_ID] = '';
|
944
|
-
window[FlowChartConst.SHAPE_TYPE] = '';
|
945
|
-
}
|
946
|
-
window.postMessage(FlowChartConst.SELECTED_SHAPE_ID, '*');
|
947
|
-
}
|
948
913
|
getTempGraph() {
|
949
914
|
if (this.jsonTempContent) {
|
950
915
|
this.loadProcessDiagram(JSON.parse(this.jsonTempContent));
|
@@ -1009,23 +974,20 @@ export class BpmnService {
|
|
1009
974
|
}
|
1010
975
|
}
|
1011
976
|
openShapeFunctionality(LANG) {
|
1012
|
-
const myCellView = window[
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
}
|
1027
|
-
});
|
1028
|
-
}
|
977
|
+
const myCellView = window[`my_cellView`];
|
978
|
+
const inputs = InspectorFunction.getInspectorConfiguration(bpmn2, LANG);
|
979
|
+
const cell = myCellView.model;
|
980
|
+
const type = cell.get('type');
|
981
|
+
const inspector = joint.ui.Inspector.create('#inspector-container', {
|
982
|
+
cell,
|
983
|
+
inputs: inputs[type],
|
984
|
+
groups: {
|
985
|
+
general: { label: type, index: 1 },
|
986
|
+
defaults: { index: 2 },
|
987
|
+
fontsize: { index: 3 },
|
988
|
+
appearance: { index: 4 }
|
989
|
+
}
|
990
|
+
});
|
1029
991
|
}
|
1030
992
|
setZoomToFit(editMode) {
|
1031
993
|
if (editMode === FlowchartViewMode.View) {
|
@@ -1185,12 +1147,10 @@ export class BpmnService {
|
|
1185
1147
|
return total;
|
1186
1148
|
}
|
1187
1149
|
}
|
1188
|
-
BpmnService.ɵ
|
1189
|
-
BpmnService
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
}]
|
1195
|
-
}] });
|
1196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFLN0UsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUlqQyxNQUFNLE9BQU8sV0FBVztJQUh4QjtRQUlTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHVCQUFrQixHQUFHLEtBQUssQ0FB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QUN4QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQVU7UUFDM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDVixLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDakI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzt3R0Fqd0NVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCAqIGFzICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgSW5zcGVjdG9yRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2JwbW4vaW5zcGVjdG9yLmZ1bmN0aW9uJztcclxuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi90b29sYmFyLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRmxvd2NoYXJ0LmNvbnN0JztcclxuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMvZmxvd2NoYXJ0LXZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSAnLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyJztcclxuXHJcbi8qIERlY2xhcmUgam9pbnRqcyBvYmplY3QgKi9cclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueTtcclxubGV0IGdyYXBoOiBhbnk7XHJcbmxldCBwYXBlcjogYW55O1xyXG5sZXQgdG9vbGJhckNvbmZpZzogYW55O1xyXG5jb25zdCBicG1uMiA9IGpvaW50LnNoYXBlcy5icG1uMjtcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnBtblNlcnZpY2Uge1xyXG4gIHB1YmxpYyBpc1NhdmVBc1RlbXBsYXRlID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGVsZXRlVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1RlbXAgPSB0cnVlO1xyXG4gIHB1YmxpYyBqc29uVGVtcENvbnRlbnQgPSAnJztcclxuICBwdWJsaWMgaXNSZXNldCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1NlbGVjdGVkVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMganNvbk9yaWdpbmFsQ29udGVudCA9ICcnO1xyXG5cclxuICBidWlsZERpYWdyYW0oXHJcbiAgICBkaWFncmFtVGVtcGxhdGVzOiBhbnksXHJcbiAgICBkaWFncmFtVGVtcGxhdGU6IGFueSxcclxuICAgIGJwbW5UaGVtZTogc3RyaW5nLFxyXG4gICAganNvbkNvbnRlbnQ6IGFueSxcclxuICAgIGVkaXRNb2RlOiBhbnksXHJcbiAgICBMQU5HOiBhbnlcclxuICApIHtcclxuICAgIHdpbmRvd1tgSVNfTk9UX1NIT1dfQUdBSU5gXSA9IGZhbHNlO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkVESVRfTU9ERV0gPSBlZGl0TW9kZTtcclxuICAgIGpvaW50LnNldFRoZW1lKGJwbW5UaGVtZSk7XHJcblxyXG4gICAgaWYgKGpzb25Db250ZW50KSB7XHJcbiAgICAgIGpzb25Db250ZW50ID0gSlNPTi5wYXJzZShqc29uQ29udGVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBqc29uQ29udGVudCA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdkQXV0aCA9IHdpbmRvd1tgZ2RBdXRoYF07XHJcbiAgICBjb25zdCBnZExvYWQgPSB3aW5kb3dbYGdkTG9hZGBdO1xyXG4gICAgY29uc3QgZ2RTYXZlID0gd2luZG93W2BnZFNhdmVgXTtcclxuICAgIGNvbnN0IGlucHV0cyA9IEluc3BlY3RvckZ1bmN0aW9uLmdldEluc3BlY3RvckNvbmZpZ3VyYXRpb24oYnBtbjIsIExBTkcpO1xyXG5cclxuICAgIGxldCBmcmVlVHJhbnNmb3JtID0gbnVsbDtcclxuXHJcbiAgICB0b29sYmFyQ29uZmlnID0gVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKExBTkcpO1xyXG4gICAgLyogUU1TLTE0MDQ6IEN1c3RvbWl6YXRpb246IEFkZCB0ZW1wbGF0ZSBsaXN0ICovXHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scyAmJiBkaWFncmFtVGVtcGxhdGVzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGRpYWdyYW1UZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgICBpbmRleDogaXRlbS5pbmRleCxcclxuICAgICAgICAgICAgY29udGVudDogaXRlbS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgIGZsb3dDaGFydElkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IGl0ZW0uanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB4LmluZGV4ID09PSBvcHRpb24uaW5kZXg7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ3JhcGggPSBuZXcgam9pbnQuZGlhLkdyYXBoKHsgdHlwZTogJ2JwbW4nIH0pO1xyXG4gICAgY29uc3QgY29tbWFuZE1hbmFnZXIgPSBuZXcgam9pbnQuZGlhLkNvbW1hbmRNYW5hZ2VyKHsgZ3JhcGggfSk7XHJcbiAgICBjb25zdCBrZXlib2FyZCA9IG5ldyBqb2ludC51aS5LZXlib2FyZCgpO1xyXG4gICAgY29uc3QgY2xpcGJvYXJkID0gbmV3IGpvaW50LnVpLkNsaXBib2FyZCgpO1xyXG5cclxuICAgIHBhcGVyID0gbmV3IGpvaW50LmRpYS5QYXBlcih7XHJcbiAgICAgIHdpZHRoOiA4MDAsXHJcbiAgICAgIGhlaWdodDogNjAwLFxyXG4gICAgICBtb2RlbDogZ3JhcGgsXHJcbiAgICAgIGdyaWRTaXplOiAxMCxcclxuICAgICAgZHJhd0dyaWQ6IHRydWUsXHJcbiAgICAgIGFzeW5jOiB0cnVlLFxyXG4gICAgICBzb3J0aW5nOiBqb2ludC5kaWEuUGFwZXIuc29ydGluZy5BUFBST1gsXHJcbiAgICAgIGludGVyYWN0aXZlOiB7IGxpbmtNb3ZlOiBmYWxzZSB9LFxyXG4gICAgICBzbmFwTGFiZWxzOiB0cnVlLFxyXG4gICAgICAvLyBDb25uZWN0aW9uc1xyXG4gICAgICBkZWZhdWx0TGluayhlbGVtZW50Vmlldykge1xyXG4gICAgICAgIHJldHVybiBuZXcgYnBtbjIuRmxvdyh7XHJcbiAgICAgICAgICB6OiBlbGVtZW50Vmlldy5tb2RlbC5nZXQoJ3onKSAtIDEsXHJcbiAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICBsaW5lOiB7XHJcbiAgICAgICAgICAgICAgZmxvd1R5cGU6ICdzZXF1ZW5jZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICB2YWxpZGF0ZUNvbm5lY3Rpb24oY2VsbFZpZXdTLCBtYWduZXRTLCBjZWxsVmlld1QsIG1hZ25ldFQsIGVuZCkge1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNlbGxWaWV3Uy5tb2RlbDtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBjZWxsVmlld1QubW9kZWw7XHJcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbG9vcCBsaW5rc1xyXG4gICAgICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkb24ndCBhbGxvdyBsaW5rIHRvIGxpbmsgY29ubmVjdGlvblxyXG4gICAgICAgIGlmIChzb3VyY2UuaXNMaW5rKCkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhcmdldC5pc0xpbmsoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkb24ndCBhbGxvdyBncm91cCBjb25uZWN0aW9uc1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2UuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IHRhcmdldC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2JwbW4yLkdyb3VwJyB8fCB0YXJnZXRUeXBlID09PSAnYnBtbjIuR3JvdXAnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0QW5jaG9yOiB7XHJcbiAgICAgICAgbmFtZTogJ3BlcnBlbmRpY3VsYXInXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHRDb25uZWN0aW9uUG9pbnQ6IHtcclxuICAgICAgICBuYW1lOiAnYm91bmRhcnknLFxyXG4gICAgICAgIGFyZ3M6IHsgc3Ryb2tlOiB0cnVlIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gRW1iZWRkaW5nXHJcbiAgICAgIGVtYmVkZGluZ01vZGU6IHRydWUsXHJcbiAgICAgIGZyb250UGFyZW50T25seTogZmFsc2UsXHJcbiAgICAgIHZhbGlkYXRlRW1iZWRkaW5nKGNoaWxkVmlldywgcGFyZW50Vmlldykge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkVHlwZSA9IGNoaWxkVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcgJiYgY2hpbGRUeXBlICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuQWN0aXZpdHknICYmIGNoaWxkVHlwZSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgLy8gSGlnaGxpZ2h0aW5nXHJcbiAgICAgIGhpZ2hsaWdodGluZzoge1xyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIG5hbWU6ICdtYXNrJyxcclxuICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICBzdHJva2U6ICcjMzQ5OGRiJyxcclxuICAgICAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogMyxcclxuICAgICAgICAgICAgICAnc3Ryb2tlLWxpbmVqb2luJzogJ3JvdW5kJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KS5vbih7XHJcbiAgICAgICdibGFuazpwb2ludGVyZG93bic6IChldnQsIHgsIHkpID0+IHtcclxuICAgICAgICBjbG9zZVRvb2xzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENlbGxWaWV3KG51bGwpO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcclxuICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2JsYW5rOmNvbnRleHRtZW51JzogKGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxsVmlldyhjZWxsVmlldyk7XHJcblxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2xpbms6bW91c2VlbnRlcic6IChsaW5rVmlldykgPT4ge1xyXG4gICAgICAgIC8vIE9wZW4gdG9vbCBvbmx5IGlmIHRoZXJlIGlzIG5vbmUgeWV0XHJcbiAgICAgICAgaWYgKGxpbmtWaWV3Lmhhc1Rvb2xzKCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgICAgIG5hbWU6ICdsaW5rLWhvdmVyJyxcclxuICAgICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcyh7IHZlcnRleEFkZGluZzogZmFsc2UgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnbGluazptb3VzZWxlYXZlJzogKGxpbmtWaWV3KSA9PiB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIGhvdmVyIHRvb2wsIG5vdCB0aGUgcG9pbnRlcmRvd24gdG9vbFxyXG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygnbGluay1ob3ZlcicpKSB7XHJcbiAgICAgICAgICBsaW5rVmlldy5yZW1vdmVUb29scygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdsaW5rOmNvbm5lY3QnOiAobGlua1ZpZXcpID0+IHtcclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGxpbmsgdHlwZSBiYXNlZCBvbiB0aGUgY29ubmVjdGVkIGVsZW1lbnRzXHJcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtWaWV3Lm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGxpbmsuZ2V0U291cmNlQ2VsbCgpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGxpbmsuZ2V0VGFyZ2V0Q2VsbCgpO1xyXG4gICAgICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluay5zZXQoJ3onLCAtMSk7XHJcbiAgICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlLmdldCgndHlwZScpLCB0YXJnZXQuZ2V0KCd0eXBlJyldO1xyXG4gICAgICAgIGNvbnN0IGxpbmtUeXBlID0gbGluay5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQW5ub3RhdGlvbicpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQW5ub3RhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQ29udmVyc2F0aW9uJykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkNvbnZlcnNhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuRGF0YU9iamVjdCcpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhU3RvcmUnKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5EYXRhQXNzb2NpYXRpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlua1R5cGUgIT09ICdicG1uMi5GbG93Jykge1xyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkZsb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc25hcGxpbmVzID0gbmV3IGpvaW50LnVpLlNuYXBsaW5lcyh7IHBhcGVyIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSBuZXcgam9pbnQudWkuUGFwZXJTY3JvbGxlcih7XHJcbiAgICAgIGF1dG9SZXNpemVQYXBlcjogdHJ1ZSxcclxuICAgICAgcGFkZGluZzogMjAsXHJcbiAgICAgIHBhcGVyLFxyXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XHJcblxyXG4gICAgcGFwZXIub24oJ2JsYW5rOm1vdXNld2hlZWwnLCBfLnBhcnRpYWwob25Nb3VzZXdoZWVsLCBudWxsKSwgdGhpcyk7XHJcbiAgICBwYXBlci5vbignY2VsbDptb3VzZXdoZWVsJywgb25Nb3VzZXdoZWVsLCB0aGlzKTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb20oZGVsdGEgKiAwLjEsIHsgbWluOiAwLjIsIG1heDogNSwgZ3JpZDogMC4xLCBveDogeCwgb3k6IHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU0VMRUNUSU9OICovXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgam9pbnQudWkuU2VsZWN0aW9uKHtcclxuICAgICAgcGFwZXIsXHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxyXG4gICAgfSk7XHJcblxyXG4gICAgLyogU1RFTkNJTCAqL1xyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWwgPSBuZXcgam9pbnQudWkuU3RlbmNpbCh7XHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICBwYXBlcixcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgIGRyYWdFbmRDbG9uZShjZWxsKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBjZWxsLmNsb25lKCk7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xyXG5cclxuICAgICAgICAvLyBzb21lIHR5cGVzIG9mIHRoZSBlbGVtZW50cyBuZWVkIHJlc2l6aW5nIGFmdGVyIHRoZXkgYXJlIGRyb3BwZWRcclxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcclxuICAgICAgICBpZiAoc2l6ZU11bHRpcGxpZXIpIHtcclxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2l6ZSA9IGNsb25lLmdldCgnc2l6ZScpO1xyXG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xyXG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luYWxTaXplLndpZHRoICogc2l6ZU11bHRpcGxpZXIsXHJcbiAgICAgICAgICAgIGhlaWdodDogb3JpZ2luYWxTaXplLmhlaWdodCAqIHNpemVNdWx0aXBsaWVyXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgICBjbG9uZS5zZXQoJ3BhZGRpbmcnLCB7IHRvcDogMCwgbGVmdDogMzAsIHJpZ2h0OiAwLCBib3R0b206IDAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIHN0ZW5jaWwubG9hZChbXHJcbiAgICAgIG5ldyBicG1uMi5BY3Rpdml0eSh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkdhdGV3YXkoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5FdmVudCh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkNvbnZlcnNhdGlvbih7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkRhdGFPYmplY3Qoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5EYXRhU3RvcmUoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Bbm5vdGF0aW9uKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Hcm91cCh7XHJcbiAgICAgICAgc2l6ZToge1xyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgaGVpZ2h0OiA4MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHRleHQ6ICdHcm91cCcsXHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgLy8gTGVnYWN5IEJQTU4gU2hhcGVzXHJcbiAgICAgIG5ldyBicG1uMi5IZWFkZXJlZFBvb2woe1xyXG4gICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxyXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDUwIH0sXHJcbiAgICAgICAgbGFuZXM6IFt7IGxhYmVsOiAnTGFuZSAxJyB9LCB7IGxhYmVsOiAnTGFuZSAyJyB9XSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keTogeyBmaWxsOiAnI0ZGRkZGRicgfSxcclxuICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uQ2hvcmVvZ3JhcGh5KHtcclxuICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGpvaW50LnNoYXBlcy5icG1uLk1lc3NhZ2Uoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICB0ZXh0OiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXSk7XHJcblxyXG4gICAgam9pbnQubGF5b3V0LkdyaWRMYXlvdXQubGF5b3V0KHN0ZW5jaWwuZ2V0R3JhcGgoKSwge1xyXG4gICAgICBjb2x1bW5zOiAxMDAsXHJcbiAgICAgIGNvbHVtbldpZHRoOiAnY29tcGFjdCcsXHJcbiAgICAgIG1hcmdpblg6IDIwLFxyXG4gICAgICBtYXJnaW5ZOiAyMCxcclxuICAgICAgY29sdW1uR2FwOiA0MCxcclxuICAgICAgdmVydGljYWxHYXA6IDIwLFxyXG4gICAgICByZXNpemVUb0ZpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNldFNlbGVjdGVkQ2VsbFZpZXcgPSB0aGlzLnNldFNlbGVjdGVkQ2VsbFZpZXc7XHJcbiAgICAvLyBDcmVhdGUgdG9vbHRpcHMgZm9yIGFsbCB0aGUgc2hhcGVzIGluIHN0ZW5jaWwuXHJcbiAgICBzdGVuY2lsLm9uKCdlbGVtZW50OmRyb3AnLCAoZWxlbWVudFZpZXcpID0+IHtcclxuICAgICAgLy8gb3BlbiBpbnNwZWN0b3IgYWZ0ZXIgYSBuZXcgZWxlbWVudCBkcm9wcGVkIGZyb20gc3RlbmNpbFxyXG4gICAgICBvcGVuVG9vbHMoZWxlbWVudFZpZXcpO1xyXG4gICAgICBzZXRTZWxlY3RlZENlbGxWaWV3KGVsZW1lbnRWaWV3KTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiBLRVlCT0FSRCAqL1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAga2V5Ym9hcmQub24oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXHJcbiAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrdic6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxyXG4gICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gXy5maWx0ZXIocGFzdGVkQ2VsbHMsIChjZWxsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGwuaXNFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xyXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChlbGVtZW50cyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3ggc2hpZnQrZGVsZXRlJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdkZWxldGUgYmFja3NwYWNlJzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZ3JhcGgucmVtb3ZlQ2VsbHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24udG9BcnJheSgpKTtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3onOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnVuZG8oKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XHJcbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwreSc6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm90aWZ5ID0gaXNTZWxlY3RlZENlbGxWaWV3SW5TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIucmVkbygpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcclxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZENlbGxWaWV3KG51bGwpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCthJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChncmFwaC5nZXRFbGVtZW50cygpKTtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3BsdXMnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oMC4yLCB7IG1heDogNSwgZ3JpZDogMC4yIH0pO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCttaW51cyc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdrZXlkb3duOnNoaWZ0JzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignY3Jvc3NoYWlyJyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdrZXl1cDpzaGlmdCc6ICgpID0+IHtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBvcGVuVG9vbHMoY2VsbFZpZXcpIHtcclxuICAgICAgaWYgKCFjZWxsVmlldykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjbG9zZVRvb2xzKCk7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcclxuICAgICAgY29uc3QgdHlwZSA9IGNlbGwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgIC8vIGNvbnN0IHRhYmxOYW1lID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlRBQl9OQU1FXTtcclxuICAgICAgLy8gaWYgKHRhYmxOYW1lID09PSBGbG93Q2hhcnRDb25zdC5UQUJfQlBNTl9DSE9SRU9HUkFQSFkpIHtcclxuICAgICAgLy8gICBjb25zdCBpbnNwZWN0b3IgPSBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcclxuICAgICAgLy8gICAgIGNlbGwsXHJcbiAgICAgIC8vICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgLy8gICAgIGdyb3Vwczoge1xyXG4gICAgICAvLyAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxyXG4gICAgICAvLyAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAvLyAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxyXG4gICAgICAvLyAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9KTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgICAgY2VsbCxcclxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChbXSk7XHJcbiAgICAgIC8vIEFkZCB0aGUgY2VsbCBpbnRvIHRoZSBzZWxlY3Rpb24gY29sbGVjdGlvbiBzaWxlbnRseVxyXG4gICAgICAvLyBzbyBubyBzZWxlY3Rpb24gYm94IGlzIHJlbmRlcmVkIGFib3ZlIHRoZSBjZWxsVmlldy5cclxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24uYWRkKGNlbGwsIHsgc2lsZW50OiB0cnVlIH0pO1xyXG5cclxuICAgICAgaWYgKGNlbGwuaXNFbGVtZW50KCkpIHtcclxuICAgICAgICBsZXQgbWluU2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBicG1uMi5IZWFkZXJlZFBvb2wpIHtcclxuICAgICAgICAgIG1pblNpemUgPSBjZWxsLmdldE1pbmltYWxTaXplKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1pblNpemUgPSB7IHdpZHRoOiAzMCwgaGVpZ2h0OiAzMCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnJlZVRyYW5zZm9ybSA9IG5ldyBqb2ludC51aS5GcmVlVHJhbnNmb3JtKHtcclxuICAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAgICAgYWxsb3dPcnRob2dvbmFsUmVzaXplOiBmYWxzZSxcclxuICAgICAgICAgIGFsbG93Um90YXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgbWluV2lkdGg6IG1pblNpemUud2lkdGgsXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IG1pblNpemUuaGVpZ2h0XHJcbiAgICAgICAgfSkucmVuZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XHJcbiAgICAgICAgICBjZWxsVmlldyxcclxuICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICB0eXBlOiAndG9vbGJhcicsXHJcbiAgICAgICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICAgICAgYm94Q29udGVudDogKGNlbGxWaWV3KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZWxsVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xyXG4gICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGFsby5yZW5kZXIoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNlbGwuaXNMaW5rKCkpIHtcclxuICAgICAgICBjb25zdCBucyA9IGpvaW50LmxpbmtUb29scztcclxuICAgICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgICBuYW1lOiAnbGluay1wb2ludGVyZG93bicsXHJcbiAgICAgICAgICB0b29sczogW1xyXG4gICAgICAgICAgICBuZXcgbnMuVmVydGljZXMoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFuY2hvcigpLFxyXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QW5jaG9yKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpLFxyXG4gICAgICAgICAgICBuZXcgbnMuU2VnbWVudHMoKSxcclxuICAgICAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5SZW1vdmUoeyBvZmZzZXQ6IC0yMCwgZGlzdGFuY2U6IDQwIH0pXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNlbGxWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFFNUy0yMzY0OiBzaG93IGxpbmsgYW5kIHBvaXRlciBjaGFuZ2UgdG8gaGFuZCAqL1xyXG4gICAgICAvLyBpZiAod2luZG93W2BldmVudGBdW2B0eXBlYF0gPT09ICdtb3VzZW92ZXInICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIC8vICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYGpvaW50LWVsZW1lbnRgKTtcclxuICAgICAgLy8gICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgIGNvbnN0IHNoYXBlSWQgPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICAvLyAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcclxuICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgICBpZiAobGlzdFtpXS5hdHRyaWJ1dGVzWzBdLm5vZGVWYWx1ZSAhPT0gc2hhcGVJZCkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsTW9kZWwgPSB3aW5kb3dbYFNIQVBFX0RFVEFJTF9NT0RFTGBdO1xyXG4gICAgICAvLyAgICAgICBpZiAoIXNoYXBlRGV0YWlsTW9kZWwpIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgLy8gICAgICAgICBjb250aW51ZTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBjb25zdCBpbmRleCA9IHNoYXBlRGV0YWlsTW9kZWwuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgIC8vICAgICAgICAgcmV0dXJuIHguc2hhcGVJZCA9PT0gc2hhcGVJZDtcclxuICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgIC8vICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgLy8gICAgICAgICBjb250aW51ZTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBjb25zdCBzaGFwZURldGFpbCA9IHNoYXBlRGV0YWlsTW9kZWxbaW5kZXhdO1xyXG4gICAgICAvLyAgICAgICBsZXQgY29ubmVjdGlvbk5hbWUgPSAnJztcclxuICAgICAgLy8gICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgLy8gICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fQUNUSVZJVFknKTtcclxuICAgICAgLy8gICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcclxuICAgICAgLy8gICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTksnKTtcclxuICAgICAgLy8gICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzKSB7XHJcbiAgICAgIC8vICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxyXG4gICAgICAvLyAgICAgICAgIHN3aXRjaCAoc2hhcGVEZXRhaWwuZG9jdW1lbnRNb2RlbC5yZWxhdGVkSXRlbXNbMF0uaXRlbVR5cGUpIHtcclxuICAgICAgLy8gICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmRvY3VtZW50OlxyXG4gICAgICAvLyAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fRE9DVU1FTlQnKTtcclxuICAgICAgLy8gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzOlxyXG4gICAgICAvLyAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fUFJPQ0VTUycpO1xyXG4gICAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmFyZWE6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19BUkVBJyk7XHJcbiAgICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuaGFuZGJvb2s6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19GT0xERVInKTtcclxuICAgICAgLy8gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XHJcbiAgICAgIC8vICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgLy8gICAgICAgICBjZWxsVmlldyxcclxuICAgICAgLy8gICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxyXG4gICAgICAvLyAgICAgICAgIGJveENvbnRlbnQ6IGNvbm5lY3Rpb25OYW1lXHJcbiAgICAgIC8vICAgICAgIH0pO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZXNpemUnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2Nsb25lJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuXHJcbiAgICAgIC8vICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcclxuICAgICAgLy8gICBpZiAoc2hhcGVFbGVtZW50ICYmIHNoYXBlRWxlbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlRWxlbWVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgICBpZiAoIXNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuY29udGFpbnMoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJykpIHtcclxuICAgICAgLy8gICAgICAgICBzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LmFkZCgnam9pbnQtZnJlZS10cmFuc2Zvcm0nKTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSBlbHNlIGlmICh3aW5kb3dbYGV2ZW50YF1bYHR5cGVgXSA9PT0gJ21vdXNlb3V0JyAmJiBlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xyXG4gICAgICAvLyAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XHJcbiAgICAgIC8vICAgICBjZWxsVmlldyxcclxuICAgICAgLy8gICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgIC8vICAgICBib3hDb250ZW50OiAnJ1xyXG4gICAgICAvLyAgIH0pO1xyXG4gICAgICAvLyAgIGhhbG8ucmVuZGVyKCk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JlbW92ZScpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZXNpemUnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyb3RhdGUnKTtcclxuICAgICAgLy8gICBjb25zdCBzaGFwZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduby1yb3RhdGlvbicpO1xyXG4gICAgICAvLyAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QucmVtb3ZlKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICAvKiBRTVMtMjEyNTogU2hvdyBwcm9jZXNzIGNvbm5lY3QgdHlwZSAqL1xyXG4gICAgICAvLyAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TSE9XX0NPTk5FQ1RZUEVdID0gdHJ1ZTtcclxuICAgICAgLy8gICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcclxuICAgICAgLy8gICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGU7XHJcbiAgICAgIC8vICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF9MT0FESU5HXSA9IHRydWU7XHJcbiAgICAgIC8vIH1cclxuICAgICAgLyogUU1TLTIxMjU6IFNob3cgcHJvY2VzcyBjb25uZWN0IHR5cGUgKi9cclxuXHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TSE9XX0NPTk5FQ1RZUEVdID0gdHJ1ZTtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF9MT0FESU5HXSA9IHRydWU7XHJcbiAgICAgIC8qIFFNUy0xNDA0OiBDdXN0b21pemF0aW9uICovXHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl0gPSBwYXBlcjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbG9zZVRvb2xzKCkge1xyXG4gICAgICBwYXBlci5yZW1vdmVUb29scygpO1xyXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcclxuICAgICAgam9pbnQudWkuRnJlZVRyYW5zZm9ybS5jbGVhcihwYXBlcik7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xyXG4gICAgICBqb2ludC51aS5IYWxvLmNsZWFyKHBhcGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pIHtcclxuICAgICAgY29uc3QgbW9kZWxzID0gc2VsZWN0aW9uLmNvbGxlY3Rpb24udG9BcnJheSgpIHx8IFtdO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFNoYXBlSWQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdO1xyXG4gICAgICByZXR1cm4gISFzZWxlY3RlZFNoYXBlSWQgJiYgbW9kZWxzLmZpbHRlcihtb2RlbCA9PiBtb2RlbC5hdHRyaWJ1dGVzLmlkID09IHNlbGVjdGVkU2hhcGVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2hvd1N0YXR1cyhtZXNzYWdlLCB0eXBlKSB7XHJcbiAgICAgICQoJy5zdGF0dXMnKS5yZW1vdmVDbGFzcygnaW5mbyBlcnJvciBzdWNjZXNzJykuYWRkQ2xhc3ModHlwZSkuaHRtbChtZXNzYWdlKTtcclxuICAgICAgJCgnI3N0YXR1c2Jhci1jb250YWluZXInKVxyXG4gICAgICAgIC5kZXF1ZXVlKClcclxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXHJcbiAgICAgICAgLmRlbGF5KDMwMDApXHJcbiAgICAgICAgLnF1ZXVlKCgpID0+IHtcclxuICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBsaW5rQ29uc3RydWN0b3IpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcclxuICAgICAgY29uc3QgbGluazIgPSBuZXcgbGlua0NvbnN0cnVjdG9yKHtcclxuICAgICAgICBzb3VyY2U6IGxpbmsuc291cmNlKCksXHJcbiAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldCgpLFxyXG4gICAgICAgIHZlcnRpY2VzOiBsaW5rLnZlcnRpY2VzKClcclxuICAgICAgfSk7XHJcbiAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICAgIGxpbmsyLnNldCgneicsIC0xKTtcclxuICAgICAgbGluazIuYWRkVG8oZ3JhcGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyYXBoLm9uKCdjaGFuZ2UnLCAoY2VsbCwgb3B0KSA9PiB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VUZXh0SW5zaWRlKGNlbGwpO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlTGlua0xhYmVsKGNlbGwsIDEyKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZUFsbGlnbWVudChjZWxsLCBvcHQpO1xyXG4gICAgICBpZiAoIW9wdC5pbnNwZWN0b3IgfHwgIWZyZWVUcmFuc2Zvcm0gfHwgY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbldpZHRoID0gbWluU2l6ZS53aWR0aDtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbkhlaWdodCA9IG1pblNpemUuaGVpZ2h0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLyogVE9PTEJBUiAqL1xyXG4gICAgY29uc3QgdG9vbGJhciA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgICAgdG9vbHM6IHRvb2xiYXJDb25maWcudG9vbHMsXHJcbiAgICAgIHJlZmVyZW5jZXM6IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLFxyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvb2xiYXJDb21tYW5kcyA9IHtcclxuICAgICAgdG9KU09OOiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgd2luZG93RmVhdHVyZXMgPSAnbWVudWJhcj1ubyxsb2NhdGlvbj1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz1ubyc7XHJcbiAgICAgICAgY29uc3Qgd2luZG93TmFtZSA9IF8udW5pcXVlSWQoJ2pzb25fb3V0cHV0Jyk7XHJcbiAgICAgICAgY29uc3QganNvbldpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCB3aW5kb3dOYW1lLCB3aW5kb3dGZWF0dXJlcyk7XHJcblxyXG4gICAgICAgIGpzb25XaW5kb3cuZG9jdW1lbnQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpKTtcclxuICAgICAgfSxcclxuICAgICAgbG9hZEdyYXBoOiAoKSA9PiB7XHJcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcclxuICAgICAgICAgIHNob3dTdGF0dXMoJ2xvYWRpbmcuLicsICdpbmZvJyk7XHJcbiAgICAgICAgICBnZExvYWQoKG5hbWUsIGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcclxuICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTihqc29uKTtcclxuICAgICAgICAgICAgICBjb25zdCBlbEZpbGVOYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xyXG4gICAgICAgICAgICAgIGVsRmlsZU5hbWUudmFsdWUgPSBuYW1lLnJlcGxhY2UoLy5qc29uJC8sICcnKTtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkZWQuJywgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzYXZlR3JhcGg6ICgpID0+IHtcclxuICAgICAgICBnZEF1dGgoKCkgPT4ge1xyXG4gICAgICAgICAgc2hvd1N0YXR1cygnc2F2aW5nLi4nLCAnaW5mbycpO1xyXG4gICAgICAgICAgLy8gbGV0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKS52YWx1ZTtcclxuICAgICAgICAgIGNvbnN0IG5hbWUgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJyk7XHJcbiAgICAgICAgICBnZFNhdmUobmFtZS52YWx1ZSwgSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpLCAoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmVkLicsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnZmFpbGVkLicsICdlcnJvcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCB0cnVlKTtcclxuICAgICAgfSxcclxuICAgICAgb25TZWxlY3RlZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50Lmpzb25Db250ZW50KSB7XHJcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfRkxPV0NIQVJUX0lEXSA9IGV2ZW50LmZsb3dDaGFydElkO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF0gPSBldmVudC5qc29uQ29udGVudDtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk9SR19KU09OQ09OVEVOVF0gPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2xlYXI6ICgpID0+IHtcclxuICAgICAgICBncmFwaC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuICAgICAgfSxcclxuICAgICAgb25EZWxldGVUZW1wbGF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlID0gd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXTtcclxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ERUxFVEVfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0Lk1VU1RfU0VMRUNUX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25TYXZlQXNUZW1wbGF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5TQVZFX0FTX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblJlc2V0VG9UZW1wVGVtcGxhdGU6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV07XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjaGFuZ2VTbmFwTGluZXMoY2hlY2tlZCkge1xyXG4gICAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgICBzbmFwbGluZXMuc3RhcnRMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSB0aGlzLnNuYXBsaW5lcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIGFwcGx5T25TZWxlY3Rpb24obWV0aG9kKSB7XHJcbiAgICAgICAgZ3JhcGguc3RhcnRCYXRjaCgnc2VsZWN0aW9uJyk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBtb2RlbFttZXRob2RdKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ3JhcGguc3RvcEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRvb2xiYXIub24oe1xyXG4gICAgICAndG9qc29uOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b0pTT04sXHJcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXHJcbiAgICAgICdzYXZlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5zYXZlR3JhcGgsXHJcbiAgICAgICdjbGVhcjpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25DbGVhcixcclxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IF8uYmluZChwYXBlci5wcmludCwgcGFwZXIpLFxyXG4gICAgICAnc2F2ZUFzVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uU2F2ZUFzVGVtcGxhdGUsXHJcbiAgICAgICdzZWxlY3RUZW1wbGF0ZTpvcHRpb246c2VsZWN0JzogdG9vbGJhckNvbW1hbmRzLm9uU2VsZWN0ZWQsXHJcbiAgICAgICdkZWxldGVUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25EZWxldGVUZW1wbGF0ZSxcclxuICAgICAgJ3Jlc2V0VG9UZW1wVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uUmVzZXRUb1RlbXBUZW1wbGF0ZSxcclxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5hcHBseU9uU2VsZWN0aW9uLmJpbmQodGhpcywgJ3RvRnJvbnQnKSxcclxuICAgICAgJ3RvLWJhY2s6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9CYWNrJyksXHJcbiAgICAgICdzbmFwbGluZTpjaGFuZ2UnOiB0b29sYmFyQ29tbWFuZHMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXHJcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogcGFwZXIuc2V0R3JpZFNpemUuYmluZChwYXBlcilcclxuICAgIH0pO1xyXG5cclxuICAgIHRvb2xiYXIucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjdG9vbGJhci1jb250YWluZXInKTtcclxuXHJcbiAgICAvLyBjb25zdCB6b29tVG9vbCA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgIC8vICAgLy8gaW5pdGkgYWxpemUgdG9vbHMgd2l0aCBkZWZhdWx0IHNldHRpbmdzXHJcbiAgICAvLyAgIHRvb2xzOiBbJ3pvb21Ub0ZpdCcsICd6b29tSW4nLCAnem9vbU91dCddLFxyXG4gICAgLy8gICByZWZlcmVuY2VzOiB7XHJcbiAgICAvLyAgICAgcGFwZXJTY3JvbGxlcixcclxuICAgIC8vICAgICBjb21tYW5kTWFuYWdlclxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICAvLyB6b29tVG9vbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN6b29tVG9vbGJhcicpO1xyXG5cclxuICAgIG5ldyBqb2ludC51aS5Ub29sdGlwKHtcclxuICAgICAgdGFyZ2V0OiAnW2RhdGEtdG9vbHRpcF0nLFxyXG4gICAgICBjb250ZW50KGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmRhdGFzZXQudG9vbHRpcDtcclxuICAgICAgfSxcclxuICAgICAgdG9wOiAnLmpvaW50LXRvb2xiYXInLFxyXG4gICAgICBwYWRkaW5nOiAxMCxcclxuICAgICAgZGlyZWN0aW9uOiAndG9wJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxyXG4gICAgc3RlbmNpbFxyXG4gICAgICAuZ2V0R3JhcGgoKVxyXG4gICAgICAuZ2V0KCdjZWxscycpXHJcbiAgICAgIC5lYWNoKChjZWxsKSA9PiB7XHJcbiAgICAgICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICAgICAgdGFyZ2V0OiBgLmpvaW50LXN0ZW5jaWwgW21vZGVsLWlkPVwiJHtjZWxsLmlkfVwiXWAsXHJcbiAgICAgICAgICBjb250ZW50OiBjZWxsLmdldCgndHlwZScpLnNwbGl0KCcuJylbMV0sXHJcbiAgICAgICAgICBib3R0b206ICcuam9pbnQtc3RlbmNpbCcsXHJcbiAgICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgcGFkZGluZzogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGpvaW50LnNoYXBlcy5icG1uLmljb25zLCB0aGlzLmJ1aWxkTmV3SWNvbnMoKSk7XHJcbiAgICAvKiBMb2FkICBwcm9jZXNzIGRpZ3JhbSAqL1xyXG4gICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oanNvbkNvbnRlbnQpO1xyXG4gICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcclxuXHJcbiAgICAvKiBTZXQgZyByYXBoIG9iamVjdCAqL1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXSA9IGdyYXBoO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSXSA9IHBhcGVyO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXSA9IHBhcGVyU2Nyb2xsZXI7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuT1JHX0pTT05DT05URU5UXSA9IHRoaXMuanNvbk9yaWdpbmFsQ29udGVudDtcclxuICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ESUFHUkFNX0xPQURFRCwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGROZXdJY29ucyh7IGNvbG9yID0gJyMwMDAnIH0gPSB7fSkge1xyXG4gICAgY29uc3Qgc3ZnSWNvbnMgPSB7XHJcbiAgICAgIG1lc3NhZ2UxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEyIDEyIDE2IDE2XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGQ9XCJNMTIuNSAxNS4zMTN2OS4zNzRoMTV2LTkuMzc1em0wIDBsNy41IDUuNjI0IDcuNS01LjYyNVwiLz48L3N2Zz5gLFxyXG4gICAgICBtZXNzYWdlMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIxMiAxMiAxNiAxNlwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIGQ9XCJNMTIuNSAxNC4zNDRsNy41IDUuNjI1IDcuNS01LjYyNXptMCAuOTM3djkuMzc1aDE1di05LjM3NUwyMCAyMC45MDZ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHRpbWVyMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48ZyBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCI+PGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIyMFwiIHI9XCIxMFwiLz48cGF0aCBkPVwiTTIwIDEwdjNtNS0ybC0xLjUgM201LjUgMWwtMyAxLjVtNCAzLjVoLTNtMiA1bC0zLTEuNU0yNSAyOWwtMS41LTNNMjAgMzB2LTNtLTUgMmwxLjUtM00xMSAyNWwzLTEuNU0xMCAyMGgzbS0yLTVsMyAxLjVtMS01LjVsMS41IDNtNS41LTFsLTIgN2g0XCIvPjwvZz48L3N2Zz5gLFxyXG4gICAgICBjb25kaXRpb25hbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiA+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuNTYzIDExLjU2M2gxNi44NzR2MTYuODc0SDExLjU2M1YxMS41NjNtMi44MTMgMi44MTNoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjV6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGxpbmsxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE0LjQwNiAxOC4xMjVoOC40Mzh2LTIuODEzTDI3LjUzIDIwbC00LjY4NyA0LjY4OHYtMi44MTNoLTkuMzc1di0zLjc1XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGxpbmsyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xNC40MDYgMTguMTI1aDguNDM4di0yLjgxM0wyNy41MyAyMGwtNC42ODcgNC42ODh2LTIuODEzaC05LjM3NXYtMy43NVwiLz48L3N2Zz5gLFxyXG4gICAgICBzaWduYWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMy4xNyAyNC44NTFoMTMuNzA2bC02Ljg1My0xMS44NzktNi44NTQgMTEuODh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHNpZ25hbDI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMy4xNyAyNC44NTFoMTMuNzA2bC02Ljg1My0xMS44NzktNi44NTQgMTEuODh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGVycm9yMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yNi40IDE1LjQ1NWwtMy4yMzggMTIuNThMMTcuNyAxOC4zNyAxMy43NiAyMy44bDMuNDc4LTEyLjQxMiA1LjU3NiA4LjcyIDMuNTg2LTQuNjUyelwiLz48L3N2Zz5gLFxyXG4gICAgICBlcnJvcjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGVzY2FsYXRpb24xOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTIwIDEzLjIxOWw1LjYyNSAxNC4wNjJMMjAgMjAuOTUzbC01LjYyNSA2LjMyOHpcIi8+PC9zdmc+YCxcclxuICAgICAgZXNjYWxhdGlvbjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTIwIDEzLjIxOWw1LjYyNSAxNC4wNjJMMjAgMjAuOTUzbC01LjYyNSA2LjMyOHpcIi8+PC9zdmc+YCxcclxuICAgICAgdGVybWluYXRpb24xOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMTAuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PC9zdmc+YCxcclxuICAgICAgdGVybWluYXRpb24yOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMTAuNVwiIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGNvbXBlbnNhdGlvbjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTkgMTMuNDM4djEzLjEyNEwxMi40MzcgMjAgMTkgMTMuNDM3bTYuNTYzIDB2MTMuMTI2TDE5IDIwbDYuNTYzLTYuNTYzelwiLz48L3N2Zz5gLFxyXG4gICAgICBjb21wZW5zYXRpb24yOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGNhbmNlbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMjg0IDE0LjI3NGwyLjg2Ny0yLjg2OCA1LjczNSA1LjczNSA1LjczNS01LjczNSAyLjg2OCAyLjg2OC01LjczNSA1LjczNSA1LjczNSA1LjczNS0yLjg2OCAyLjg2Ny01LjczNS01LjczNS01LjczNSA1LjczNS0yLjg2Ny0yLjg2NyA1LjczNS01LjczNS01LjczNS01LjczNXpcIi8+PC9zdmc+YCxcclxuICAgICAgY2FuY2VsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMjg0IDE0LjI3NGwyLjg2Ny0yLjg2OCA1LjczNSA1LjczNSA1LjczNS01LjczNSAyLjg2OCAyLjg2OC01LjczNSA1LjczNSA1LjczNSA1LjczNS0yLjg2OCAyLjg2Ny01LjczNS01LjczNS01LjczNSA1LjczNS0yLjg2Ny0yLjg2NyA1LjczNS01LjczNS01LjczNS01LjczNXpcIi8+PC9zdmc+YCxcclxuICAgICAgbXVsdGlwbGUxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI0LjUyIDI2LjM5aC05LjQ0M2wtMi45MTgtOC45ODIgNy42NC01LjU1IDcuNjQgNS41NTEtMi45MTkgOC45OHpcIi8+PC9zdmc+YCxcclxuICAgICAgbXVsdGlwbGUyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yNC41MiAyNi4zOWgtOS40NDNsLTIuOTE4LTguOTgyIDcuNjQtNS41NSA3LjY0IDUuNTUxLTIuOTE5IDguOTh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHBhcmFsbGVsMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4zNDQgMTcuMjAzdjUuNjI1aDUuODZ2Ni4zMjhoNS42MjR2LTYuMzI4aDYuMzI4di01LjYyNWgtNi4zMjh2LTUuODZoLTUuNjI1djUuODZ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHBhcmFsbGVsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMzQ0IDE3LjIwM3Y1LjYyNWg1Ljg2djYuMzI4aDUuNjI0di02LjMyOGg2LjMyOHYtNS42MjVoLTYuMzI4di01Ljg2aC01LjYyNXY1Ljg2elwiLz48L3N2Zz5gXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGljb25zID0ge307XHJcblxyXG4gICAgT2JqZWN0LmtleXMoc3ZnSWNvbnMpLmZvckVhY2goKGljb25OYW1lKSA9PiB7XHJcbiAgICAgIGljb25zW2ljb25OYW1lXSA9IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnSWNvbnNbaWNvbk5hbWVdKX1gO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaWNvbnM7XHJcbiAgfVxyXG5cclxuICBsb2FkUHJvY2Vzc0RpYWdyYW0oanNvbkNvbnRlbnQ/OiBzdHJpbmcpIHtcclxuICAgIGlmICghanNvbkNvbnRlbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZ3JhcGguZnJvbUpTT04oanNvbkNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbVRlbXBsYXRlKGZsb3dDaGFydElkPzogc3RyaW5nLCBkaWFncmFtVGVtcGxhdGU/OiBhbnkpIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICAgIGluZGV4OiAxLFxyXG4gICAgICAgICAgY29udGVudDogZGlhZ3JhbVRlbXBsYXRlLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgIGZsb3dDaGFydElkLFxyXG4gICAgICAgICAgbmFtZTogZGlhZ3JhbVRlbXBsYXRlLm5hbWUsXHJcbiAgICAgICAgICBqc29uQ29udGVudDogZGlhZ3JhbVRlbXBsYXRlLmpzb25Db250ZW50LFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdEl0ZW0oZmxvd0NoYXJ0SWQ/OiBzdHJpbmcpIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShcclxuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaS5mbG93Q2hhcnRJZCA9PT0gZmxvd0NoYXJ0SWQ7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZENlbGxWaWV3KGNlbGxWaWV3KSB7XHJcbiAgICBpZiAoY2VsbFZpZXcpIHtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBjZWxsVmlldztcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMudHlwZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSUQsICcqJyk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wR3JhcGgoKSB7XHJcbiAgICBpZiAodGhpcy5qc29uVGVtcENvbnRlbnQpIHtcclxuICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oSlNPTi5wYXJzZSh0aGlzLmpzb25UZW1wQ29udGVudCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1RlbXAgPSB0cnVlO1xyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldE9yaWdpbkZvclNlbGYoKSB7XHJcbiAgICByZXR1cm4gJyonO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XHJcbiAgICAgICAgbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LW9wdGlvbi1jb250ZW50YClbMF0uaW5uZXJIVE1MID0gRmxvd0NoYXJ0Q29uc3QuU0VMRUNUX1RFTVBMQVRFO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNTaG93Q29uZmlybU1lc3NhZ2UoKSB7XHJcbiAgICBjb25zdCBteUdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgIGNvbnN0IGpzb24gPSBteUdyYXBoLnRvSlNPTigpO1xyXG4gICAgaWYgKGpzb24uY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0gPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJhbnNpdGlvblBvaW50KGpzb25Db250ZW50OiBvYmplY3QsIHBhcGVyU2Nyb2xsZXI6IGFueSkge1xyXG4gICAgaWYgKGpzb25Db250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGNlbGxzID0ganNvbkNvbnRlbnRbYGNlbGxzYF07XHJcbiAgICAgIGlmIChjZWxscykge1xyXG4gICAgICAgIGxldCB4ID0gMDtcclxuICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGUucG9zaXRpb24gJiYgZS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnggPCB4KSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi55IDwgeSkge1xyXG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHggIT09IDAgJiYgeSAhPT0gMCkge1xyXG4gICAgICAgICAgeCA9IHggPiAyMCA/IHggLSAyMCA6IHg7XHJcbiAgICAgICAgICB5ID0geSA+IDIwID8geSAtIDIwIDogeTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIudHJhbnNpdGlvblRvUG9pbnQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2hhcGVGdW5jdGlvbmFsaXR5KExBTkc6IGFueSkge1xyXG4gICAgY29uc3QgbXlDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgaWYgKCEhbXlDZWxsVmlldykge1xyXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcclxuICAgICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORyk7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBteUNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgICAgY2VsbCxcclxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRab29tVG9GaXQoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb21Ub0ZpdCh7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBhcGVyVG9wTGVmdChlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvVG9wTGVmdCh7IHBhZGRpbmc6IDUwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTY3JvbGxUb0NvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgaWYgKGdyYXBoICYmIHBhcGVyU2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcclxuICAgICAgaWYgKGpzb25Db250ZW50T2JqICYmIGpzb25Db250ZW50T2JqLmNlbGxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnNjcm9sbFRvQ29udGVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuY2VudGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVGV4dEluc2lkZShjZWxsOiBhbnkpIHtcclxuICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRXZlbnQnKSB7XHJcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICcyMCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICcyMCUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICc3MCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICc3MCUnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuR2F0ZXdheScgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkNvbnZlcnNhdGlvbicgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkRhdGFPYmplY3QnIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhU3RvcmUnXHJcbiAgICApIHtcclxuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VMaW5rTGFiZWwoY2VsbDogYW55LCBkZWZTaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcclxuICAgICAgbGV0IHJlZlBvcyA9IDA7XHJcbiAgICAgIGNvbnN0IGxpbmtJZCA9IGNlbGwuaWQ7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXHJcbiAgICAgIGdyYXBoLmdldExpbmtzKCkuZXZlcnkoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAobGlua0lkID09PSBlLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZlBvcyArPSAxO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXS5hdHRyaWJ1dGVzLmF0dHJzLnRleHQgJiZcclxuICAgICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10uYXR0cmlidXRlcy5hdHRycy50ZXh0Wydmb250LXNpemUnXVxyXG4gICAgICApIHtcclxuICAgICAgICBzaXplID0gZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XHJcbiAgICAgIH1cclxuICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLnByb3AoJ2xhYmVscy8wL2F0dHJzL2xhYmVsL2ZvbnRTaXplJywgc2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUFsbGlnbWVudChjZWxsOiBhbnksIG9wdDogYW55KSB7XHJcbiAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgb3B0LmRpcmVjdGlvbiAmJlxyXG4gICAgICAob3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcclxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxyXG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tcmlnaHQnIHx8XHJcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS1sZWZ0JylcclxuICAgICkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsQW5jaG9yID0gY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsWyd0ZXh0LWFuY2hvciddO1xyXG4gICAgICB0aGlzLnNldEhlYWRlckF0dHJpYnV0ZShjZWxsLCBoZWFkZXJMYWJlbEFuY2hvciwgaGVpZ2h0KTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBsYXN0IGxhbmUgdmFsdWVcclxuICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZShjZWxsLmF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgY29uc3QgaCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcclxuICAgICAgICBjb25zdCB0ID0gdGhpcy5nZXRUb3RhbExhbmVIZWlnaHQoY2VsbC5hdHRyaWJ1dGVzKTtcclxuICAgICAgICBjb25zdCBiID0gaCAtIHQ7XHJcbiAgICAgICAgaWYgKGIgPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBzID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLnNsaWNlKC0xKVswXS5zaXplICsgYjtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICBjZWxsLmF0dHJpYnV0ZXMubGFuZXNbaW5kZXhdLnNpemUgPSBzO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnNpemUgPSBzO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnRha2VuVXBTcGFjZUJ5TGFuZUFuZFN1YmxhbmVzID0gcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcclxuXHJcbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aCA9PT0gJ2F0dHJzL2hlYWRlckxhYmVsL3RleHQtYW5jaG9yJykge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBvcHQucHJvcGVydHlWYWx1ZTtcclxuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgdGV4dEFuY2hvciwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhlYWRlckF0dHJpYnV0ZShjZWxsOiBhbnksIHRleHRBbmNob3I6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAodGV4dEFuY2hvcikge1xyXG4gICAgICBjYXNlICdlbmQnOlxyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gODtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWlkZGxlJzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAtIDg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVbmRlZmluZWRTaXplKGF0dHJpYnV0ZXMpIHtcclxuICAgIGxldCBiUmVzdWx0ID0gZmFsc2U7XHJcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xyXG4gICAgICAgIGlmICghZS5zaXplKSB7XHJcbiAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcykge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhdHRyaWJ1dGVzLmxhbmVzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5zaXplKSB7XHJcbiAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcbn1cclxuIl19
|
1150
|
+
BpmnService.ɵprov = i0.ɵɵdefineInjectable({ factory: function BpmnService_Factory() { return new BpmnService(); }, token: BpmnService, providedIn: "root" });
|
1151
|
+
BpmnService.decorators = [
|
1152
|
+
{ type: Injectable, args: [{
|
1153
|
+
providedIn: 'root'
|
1154
|
+
},] }
|
1155
|
+
];
|
1156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFLN0UsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUlqQyxNQUFNLE9BQU8sV0FBVztJQUh4QjtRQUlTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHVCQUFrQixHQUFHLEtBQUssQ0FB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R0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNWLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Ozs7WUFwdENGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCBJbnNwZWN0b3JGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi9pbnNwZWN0b3IuZnVuY3Rpb24nO1xyXG5pbXBvcnQgVG9vbGJhckZ1bmN0aW9uIGZyb20gJy4uL2NvbW1vbi9icG1uL3Rvb2xiYXIuZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBGbG93Q2hhcnRDb25zdCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3QnO1xyXG5pbXBvcnQgeyBGbG93Y2hhcnRWaWV3TW9kZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQgZ3VpZEhlbHBlciBmcm9tICcuLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXInO1xyXG5cclxuLyogRGVjbGFyZSBqb2ludGpzIG9iamVjdCAqL1xyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xyXG5sZXQgZ3JhcGg6IGFueTtcclxubGV0IHBhcGVyOiBhbnk7XHJcbmxldCB0b29sYmFyQ29uZmlnOiBhbnk7XHJcbmNvbnN0IGJwbW4yID0gam9pbnQuc2hhcGVzLmJwbW4yO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcG1uU2VydmljZSB7XHJcbiAgcHVibGljIGlzU2F2ZUFzVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEZWxldGVUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XHJcbiAgcHVibGljIGlzVGVtcCA9IHRydWU7XHJcbiAgcHVibGljIGpzb25UZW1wQ29udGVudCA9ICcnO1xyXG4gIHB1YmxpYyBpc1Jlc2V0ID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2VsZWN0ZWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBqc29uT3JpZ2luYWxDb250ZW50ID0gJyc7XHJcblxyXG4gIGJ1aWxkRGlhZ3JhbShcclxuICAgIGRpYWdyYW1UZW1wbGF0ZXM6IGFueSxcclxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxyXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXHJcbiAgICBqc29uQ29udGVudDogYW55LFxyXG4gICAgZWRpdE1vZGU6IGFueSxcclxuICAgIExBTkc6IGFueVxyXG4gICkge1xyXG4gICAgd2luZG93W2BJU19OT1RfU0hPV19BR0FJTmBdID0gZmFsc2U7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuRURJVF9NT0RFXSA9IGVkaXRNb2RlO1xyXG4gICAgam9pbnQuc2V0VGhlbWUoYnBtblRoZW1lKTtcclxuXHJcbiAgICBpZiAoanNvbkNvbnRlbnQpIHtcclxuICAgICAganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKGpzb25Db250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGpzb25Db250ZW50ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ2RBdXRoID0gd2luZG93W2BnZEF1dGhgXTtcclxuICAgIGNvbnN0IGdkTG9hZCA9IHdpbmRvd1tgZ2RMb2FkYF07XHJcbiAgICBjb25zdCBnZFNhdmUgPSB3aW5kb3dbYGdkU2F2ZWBdO1xyXG4gICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORyk7XHJcblxyXG4gICAgbGV0IGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xyXG5cclxuICAgIHRvb2xiYXJDb25maWcgPSBUb29sYmFyRnVuY3Rpb24uZ2V0VG9vbGJhckNvbmZpZ3VyYXRpb24oTEFORyk7XHJcbiAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbjogQWRkIHRlbXBsYXRlIGxpc3QgKi9cclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzICYmIGRpYWdyYW1UZW1wbGF0ZXMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxyXG4gICAgICAgICAgICBjb250ZW50OiBpdGVtLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICBqc29uQ29udGVudDogaXRlbS5qc29uQ29udGVudCxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHguaW5kZXggPT09IG9wdGlvbi5pbmRleDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBncmFwaCA9IG5ldyBqb2ludC5kaWEuR3JhcGgoeyB0eXBlOiAnYnBtbicgfSk7XHJcbiAgICBjb25zdCBjb21tYW5kTWFuYWdlciA9IG5ldyBqb2ludC5kaWEuQ29tbWFuZE1hbmFnZXIoeyBncmFwaCB9KTtcclxuICAgIGNvbnN0IGtleWJvYXJkID0gbmV3IGpvaW50LnVpLktleWJvYXJkKCk7XHJcbiAgICBjb25zdCBjbGlwYm9hcmQgPSBuZXcgam9pbnQudWkuQ2xpcGJvYXJkKCk7XHJcblxyXG4gICAgcGFwZXIgPSBuZXcgam9pbnQuZGlhLlBhcGVyKHtcclxuICAgICAgd2lkdGg6IDgwMCxcclxuICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICAgIG1vZGVsOiBncmFwaCxcclxuICAgICAgZ3JpZFNpemU6IDEwLFxyXG4gICAgICBkcmF3R3JpZDogdHJ1ZSxcclxuICAgICAgYXN5bmM6IHRydWUsXHJcbiAgICAgIHNvcnRpbmc6IGpvaW50LmRpYS5QYXBlci5zb3J0aW5nLkFQUFJPWCxcclxuICAgICAgaW50ZXJhY3RpdmU6IHsgbGlua01vdmU6IGZhbHNlIH0sXHJcbiAgICAgIHNuYXBMYWJlbHM6IHRydWUsXHJcbiAgICAgIC8vIENvbm5lY3Rpb25zXHJcbiAgICAgIGRlZmF1bHRMaW5rKGVsZW1lbnRWaWV3KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBicG1uMi5GbG93KHtcclxuICAgICAgICAgIHo6IGVsZW1lbnRWaWV3Lm1vZGVsLmdldCgneicpIC0gMSxcclxuICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgIGxpbmU6IHtcclxuICAgICAgICAgICAgICBmbG93VHlwZTogJ3NlcXVlbmNlJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHZhbGlkYXRlQ29ubmVjdGlvbihjZWxsVmlld1MsIG1hZ25ldFMsIGNlbGxWaWV3VCwgbWFnbmV0VCwgZW5kKSB7XHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gY2VsbFZpZXdTLm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNlbGxWaWV3VC5tb2RlbDtcclxuICAgICAgICAvLyBkb24ndCBhbGxvdyBsb29wIGxpbmtzXHJcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGxpbmsgdG8gbGluayBjb25uZWN0aW9uXHJcbiAgICAgICAgaWYgKHNvdXJjZS5pc0xpbmsoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0LmlzTGluaygpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGdyb3VwIGNvbm5lY3Rpb25zXHJcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmdldCgndHlwZScpO1xyXG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnYnBtbjIuR3JvdXAnIHx8IHRhcmdldFR5cGUgPT09ICdicG1uMi5Hcm91cCcpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHRBbmNob3I6IHtcclxuICAgICAgICBuYW1lOiAncGVycGVuZGljdWxhcidcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdENvbm5lY3Rpb25Qb2ludDoge1xyXG4gICAgICAgIG5hbWU6ICdib3VuZGFyeScsXHJcbiAgICAgICAgYXJnczogeyBzdHJva2U6IHRydWUgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyBFbWJlZGRpbmdcclxuICAgICAgZW1iZWRkaW5nTW9kZTogdHJ1ZSxcclxuICAgICAgZnJvbnRQYXJlbnRPbmx5OiBmYWxzZSxcclxuICAgICAgdmFsaWRhdGVFbWJlZGRpbmcoY2hpbGRWaWV3LCBwYXJlbnRWaWV3KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHBhcmVudFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgY29uc3QgY2hpbGRUeXBlID0gY2hpbGRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xyXG4gICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJyAmJiBjaGlsZFR5cGUgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdicG1uMi5BY3Rpdml0eScgJiYgY2hpbGRUeXBlID09PSAnYnBtbjIuRXZlbnQnKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICAvLyBIaWdobGlnaHRpbmdcclxuICAgICAgaGlnaGxpZ2h0aW5nOiB7XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgbmFtZTogJ21hc2snLFxyXG4gICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogJyMzNDk4ZGInLFxyXG4gICAgICAgICAgICAgICdzdHJva2Utd2lkdGgnOiAzLFxyXG4gICAgICAgICAgICAgICdzdHJva2UtbGluZWpvaW4nOiAncm91bmQnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pLm9uKHtcclxuICAgICAgJ2JsYW5rOnBvaW50ZXJkb3duJzogKGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIGNsb3NlVG9vbHMoKTtcclxuICAgICAgICAvLyBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcclxuICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2JsYW5rOmNvbnRleHRtZW51JzogKGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2xpbms6bW91c2VlbnRlcic6IChsaW5rVmlldykgPT4ge1xyXG4gICAgICAgIC8vIE9wZW4gdG9vbCBvbmx5IGlmIHRoZXJlIGlzIG5vbmUgeWV0XHJcbiAgICAgICAgaWYgKGxpbmtWaWV3Lmhhc1Rvb2xzKCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgICAgIG5hbWU6ICdsaW5rLWhvdmVyJyxcclxuICAgICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcyh7IHZlcnRleEFkZGluZzogZmFsc2UgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnbGluazptb3VzZWxlYXZlJzogKGxpbmtWaWV3KSA9PiB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIGhvdmVyIHRvb2wsIG5vdCB0aGUgcG9pbnRlcmRvd24gdG9vbFxyXG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygnbGluay1ob3ZlcicpKSB7XHJcbiAgICAgICAgICBsaW5rVmlldy5yZW1vdmVUb29scygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdsaW5rOmNvbm5lY3QnOiAobGlua1ZpZXcpID0+IHtcclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGxpbmsgdHlwZSBiYXNlZCBvbiB0aGUgY29ubmVjdGVkIGVsZW1lbnRzXHJcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtWaWV3Lm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGxpbmsuZ2V0U291cmNlQ2VsbCgpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGxpbmsuZ2V0VGFyZ2V0Q2VsbCgpO1xyXG4gICAgICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluay5zZXQoJ3onLCAtMSk7XHJcbiAgICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlLmdldCgndHlwZScpLCB0YXJnZXQuZ2V0KCd0eXBlJyldO1xyXG4gICAgICAgIGNvbnN0IGxpbmtUeXBlID0gbGluay5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQW5ub3RhdGlvbicpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQW5ub3RhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQ29udmVyc2F0aW9uJykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkNvbnZlcnNhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuRGF0YU9iamVjdCcpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhU3RvcmUnKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5EYXRhQXNzb2NpYXRpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlua1R5cGUgIT09ICdicG1uMi5GbG93Jykge1xyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkZsb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc25hcGxpbmVzID0gbmV3IGpvaW50LnVpLlNuYXBsaW5lcyh7IHBhcGVyIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSBuZXcgam9pbnQudWkuUGFwZXJTY3JvbGxlcih7XHJcbiAgICAgIGF1dG9SZXNpemVQYXBlcjogdHJ1ZSxcclxuICAgICAgcGFkZGluZzogMjAsXHJcbiAgICAgIHBhcGVyLFxyXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XHJcblxyXG4gICAgcGFwZXIub24oJ2JsYW5rOm1vdXNld2hlZWwnLCBfLnBhcnRpYWwob25Nb3VzZXdoZWVsLCBudWxsKSwgdGhpcyk7XHJcbiAgICBwYXBlci5vbignY2VsbDptb3VzZXdoZWVsJywgb25Nb3VzZXdoZWVsLCB0aGlzKTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb20oZGVsdGEgKiAwLjEsIHsgbWluOiAwLjIsIG1heDogNSwgZ3JpZDogMC4xLCBveDogeCwgb3k6IHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU0VMRUNUSU9OICovXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgam9pbnQudWkuU2VsZWN0aW9uKHtcclxuICAgICAgcGFwZXIsXHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxyXG4gICAgfSk7XHJcblxyXG4gICAgLyogU1RFTkNJTCAqL1xyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWwgPSBuZXcgam9pbnQudWkuU3RlbmNpbCh7XHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICBwYXBlcixcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgIGRyYWdFbmRDbG9uZShjZWxsKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBjZWxsLmNsb25lKCk7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xyXG5cclxuICAgICAgICAvLyBzb21lIHR5cGVzIG9mIHRoZSBlbGVtZW50cyBuZWVkIHJlc2l6aW5nIGFmdGVyIHRoZXkgYXJlIGRyb3BwZWRcclxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcclxuICAgICAgICBpZiAoc2l6ZU11bHRpcGxpZXIpIHtcclxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2l6ZSA9IGNsb25lLmdldCgnc2l6ZScpO1xyXG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xyXG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luYWxTaXplLndpZHRoICogc2l6ZU11bHRpcGxpZXIsXHJcbiAgICAgICAgICAgIGhlaWdodDogb3JpZ2luYWxTaXplLmhlaWdodCAqIHNpemVNdWx0aXBsaWVyXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgICBjbG9uZS5zZXQoJ3BhZGRpbmcnLCB7IHRvcDogMCwgbGVmdDogMzAsIHJpZ2h0OiAwLCBib3R0b206IDAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIHN0ZW5jaWwubG9hZChbXHJcbiAgICAgIG5ldyBicG1uMi5BY3Rpdml0eSh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkdhdGV3YXkoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5FdmVudCh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkNvbnZlcnNhdGlvbih7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkRhdGFPYmplY3Qoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5EYXRhU3RvcmUoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Bbm5vdGF0aW9uKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Hcm91cCh7XHJcbiAgICAgICAgc2l6ZToge1xyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgaGVpZ2h0OiA4MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHRleHQ6ICdHcm91cCcsXHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgLy8gTGVnYWN5IEJQTU4gU2hhcGVzXHJcbiAgICAgIG5ldyBicG1uMi5IZWFkZXJlZFBvb2woe1xyXG4gICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxyXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDUwIH0sXHJcbiAgICAgICAgbGFuZXM6IFt7IGxhYmVsOiAnTGFuZSAxJyB9LCB7IGxhYmVsOiAnTGFuZSAyJyB9XSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keTogeyBmaWxsOiAnI0ZGRkZGRicgfSxcclxuICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uQ2hvcmVvZ3JhcGh5KHtcclxuICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGpvaW50LnNoYXBlcy5icG1uLk1lc3NhZ2Uoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICB0ZXh0OiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXSk7XHJcblxyXG4gICAgam9pbnQubGF5b3V0LkdyaWRMYXlvdXQubGF5b3V0KHN0ZW5jaWwuZ2V0R3JhcGgoKSwge1xyXG4gICAgICBjb2x1bW5zOiAxMDAsXHJcbiAgICAgIGNvbHVtbldpZHRoOiAnY29tcGFjdCcsXHJcbiAgICAgIG1hcmdpblg6IDIwLFxyXG4gICAgICBtYXJnaW5ZOiAyMCxcclxuICAgICAgY29sdW1uR2FwOiA0MCxcclxuICAgICAgdmVydGljYWxHYXA6IDIwLFxyXG4gICAgICByZXNpemVUb0ZpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSB0b29sdGlwcyBmb3IgYWxsIHRoZSBzaGFwZXMgaW4gc3RlbmNpbC5cclxuICAgIHN0ZW5jaWwub24oJ2VsZW1lbnQ6ZHJvcCcsIChlbGVtZW50VmlldykgPT4ge1xyXG4gICAgICAvLyBvcGVuIGluc3BlY3RvciBhZnRlciBhIG5ldyBlbGVtZW50IGRyb3BwZWQgZnJvbSBzdGVuY2lsXHJcbiAgICAgIG9wZW5Ub29scyhlbGVtZW50Vmlldyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiBLRVlCT0FSRCAqL1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAga2V5Ym9hcmQub24oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXHJcbiAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrdic6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxyXG4gICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gXy5maWx0ZXIocGFzdGVkQ2VsbHMsIChjZWxsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGwuaXNFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xyXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChlbGVtZW50cyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3ggc2hpZnQrZGVsZXRlJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2RlbGV0ZSBiYWNrc3BhY2UnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBncmFwaC5yZW1vdmVDZWxscyhzZWxlY3Rpb24uY29sbGVjdGlvbi50b0FycmF5KCkpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb21tYW5kTWFuYWdlci51bmRvKCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwreSc6ICgpID0+IHtcclxuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIucmVkbygpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK2EnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGdyYXBoLmdldEVsZW1lbnRzKCkpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCtwbHVzJzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrbWludXMnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oLTAuMiwgeyBtaW46IDAuMiwgZ3JpZDogMC4yIH0pO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5dXA6c2hpZnQnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb3BlblRvb2xzKGNlbGxWaWV3KSB7XHJcbiAgICAgIGlmICghY2VsbFZpZXcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICB3aW5kb3dbYG15X2NlbGxWaWV3YF0gPSBjZWxsVmlldztcclxuICAgICAgY29uc3QgY2VsbCA9IGNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgLy8gY29uc3QgdGFibE5hbWUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuVEFCX05BTUVdO1xyXG4gICAgICAvLyBpZiAodGFibE5hbWUgPT09IEZsb3dDaGFydENvbnN0LlRBQl9CUE1OX0NIT1JFT0dSQVBIWSkge1xyXG4gICAgICAvLyAgIGNvbnN0IGluc3BlY3RvciA9IGpvaW50LnVpLkluc3BlY3Rvci5jcmVhdGUoJyNpbnNwZWN0b3ItY29udGFpbmVyJywge1xyXG4gICAgICAvLyAgICAgY2VsbCxcclxuICAgICAgLy8gICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxyXG4gICAgICAvLyAgICAgZ3JvdXBzOiB7XHJcbiAgICAgIC8vICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgIC8vICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXHJcbiAgICAgIC8vICAgICAgIGZvbnRzaXplOiB7IGluZGV4OiAzIH0sXHJcbiAgICAgIC8vICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH0pO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBjb25zdCBpbnNwZWN0b3IgPSBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcclxuICAgICAgICBjZWxsLFxyXG4gICAgICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxyXG4gICAgICAgIGdyb3Vwczoge1xyXG4gICAgICAgICAgZ2VuZXJhbDogeyBsYWJlbDogdHlwZSwgaW5kZXg6IDEgfSxcclxuICAgICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXHJcbiAgICAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxyXG4gICAgICAgICAgYXBwZWFyYW5jZTogeyBpbmRleDogNCB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KFtdKTtcclxuICAgICAgLy8gQWRkIHRoZSBjZWxsIGludG8gdGhlIHNlbGVjdGlvbiBjb2xsZWN0aW9uIHNpbGVudGx5XHJcbiAgICAgIC8vIHNvIG5vIHNlbGVjdGlvbiBib3ggaXMgcmVuZGVyZWQgYWJvdmUgdGhlIGNlbGxWaWV3LlxyXG4gICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5hZGQoY2VsbCwgeyBzaWxlbnQ6IHRydWUgfSk7XHJcblxyXG4gICAgICBpZiAoY2VsbC5pc0VsZW1lbnQoKSkge1xyXG4gICAgICAgIGxldCBtaW5TaXplO1xyXG5cclxuICAgICAgICBpZiAoY2VsbCBpbnN0YW5jZW9mIGJwbW4yLkhlYWRlcmVkUG9vbCkge1xyXG4gICAgICAgICAgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWluU2l6ZSA9IHsgd2lkdGg6IDMwLCBoZWlnaHQ6IDMwIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmcmVlVHJhbnNmb3JtID0gbmV3IGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0oe1xyXG4gICAgICAgICAgY2VsbFZpZXcsXHJcbiAgICAgICAgICBhbGxvd09ydGhvZ29uYWxSZXNpemU6IGZhbHNlLFxyXG4gICAgICAgICAgYWxsb3dSb3RhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICBtaW5XaWR0aDogbWluU2l6ZS53aWR0aCxcclxuICAgICAgICAgIG1pbkhlaWdodDogbWluU2l6ZS5oZWlnaHRcclxuICAgICAgICB9KS5yZW5kZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcclxuICAgICAgICAgIHR5cGU6ICd0b29sYmFyJyxcclxuICAgICAgICAgIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUsXHJcbiAgICAgICAgICBib3hDb250ZW50OiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNlbGxWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xyXG4gICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2VsbC5pc0xpbmsoKSkge1xyXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgICAgIG5hbWU6ICdsaW5rLXBvaW50ZXJkb3duJyxcclxuICAgICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcygpLFxyXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQW5jaG9yKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5UYXJnZXRBbmNob3IoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxyXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5TZWdtZW50cygpLFxyXG4gICAgICAgICAgICBuZXcgbnMuQm91bmRhcnkoeyBwYWRkaW5nOiAxNSB9KSxcclxuICAgICAgICAgICAgbmV3IG5zLlJlbW92ZSh7IG9mZnNldDogLTIwLCBkaXN0YW5jZTogNDAgfSlcclxuICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2VsbFZpZXcuYWRkVG9vbHModG9vbHNWaWV3KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogUU1TLTIzNjQ6IHNob3cgbGluayBhbmQgcG9pdGVyIGNoYW5nZSB0byBoYW5kICovXHJcbiAgICAgIC8vIGlmICh3aW5kb3dbYGV2ZW50YF1bYHR5cGVgXSA9PT0gJ21vdXNlb3ZlcicgJiYgZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgLy8gICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgam9pbnQtZWxlbWVudGApO1xyXG4gICAgICAvLyAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgY29uc3Qgc2hhcGVJZCA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XHJcbiAgICAgIC8vICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIGlmIChsaXN0W2ldLmF0dHJpYnV0ZXNbMF0ubm9kZVZhbHVlICE9PSBzaGFwZUlkKSB7XHJcbiAgICAgIC8vICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XHJcbiAgICAgIC8vICAgICAgICAgY29udGludWU7XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgY29uc3Qgc2hhcGVEZXRhaWxNb2RlbCA9IHdpbmRvd1tgU0hBUEVfREVUQUlMX01PREVMYF07XHJcbiAgICAgIC8vICAgICAgIGlmICghc2hhcGVEZXRhaWxNb2RlbCkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGNvbnN0IGluZGV4ID0gc2hhcGVEZXRhaWxNb2RlbC5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgLy8gICAgICAgICByZXR1cm4geC5zaGFwZUlkID09PSBzaGFwZUlkO1xyXG4gICAgICAvLyAgICAgICB9KTtcclxuICAgICAgLy8gICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsID0gc2hhcGVEZXRhaWxNb2RlbFtpbmRleF07XHJcbiAgICAgIC8vICAgICAgIGxldCBjb25uZWN0aW9uTmFtZSA9ICcnO1xyXG4gICAgICAvLyAgICAgICBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BY3Rpdml0eSkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19BQ1RJVklUWScpO1xyXG4gICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xyXG4gICAgICAvLyAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOSycpO1xyXG4gICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3MpIHtcclxuICAgICAgLy8gICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXHJcbiAgICAgIC8vICAgICAgICAgc3dpdGNoIChzaGFwZURldGFpbC5kb2N1bWVudE1vZGVsLnJlbGF0ZWRJdGVtc1swXS5pdGVtVHlwZSkge1xyXG4gICAgICAvLyAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19ET0NVTUVOVCcpO1xyXG4gICAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLnByb2Nlc3M6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19QUk9DRVNTJyk7XHJcbiAgICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuYXJlYTpcclxuICAgICAgLy8gICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LX1RPX0FSRUEnKTtcclxuICAgICAgLy8gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5oYW5kYm9vazpcclxuICAgICAgLy8gICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LX1RPX0ZPTERFUicpO1xyXG4gICAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgIT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xyXG4gICAgICAvLyAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAvLyAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgIC8vICAgICAgICAgYm94Q29udGVudDogY29ubmVjdGlvbk5hbWVcclxuICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVuZGVyKCk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZW1vdmUnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncm90YXRlJyk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG5cclxuICAgICAgLy8gICBjb25zdCBzaGFwZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduby1yb3RhdGlvbicpO1xyXG4gICAgICAvLyAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIGlmICghc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5jb250YWlucygnam9pbnQtZnJlZS10cmFuc2Zvcm0nKSkge1xyXG4gICAgICAvLyAgICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuYWRkKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9IGVsc2UgaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdXQnICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIC8vICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgLy8gICAgIGNlbGxWaWV3LFxyXG4gICAgICAvLyAgICAgdGhlbWU6ICdkZWZhdWx0JyxcclxuICAgICAgLy8gICAgIGJveENvbnRlbnQ6ICcnXHJcbiAgICAgIC8vICAgfSk7XHJcbiAgICAgIC8vICAgaGFsby5yZW5kZXIoKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdjbG9uZScpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xyXG4gICAgICAvLyAgIGNvbnN0IHNoYXBlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25vLXJvdGF0aW9uJyk7XHJcbiAgICAgIC8vICAgaWYgKHNoYXBlRWxlbWVudCAmJiBzaGFwZUVsZW1lbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICAgICAgc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5yZW1vdmUoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJyk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAvLyAgIC8qIFFNUy0yMTI1OiBTaG93IHByb2Nlc3MgY29ubmVjdCB0eXBlICovXHJcbiAgICAgIC8vICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NIT1dfQ09OTkVDVFlQRV0gPSB0cnVlO1xyXG4gICAgICAvLyAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICAvLyAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMudHlwZTtcclxuICAgICAgLy8gICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfRkxPV0NIQVJUX0xPQURJTkddID0gdHJ1ZTtcclxuICAgICAgLy8gfVxyXG4gICAgICAvKiBRTVMtMjEyNTogU2hvdyBwcm9jZXNzIGNvbm5lY3QgdHlwZSAqL1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0hPV19DT05ORUNUWVBFXSA9IHRydWU7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGU7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRfTE9BRElOR10gPSB0cnVlO1xyXG4gICAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbiAqL1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvc2VUb29scygpIHtcclxuICAgICAgcGFwZXIucmVtb3ZlVG9vbHMoKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XHJcbiAgICAgIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xyXG4gICAgICBmcmVlVHJhbnNmb3JtID0gbnVsbDtcclxuICAgICAgam9pbnQudWkuSGFsby5jbGVhcihwYXBlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2hvd1N0YXR1cyhtZXNzYWdlLCB0eXBlKSB7XHJcbiAgICAgICQoJy5zdGF0dXMnKS5yZW1vdmVDbGFzcygnaW5mbyBlcnJvciBzdWNjZXNzJykuYWRkQ2xhc3ModHlwZSkuaHRtbChtZXNzYWdlKTtcclxuICAgICAgJCgnI3N0YXR1c2Jhci1jb250YWluZXInKVxyXG4gICAgICAgIC5kZXF1ZXVlKClcclxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXHJcbiAgICAgICAgLmRlbGF5KDMwMDApXHJcbiAgICAgICAgLnF1ZXVlKCgpID0+IHtcclxuICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBsaW5rQ29uc3RydWN0b3IpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcclxuICAgICAgY29uc3QgbGluazIgPSBuZXcgbGlua0NvbnN0cnVjdG9yKHtcclxuICAgICAgICBzb3VyY2U6IGxpbmsuc291cmNlKCksXHJcbiAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldCgpLFxyXG4gICAgICAgIHZlcnRpY2VzOiBsaW5rLnZlcnRpY2VzKClcclxuICAgICAgfSk7XHJcbiAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICAgIGxpbmsyLnNldCgneicsIC0xKTtcclxuICAgICAgbGluazIuYWRkVG8oZ3JhcGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyYXBoLm9uKCdjaGFuZ2UnLCAoY2VsbCwgb3B0KSA9PiB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VUZXh0SW5zaWRlKGNlbGwpO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlTGlua0xhYmVsKGNlbGwsIDEyKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZUFsbGlnbWVudChjZWxsLCBvcHQpO1xyXG4gICAgICBpZiAoIW9wdC5pbnNwZWN0b3IgfHwgIWZyZWVUcmFuc2Zvcm0gfHwgY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbldpZHRoID0gbWluU2l6ZS53aWR0aDtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbkhlaWdodCA9IG1pblNpemUuaGVpZ2h0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLyogVE9PTEJBUiAqL1xyXG4gICAgY29uc3QgdG9vbGJhciA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgICAgdG9vbHM6IHRvb2xiYXJDb25maWcudG9vbHMsXHJcbiAgICAgIHJlZmVyZW5jZXM6IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLFxyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvb2xiYXJDb21tYW5kcyA9IHtcclxuICAgICAgdG9KU09OOiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgd2luZG93RmVhdHVyZXMgPSAnbWVudWJhcj1ubyxsb2NhdGlvbj1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz1ubyc7XHJcbiAgICAgICAgY29uc3Qgd2luZG93TmFtZSA9IF8udW5pcXVlSWQoJ2pzb25fb3V0cHV0Jyk7XHJcbiAgICAgICAgY29uc3QganNvbldpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCB3aW5kb3dOYW1lLCB3aW5kb3dGZWF0dXJlcyk7XHJcblxyXG4gICAgICAgIGpzb25XaW5kb3cuZG9jdW1lbnQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpKTtcclxuICAgICAgfSxcclxuICAgICAgbG9hZEdyYXBoOiAoKSA9PiB7XHJcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcclxuICAgICAgICAgIHNob3dTdGF0dXMoJ2xvYWRpbmcuLicsICdpbmZvJyk7XHJcbiAgICAgICAgICBnZExvYWQoKG5hbWUsIGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcclxuICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTihqc29uKTtcclxuICAgICAgICAgICAgICBjb25zdCBlbEZpbGVOYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xyXG4gICAgICAgICAgICAgIGVsRmlsZU5hbWUudmFsdWUgPSBuYW1lLnJlcGxhY2UoLy5qc29uJC8sICcnKTtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkZWQuJywgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzYXZlR3JhcGg6ICgpID0+IHtcclxuICAgICAgICBnZEF1dGgoKCkgPT4ge1xyXG4gICAgICAgICAgc2hvd1N0YXR1cygnc2F2aW5nLi4nLCAnaW5mbycpO1xyXG4gICAgICAgICAgLy8gbGV0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKS52YWx1ZTtcclxuICAgICAgICAgIGNvbnN0IG5hbWUgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJyk7XHJcbiAgICAgICAgICBnZFNhdmUobmFtZS52YWx1ZSwgSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpLCAoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmVkLicsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnZmFpbGVkLicsICdlcnJvcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCB0cnVlKTtcclxuICAgICAgfSxcclxuICAgICAgb25TZWxlY3RlZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50Lmpzb25Db250ZW50KSB7XHJcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfRkxPV0NIQVJUX0lEXSA9IGV2ZW50LmZsb3dDaGFydElkO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF0gPSBldmVudC5qc29uQ29udGVudDtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk9SR19KU09OQ09OVEVOVF0gPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvbkRlbGV0ZVRlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRFTEVURV9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblNhdmVBc1RlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LlNBVkVfQVNfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uUmVzZXRUb1RlbXBUZW1wbGF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlID0gd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXTtcclxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5SRVNFVF9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNoYW5nZVNuYXBMaW5lcyhjaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAgIHNuYXBsaW5lcy5zdGFydExpc3RlbmluZygpO1xyXG4gICAgICAgICAgc3RlbmNpbC5vcHRpb25zLnNuYXBsaW5lcyA9IHRoaXMuc25hcGxpbmVzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzbmFwbGluZXMuc3RvcExpc3RlbmluZygpO1xyXG4gICAgICAgICAgc3RlbmNpbC5vcHRpb25zLnNuYXBsaW5lcyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgYXBwbHlPblNlbGVjdGlvbihtZXRob2QpIHtcclxuICAgICAgICBncmFwaC5zdGFydEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5tb2RlbHMuZm9yRWFjaCgobW9kZWwpID0+IHtcclxuICAgICAgICAgIG1vZGVsW21ldGhvZF0oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBncmFwaC5zdG9wQmF0Y2goJ3NlbGVjdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdG9vbGJhci5vbih7XHJcbiAgICAgICd0b2pzb246cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnRvSlNPTixcclxuICAgICAgJ2xvYWQ6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmxvYWRHcmFwaCxcclxuICAgICAgJ3NhdmU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnNhdmVHcmFwaCxcclxuICAgICAgJ2NsZWFyOnBvaW50ZXJjbGljayc6IF8uYmluZChncmFwaC5jbGVhciwgZ3JhcGgpLFxyXG4gICAgICAncHJpbnQ6cG9pbnRlcmNsaWNrJzogXy5iaW5kKHBhcGVyLnByaW50LCBwYXBlciksXHJcbiAgICAgICdzYXZlQXNUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25TYXZlQXNUZW1wbGF0ZSxcclxuICAgICAgJ3NlbGVjdFRlbXBsYXRlOm9wdGlvbjpzZWxlY3QnOiB0b29sYmFyQ29tbWFuZHMub25TZWxlY3RlZCxcclxuICAgICAgJ2RlbGV0ZVRlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vbkRlbGV0ZVRlbXBsYXRlLFxyXG4gICAgICAncmVzZXRUb1RlbXBUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25SZXNldFRvVGVtcFRlbXBsYXRlLFxyXG4gICAgICAndG8tZnJvbnQ6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9Gcm9udCcpLFxyXG4gICAgICAndG8tYmFjazpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0JhY2snKSxcclxuICAgICAgJ3NuYXBsaW5lOmNoYW5nZSc6IHRvb2xiYXJDb21tYW5kcy5jaGFuZ2VTbmFwTGluZXMuYmluZCh0aGlzKSxcclxuICAgICAgJ2dyaWQtc2l6ZTpjaGFuZ2UnOiBwYXBlci5zZXRHcmlkU2l6ZS5iaW5kKHBhcGVyKVxyXG4gICAgfSk7XHJcblxyXG4gICAgdG9vbGJhci5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN0b29sYmFyLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIC8vIGNvbnN0IHpvb21Ub29sID0gbmV3IGpvaW50LnVpLlRvb2xiYXIoe1xyXG4gICAgLy8gICAvLyBpbml0aSBhbGl6ZSB0b29scyB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcclxuICAgIC8vICAgdG9vbHM6IFsnem9vbVRvRml0JywgJ3pvb21JbicsICd6b29tT3V0J10sXHJcbiAgICAvLyAgIHJlZmVyZW5jZXM6IHtcclxuICAgIC8vICAgICBwYXBlclNjcm9sbGVyLFxyXG4gICAgLy8gICAgIGNvbW1hbmRNYW5hZ2VyXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIHpvb21Ub29sLnJlbmRlcigpLiRlbC5hcHBlbmRUbygnI3pvb21Ub29sYmFyJyk7XHJcblxyXG4gICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICB0YXJnZXQ6ICdbZGF0YS10b29sdGlwXScsXHJcbiAgICAgIGNvbnRlbnQoZWwpIHtcclxuICAgICAgICByZXR1cm4gZWwuZGF0YXNldC50b29sdGlwO1xyXG4gICAgICB9LFxyXG4gICAgICB0b3A6ICcuam9pbnQtdG9vbGJhcicsXHJcbiAgICAgIHBhZGRpbmc6IDEwLFxyXG4gICAgICBkaXJlY3Rpb246ICd0b3AnXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgdG9vbHRpcHMgZm9yIGFsbCB0aGUgc2hhcGVzIGluIHN0ZW5jaWwuXHJcbiAgICBzdGVuY2lsXHJcbiAgICAgIC5nZXRHcmFwaCgpXHJcbiAgICAgIC5nZXQoJ2NlbGxzJylcclxuICAgICAgLmVhY2goKGNlbGwpID0+IHtcclxuICAgICAgICBuZXcgam9pbnQudWkuVG9vbHRpcCh7XHJcbiAgICAgICAgICB0YXJnZXQ6IGAuam9pbnQtc3RlbmNpbCBbbW9kZWwtaWQ9XCIke2NlbGwuaWR9XCJdYCxcclxuICAgICAgICAgIGNvbnRlbnQ6IGNlbGwuZ2V0KCd0eXBlJykuc3BsaXQoJy4nKVsxXSxcclxuICAgICAgICAgIGJvdHRvbTogJy5qb2ludC1zdGVuY2lsJyxcclxuICAgICAgICAgIGRpcmVjdGlvbjogJ2JvdHRvbScsXHJcbiAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oam9pbnQuc2hhcGVzLmJwbW4uaWNvbnMsIHRoaXMuYnVpbGROZXdJY29ucygpKTtcclxuICAgIC8qIExvYWQgIHByb2Nlc3MgZGlncmFtICovXHJcbiAgICB0aGlzLmxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudCk7XHJcbiAgICB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSk7XHJcbiAgICBwYXBlclNjcm9sbGVyLnBvc2l0aW9uQ29udGVudCgndG9wLWxlZnQnLCB7IHBhZGRpbmc6IDUwLCB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlIH0pO1xyXG5cclxuICAgIC8qIFNldCBnIHJhcGggb2JqZWN0ICovXHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdID0gZ3JhcGg7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdID0gcGFwZXJTY3JvbGxlcjtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5PUkdfSlNPTkNPTlRFTlRdID0gdGhpcy5qc29uT3JpZ2luYWxDb250ZW50O1xyXG4gICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRJQUdSQU1fTE9BREVELCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgfVxyXG5cclxuICBidWlsZE5ld0ljb25zKHsgY29sb3IgPSAnIzAwMCcgfSA9IHt9KSB7XHJcbiAgICBjb25zdCBzdmdJY29ucyA9IHtcclxuICAgICAgbWVzc2FnZTE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMTIgMTIgMTYgMTZcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgZD1cIk0xMi41IDE1LjMxM3Y5LjM3NGgxNXYtOS4zNzV6bTAgMGw3LjUgNS42MjQgNy41LTUuNjI1XCIvPjwvc3ZnPmAsXHJcbiAgICAgIG1lc3NhZ2UyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEyIDEyIDE2IDE2XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgZD1cIk0xMi41IDE0LjM0NGw3LjUgNS42MjUgNy41LTUuNjI1em0wIC45Mzd2OS4zNzVoMTV2LTkuMzc1TDIwIDIwLjkwNnpcIi8+PC9zdmc+YCxcclxuICAgICAgdGltZXIxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxnIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwXCIvPjxwYXRoIGQ9XCJNMjAgMTB2M201LTJsLTEuNSAzbTUuNSAxbC0zIDEuNW00IDMuNWgtM20yIDVsLTMtMS41TTI1IDI5bC0xLjUtM00yMCAzMHYtM20tNSAybDEuNS0zTTExIDI1bDMtMS41TTEwIDIwaDNtLTItNWwzIDEuNW0xLTUuNWwxLjUgM201LjUtMWwtMiA3aDRcIi8+PC9nPjwvc3ZnPmAsXHJcbiAgICAgIGNvbmRpdGlvbmFsMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiID48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS41NjMgMTEuNTYzaDE2Ljg3NHYxNi44NzRIMTEuNTYzVjExLjU2M20yLjgxMyAyLjgxM2gxMS4yNW0tMTEuMjUgMy43NWgxMS4yNW0tMTEuMjUgMy43NWgxMS4yNW0tMTEuMjUgMy43NWgxMS4yNXpcIi8+PC9zdmc+YCxcclxuICAgICAgbGluazE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTQuNDA2IDE4LjEyNWg4LjQzOHYtMi44MTNMMjcuNTMgMjBsLTQuNjg3IDQuNjg4di0yLjgxM2gtOS4zNzV2LTMuNzVcIi8+PC9zdmc+YCxcclxuICAgICAgbGluazI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE0LjQwNiAxOC4xMjVoOC40Mzh2LTIuODEzTDI3LjUzIDIwbC00LjY4NyA0LjY4OHYtMi44MTNoLTkuMzc1di0zLjc1XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHNpZ25hbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTEzLjE3IDI0Ljg1MWgxMy43MDZsLTYuODUzLTExLjg3OS02Ljg1NCAxMS44OHpcIi8+PC9zdmc+YCxcclxuICAgICAgc2lnbmFsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiICB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTEzLjE3IDI0Ljg1MWgxMy43MDZsLTYuODUzLTExLjg3OS02Ljg1NCAxMS44OHpcIi8+PC9zdmc+YCxcclxuICAgICAgZXJyb3IxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGVycm9yMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjYuNCAxNS40NTVsLTMuMjM4IDEyLjU4TDE3LjcgMTguMzcgMTMuNzYgMjMuOGwzLjQ3OC0xMi40MTIgNS41NzYgOC43MiAzLjU4Ni00LjY1MnpcIi8+PC9zdmc+YCxcclxuICAgICAgZXNjYWxhdGlvbjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjAgMTMuMjE5bDUuNjI1IDE0LjA2MkwyMCAyMC45NTNsLTUuNjI1IDYuMzI4elwiLz48L3N2Zz5gLFxyXG4gICAgICBlc2NhbGF0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjAgMTMuMjE5bDUuNjI1IDE0LjA2MkwyMCAyMC45NTNsLTUuNjI1IDYuMzI4elwiLz48L3N2Zz5gLFxyXG4gICAgICB0ZXJtaW5hdGlvbjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIyMFwiIHI9XCIxMC41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz48L3N2Zz5gLFxyXG4gICAgICB0ZXJtaW5hdGlvbjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIyMFwiIHI9XCIxMC41XCIgZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PC9zdmc+YCxcclxuICAgICAgY29tcGVuc2F0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGNvbXBlbnNhdGlvbjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE5IDEzLjQzOHYxMy4xMjRMMTIuNDM3IDIwIDE5IDEzLjQzN202LjU2MyAwdjEzLjEyNkwxOSAyMGw2LjU2My02LjU2M3pcIi8+PC9zdmc+YCxcclxuICAgICAgY2FuY2VsMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4yODQgMTQuMjc0bDIuODY3LTIuODY4IDUuNzM1IDUuNzM1IDUuNzM1LTUuNzM1IDIuODY4IDIuODY4LTUuNzM1IDUuNzM1IDUuNzM1IDUuNzM1LTIuODY4IDIuODY3LTUuNzM1LTUuNzM1LTUuNzM1IDUuNzM1LTIuODY3LTIuODY3IDUuNzM1LTUuNzM1LTUuNzM1LTUuNzM1elwiLz48L3N2Zz5gLFxyXG4gICAgICBjYW5jZWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4yODQgMTQuMjc0bDIuODY3LTIuODY4IDUuNzM1IDUuNzM1IDUuNzM1LTUuNzM1IDIuODY4IDIuODY4LTUuNzM1IDUuNzM1IDUuNzM1IDUuNzM1LTIuODY4IDIuODY3LTUuNzM1LTUuNzM1LTUuNzM1IDUuNzM1LTIuODY3LTIuODY3IDUuNzM1LTUuNzM1LTUuNzM1LTUuNzM1elwiLz48L3N2Zz5gLFxyXG4gICAgICBtdWx0aXBsZTE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjQuNTIgMjYuMzloLTkuNDQzbC0yLjkxOC04Ljk4MiA3LjY0LTUuNTUgNy42NCA1LjU1MS0yLjkxOSA4Ljk4elwiLz48L3N2Zz5gLFxyXG4gICAgICBtdWx0aXBsZTI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI0LjUyIDI2LjM5aC05LjQ0M2wtMi45MTgtOC45ODIgNy42NC01LjU1IDcuNjQgNS41NTEtMi45MTkgOC45OHpcIi8+PC9zdmc+YCxcclxuICAgICAgcGFyYWxsZWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjM0NCAxNy4yMDN2NS42MjVoNS44NnY2LjMyOGg1LjYyNHYtNi4zMjhoNi4zMjh2LTUuNjI1aC02LjMyOHYtNS44NmgtNS42MjV2NS44NnpcIi8+PC9zdmc+YCxcclxuICAgICAgcGFyYWxsZWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4zNDQgMTcuMjAzdjUuNjI1aDUuODZ2Ni4zMjhoNS42MjR2LTYuMzI4aDYuMzI4di01LjYyNWgtNi4zMjh2LTUuODZoLTUuNjI1djUuODZ6XCIvPjwvc3ZnPmBcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaWNvbnMgPSB7fTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyhzdmdJY29ucykuZm9yRWFjaCgoaWNvbk5hbWUpID0+IHtcclxuICAgICAgaWNvbnNbaWNvbk5hbWVdID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbCwke2VuY29kZVVSSUNvbXBvbmVudChzdmdJY29uc1tpY29uTmFtZV0pfWA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpY29ucztcclxuICB9XHJcblxyXG4gIGxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudD86IHN0cmluZykge1xyXG4gICAgaWYgKCFqc29uQ29udGVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBncmFwaC5mcm9tSlNPTihqc29uQ29udGVudCk7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVGVtcGxhdGUoZmxvd0NoYXJ0SWQ/OiBzdHJpbmcsIGRpYWdyYW1UZW1wbGF0ZT86IGFueSkge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgaW5kZXg6IDEsXHJcbiAgICAgICAgICBjb250ZW50OiBkaWFncmFtVGVtcGxhdGUudGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgZmxvd0NoYXJ0SWQsXHJcbiAgICAgICAgICBuYW1lOiBkaWFncmFtVGVtcGxhdGUubmFtZSxcclxuICAgICAgICAgIGpzb25Db250ZW50OiBkaWFncmFtVGVtcGxhdGUuanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0SXRlbShmbG93Q2hhcnRJZD86IHN0cmluZykge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKFxyXG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KChpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpLmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRlbXBHcmFwaCgpIHtcclxuICAgIGlmICh0aGlzLmpzb25UZW1wQ29udGVudCkge1xyXG4gICAgICB0aGlzLmxvYWRQcm9jZXNzRGlhZ3JhbShKU09OLnBhcnNlKHRoaXMuanNvblRlbXBDb250ZW50KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzVGVtcCA9IHRydWU7XHJcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JpZ2luRm9yU2VsZigpIHtcclxuICAgIHJldHVybiAnKic7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1zZWxlY3Rpb25gKVswXTtcclxuICAgICAgICBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtb3B0aW9uLWNvbnRlbnRgKVswXS5pbm5lckhUTUwgPSBGbG93Q2hhcnRDb25zdC5TRUxFQ1RfVEVNUExBVEU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBpc1Nob3dDb25maXJtTWVzc2FnZSgpIHtcclxuICAgIGNvbnN0IG15R3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgY29uc3QganNvbiA9IG15R3JhcGgudG9KU09OKCk7XHJcbiAgICBpZiAoanNvbi5jZWxscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRUcmFuc2l0aW9uUG9pbnQoanNvbkNvbnRlbnQ6IG9iamVjdCwgcGFwZXJTY3JvbGxlcjogYW55KSB7XHJcbiAgICBpZiAoanNvbkNvbnRlbnQpIHtcclxuICAgICAgY29uc3QgY2VsbHMgPSBqc29uQ29udGVudFtgY2VsbHNgXTtcclxuICAgICAgaWYgKGNlbGxzKSB7XHJcbiAgICAgICAgbGV0IHggPSAwO1xyXG4gICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICBjZWxscy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZS5wb3NpdGlvbiAmJiBlLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcclxuICAgICAgICAgICAgICB4ID0gZS5wb3NpdGlvbi54O1xyXG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGUucG9zaXRpb24ueCA8IHgpIHtcclxuICAgICAgICAgICAgICB4ID0gZS5wb3NpdGlvbi54O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnkgPCB5KSB7XHJcbiAgICAgICAgICAgICAgeSA9IGUucG9zaXRpb24ueTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoeCAhPT0gMCAmJiB5ICE9PSAwKSB7XHJcbiAgICAgICAgICB4ID0geCA+IDIwID8geCAtIDIwIDogeDtcclxuICAgICAgICAgIHkgPSB5ID4gMjAgPyB5IC0gMjAgOiB5O1xyXG4gICAgICAgICAgcGFwZXJTY3JvbGxlci50cmFuc2l0aW9uVG9Qb2ludCh4LCB5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5TaGFwZUZ1bmN0aW9uYWxpdHkoTEFORzogYW55KSB7XHJcbiAgICBjb25zdCBteUNlbGxWaWV3ID0gd2luZG93W2BteV9jZWxsVmlld2BdO1xyXG4gICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORyk7XHJcbiAgICBjb25zdCBjZWxsID0gbXlDZWxsVmlldy5tb2RlbDtcclxuICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xyXG4gICAgY29uc3QgaW5zcGVjdG9yID0gam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgIGNlbGwsXHJcbiAgICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxyXG4gICAgICBncm91cHM6IHtcclxuICAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxyXG4gICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXHJcbiAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRab29tVG9GaXQoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb21Ub0ZpdCh7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBhcGVyVG9wTGVmdChlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvVG9wTGVmdCh7IHBhZGRpbmc6IDUwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTY3JvbGxUb0NvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgaWYgKGdyYXBoICYmIHBhcGVyU2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcclxuICAgICAgaWYgKGpzb25Db250ZW50T2JqICYmIGpzb25Db250ZW50T2JqLmNlbGxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnNjcm9sbFRvQ29udGVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuY2VudGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVGV4dEluc2lkZShjZWxsOiBhbnkpIHtcclxuICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRXZlbnQnKSB7XHJcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICcyMCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICcyMCUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICc3MCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICc3MCUnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuR2F0ZXdheScgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkNvbnZlcnNhdGlvbicgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkRhdGFPYmplY3QnIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhU3RvcmUnXHJcbiAgICApIHtcclxuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VMaW5rTGFiZWwoY2VsbDogYW55LCBkZWZTaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcclxuICAgICAgbGV0IHJlZlBvcyA9IDA7XHJcbiAgICAgIGNvbnN0IGxpbmtJZCA9IGNlbGwuaWQ7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXHJcbiAgICAgIGdyYXBoLmdldExpbmtzKCkuZXZlcnkoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAobGlua0lkID09PSBlLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZlBvcyArPSAxO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXS5hdHRyaWJ1dGVzLmF0dHJzLnRleHQgJiZcclxuICAgICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10uYXR0cmlidXRlcy5hdHRycy50ZXh0Wydmb250LXNpemUnXVxyXG4gICAgICApIHtcclxuICAgICAgICBzaXplID0gZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XHJcbiAgICAgIH1cclxuICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLnByb3AoJ2xhYmVscy8wL2F0dHJzL2xhYmVsL2ZvbnRTaXplJywgc2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUFsbGlnbWVudChjZWxsOiBhbnksIG9wdDogYW55KSB7XHJcbiAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgb3B0LmRpcmVjdGlvbiAmJlxyXG4gICAgICAob3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcclxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxyXG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tcmlnaHQnIHx8XHJcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS1sZWZ0JylcclxuICAgICkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsQW5jaG9yID0gY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsWyd0ZXh0LWFuY2hvciddO1xyXG4gICAgICB0aGlzLnNldEhlYWRlckF0dHJpYnV0ZShjZWxsLCBoZWFkZXJMYWJlbEFuY2hvciwgaGVpZ2h0KTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBsYXN0IGxhbmUgdmFsdWVcclxuICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZShjZWxsLmF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgY29uc3QgaCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcclxuICAgICAgICBjb25zdCB0ID0gdGhpcy5nZXRUb3RhbExhbmVIZWlnaHQoY2VsbC5hdHRyaWJ1dGVzKTtcclxuICAgICAgICBjb25zdCBiID0gaCAtIHQ7XHJcbiAgICAgICAgaWYgKGIgPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBzID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLnNsaWNlKC0xKVswXS5zaXplICsgYjtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICBjZWxsLmF0dHJpYnV0ZXMubGFuZXNbaW5kZXhdLnNpemUgPSBzO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnNpemUgPSBzO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnRha2VuVXBTcGFjZUJ5TGFuZUFuZFN1YmxhbmVzID0gcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcclxuXHJcbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aCA9PT0gJ2F0dHJzL2hlYWRlckxhYmVsL3RleHQtYW5jaG9yJykge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBvcHQucHJvcGVydHlWYWx1ZTtcclxuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgdGV4dEFuY2hvciwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhlYWRlckF0dHJpYnV0ZShjZWxsOiBhbnksIHRleHRBbmNob3I6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAodGV4dEFuY2hvcikge1xyXG4gICAgICBjYXNlICdlbmQnOlxyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gODtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWlkZGxlJzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAtIDg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVbmRlZmluZWRTaXplKGF0dHJpYnV0ZXMpIHtcclxuICAgIGxldCBiUmVzdWx0ID0gZmFsc2U7XHJcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xyXG4gICAgICAgIGlmICghZS5zaXplKSB7XHJcbiAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcykge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhdHRyaWJ1dGVzLmxhbmVzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5zaXplKSB7XHJcbiAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcbn1cclxuIl19
|