ontimize-web-ngx 15.6.2 → 15.7.1
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/esm2020/lib/components/app-header/o-app-header.component.mjs +4 -4
- package/esm2020/lib/components/app-header/o-app-header.module.mjs +5 -5
- package/esm2020/lib/components/app-sidenav/image/o-app-sidenav-image.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/locale-menu-item/o-locale-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-group/o-bar-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-item/o-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-separator/o-bar-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu-base.class.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/o-base-menu-item.class.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.component.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.module.mjs +5 -5
- package/esm2020/lib/components/button/o-button.component.mjs +4 -4
- package/esm2020/lib/components/button/o-button.module.mjs +5 -5
- package/esm2020/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.module.mjs +5 -5
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.module.mjs +5 -5
- package/esm2020/lib/components/container/column/o-column.component.mjs +4 -4
- package/esm2020/lib/components/container/column/o-column.module.mjs +5 -5
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/container/o-container-collapsible-component.class.mjs +4 -4
- package/esm2020/lib/components/container/o-container-component.class.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.component.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.module.mjs +5 -5
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/context-menu/o-context-menu-content.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu/o-wrapper-content-menu/o-wrapper-content-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-group/o-context-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-item/o-context-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-separator/o-context-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-content-menu-base-item.class.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu-overlay.service.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.directive.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/o-context-menu.service.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/dual-list-selector-item/date/o-dual-list-selector-date-item.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.module.mjs +5 -5
- package/esm2020/lib/components/expandable-container/o-expandable-container.component.mjs +4 -4
- package/esm2020/lib/components/expandable-container/o-expandable-container.module.mjs +5 -5
- package/esm2020/lib/components/filter-builder/filter-builder-menu/filter-builder-menu.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-clear.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-query.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.module.mjs +5 -5
- package/esm2020/lib/components/form/guards/o-form-can-deactivate.guard.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-confirm-exit.service.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +4 -4
- package/esm2020/lib/components/form/o-form.component.mjs +4 -4
- package/esm2020/lib/components/form/o-form.module.mjs +5 -5
- package/esm2020/lib/components/form/services/o-form-message.service.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/form-container/o-form-container.component.mjs +4 -4
- package/esm2020/lib/components/form-container/o-form-container.module.mjs +5 -5
- package/esm2020/lib/components/grid/grid-item/o-grid-item.component.mjs +4 -4
- package/esm2020/lib/components/grid/grid-item/o-grid-item.directive.mjs +4 -4
- package/esm2020/lib/components/grid/o-grid.component.mjs +4 -4
- package/esm2020/lib/components/grid/o-grid.module.mjs +5 -5
- package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/image/fullscreen/fullscreen-dialog.component.mjs +4 -4
- package/esm2020/lib/components/image/o-image.component.mjs +4 -4
- package/esm2020/lib/components/image/o-image.module.mjs +5 -5
- package/esm2020/lib/components/input/checkbox/o-checkbox.component.mjs +4 -4
- package/esm2020/lib/components/input/checkbox/o-checkbox.module.mjs +5 -5
- package/esm2020/lib/components/input/combo/combo-renderer/boolean/o-combo-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/currency/o-combo-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/date/o-combo-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/icon/o-combo-renderer-icon.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/integer/o-combo-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/o-combo-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/percentage/o-combo-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/real/o-combo-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.module.mjs +5 -5
- package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +4 -4
- package/esm2020/lib/components/input/currency-input/o-currency-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-input/o-date-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range/o-daterange-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-range/o-daterange-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.directive.mjs +4 -4
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.module.mjs +5 -5
- package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +4 -4
- package/esm2020/lib/components/input/file-input/o-file-input.module.mjs +5 -5
- package/esm2020/lib/components/input/hour-input/index.mjs +4 -0
- package/esm2020/lib/components/input/hour-input/o-hour-input.component.mjs +38 -9
- package/esm2020/lib/components/input/hour-input/o-hour-input.directive.mjs +46 -0
- package/esm2020/lib/components/input/hour-input/o-hour-input.module.mjs +8 -7
- package/esm2020/lib/components/input/html-input/o-html-input.component.mjs +4 -4
- package/esm2020/lib/components/input/html-input/o-html-input.module.mjs +5 -5
- package/esm2020/lib/components/input/index.mjs +2 -3
- package/esm2020/lib/components/input/integer-input/o-integer-input.component.mjs +4 -4
- package/esm2020/lib/components/input/integer-input/o-integer-input.module.mjs +5 -5
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/currency/o-list-picker-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/date/o-list-picker-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/integer/o-list-picker-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/o-list-picker-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/percentage/o-list-picker-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/real/o-list-picker-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker-dialog.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.module.mjs +5 -5
- package/esm2020/lib/components/input/nif-input/o-nif-input.component.mjs +4 -4
- package/esm2020/lib/components/input/nif-input/o-nif-input.module.mjs +5 -5
- package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +4 -4
- package/esm2020/lib/components/input/password-input/o-password-input.component.mjs +4 -4
- package/esm2020/lib/components/input/password-input/o-password-input.module.mjs +5 -5
- package/esm2020/lib/components/input/percent-input/o-percent-input.component.mjs +4 -4
- package/esm2020/lib/components/input/percent-input/o-percent-input.module.mjs +5 -5
- package/esm2020/lib/components/input/phone-input/data/country-code.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.component.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.module.mjs +5 -5
- package/esm2020/lib/components/input/radio/o-radio.component.mjs +4 -4
- package/esm2020/lib/components/input/radio/o-radio.module.mjs +5 -5
- package/esm2020/lib/components/input/real-input/o-real-input.component.mjs +4 -4
- package/esm2020/lib/components/input/real-input/o-real-input.module.mjs +5 -5
- package/esm2020/lib/components/input/search-input/o-search-input.component.mjs +4 -4
- package/esm2020/lib/components/input/search-input/o-search-input.module.mjs +5 -5
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.component.mjs +4 -4
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.module.mjs +5 -5
- package/esm2020/lib/components/input/slider/o-slider.component.mjs +4 -4
- package/esm2020/lib/components/input/slider/o-slider.module.mjs +5 -5
- package/esm2020/lib/components/input/text-input/o-text-input.component.mjs +4 -4
- package/esm2020/lib/components/input/text-input/o-text-input.module.mjs +5 -5
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.component.mjs +4 -4
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.module.mjs +5 -5
- package/esm2020/lib/components/input/time-input/o-time-input.component.mjs +4 -4
- package/esm2020/lib/components/input/time-input/o-time-input.module.mjs +5 -5
- package/esm2020/lib/components/language-selector/o-language-selector.component.mjs +4 -4
- package/esm2020/lib/components/language-selector/o-language-selector.module.mjs +5 -5
- package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +4 -4
- package/esm2020/lib/components/list/list-item/o-list-item.directive.mjs +4 -4
- package/esm2020/lib/components/list/o-list.component.mjs +4 -4
- package/esm2020/lib/components/list/o-list.module.mjs +5 -5
- package/esm2020/lib/components/list/renderers/avatar/o-list-item-avatar.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card/o-list-item-card.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card-image/o-list-item-card-image.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-card-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/text/o-list-item-text.component.mjs +4 -4
- package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/material/ckeditor/ck-editor.component.mjs +4 -4
- package/esm2020/lib/components/material/ckeditor/ck-editor.module.mjs +5 -5
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/o-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/o-repeatable-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/o-service-base-component.class.mjs +24 -10
- package/esm2020/lib/components/o-service-component.class.mjs +7 -7
- package/esm2020/lib/components/o-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/boolean/o-table-cell-editor-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/date/o-table-cell-editor-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/email/o-table-cell-editor-email.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/integer/o-table-cell-editor-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +10 -4
- package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/text/o-table-cell-editor-text.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/time/o-table-cell-editor-time.component.mjs +26 -12
- package/esm2020/lib/components/table/column/cell-renderer/action/o-table-cell-renderer-action.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/boolean/o-table-cell-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/currency/o-table-cell-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/date/o-table-cell-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/image/o-table-cell-renderer-image.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/integer/o-table-cell-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/percentage/o-table-cell-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/real/o-table-cell-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/time/o-table-cell-renderer-time.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/translate/o-table-cell-renderer-translate.component.mjs +4 -4
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +20 -14
- package/esm2020/lib/components/table/extensions/default-o-table.datasource.mjs +137 -66
- package/esm2020/lib/components/table/extensions/dialog/apply-configuration/o-table-apply-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +42 -65
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +78 -11
- package/esm2020/lib/components/table/extensions/dialog/group-by-columns/o-table-group-by-columns-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/o-table-base-dialog.class.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/store-configuration/o-table-store-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +5 -5
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/aggregate/o-table-column-aggregate.component.mjs +6 -6
- package/esm2020/lib/components/table/extensions/footer/expanded/o-table-expanded-footer.directive.mjs +11 -14
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-mat-paginator-intl.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-paginator.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-button/o-table-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-buttons/o-table-buttons.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-select-all/o-table-column-select-all.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +21 -5
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +70 -53
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/columns/o-table-columns-grouping-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/o-table-columns-grouping.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header/o-table-header.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +28 -13
- package/esm2020/lib/components/table/extensions/header/table-header-select-all/o-table-header-select-all.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-option/o-table-option.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table-datasource.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table-strategy.service.mjs +10 -4
- package/esm2020/lib/components/table/extensions/pipes/o-table-row-class.pipe.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/o-table-row.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/table-row-expandable/o-table-row-expandable.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +19 -19
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-header.mjs +14 -7
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-module.mjs +5 -5
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +4 -4
- package/esm2020/lib/components/table/index.mjs +2 -1
- package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
- package/esm2020/lib/components/table/o-table-loading.service.mjs +113 -0
- package/esm2020/lib/components/table/o-table.component.mjs +107 -65
- package/esm2020/lib/components/table/o-table.module.mjs +12 -8
- package/esm2020/lib/components/tree/header/tree-menu/o-tree-menu.component.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree-dao.service.mjs +35 -4
- package/esm2020/lib/components/tree/o-tree.component.mjs +147 -25
- package/esm2020/lib/components/tree/o-tree.datasource.mjs +28 -14
- package/esm2020/lib/components/tree/o-tree.module.mjs +5 -5
- package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +5 -23
- package/esm2020/lib/components/user-info/o-user-info.component.mjs +4 -4
- package/esm2020/lib/components/user-info/o-user-info.module.mjs +5 -5
- package/esm2020/lib/components/user-info/user-info-configuration/o-user-info-configuration.directive.mjs +4 -4
- package/esm2020/lib/components/user-info/user-info-configuration-item/o-user-info-configuration-item.directive.mjs +4 -4
- package/esm2020/lib/config/o-modules.mjs +5 -5
- package/esm2020/lib/directives/input-regulate.directive.mjs +4 -4
- package/esm2020/lib/directives/keyboard-listener.directive.mjs +4 -4
- package/esm2020/lib/directives/locker.directive.mjs +4 -4
- package/esm2020/lib/directives/o-file-drag-and-drop.directive.mjs +4 -4
- package/esm2020/lib/directives/o-hidden.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-prefix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-suffix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-tab-group.directive.mjs +4 -4
- package/esm2020/lib/i18n/i18n.mjs +13 -4
- package/esm2020/lib/interfaces/pagination-data.interface.mjs +2 -0
- package/esm2020/lib/layouts/app-layout/app-layout-header/o-app-layout-header.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/app-layout-sidenav/o-app-layout-sidenav.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/directives/o-form-layout-manager-content.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/guards/o-form-layout-can-activate-child.guard.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/split-pane/options/o-form-layout-split-pane-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/tabgroup/options/o-form-layout-tabgroup-options.directive.mjs +4 -4
- package/esm2020/lib/ontimize-web-ngx.module.mjs +5 -5
- package/esm2020/lib/pipes/columns-filter.pipe.mjs +4 -4
- package/esm2020/lib/pipes/is-empty-value.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-currency.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-icon.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-integer.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-moment.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-percentage.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-real.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-safe.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-translate.pipe.mjs +8 -8
- package/esm2020/lib/pipes/order-by.pipe.mjs +4 -4
- package/esm2020/lib/services/app-menu.service.mjs +4 -4
- package/esm2020/lib/services/appearance.service.mjs +4 -4
- package/esm2020/lib/services/auth-guard.service.mjs +4 -4
- package/esm2020/lib/services/auth.service.mjs +4 -4
- package/esm2020/lib/services/base-service-response.adapter.mjs +4 -4
- package/esm2020/lib/services/base-service.class.mjs +4 -4
- package/esm2020/lib/services/currency.service.mjs +4 -4
- package/esm2020/lib/services/dialog.service.mjs +4 -4
- package/esm2020/lib/services/icon.service.mjs +4 -4
- package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +4 -4
- package/esm2020/lib/services/jsonapi/jsonapi-service-response.adapter.mjs +4 -4
- package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +4 -4
- package/esm2020/lib/services/local-storage.service.mjs +4 -4
- package/esm2020/lib/services/login-storage.service.mjs +4 -4
- package/esm2020/lib/services/moment.service.mjs +4 -4
- package/esm2020/lib/services/navigation.service.mjs +4 -4
- package/esm2020/lib/services/number.service.mjs +4 -4
- package/esm2020/lib/services/o-auth.service.mjs +4 -4
- package/esm2020/lib/services/o-breadcrumb.service.mjs +4 -4
- package/esm2020/lib/services/o-error-dialog-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-form-layout-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-modules-info.service.mjs +4 -4
- package/esm2020/lib/services/o-user-info.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/o-preference-response.adapter.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-base-service.class.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-ee.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-export-3xx.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-export.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-file.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-preferences.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize-service-response.adapter.mjs +4 -4
- package/esm2020/lib/services/ontimize/ontimize.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider-3x.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-icon-registry.service.mjs +4 -4
- package/esm2020/lib/services/pagination-context.service.mjs +4 -4
- package/esm2020/lib/services/parser/o-service-response.parser.mjs +4 -4
- package/esm2020/lib/services/permissions/o-permissions.module.mjs +5 -5
- package/esm2020/lib/services/permissions/ontimize-ee-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/ontimize-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions-can-activate.guard.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions.service.mjs +4 -4
- package/esm2020/lib/services/remote-config.service.mjs +5 -5
- package/esm2020/lib/services/request-adapter/jsonapi-request-arguments.adapter.mjs +4 -4
- package/esm2020/lib/services/request-adapter/ontimize-request-arguments.adapter.mjs +4 -4
- package/esm2020/lib/services/share-can-activate-child.service.mjs +4 -4
- package/esm2020/lib/services/snackbar.service.mjs +4 -4
- package/esm2020/lib/services/state/index.mjs +3 -1
- package/esm2020/lib/services/state/o-app-menu-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-component-state.service.mjs +10 -10
- package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-form-layout-manager-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-grid-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-list-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-table-component-state.class.mjs +1 -1
- package/esm2020/lib/services/state/o-table-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-tree-component-state.class.mjs +1 -1
- package/esm2020/lib/services/state/o-tree-component-state.service.mjs +57 -17
- package/esm2020/lib/services/translate/o-translate.parser.mjs +4 -4
- package/esm2020/lib/services/translate/o-translate.service.mjs +4 -4
- package/esm2020/lib/shared/components/dialog/o-dialog-internal.component.mjs +4 -4
- package/esm2020/lib/shared/components/dialog/o-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/error403/o-error-403.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/load-filter/o-load-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/store-filter/o-store-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar-base.class.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-error.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-validator.component.mjs +4 -4
- package/esm2020/lib/shared/material/custom.material.module.mjs +5 -5
- package/esm2020/lib/shared/material/date/ontimize-moment-date-adapter.mjs +4 -4
- package/esm2020/lib/shared/shared.module.mjs +5 -5
- package/esm2020/lib/types/aggregate-function.type.mjs +1 -1
- package/esm2020/lib/types/table/o-table-global-config.type.mjs +1 -1
- package/esm2020/lib/types/table/o-table-initialization-options.type.mjs +1 -1
- package/esm2020/lib/types/tree-flat-node.type.mjs +1 -1
- package/fesm2015/ontimize-web-ngx.mjs +2150 -1464
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +2121 -1459
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/dual-list-selector/o-dual-list-selector.component.d.ts +1 -1
- package/lib/components/input/hour-input/index.d.ts +3 -0
- package/lib/components/input/hour-input/o-hour-input.component.d.ts +6 -2
- package/lib/components/input/hour-input/o-hour-input.directive.d.ts +8 -0
- package/lib/components/input/hour-input/o-hour-input.module.d.ts +5 -4
- package/lib/components/input/index.d.ts +1 -2
- package/lib/components/o-service-base-component.class.d.ts +6 -1
- package/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.d.ts +5 -3
- package/lib/components/table/column/cell-editor/time/o-table-cell-editor-time.component.d.ts +2 -2
- package/lib/components/table/extensions/default-o-table.datasource.d.ts +6 -1
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +10 -3
- package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +10 -3
- package/lib/components/table/extensions/dialog/group-by-columns/o-table-group-by-columns-dialog.component.d.ts +1 -1
- package/lib/components/table/extensions/footer/aggregate/o-table-column-aggregate.component.d.ts +1 -1
- package/lib/components/table/extensions/footer/expanded/o-table-expanded-footer.directive.d.ts +1 -2
- package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
- package/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.d.ts +19 -2
- package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +10 -9
- package/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.d.ts +7 -1
- package/lib/components/table/extensions/o-table-strategy.service.d.ts +2 -1
- package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -0
- package/lib/components/table/extensions/sort/o-mat-sort-header.d.ts +5 -3
- package/lib/components/table/index.d.ts +1 -0
- package/lib/components/table/o-table-base.class.d.ts +15 -4
- package/lib/components/table/o-table-loading.service.d.ts +28 -0
- package/lib/components/table/o-table.component.d.ts +7 -3
- package/lib/components/table/o-table.module.d.ts +2 -1
- package/lib/components/tree/o-tree-dao.service.d.ts +4 -2
- package/lib/components/tree/o-tree.component.d.ts +21 -2
- package/lib/components/tree/o-tree.datasource.d.ts +3 -0
- package/lib/components/tree/tree-node/tree-node.component.d.ts +0 -4
- package/lib/i18n/i18n.d.ts +9 -0
- package/lib/interfaces/pagination-data.interface.d.ts +6 -0
- package/lib/services/state/index.d.ts +2 -0
- package/lib/services/state/o-table-component-state.class.d.ts +1 -1
- package/lib/services/state/o-tree-component-state.class.d.ts +3 -0
- package/lib/services/state/o-tree-component-state.service.d.ts +4 -1
- package/lib/types/aggregate-function.type.d.ts +2 -1
- package/lib/types/table/o-table-global-config.type.d.ts +4 -0
- package/lib/types/table/o-table-initialization-options.type.d.ts +4 -0
- package/lib/types/tree-flat-node.type.d.ts +5 -1
- package/package.json +2 -2
|
@@ -97,10 +97,14 @@ export class AbstractOServiceBaseComponent {
|
|
|
97
97
|
catch (e) {
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
+
initializeLoadingSubject() {
|
|
101
|
+
this.loadingSubject.next(false);
|
|
102
|
+
}
|
|
100
103
|
get state() {
|
|
101
104
|
return this.componentStateService.state;
|
|
102
105
|
}
|
|
103
106
|
initialize() {
|
|
107
|
+
this.initializeLoadingSubject();
|
|
104
108
|
if (!Util.isDefined(this.oattr) && Util.isDefined(this.entity)) {
|
|
105
109
|
this.oattr = this.entity.replace('.', '_');
|
|
106
110
|
this.oattrFromEntity = true;
|
|
@@ -253,6 +257,7 @@ export class AbstractOServiceBaseComponent {
|
|
|
253
257
|
queryData(filter, ovrrArgs) {
|
|
254
258
|
const queryMethodName = this.pageable ? this.paginatedQueryMethod : this.queryMethod;
|
|
255
259
|
if (!this.dataService || !(queryMethodName in this.dataService) || !this.entity) {
|
|
260
|
+
this.loadingSubject.next(false);
|
|
256
261
|
return;
|
|
257
262
|
}
|
|
258
263
|
const filterParentKeys = this.getParentKeysValues();
|
|
@@ -386,6 +391,15 @@ export class AbstractOServiceBaseComponent {
|
|
|
386
391
|
const context = this.getContextComponent();
|
|
387
392
|
return this.getParentKeysFromContext(this._pKeysEquiv, context);
|
|
388
393
|
}
|
|
394
|
+
getForm() {
|
|
395
|
+
return this.form;
|
|
396
|
+
}
|
|
397
|
+
getParentKeysEquivalence() {
|
|
398
|
+
return this._pKeysEquiv;
|
|
399
|
+
}
|
|
400
|
+
getDataService() {
|
|
401
|
+
return this.dataService;
|
|
402
|
+
}
|
|
389
403
|
updateStateStorage() {
|
|
390
404
|
if (this.localStorageService && this.storeState && !this.alreadyStored) {
|
|
391
405
|
this.alreadyStored = true;
|
|
@@ -402,8 +416,8 @@ export class AbstractOServiceBaseComponent {
|
|
|
402
416
|
}
|
|
403
417
|
}
|
|
404
418
|
}
|
|
405
|
-
AbstractOServiceBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
406
|
-
AbstractOServiceBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
419
|
+
AbstractOServiceBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AbstractOServiceBaseComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
420
|
+
AbstractOServiceBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: AbstractOServiceBaseComponent, inputs: { oattr: ["attr", "oattr"], service: "service", serviceType: ["service-type", "serviceType"], entity: "entity", queryOnInit: ["query-on-init", "queryOnInit"], queryOnBind: ["query-on-bind", "queryOnBind"], queryOnEvent: ["query-on-event", "queryOnEvent"], pageable: "pageable", columns: "columns", keys: "keys", parentKeys: ["parent-keys", "parentKeys"], staticData: ["static-data", "staticData"], queryMethod: ["query-method", "queryMethod"], paginatedQueryMethod: ["paginated-query-method", "paginatedQueryMethod"], oQueryRows: ["query-rows", "oQueryRows"], insertMethod: ["insert-method", "insertMethod"], updateMethod: ["update-method", "updateMethod"], deleteMethod: ["delete-method", "deleteMethod"], storeState: ["store-state", "storeState"], queryWithNullParentKeys: ["query-with-null-parent-keys", "queryWithNullParentKeys"], queryFallbackFunction: ["query-fallback-function", "queryFallbackFunction"], configureServiceArgs: ["configure-service-args", "configureServiceArgs"] }, host: { listeners: { "window:beforeunload": "beforeunloadHandler()" } }, usesOnChanges: true, ngImport: i0 });
|
|
407
421
|
__decorate([
|
|
408
422
|
BooleanInputConverter(),
|
|
409
423
|
__metadata("design:type", Boolean)
|
|
@@ -424,7 +438,7 @@ __decorate([
|
|
|
424
438
|
BooleanInputConverter(),
|
|
425
439
|
__metadata("design:type", Boolean)
|
|
426
440
|
], AbstractOServiceBaseComponent.prototype, "queryWithNullParentKeys", void 0);
|
|
427
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
441
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AbstractOServiceBaseComponent, decorators: [{
|
|
428
442
|
type: Directive,
|
|
429
443
|
args: [{
|
|
430
444
|
inputs: DEFAULT_INPUTS_O_SERVICE_BASE_COMPONENT
|
|
@@ -435,16 +449,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
435
449
|
}] } });
|
|
436
450
|
export class DefaultOServiceBaseComponent extends AbstractOServiceBaseComponent {
|
|
437
451
|
}
|
|
438
|
-
DefaultOServiceBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
439
|
-
DefaultOServiceBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
440
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
452
|
+
DefaultOServiceBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DefaultOServiceBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
453
|
+
DefaultOServiceBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: DefaultOServiceBaseComponent, usesInheritance: true, ngImport: i0 });
|
|
454
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DefaultOServiceBaseComponent, decorators: [{
|
|
441
455
|
type: Directive
|
|
442
456
|
}] });
|
|
443
457
|
export class OServiceBaseComponent extends AbstractOServiceBaseComponent {
|
|
444
458
|
}
|
|
445
|
-
OServiceBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
446
|
-
OServiceBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
447
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
459
|
+
OServiceBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OServiceBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
460
|
+
OServiceBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: OServiceBaseComponent, usesInheritance: true, ngImport: i0 });
|
|
461
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OServiceBaseComponent, decorators: [{
|
|
448
462
|
type: Directive
|
|
449
463
|
}] });
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBS3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUF1QyxNQUFNLDZDQUE2QyxDQUFDO0FBSWpJLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FB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RTs7a0VBQ0k7QUFDNUI7SUFBQyxxQkFBcUIsRUFBRTs7a0VBQ0k7QUFFNUI7SUFBQyxxQkFBcUIsRUFBRTs7K0RBQ0U7QUErQjFCO0lBQUMscUJBQXFCLEVBQUU7O2lFQUNHO0FBQzNCO0lBQUMscUJBQXFCLEVBQUU7OzhFQUNpQjsyRkFyRHJCLDZCQUE2QjtrQkFIbEQsU0FBUzttQkFBQztvQkFDVCxNQUFNLEVBQUUsdUNBQXVDO2lCQUNoRDsrRkFlQyxXQUFXLE1BRVgsV0FBVyxNQUdYLFFBQVEsTUFnQ1IsVUFBVSxNQUVWLHVCQUF1QixNQTBKdkIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUU7O0FBNFJ6QyxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsNkJBQWtFOzt5SEFBdkcsNEJBQTRCOzZHQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFEeEMsU0FBUzs7QUFPVixNQUFNLE9BQU8scUJBQXNCLFNBQVEsNkJBQWtFOztrSEFBaEcscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIGlzRGV2TW9kZSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2UsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BhZ2luYXRpb24tY29udGV4dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUxvY2FsU3RvcmFnZUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvbG9jYWwtc3RvcmFnZS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iYXNlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Vycm9yRGlhbG9nTWFuYWdlciB9IGZyb20gJy4uL3NlcnZpY2VzL28tZXJyb3ItZGlhbG9nLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0ZS9vLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSwgRGVmYXVsdFNlcnZpY2VDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0ZS9vLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db25maWd1cmVTZXJ2aWNlQXJncyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlEYXRhQXJncyB9IGZyb20gJy4uL3R5cGVzL3F1ZXJ5LWRhdGEtYXJncy50eXBlJztcbmltcG9ydCB7IE9RdWVyeVBhcmFtcyB9IGZyb20gJy4uL3R5cGVzL3F1ZXJ5LXBhcmFtcy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRXhwYW5kYWJsZUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZXhwYW5kYWJsZS1jb250YWluZXIvby1leHBhbmRhYmxlLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGYWN0b3J5VXRpbCB9IGZyb20gJy4uL3V0aWwvZmFjdG9yeS51dGlsJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9CQVNFX0NPTVBPTkVOVCA9IFtcbiAgLy8gYXR0ciBbc3RyaW5nXTogbGlzdCBpZGVudGlmaWVyLiBJdCBpcyBtYW5kYXRvcnkgaWYgZGF0YSBhcmUgcHJvdmlkZWQgdGhyb3VnaCB0aGUgZGF0YSBhdHRyaWJ1dGUuIERlZmF1bHQ6IGVudGl0eSAoaWYgc2V0KS5cbiAgJ29hdHRyOiBhdHRyJyxcblxuICAvLyBzZXJ2aWNlIFtzdHJpbmddOiBKRUUgc2VydmljZSBwYXRoLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NlcnZpY2UnLFxuXG4gICdzZXJ2aWNlVHlwZSA6IHNlcnZpY2UtdHlwZScsXG5cbiAgLy8gZW50aXR5IFtzdHJpbmddOiBlbnRpdHkgb2YgdGhlIHNlcnZpY2UuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZW50aXR5JyxcblxuICAvLyBxdWVyeS1vbi1pbml0IFtub3x5ZXNdOiBxdWVyeSBvbiBpbml0LiBEZWZhdWx0OiB5ZXMuXG4gICdxdWVyeU9uSW5pdDogcXVlcnktb24taW5pdCcsXG5cbiAgLy8gcXVlcnktb24taW5pdCBbbm98eWVzXTogcXVlcnkgb24gYmluZC4gRGVmYXVsdDogeWVzLlxuICAncXVlcnlPbkJpbmQ6IHF1ZXJ5LW9uLWJpbmQnLFxuXG4gICdxdWVyeU9uRXZlbnQ6IHF1ZXJ5LW9uLWV2ZW50JyxcblxuICAncGFnZWFibGUnLFxuXG4gIC8vIGNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGVudGl0eSwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdjb2x1bW5zJyxcblxuICAvLyBrZXlzIFtzdHJpbmddOiBlbnRpdHkga2V5cywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdrZXlzJyxcblxuICAvLyBwYXJlbnQta2V5cyBbc3RyaW5nXTogcGFyZW50IGtleXMgdG8gZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3BhcmVudEtleXM6IHBhcmVudC1rZXlzJyxcblxuICAvLyBzdGF0aWMtZGF0YSBbQXJyYXk8YW55Pl0gOiB3YXkgdG8gcG9wdWxhdGUgd2l0aCBzdGF0aWMgZGF0YS4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzdGF0aWNEYXRhOiBzdGF0aWMtZGF0YScsXG5cbiAgLy8gcXVlcnktbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHF1ZXJpZXMuIERlZmF1bHQ6IHF1ZXJ5LlxuICAncXVlcnlNZXRob2Q6IHF1ZXJ5LW1ldGhvZCcsXG5cbiAgLy8gcGFnaW5hdGVkLXF1ZXJ5LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBwYWdpbmF0ZWQgcXVlcmllcy4gRGVmYXVsdDogYWR2YW5jZWRRdWVyeS5cbiAgJ3BhZ2luYXRlZFF1ZXJ5TWV0aG9kIDogcGFnaW5hdGVkLXF1ZXJ5LW1ldGhvZCcsXG5cbiAgLy8gcXVlcnktcm93cyBbbnVtYmVyXTogbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuIERlZmF1bHQ6IDEwLlxuICAnb1F1ZXJ5Um93czogcXVlcnktcm93cycsXG5cbiAgLy8gaW5zZXJ0LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBpbnNlcnRzLiBEZWZhdWx0OiBpbnNlcnQuXG4gICdpbnNlcnRNZXRob2Q6IGluc2VydC1tZXRob2QnLFxuXG4gIC8vIHVwZGF0ZS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gdXBkYXRlcy4gRGVmYXVsdDogdXBkYXRlLlxuICAndXBkYXRlTWV0aG9kOiB1cGRhdGUtbWV0aG9kJyxcblxuICAvLyBkZWxldGUtbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIGRlbGV0aW9ucy4gRGVmYXVsdDogZGVsZXRlLlxuICAnZGVsZXRlTWV0aG9kOiBkZWxldGUtbWV0aG9kJyxcblxuICAnc3RvcmVTdGF0ZTogc3RvcmUtc3RhdGUnLFxuXG4gIC8vIHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cyBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB0cmlnZ2VyIHF1ZXJ5IG1ldGhvZCB3aGVuIHBhcmVudC1rZXlzIGZpbHRlciBpcyBudWxsLiBEZWZhdWx0OiBmYWxzZVxuICAncXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cycsXG5cbiAgLy8gW2Z1bmN0aW9uXTogZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBxdWVyeSBlcnJvci4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdxdWVyeUZhbGxiYWNrRnVuY3Rpb246IHF1ZXJ5LWZhbGxiYWNrLWZ1bmN0aW9uJyxcbiAgLy8gLFxuXG4gIC8vICdpbnNlcnRGYWxsYmFja0Z1bmN0aW9uOiBpbnNlcnQtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICd1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiB1cGRhdGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICdkZWxldGVGYWxsYmFja0Z1bmN0aW9uOiBkZWxldGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuICAvLyAgY29uZmlndXJlLXNlcnZpY2UtYXJncyBbT0NvbmZpZ3VyZVNlcnZpY2VBcmdzXTogQWxsb3dzIGNvbmZpZ3VyZSBzZXJ2aWNlIC5cbiAgJ2NvbmZpZ3VyZVNlcnZpY2VBcmdzOiBjb25maWd1cmUtc2VydmljZS1hcmdzJ1xuXTtcblxuQERpcmVjdGl2ZSh7XG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0JBU0VfQ09NUE9ORU5UXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PFQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZTxBYnN0cmFjdFNlcnZpY2VDb21wb25lbnRTdGF0ZUNsYXNzPj4gaW1wbGVtZW50cyBJTG9jYWxTdG9yYWdlQ29tcG9uZW50LCBPbkNoYW5nZXMge1xuXG4gIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlO1xuICBjb21wb25lbnRTdGF0ZVNlcnZpY2U6IFQ7XG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgb0Vycm9yRGlhbG9nTWFuYWdlcjogT0Vycm9yRGlhbG9nTWFuYWdlcjtcbiAgcGFyZW50Q29tcG9uZW50OiBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxUPjtcblxuICAvKiBpbnB1dHMgdmFyaWFibGVzICovXG4gIG9hdHRyOiBzdHJpbmc7XG4gIHNlcnZpY2U6IHN0cmluZztcbiAgc2VydmljZVR5cGU6IHN0cmluZztcbiAgZW50aXR5OiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeU9uSW5pdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeU9uQmluZDogYm9vbGVhbiA9IHRydWU7XG4gIHF1ZXJ5T25FdmVudDogYW55O1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcGFnZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29sdW1uczogc3RyaW5nO1xuICBrZXlzOiBzdHJpbmc7XG4gIHBhcmVudEtleXM6IHN0cmluZztcbiAgc3RhdGljRGF0YTogQXJyYXk8YW55PjtcbiAgcXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlFVRVJZX01FVEhPRDtcbiAgcGFnaW5hdGVkUXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlBBR0lOQVRFRF9RVUVSWV9NRVRIT0Q7XG5cbiAgb3JpZ2luYWxRdWVyeVJvd3M6IG51bWJlciA9IENvZGVzLkRFRkFVTFRfUVVFUllfUk9XUztcbiAgcHJvdGVjdGVkIF9xdWVyeVJvd3MgPSB0aGlzLm9yaWdpbmFsUXVlcnlSb3dzO1xuXG4gIHNldCBvUXVlcnlSb3dzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdmFsdWU7XG4gICAgICB0aGlzLm9yaWdpbmFsUXVlcnlSb3dzID0gdmFsdWU7XG4gICAgICB0aGlzLl9xdWVyeVJvd3MgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcXVlcnlSb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Um93cztcbiAgfVxuXG4gIHNldCBxdWVyeVJvd3ModmFsdWU6IG51bWJlcikge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3F1ZXJ5Um93cyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBpbnNlcnRNZXRob2Q6IHN0cmluZyA9IENvZGVzLklOU0VSVF9NRVRIT0Q7XG4gIHVwZGF0ZU1ldGhvZDogc3RyaW5nID0gQ29kZXMuVVBEQVRFX01FVEhPRDtcbiAgZGVsZXRlTWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5ERUxFVEVfTUVUSE9EO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc3RvcmVTdGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeVdpdGhOdWxsUGFyZW50S2V5czogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVyeUZhbGxiYWNrRnVuY3Rpb246IChlcnI6IGFueSkgPT4gdm9pZDtcbiAgLy8gaW5zZXJ0RmFsbGJhY2tGdW5jdGlvbjogKGVycjogYW55KSA9PiB2b2lkO1xuICAvLyB1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIC8vIGRlbGV0ZUZhbGxiYWNrRnVuY3Rpb246IChlcnI6IGFueSkgPT4gdm9pZDtcbiAgLyogZW5kIG9mIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICAvKiBwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgY29sQXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHJvdGVjdGVkIGtleXNBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcm90ZWN0ZWQgX3BLZXlzRXF1aXYgPSB7fTtcbiAgZGF0YUFycmF5OiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBvYXR0ckZyb21FbnRpdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyogZW5kIG9mIHBhcnNlZCBpbnB1dHMgdmFyaWFibGVzICovXG5cbiAgcHJvdGVjdGVkIG9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uOiBhbnk7XG4gIHByb3RlY3RlZCBvbkZvcm1EYXRhU3Vic2NyaWJlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogQmFzZVNlcnZpY2U8U2VydmljZVJlc3BvbnNlPjtcblxuICBwcm90ZWN0ZWQgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByb3RlY3RlZCBmb3JtOiBPRm9ybUNvbXBvbmVudDtcbiAgcHVibGljIGV4cGFuZGFibGVDb250YWluZXI6IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgYWxyZWFkeVN0b3JlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZjsgLy8gYm9ycmFyXG4gIHByb3RlY3RlZCBxdWVyeUFyZ3VtZW50czogT1F1ZXJ5UGFyYW1zO1xuXG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcblxuICBwcm90ZWN0ZWQgc3FsVHlwZXMgPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFib3J0UXVlcnk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcm90ZWN0ZWQgY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PERpYWxvZ1NlcnZpY2U+KERpYWxvZ1NlcnZpY2UgYXMgVHlwZTxEaWFsb2dTZXJ2aWNlPik7XG4gICAgdGhpcy5vRXJyb3JEaWFsb2dNYW5hZ2VyID0gdGhpcy5pbmplY3Rvci5nZXQ8T0Vycm9yRGlhbG9nTWFuYWdlcj4oT0Vycm9yRGlhbG9nTWFuYWdlciBhcyBUeXBlPE9FcnJvckRpYWxvZ01hbmFnZXI+KTtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxMb2NhbFN0b3JhZ2VTZXJ2aWNlPihMb2NhbFN0b3JhZ2VTZXJ2aWNlIGFzIFR5cGU8TG9jYWxTdG9yYWdlU2VydmljZT4pO1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8VD4oQWJzdHJhY3RDb21wb25lbnRTdGF0ZVNlcnZpY2UgYXMgVHlwZTxUPik7XG4gICAgdGhpcy5yb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldDxSb3V0ZXI+KFJvdXRlciBhcyBUeXBlPFJvdXRlcj4pO1xuICAgIHRoaXMuYWN0Um91dGUgPSB0aGlzLmluamVjdG9yLmdldDxBY3RpdmF0ZWRSb3V0ZT4oQWN0aXZhdGVkUm91dGUgYXMgVHlwZTxBY3RpdmF0ZWRSb3V0ZT4pO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNkID0gdGhpcy5pbmplY3Rvci5nZXQ8Q2hhbmdlRGV0ZWN0b3JSZWY+KENoYW5nZURldGVjdG9yUmVmIGFzIFR5cGU8Q2hhbmdlRGV0ZWN0b3JSZWY+KTtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9Gb3JtQ29tcG9uZW50PihPRm9ybUNvbXBvbmVudCBhcyBUeXBlPE9Gb3JtQ29tcG9uZW50Pik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm8gcGFyZW50IGZvcm1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXhwYW5kYWJsZUNvbnRhaW5lciA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50PihPRXhwYW5kYWJsZUNvbnRhaW5lckNvbXBvbmVudCBhcyBUeXBlPE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50Pik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTm8gcGFyZW50IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdGF0ZTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLm9hdHRyKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmVudGl0eSkpIHtcbiAgICAgIHRoaXMub2F0dHIgPSB0aGlzLmVudGl0eS5yZXBsYWNlKCcuJywgJ18nKTtcbiAgICAgIHRoaXMub2F0dHJGcm9tRW50aXR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5rZXlzQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5rZXlzKTtcbiAgICB0aGlzLmNoZWNrQ29sdW1ucygpO1xuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSwgQ29kZXMuQ09MVU1OU19BTElBU19TRVBBUkFUT1IpO1xuXG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMucXVlcnlPbkJpbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMucXVlcnlPbkluaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuc3RhdGljRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0gJiYgVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU2VydmljZSkpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudCh0aGlzLmZvcm0pO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5T25FdmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKSkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlPbkV2ZW50LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHZhbHVlKSB8fCB0aGlzLnF1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzKSB7XG4gICAgICAgICAgc2VsZi5xdWVyeURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDb2x1bW5zKCkge1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBJbiB0aGUgY29tcG9uZW50ICcke3RoaXMub2F0dHJ9JywgdGhlIGtleSAnJHtrZXl9JyBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbnMgZGVmaW5pdGlvbiBhbmQgc29tZSBmdW5jdGlvbmFsaXRpZXMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseWApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWdpc3RlckxvY2FsU3RvcmFnZVNlcnZpY2VSb3V0ZUNoYW5nZSgpO1xuXG4gICAgdGhpcy5hYm9ydFF1ZXJ5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhKFtdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub25Gb3JtRGF0YVN1YnNjcmliZSkge1xuICAgICAgdGhpcy5vbkZvcm1EYXRhU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuU2V0U3RhdGljRGF0YShzdGF0aWNEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoc3RhdGljRGF0YSlcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSkge1xuICAgIGlmICh0aGlzLmNhblNldFN0YXRpY0RhdGEoY2hhbmdlcy5zdGF0aWNEYXRhPy5jdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnNldERhdGEoY2hhbmdlcy5zdGF0aWNEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFtdKVxuICBiZWZvcmV1bmxvYWRIYW5kbGVyKCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGVTdG9yYWdlKCk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vYXR0cjtcbiAgfVxuXG4gIGdldENvbXBvbmVudEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgpO1xuICB9XG5cbiAgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMuYWN0Um91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHJvdXRlID0gcm91dGUucmVwbGFjZShwYXJhbXNba2V5XSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIGdldEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmtleXNBcnJheTtcbiAgfVxuXG4gIGNvbmZpZ3VyZVNlcnZpY2UoKSB7XG4gICAgbGV0IGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MgPSB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yLCBiYXNlU2VydmljZTogT250aW1pemVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncykpIHtcbiAgICAgIGNvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyAuLi5jb25maWd1cmVTZXJ2aWNlQXJncywgLi4udGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncyB9O1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBGYWN0b3J5VXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogMCwgcGFnZVNpemU6IHRoaXMucXVlcnlSb3dzLCBvZmZzZXQ6IDAsIHRvdGFsU2l6ZTogMCB9KTtcbiAgfVxuXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQXJyYXk7XG4gIH1cblxuICBzZXREYXRhQXJyYXkoZGF0YTogYW55KTogdm9pZCB7XG4gICAgLyogVGhlIG8tdGFibGUgaGFzIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCAqL1xuICAgIGlmIChVdGlsLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvbXBvbmVudCBoYXMgcmVjZWl2ZWQgbm90IHN1cHBvcnRlZCBzZXJ2aWNlIGRhdGEuIFN1cHBvcnRlZCBkYXRhIGFyZSBBcnJheSBvciBPYmplY3QnKTtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YUFycmF5IGluc3RhbmNlb2YgQXJyYXkgJiYgdGhpcy5kYXRhQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlPy5yZWluaXRpYWxpemVQYWdpbmF0aW9uQ29udGV4dCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgc2V0Rm9ybUNvbXBvbmVudChmb3JtOiBPRm9ybUNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5mb3JtKSkge1xuICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWVyeU9uQmluZCkge1xuICAgICAgdGhpcy5vbkZvcm1EYXRhU3Vic2NyaWJlID0gdGhpcy5mb3JtLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdlYWJsZSA/IHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpIDogdGhpcy5yZWxvYWREYXRhKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJlbnRLZXlzRnJvbUNvbnRleHQocGFyZW50S2V5czogb2JqZWN0LCBjb250ZXh0OiBhbnkpIHtcbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgY29uc3QgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSA9IHRoaXMucm91dGVyLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kgIT09ICdhbHdheXMnO1xuICAgIGlmIChjb250ZXh0IGluc3RhbmNlb2YgT0V4cGFuZGFibGVDb250YWluZXJDb21wb25lbnQpIHtcbiAgICAgIHJlc3VsdCA9IFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUV4cGFuZGFibGVDb250YWluZXIocGFyZW50S2V5cywgY29udGV4dCwgdGhpcy5hY3RSb3V0ZSwgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUZvcm0ocGFyZW50S2V5cywgY29udGV4dCwgdGhpcy5hY3RSb3V0ZSwgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBjbGVhckRhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA9IDA7XG4gICAgdGhpcy5zZXREYXRhKFtdLCBbXSk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlEYXRhKGZpbHRlcj86IGFueSwgb3ZyckFyZ3M/OiBPUXVlcnlEYXRhQXJncyk6IHZvaWQge1xuXG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuXG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEocXVlcnlNZXRob2ROYW1lIGluIHRoaXMuZGF0YVNlcnZpY2UpIHx8ICF0aGlzLmVudGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJQYXJlbnRLZXlzID0gdGhpcy5nZXRQYXJlbnRLZXlzVmFsdWVzKCk7XG4gICAgaWYgKCFTZXJ2aWNlVXRpbHMuZmlsdGVyQ29udGFpbnNBbGxQYXJlbnRLZXlzKGZpbHRlclBhcmVudEtleXMsIHRoaXMuX3BLZXlzRXF1aXYpICYmICF0aGlzLnF1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzKSB7XG4gICAgICB0aGlzLnNldERhdGEoW10sIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuXG4gICAgICAvLyBlbnN1cmluZyBmYWxzZSB2YWx1ZVxuICAgICAgdGhpcy5hYm9ydFF1ZXJ5Lm5leHQoZmFsc2UpO1xuXG5cbiAgICAgIGlmICh0aGlzLmFib3J0UXVlcnkudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbGVhckRhdGEoKTtcbiAgICAgICAgLyoqICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKSBpcyB1c2VkIHRvIHVwZGF0ZSBsb2FkaW5nU3ViamVjdCB2YWx1ZSAodGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpOyBpbiBsaW5lIDM3NylcbiAgICAgICAgICogIGJlZm9yZSB1c2luZyB0aGUgbmV4dCBsaW5lIGFuZCBzbyB1cGRhdGUgdGhlIG9UYWJsZUV4cGFuZGVkRm9vdGVyIGRpcmVjdGl2ZSBhbmQgZGlzcGxheSB0aGUgbWVzc2FnZVxuICAgICAgICAgKiB0aGF0IHRoZXJlIGFyZSBubyByZXN1bHRzIHdoZW4gdGhlIHF1ZXJ5IGlzIGFib3J0ZWQqL1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnF1ZXJ5QXJndW1lbnRzID0gdGhpcy5nZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXIsIG92cnJBcmdzKTtcblxuICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVNlcnZpY2VbcXVlcnlNZXRob2ROYW1lXSguLi50aGlzLmRhdGFTZXJ2aWNlLnJlcXVlc3RBcmd1bWVudEFkYXB0ZXIucGFyc2VRdWVyeVBhcmFtZXRlcnModGhpcy5xdWVyeUFyZ3VtZW50cykpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogU2VydmljZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgdGhpcy5zcWxUeXBlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXM7XG4gICAgICAgICAgICB0aGlzLnNxbFR5cGVzID0ge307XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyckRhdGEgPSAocmVzLmRhdGEgIT09IHVuZGVmaW5lZCkgPyByZXMuZGF0YSA6IFtdO1xuICAgICAgICAgICAgZGF0YSA9IFV0aWwuaXNBcnJheShhcnJEYXRhKSA/IGFyckRhdGEgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuc3FsVHlwZXMgPSByZXMuc3FsVHlwZXM7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25JbmZvKHJlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEsIHRoaXMuc3FsVHlwZXMsIChvdnJyQXJncyAmJiBvdnJyQXJncy5yZXBsYWNlKSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnNldERhdGEoW10sIFtdKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub0Vycm9yRGlhbG9nTWFuYWdlci5vcGVuRXJyb3JEaWFsb2coZXJyKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWxvYWREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkcyB0aGUgY29tcG9uZW50IGRhdGEgYW5kIHJlc3RhcnRzIHRoZSBwYWdpbmF0aW9uLlxuICAgKi9cbiAgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0aW5nIHRoZSBnaXZlbiByZWNvcmQga2V5c1xuICAgKiBAcGFyYW0gaXRlbSByZWNvcmQgb2JqZWN0XG4gICAqIEByZXR1cm5zIG9iamVjdCBjb250YWluaW5nIGl0ZW0gb2JqZWN0IHByb3BlcnRpZXMgY29udGFpbmVkIGluIGtleXNBcnJheVxuICAgKi9cbiAgZXh0cmFjdEtleXNGcm9tUmVjb3JkKGl0ZW06IGFueSk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKFV0aWwuaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW1ba2V5XSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGl0ZW1ba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbEFycmF5O1xuICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7fSk6IE9RdWVyeVBhcmFtcyB7XG4gICAgY29uc3QgY29tcEZpbHRlciA9IHRoaXMuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgcXVlcnlDb2xzID0gdGhpcy5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpO1xuICAgIGNvbnN0IHNxbFR5cGVzID0gKG92cnJBcmdzICYmIG92cnJBcmdzLmhhc093blByb3BlcnR5KCdzcWx0eXBlcycpKSA/IG92cnJBcmdzLnNxbHR5cGVzIDogdGhpcy5mb3JtID8gdGhpcy5mb3JtLmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpIDoge307XG5cbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgY29uc3QgcXVlcnlSZWNvcmRPZmZzZXQgPSB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID8gdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA6IDA7XG4gICAgICBvdnJyQXJncy5vZmZzZXQgPSBvdnJyQXJncz8uaGFzT3duUHJvcGVydHkoJ29mZnNldCcpID8gb3ZyckFyZ3Mub2Zmc2V0IDogcXVlcnlSZWNvcmRPZmZzZXQ7XG4gICAgICBvdnJyQXJncy5sZW5ndGggPSBvdnJyQXJncz8uaGFzT3duUHJvcGVydHkoJ2xlbmd0aCcpID8gb3ZyckFyZ3MubGVuZ3RoIDogdGhpcy5xdWVyeVJvd3M7XG5cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyOiBjb21wRmlsdGVyLFxuICAgICAgY29sdW1uczogcXVlcnlDb2xzLFxuICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgIHBhZ2VhYmxlOiB0aGlzLnBhZ2VhYmxlLFxuICAgICAgc3FsVHlwZXM6IHNxbFR5cGVzLFxuICAgICAgb3ZyckFyZ3M6IG92cnJBcmdzLFxuICAgICAgc29ydDogbnVsbFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uSW5mbyhxdWVyeVJlczogU2VydmljZVJlc3BvbnNlKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGlmIChxdWVyeVJlcy5zdGFydFJlY29yZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0RW5kSW5kZXggPSBxdWVyeVJlcy5zdGFydFJlY29yZEluZGV4ICsgKHF1ZXJ5UmVzLmRhdGEgPyBxdWVyeVJlcy5kYXRhLmxlbmd0aCA6IDApO1xuICAgICAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gcmVzdWx0RW5kSW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAocXVlcnlSZXMudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyID0gcXVlcnlSZXMudG90YWxRdWVyeVJlY29yZHNOdW1iZXI7XG4gICAgICB9XG4gICAgICAvKiBwYWdlTnVtYmVyID0gMCBpcyByZWluaXRpYWxpemVkIHdoZW4gaXQgZ2VuZXJhdGVzIGEgc2VhcmNoICAqL1xuICAgICAgY29uc3QgcGFnZU51bWJlciA9IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgPT0gMCA/IDAgOiB0aGlzLmRhdGFTZXJ2aWNlPy5nZXRQYWdpbmF0aW9uQ29udGV4dCgpLnBhZ2VOdW1iZXI7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogcGFnZU51bWJlciwgb2Zmc2V0OiB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCB0b3RhbFNpemU6IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIsIHBhZ2VTaXplOiB0aGlzLnN0YXRlLnF1ZXJ5Um93cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uQ29udGV4dCh7IHRvdGFsU2l6ZTogcXVlcnlSZXMuZGF0YS5sZW5ndGggfSk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHBhZ2luYXRpb25Db250ZXh0OiBQYWdpbmF0aW9uQ29udGV4dCkge1xuICAgIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgZGVsZXRlIHBhZ2luYXRpb25Db250ZXh0Lm9mZnNldDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTZXJ2aWNlPy5zZXRQYWdpbmF0aW9uQ29udGV4dChwYWdpbmF0aW9uQ29udGV4dCk7XG4gIH1cblxuICBnZXRUb3RhbFJlY29yZHNOdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlcikgPyB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29udGV4dENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRhYmxlQ29udGFpbmVyIHx8IHRoaXMuZm9ybTtcbiAgfVxuXG4gIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGZpbHRlclBhcmVudEtleXMgPSB0aGlzLmdldFBhcmVudEtleXNGcm9tQ29udGV4dCh0aGlzLl9wS2V5c0VxdWl2LCB0aGlzLmdldENvbnRleHRDb21wb25lbnQoKSk7XG4gICAgZXhpc3RpbmdGaWx0ZXIgPSB7IC4uLmV4aXN0aW5nRmlsdGVyIHx8IHt9LCAuLi5maWx0ZXJQYXJlbnRLZXlzIH07XG4gICAgcmV0dXJuIGV4aXN0aW5nRmlsdGVyO1xuICB9XG5cbiAgZ2V0U3FsVHlwZXMoKSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3FsVHlwZXMpID8gdGhpcy5zcWxUeXBlcyA6IHt9O1xuICB9XG5cbiAgZ2V0UGFyZW50S2V5c1ZhbHVlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50S2V5c0Zyb21Db250ZXh0KHRoaXMuX3BLZXlzRXF1aXYsIGNvbnRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlICYmIHRoaXMuc3RvcmVTdGF0ZSAmJiAhdGhpcy5hbHJlYWR5U3RvcmVkKSB7XG4gICAgICB0aGlzLmFscmVhZHlTdG9yZWQgPSB0cnVlO1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudFN0b3JhZ2UodGhpcywgdGhpcy5nZXRSb3V0ZUtleSgpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YShkYXRhOiBhbnksIHNxbFR5cGVzPzogYW55LCByZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJMb2NhbFN0b3JhZ2VTZXJ2aWNlUm91dGVDaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgdGhpcy5vblJvdXRlQ2hhbmdlU3RvcmFnZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5vblJvdXRlQ2hhbmdlLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlU3RvcmFnZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdE9TZXJ2aWNlQmFzZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PERlZmF1bHRTZXJ2aWNlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiB7XG5cbn1cblxuLyogVGhpcyBjbGFzcyBpcyBiZWluZyBkZWZpbmVkIHRvIG1hbnRhaW4gdGhlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMsIHVzZSBEZWZhdWx0T1NlcnZpY2VCYXNlQ29tcG9uZW50Ki9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE9TZXJ2aWNlQmFzZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PERlZmF1bHRTZXJ2aWNlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiB7XG5cbn1cbiJdfQ==
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBS3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUF1QyxNQUFNLDZDQUE2QyxDQUFDO0FBSWpJLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FB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M0U7SUFDSCxDQUFDO0lBRVMsT0FBTyxDQUFDLElBQVMsRUFBRSxRQUFjLEVBQUUsT0FBaUI7SUFFOUQsQ0FBQztJQUVTLHNDQUFzQztRQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3RixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7MkhBcmZtQiw2QkFBNkI7K0dBQTdCLDZCQUE2QjtBQWFqRDtJQUFDLHFCQUFxQixFQUFFOztrRUFDSTtBQUM1QjtJQUFDLHFCQUFxQixFQUFFOztrRUFDSTtBQUU1QjtJQUFDLHFCQUFxQixFQUFFOzsrREFDRTtBQStCMUI7SUFBQyxxQkFBcUIsRUFBRTs7aUVBQ0c7QUFDM0I7SUFBQyxxQkFBcUIsRUFBRTs7OEVBQ2lCOzRGQXJEckIsNkJBQTZCO2tCQUhsRCxTQUFTO21CQUFDO29CQUNULE1BQU0sRUFBRSx1Q0FBdUM7aUJBQ2hEOytGQWVDLFdBQVcsTUFFWCxXQUFXLE1BR1gsUUFBUSxNQWdDUixVQUFVLE1BRVYsdUJBQXVCLE1BK0p2QixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRTs7QUF1U3pDLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSw2QkFBa0U7OzBIQUF2Ryw0QkFBNEI7OEdBQTVCLDRCQUE0Qjs0RkFBNUIsNEJBQTRCO2tCQUR4QyxTQUFTOztBQU9WLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSw2QkFBa0U7O21IQUFoRyxxQkFBcUI7dUdBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgaXNEZXZNb2RlLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGFnaW5hdGlvbi1jb250ZXh0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJTG9jYWxTdG9yYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9sb2NhbC1zdG9yYWdlLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Jhc2Utc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPRXJyb3JEaWFsb2dNYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZXMvby1lcnJvci1kaWFsb2ctbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IE9udGltaXplU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL29udGltaXplL29udGltaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RTZXJ2aWNlQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlLCBEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vdHlwZXMvcXVlcnktcGFyYW1zLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gJy4uL3V0aWwvc2VydmljZS51dGlscyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9leHBhbmRhYmxlLWNvbnRhaW5lci9vLWV4cGFuZGFibGUtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEZhY3RvcnlVdGlsIH0gZnJvbSAnLi4vdXRpbC9mYWN0b3J5LnV0aWwnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0JBU0VfQ09NUE9ORU5UID0gW1xuICAvLyBhdHRyIFtzdHJpbmddOiBsaXN0IGlkZW50aWZpZXIuIEl0IGlzIG1hbmRhdG9yeSBpZiBkYXRhIGFyZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBkYXRhIGF0dHJpYnV0ZS4gRGVmYXVsdDogZW50aXR5IChpZiBzZXQpLlxuICAnb2F0dHI6IGF0dHInLFxuXG4gIC8vIHNlcnZpY2UgW3N0cmluZ106IEpFRSBzZXJ2aWNlIHBhdGguIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc2VydmljZScsXG5cbiAgJ3NlcnZpY2VUeXBlIDogc2VydmljZS10eXBlJyxcblxuICAvLyBlbnRpdHkgW3N0cmluZ106IGVudGl0eSBvZiB0aGUgc2VydmljZS4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdlbnRpdHknLFxuXG4gIC8vIHF1ZXJ5LW9uLWluaXQgW25vfHllc106IHF1ZXJ5IG9uIGluaXQuIERlZmF1bHQ6IHllcy5cbiAgJ3F1ZXJ5T25Jbml0OiBxdWVyeS1vbi1pbml0JyxcblxuICAvLyBxdWVyeS1vbi1pbml0IFtub3x5ZXNdOiBxdWVyeSBvbiBiaW5kLiBEZWZhdWx0OiB5ZXMuXG4gICdxdWVyeU9uQmluZDogcXVlcnktb24tYmluZCcsXG5cbiAgJ3F1ZXJ5T25FdmVudDogcXVlcnktb24tZXZlbnQnLFxuXG4gICdwYWdlYWJsZScsXG5cbiAgLy8gY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZW50aXR5LCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2NvbHVtbnMnLFxuXG4gIC8vIGtleXMgW3N0cmluZ106IGVudGl0eSBrZXlzLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2tleXMnLFxuXG4gIC8vIHBhcmVudC1rZXlzIFtzdHJpbmddOiBwYXJlbnQga2V5cyB0byBmaWx0ZXIsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAncGFyZW50S2V5czogcGFyZW50LWtleXMnLFxuXG4gIC8vIHN0YXRpYy1kYXRhIFtBcnJheTxhbnk+XSA6IHdheSB0byBwb3B1bGF0ZSB3aXRoIHN0YXRpYyBkYXRhLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3N0YXRpY0RhdGE6IHN0YXRpYy1kYXRhJyxcblxuICAvLyBxdWVyeS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gcXVlcmllcy4gRGVmYXVsdDogcXVlcnkuXG4gICdxdWVyeU1ldGhvZDogcXVlcnktbWV0aG9kJyxcblxuICAvLyBwYWdpbmF0ZWQtcXVlcnktbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHBhZ2luYXRlZCBxdWVyaWVzLiBEZWZhdWx0OiBhZHZhbmNlZFF1ZXJ5LlxuICAncGFnaW5hdGVkUXVlcnlNZXRob2QgOiBwYWdpbmF0ZWQtcXVlcnktbWV0aG9kJyxcblxuICAvLyBxdWVyeS1yb3dzIFtudW1iZXJdOiBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gRGVmYXVsdDogMTAuXG4gICdvUXVlcnlSb3dzOiBxdWVyeS1yb3dzJyxcblxuICAvLyBpbnNlcnQtbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIGluc2VydHMuIERlZmF1bHQ6IGluc2VydC5cbiAgJ2luc2VydE1ldGhvZDogaW5zZXJ0LW1ldGhvZCcsXG5cbiAgLy8gdXBkYXRlLW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSB1cGRhdGVzLiBEZWZhdWx0OiB1cGRhdGUuXG4gICd1cGRhdGVNZXRob2Q6IHVwZGF0ZS1tZXRob2QnLFxuXG4gIC8vIGRlbGV0ZS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gZGVsZXRpb25zLiBEZWZhdWx0OiBkZWxldGUuXG4gICdkZWxldGVNZXRob2Q6IGRlbGV0ZS1tZXRob2QnLFxuXG4gICdzdG9yZVN0YXRlOiBzdG9yZS1zdGF0ZScsXG5cbiAgLy8gcXVlcnktd2l0aC1udWxsLXBhcmVudC1rZXlzIFtzdHJpbmddW3llc3xub3x0cnVlfGZhbHNlXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIHRyaWdnZXIgcXVlcnkgbWV0aG9kIHdoZW4gcGFyZW50LWtleXMgZmlsdGVyIGlzIG51bGwuIERlZmF1bHQ6IGZhbHNlXG4gICdxdWVyeVdpdGhOdWxsUGFyZW50S2V5czogcXVlcnktd2l0aC1udWxsLXBhcmVudC1rZXlzJyxcblxuICAvLyBbZnVuY3Rpb25dOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHF1ZXJ5IGVycm9yLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1ZXJ5RmFsbGJhY2tGdW5jdGlvbjogcXVlcnktZmFsbGJhY2stZnVuY3Rpb24nLFxuICAvLyAsXG5cbiAgLy8gJ2luc2VydEZhbGxiYWNrRnVuY3Rpb246IGluc2VydC1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ3VwZGF0ZUZhbGxiYWNrRnVuY3Rpb246IHVwZGF0ZS1mYWxsYmFjay1mdW5jdGlvbicsXG5cbiAgLy8gJ2RlbGV0ZUZhbGxiYWNrRnVuY3Rpb246IGRlbGV0ZS1mYWxsYmFjay1mdW5jdGlvbicsXG4gIC8vICBjb25maWd1cmUtc2VydmljZS1hcmdzIFtPQ29uZmlndXJlU2VydmljZUFyZ3NdOiBBbGxvd3MgY29uZmlndXJlIHNlcnZpY2UgLlxuICAnY29uZmlndXJlU2VydmljZUFyZ3M6IGNvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MnXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1NFUlZJQ0VfQkFTRV9DT01QT05FTlRcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPU2VydmljZUJhc2VDb21wb25lbnQ8VCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlPEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3M+PiBpbXBsZW1lbnRzIElMb2NhbFN0b3JhZ2VDb21wb25lbnQsIE9uQ2hhbmdlcyB7XG5cbiAgcHJvdGVjdGVkIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2U7XG4gIGNvbXBvbmVudFN0YXRlU2VydmljZTogVDtcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XG4gIHByb3RlY3RlZCBvRXJyb3JEaWFsb2dNYW5hZ2VyOiBPRXJyb3JEaWFsb2dNYW5hZ2VyO1xuICBwYXJlbnRDb21wb25lbnQ6IEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PFQ+O1xuXG4gIC8qIGlucHV0cyB2YXJpYWJsZXMgKi9cbiAgb2F0dHI6IHN0cmluZztcbiAgc2VydmljZTogc3RyaW5nO1xuICBzZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBlbnRpdHk6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHF1ZXJ5T25Jbml0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHF1ZXJ5T25CaW5kOiBib29sZWFuID0gdHJ1ZTtcbiAgcXVlcnlPbkV2ZW50OiBhbnk7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwYWdlYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb2x1bW5zOiBzdHJpbmc7XG4gIGtleXM6IHN0cmluZztcbiAgcGFyZW50S2V5czogc3RyaW5nO1xuICBzdGF0aWNEYXRhOiBBcnJheTxhbnk+O1xuICBxdWVyeU1ldGhvZDogc3RyaW5nID0gQ29kZXMuUVVFUllfTUVUSE9EO1xuICBwYWdpbmF0ZWRRdWVyeU1ldGhvZDogc3RyaW5nID0gQ29kZXMuUEFHSU5BVEVEX1FVRVJZX01FVEhPRDtcblxuICBvcmlnaW5hbFF1ZXJ5Um93czogbnVtYmVyID0gQ29kZXMuREVGQVVMVF9RVUVSWV9ST1dTO1xuICBwcm90ZWN0ZWQgX3F1ZXJ5Um93cyA9IHRoaXMub3JpZ2luYWxRdWVyeVJvd3M7XG5cbiAgc2V0IG9RdWVyeVJvd3ModmFsdWU6IG51bWJlcikge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiB2YWx1ZTtcbiAgICAgIHRoaXMub3JpZ2luYWxRdWVyeVJvd3MgPSB2YWx1ZTtcbiAgICAgIHRoaXMuX3F1ZXJ5Um93cyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBxdWVyeVJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlSb3dzO1xuICB9XG5cbiAgc2V0IHF1ZXJ5Um93cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fcXVlcnlSb3dzID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIGluc2VydE1ldGhvZDogc3RyaW5nID0gQ29kZXMuSU5TRVJUX01FVEhPRDtcbiAgdXBkYXRlTWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5VUERBVEVfTUVUSE9EO1xuICBkZWxldGVNZXRob2Q6IHN0cmluZyA9IENvZGVzLkRFTEVURV9NRVRIT0Q7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzdG9yZVN0YXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHF1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXJ5RmFsbGJhY2tGdW5jdGlvbjogKGVycjogYW55KSA9PiB2b2lkO1xuICAvLyBpbnNlcnRGYWxsYmFja0Z1bmN0aW9uOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIC8vIHVwZGF0ZUZhbGxiYWNrRnVuY3Rpb246IChlcnI6IGFueSkgPT4gdm9pZDtcbiAgLy8gZGVsZXRlRmFsbGJhY2tGdW5jdGlvbjogKGVycjogYW55KSA9PiB2b2lkO1xuICAvKiBlbmQgb2YgaW5wdXRzIHZhcmlhYmxlcyAqL1xuXG4gIC8qIHBhcnNlZCBpbnB1dHMgdmFyaWFibGVzICovXG4gIHByb3RlY3RlZCBjb2xBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcm90ZWN0ZWQga2V5c0FycmF5OiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHByb3RlY3RlZCBfcEtleXNFcXVpdiA9IHt9O1xuICBkYXRhQXJyYXk6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJvdGVjdGVkIG9hdHRyRnJvbUVudGl0eTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiBlbmQgb2YgcGFyc2VkIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICBwcm90ZWN0ZWQgb25Sb3V0ZUNoYW5nZVN0b3JhZ2VTdWJzY3JpcHRpb246IGFueTtcbiAgcHJvdGVjdGVkIG9uRm9ybURhdGFTdWJzY3JpYmU6IGFueTtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBCYXNlU2VydmljZTxTZXJ2aWNlUmVzcG9uc2U+O1xuXG4gIHByb3RlY3RlZCBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgbG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJvdGVjdGVkIGZvcm06IE9Gb3JtQ29tcG9uZW50O1xuICBwdWJsaWMgZXhwYW5kYWJsZUNvbnRhaW5lcjogT0V4cGFuZGFibGVDb250YWluZXJDb21wb25lbnQ7XG4gIHByb3RlY3RlZCBhbHJlYWR5U3RvcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmOyAvLyBib3JyYXJcbiAgcHJvdGVjdGVkIHF1ZXJ5QXJndW1lbnRzOiBPUXVlcnlQYXJhbXM7XG5cbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICBwcm90ZWN0ZWQgYWN0Um91dGU6IEFjdGl2YXRlZFJvdXRlO1xuXG4gIHByb3RlY3RlZCBzcWxUeXBlcyA9IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgYWJvcnRRdWVyeTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByb3RlY3RlZCBjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8RGlhbG9nU2VydmljZT4oRGlhbG9nU2VydmljZSBhcyBUeXBlPERpYWxvZ1NlcnZpY2U+KTtcbiAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIgPSB0aGlzLmluamVjdG9yLmdldDxPRXJyb3JEaWFsb2dNYW5hZ2VyPihPRXJyb3JEaWFsb2dNYW5hZ2VyIGFzIFR5cGU8T0Vycm9yRGlhbG9nTWFuYWdlcj4pO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PExvY2FsU3RvcmFnZVNlcnZpY2U+KExvY2FsU3RvcmFnZVNlcnZpY2UgYXMgVHlwZTxMb2NhbFN0b3JhZ2VTZXJ2aWNlPik7XG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxUPihBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSBhcyBUeXBlPFQ+KTtcbiAgICB0aGlzLnJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0PFJvdXRlcj4oUm91dGVyIGFzIFR5cGU8Um91dGVyPik7XG4gICAgdGhpcy5hY3RSb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PEFjdGl2YXRlZFJvdXRlPihBY3RpdmF0ZWRSb3V0ZSBhcyBUeXBlPEFjdGl2YXRlZFJvdXRlPik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY2QgPSB0aGlzLmluamVjdG9yLmdldDxDaGFuZ2VEZXRlY3RvclJlZj4oQ2hhbmdlRGV0ZWN0b3JSZWYgYXMgVHlwZTxDaGFuZ2VEZXRlY3RvclJlZj4pO1xuICAgICAgdGhpcy5mb3JtID0gdGhpcy5pbmplY3Rvci5nZXQ8T0Zvcm1Db21wb25lbnQ+KE9Gb3JtQ29tcG9uZW50IGFzIFR5cGU8T0Zvcm1Db21wb25lbnQ+KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBubyBwYXJlbnQgZm9ybVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5leHBhbmRhYmxlQ29udGFpbmVyID0gdGhpcy5pbmplY3Rvci5nZXQ8T0V4cGFuZGFibGVDb250YWluZXJDb21wb25lbnQ+KE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50IGFzIFR5cGU8T0V4cGFuZGFibGVDb250YWluZXJDb21wb25lbnQ+KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBObyBwYXJlbnQgT0V4cGFuZGFibGVDb250YWluZXJDb21wb25lbnRcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXplTG9hZGluZ1N1YmplY3QoKSB7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBBYnN0cmFjdFNlcnZpY2VDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUxvYWRpbmdTdWJqZWN0KCk7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLm9hdHRyKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmVudGl0eSkpIHtcbiAgICAgIHRoaXMub2F0dHIgPSB0aGlzLmVudGl0eS5yZXBsYWNlKCcuJywgJ18nKTtcbiAgICAgIHRoaXMub2F0dHJGcm9tRW50aXR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5rZXlzQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5rZXlzKTtcbiAgICB0aGlzLmNoZWNrQ29sdW1ucygpO1xuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSwgQ29kZXMuQ09MVU1OU19BTElBU19TRVBBUkFUT1IpO1xuXG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMucXVlcnlPbkJpbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMucXVlcnlPbkluaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuc3RhdGljRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0gJiYgVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU2VydmljZSkpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudCh0aGlzLmZvcm0pO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5T25FdmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKSkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlPbkV2ZW50LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHZhbHVlKSB8fCB0aGlzLnF1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzKSB7XG4gICAgICAgICAgc2VsZi5xdWVyeURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDb2x1bW5zKCkge1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBJbiB0aGUgY29tcG9uZW50ICcke3RoaXMub2F0dHJ9JywgdGhlIGtleSAnJHtrZXl9JyBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbnMgZGVmaW5pdGlvbiBhbmQgc29tZSBmdW5jdGlvbmFsaXRpZXMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseWApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWdpc3RlckxvY2FsU3RvcmFnZVNlcnZpY2VSb3V0ZUNoYW5nZSgpO1xuXG4gICAgdGhpcy5hYm9ydFF1ZXJ5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhKFtdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub25Gb3JtRGF0YVN1YnNjcmliZSkge1xuICAgICAgdGhpcy5vbkZvcm1EYXRhU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuU2V0U3RhdGljRGF0YShzdGF0aWNEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoc3RhdGljRGF0YSlcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSkge1xuICAgIGlmICh0aGlzLmNhblNldFN0YXRpY0RhdGEoY2hhbmdlcy5zdGF0aWNEYXRhPy5jdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnNldERhdGEoY2hhbmdlcy5zdGF0aWNEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFtdKVxuICBiZWZvcmV1bmxvYWRIYW5kbGVyKCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGVTdG9yYWdlKCk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vYXR0cjtcbiAgfVxuXG4gIGdldENvbXBvbmVudEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgpO1xuICB9XG5cbiAgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMuYWN0Um91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHJvdXRlID0gcm91dGUucmVwbGFjZShwYXJhbXNba2V5XSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIGdldEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmtleXNBcnJheTtcbiAgfVxuXG4gIGNvbmZpZ3VyZVNlcnZpY2UoKSB7XG4gICAgbGV0IGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MgPSB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yLCBiYXNlU2VydmljZTogT250aW1pemVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncykpIHtcbiAgICAgIGNvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyAuLi5jb25maWd1cmVTZXJ2aWNlQXJncywgLi4udGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncyB9O1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBGYWN0b3J5VXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogMCwgcGFnZVNpemU6IHRoaXMucXVlcnlSb3dzLCBvZmZzZXQ6IDAsIHRvdGFsU2l6ZTogMCB9KTtcbiAgfVxuXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQXJyYXk7XG4gIH1cblxuICBzZXREYXRhQXJyYXkoZGF0YTogYW55KTogdm9pZCB7XG4gICAgLyogVGhlIG8tdGFibGUgaGFzIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCAqL1xuICAgIGlmIChVdGlsLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvbXBvbmVudCBoYXMgcmVjZWl2ZWQgbm90IHN1cHBvcnRlZCBzZXJ2aWNlIGRhdGEuIFN1cHBvcnRlZCBkYXRhIGFyZSBBcnJheSBvciBPYmplY3QnKTtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YUFycmF5IGluc3RhbmNlb2YgQXJyYXkgJiYgdGhpcy5kYXRhQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlPy5yZWluaXRpYWxpemVQYWdpbmF0aW9uQ29udGV4dCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgc2V0Rm9ybUNvbXBvbmVudChmb3JtOiBPRm9ybUNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5mb3JtKSkge1xuICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWVyeU9uQmluZCkge1xuICAgICAgdGhpcy5vbkZvcm1EYXRhU3Vic2NyaWJlID0gdGhpcy5mb3JtLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdlYWJsZSA/IHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpIDogdGhpcy5yZWxvYWREYXRhKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJlbnRLZXlzRnJvbUNvbnRleHQocGFyZW50S2V5czogb2JqZWN0LCBjb250ZXh0OiBhbnkpIHtcbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgY29uc3QgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSA9IHRoaXMucm91dGVyLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kgIT09ICdhbHdheXMnO1xuICAgIGlmIChjb250ZXh0IGluc3RhbmNlb2YgT0V4cGFuZGFibGVDb250YWluZXJDb21wb25lbnQpIHtcbiAgICAgIHJlc3VsdCA9IFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUV4cGFuZGFibGVDb250YWluZXIocGFyZW50S2V5cywgY29udGV4dCwgdGhpcy5hY3RSb3V0ZSwgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUZvcm0ocGFyZW50S2V5cywgY29udGV4dCwgdGhpcy5hY3RSb3V0ZSwgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBjbGVhckRhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA9IDA7XG4gICAgdGhpcy5zZXREYXRhKFtdLCBbXSk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlEYXRhKGZpbHRlcj86IGFueSwgb3ZyckFyZ3M/OiBPUXVlcnlEYXRhQXJncyk6IHZvaWQge1xuXG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuXG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEocXVlcnlNZXRob2ROYW1lIGluIHRoaXMuZGF0YVNlcnZpY2UpIHx8ICF0aGlzLmVudGl0eSkge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyUGFyZW50S2V5cyA9IHRoaXMuZ2V0UGFyZW50S2V5c1ZhbHVlcygpO1xuICAgIGlmICghU2VydmljZVV0aWxzLmZpbHRlckNvbnRhaW5zQWxsUGFyZW50S2V5cyhmaWx0ZXJQYXJlbnRLZXlzLCB0aGlzLl9wS2V5c0VxdWl2KSAmJiAhdGhpcy5xdWVyeVdpdGhOdWxsUGFyZW50S2V5cykge1xuICAgICAgdGhpcy5zZXREYXRhKFtdLCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgLy8gZW5zdXJpbmcgZmFsc2UgdmFsdWVcbiAgICAgIHRoaXMuYWJvcnRRdWVyeS5uZXh0KGZhbHNlKTtcblxuXG4gICAgICBpZiAodGhpcy5hYm9ydFF1ZXJ5LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJEYXRhKCk7XG4gICAgICAgIC8qKiAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCkgaXMgdXNlZCB0byB1cGRhdGUgbG9hZGluZ1N1YmplY3QgdmFsdWUgKHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTsgaW4gbGluZSAzNzcpXG4gICAgICAgICAqICBiZWZvcmUgdXNpbmcgdGhlIG5leHQgbGluZSBhbmQgc28gdXBkYXRlIHRoZSBvVGFibGVFeHBhbmRlZEZvb3RlciBkaXJlY3RpdmUgYW5kIGRpc3BsYXkgdGhlIG1lc3NhZ2VcbiAgICAgICAgICogdGhhdCB0aGVyZSBhcmUgbm8gcmVzdWx0cyB3aGVuIHRoZSBxdWVyeSBpcyBhYm9ydGVkKi9cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5xdWVyeUFyZ3VtZW50cyA9IHRoaXMuZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyLCBvdnJyQXJncyk7XG5cbiAgICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFTZXJ2aWNlW3F1ZXJ5TWV0aG9kTmFtZV0oLi4udGhpcy5kYXRhU2VydmljZS5yZXF1ZXN0QXJndW1lbnRBZGFwdGVyLnBhcnNlUXVlcnlQYXJhbWV0ZXJzKHRoaXMucXVlcnlBcmd1bWVudHMpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IFNlcnZpY2VSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgIHRoaXMuc3FsVHlwZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKFV0aWwuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzO1xuICAgICAgICAgICAgdGhpcy5zcWxUeXBlcyA9IHt9O1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJEYXRhID0gKHJlcy5kYXRhICE9PSB1bmRlZmluZWQpID8gcmVzLmRhdGEgOiBbXTtcbiAgICAgICAgICAgIGRhdGEgPSBVdGlsLmlzQXJyYXkoYXJyRGF0YSkgPyBhcnJEYXRhIDogW107XG4gICAgICAgICAgICB0aGlzLnNxbFR5cGVzID0gcmVzLnNxbFR5cGVzO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uSW5mbyhyZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhLCB0aGlzLnNxbFR5cGVzLCAob3ZyckFyZ3MgJiYgb3ZyckFyZ3MucmVwbGFjZSkpO1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKFtdLCBbXSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbihlcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIub3BlbkVycm9yRGlhbG9nKGVycik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbG9hZHMgdGhlIGNvbXBvbmVudCBkYXRhIGFuZCByZXN0YXJ0cyB0aGUgcGFnaW5hdGlvbi5cbiAgICovXG4gIHJlbG9hZFBhZ2luYXRlZERhdGFGcm9tU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdGluZyB0aGUgZ2l2ZW4gcmVjb3JkIGtleXNcbiAgICogQHBhcmFtIGl0ZW0gcmVjb3JkIG9iamVjdFxuICAgKiBAcmV0dXJucyBvYmplY3QgY29udGFpbmluZyBpdGVtIG9iamVjdCBwcm9wZXJ0aWVzIGNvbnRhaW5lZCBpbiBrZXlzQXJyYXlcbiAgICovXG4gIGV4dHJhY3RLZXlzRnJvbVJlY29yZChpdGVtOiBhbnkpOiBvYmplY3Qge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGlmIChVdGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtW2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBpdGVtW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlc1ZhbHVlc1RvUXVlcnkoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb2xBcnJheTtcbiAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxuICBnZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXI6IG9iamVjdCwgb3ZyckFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge30pOiBPUXVlcnlQYXJhbXMge1xuICAgIGNvbnN0IGNvbXBGaWx0ZXIgPSB0aGlzLmdldENvbXBvbmVudEZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IHF1ZXJ5Q29scyA9IHRoaXMuZ2V0QXR0cmlidXRlc1ZhbHVlc1RvUXVlcnkoKTtcbiAgICBjb25zdCBzcWxUeXBlcyA9IChvdnJyQXJncyAmJiBvdnJyQXJncy5oYXNPd25Qcm9wZXJ0eSgnc3FsdHlwZXMnKSkgPyBvdnJyQXJncy5zcWx0eXBlcyA6IHRoaXMuZm9ybSA/IHRoaXMuZm9ybS5nZXRBdHRyaWJ1dGVzU1FMVHlwZXMoKSA6IHt9O1xuXG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5UmVjb3JkT2Zmc2V0ID0gdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA/IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgOiAwO1xuICAgICAgb3ZyckFyZ3Mub2Zmc2V0ID0gb3ZyckFyZ3M/Lmhhc093blByb3BlcnR5KCdvZmZzZXQnKSA/IG92cnJBcmdzLm9mZnNldCA6IHF1ZXJ5UmVjb3JkT2Zmc2V0O1xuICAgICAgb3ZyckFyZ3MubGVuZ3RoID0gb3ZyckFyZ3M/Lmhhc093blByb3BlcnR5KCdsZW5ndGgnKSA/IG92cnJBcmdzLmxlbmd0aCA6IHRoaXMucXVlcnlSb3dzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaWx0ZXI6IGNvbXBGaWx0ZXIsXG4gICAgICBjb2x1bW5zOiBxdWVyeUNvbHMsXG4gICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxuICAgICAgcGFnZWFibGU6IHRoaXMucGFnZWFibGUsXG4gICAgICBzcWxUeXBlczogc3FsVHlwZXMsXG4gICAgICBvdnJyQXJnczogb3ZyckFyZ3MsXG4gICAgICBzb3J0OiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVBhZ2luYXRpb25JbmZvKHF1ZXJ5UmVzOiBTZXJ2aWNlUmVzcG9uc2UpIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgaWYgKHF1ZXJ5UmVzLnN0YXJ0UmVjb3JkSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZXN1bHRFbmRJbmRleCA9IHF1ZXJ5UmVzLnN0YXJ0UmVjb3JkSW5kZXggKyAocXVlcnlSZXMuZGF0YSA/IHF1ZXJ5UmVzLmRhdGEubGVuZ3RoIDogMCk7XG4gICAgICAgIHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgPSByZXN1bHRFbmRJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChxdWVyeVJlcy50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgPSBxdWVyeVJlcy50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlcjtcbiAgICAgIH1cbiAgICAgIC8qIHBhZ2VOdW1iZXIgPSAwIGlzIHJlaW5pdGlhbGl6ZWQgd2hlbiBpdCBnZW5lcmF0ZXMgYSBzZWFyY2ggICovXG4gICAgICBjb25zdCBwYWdlTnVtYmVyID0gdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA9PSAwID8gMCA6IHRoaXMuZGF0YVNlcnZpY2U/LmdldFBhZ2luYXRpb25Db250ZXh0KCkucGFnZU51bWJlcjtcbiAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkNvbnRleHQoeyBwYWdlTnVtYmVyOiBwYWdlTnVtYmVyLCBvZmZzZXQ6IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsIHRvdGFsU2l6ZTogdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciwgcGFnZVNpemU6IHRoaXMuc3RhdGUucXVlcnlSb3dzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHsgdG90YWxTaXplOiBxdWVyeVJlcy5kYXRhLmxlbmd0aCB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVQYWdpbmF0aW9uQ29udGV4dChwYWdpbmF0aW9uQ29udGV4dDogUGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIGRlbGV0ZSBwYWdpbmF0aW9uQ29udGV4dC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhU2VydmljZT8uc2V0UGFnaW5hdGlvbkNvbnRleHQocGFnaW5hdGlvbkNvbnRleHQpO1xuICB9XG5cbiAgZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIpID8gdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENvbnRleHRDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUNvbnRhaW5lciB8fCB0aGlzLmZvcm07XG4gIH1cblxuICBnZXRDb21wb25lbnRGaWx0ZXIoZXhpc3RpbmdGaWx0ZXI6IGFueSA9IHt9KTogYW55IHtcbiAgICBjb25zdCBmaWx0ZXJQYXJlbnRLZXlzID0gdGhpcy5nZXRQYXJlbnRLZXlzRnJvbUNvbnRleHQodGhpcy5fcEtleXNFcXVpdiwgdGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCkpO1xuICAgIGV4aXN0aW5nRmlsdGVyID0geyAuLi5leGlzdGluZ0ZpbHRlciB8fCB7fSwgLi4uZmlsdGVyUGFyZW50S2V5cyB9O1xuICAgIHJldHVybiBleGlzdGluZ0ZpbHRlcjtcbiAgfVxuXG4gIGdldFNxbFR5cGVzKCkge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLnNxbFR5cGVzKSA/IHRoaXMuc3FsVHlwZXMgOiB7fTtcbiAgfVxuXG4gIGdldFBhcmVudEtleXNWYWx1ZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dENvbXBvbmVudCgpO1xuICAgIHJldHVybiB0aGlzLmdldFBhcmVudEtleXNGcm9tQ29udGV4dCh0aGlzLl9wS2V5c0VxdWl2LCBjb250ZXh0KTtcbiAgfVxuXG4gIGdldEZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcbiAgfVxuICBnZXRQYXJlbnRLZXlzRXF1aXZhbGVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BLZXlzRXF1aXY7XG4gIH1cbiAgZ2V0RGF0YVNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2U7XG4gIH1cblxuXG4gIHByb3RlY3RlZCB1cGRhdGVTdGF0ZVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlU2VydmljZSAmJiB0aGlzLnN0b3JlU3RhdGUgJiYgIXRoaXMuYWxyZWFkeVN0b3JlZCkge1xuICAgICAgdGhpcy5hbHJlYWR5U3RvcmVkID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS51cGRhdGVDb21wb25lbnRTdG9yYWdlKHRoaXMsIHRoaXMuZ2V0Um91dGVLZXkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEoZGF0YTogYW55LCBzcWxUeXBlcz86IGFueSwgcmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyTG9jYWxTdG9yYWdlU2VydmljZVJvdXRlQ2hhbmdlKCkge1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHRoaXMub25Sb3V0ZUNoYW5nZVN0b3JhZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uub25Sb3V0ZUNoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHRPU2VydmljZUJhc2VDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZT4ge1xuXG59XG5cbi8qIFRoaXMgY2xhc3MgaXMgYmVpbmcgZGVmaW5lZCB0byBtYW50YWluIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zLCB1c2UgRGVmYXVsdE9TZXJ2aWNlQmFzZUNvbXBvbmVudCovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBPU2VydmljZUJhc2VDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZT4ge1xuXG59XG4iXX0=
|