@eui/components 17.0.0-next.6 → 17.0.0-next.8
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/directives/eui-clearable.directive.d.ts.map +1 -1
- package/esm2022/directives/eui-clearable.directive.mjs +10 -9
- package/esm2022/directives/eui-has-permission.directive.mjs +9 -9
- package/esm2022/directives/eui-loading.directive.mjs +5 -5
- package/esm2022/directives/eui-maxlength.directive.mjs +10 -10
- package/esm2022/directives/eui-resizable/eui-resizable.component.mjs +3 -3
- package/esm2022/directives/eui-resizable/eui-resizable.directive.mjs +6 -6
- package/esm2022/directives/eui-resizable/eui-resizable.module.mjs +4 -4
- package/esm2022/directives/eui-scroll-handler.directive.mjs +15 -15
- package/esm2022/directives/eui-smooth-scroll.directive.mjs +13 -13
- package/esm2022/directives/eui-template.directive.mjs +9 -9
- package/esm2022/directives/eui-tooltip/container/eui-tooltip-container.component.mjs +6 -6
- package/esm2022/directives/eui-tooltip/eui-tooltip.directive.mjs +5 -5
- package/esm2022/directives/eui-tooltip/eui-tooltip.module.mjs +4 -4
- package/esm2022/eui-alert/eui-alert.component.mjs +9 -9
- package/esm2022/eui-all/eui-all.module.mjs +10 -9
- package/esm2022/eui-autocomplete/eui-autocomplete.component.mjs +13 -12
- package/esm2022/eui-autocomplete/eui-autocomplete.module.mjs +4 -4
- package/esm2022/eui-badge/eui-badge.component.mjs +9 -9
- package/esm2022/eui-block-content/eui-block-content.component.mjs +5 -5
- package/esm2022/eui-block-content/eui-block-content.module.mjs +4 -4
- package/esm2022/eui-block-document/eui-block-document.component.mjs +5 -5
- package/esm2022/eui-block-document/eui-block-document.module.mjs +4 -4
- package/esm2022/eui-button/eui-button.component.mjs +9 -9
- package/esm2022/eui-button-group/eui-button-group.component.mjs +9 -9
- package/esm2022/eui-buttons/eui-buttons.component.mjs +15 -15
- package/esm2022/eui-card/components/eui-card-content/eui-card-content.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-footer/eui-card-footer-action-buttons.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-footer/eui-card-footer-action-icons.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-footer/eui-card-footer-menu-content.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-footer/eui-card-footer.component.mjs +4 -4
- package/esm2022/eui-card/components/eui-card-header/eui-card-header-left-content.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-header/eui-card-header-right-content.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-header/eui-card-header-subtitle.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-header/eui-card-header-title.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-header/eui-card-header.component.mjs +5 -5
- package/esm2022/eui-card/components/eui-card-header-body/eui-card-header-body.component.mjs +3 -3
- package/esm2022/eui-card/components/eui-card-media/eui-card-media.component.mjs +3 -3
- package/esm2022/eui-card/eui-card.component.mjs +5 -5
- package/esm2022/eui-card/eui-card.module.mjs +4 -4
- package/esm2022/eui-card/services/ui-state.service.mjs +3 -3
- package/esm2022/eui-chip/eui-chip.component.mjs +5 -5
- package/esm2022/eui-chip/eui-chip.module.mjs +4 -4
- package/esm2022/eui-chip-list/eui-chip-list.component.mjs +8 -8
- package/esm2022/eui-chip-list/eui-chip-list.module.mjs +4 -4
- package/esm2022/eui-chip-list/services/eui-chip-list-drag.service.mjs +3 -3
- package/esm2022/eui-dashboard-button/eui-dashboard-button.component.mjs +15 -15
- package/esm2022/eui-dashboard-card/eui-dashboard-card.component.mjs +9 -9
- package/esm2022/eui-date-range-selector/eui-date-range-selector.component.mjs +7 -7
- package/esm2022/eui-date-range-selector/eui-date-range-selector.module.mjs +4 -4
- package/esm2022/eui-datepicker/eui-datepicker.component.mjs +19 -19
- package/esm2022/eui-datepicker/eui-datepicker.module.mjs +4 -4
- package/esm2022/eui-dialog/container/eui-dialog-container.component.mjs +21 -7
- package/esm2022/eui-dialog/eui-dialog.component.mjs +11 -11
- package/esm2022/eui-dialog/eui-dialog.module.mjs +4 -4
- package/esm2022/eui-dialog/services/eui-dialog.service.mjs +4 -4
- package/esm2022/eui-dimmer/dimmer.component.mjs +5 -5
- package/esm2022/eui-dimmer/dimmer.module.mjs +4 -4
- package/esm2022/eui-disable-content/eui-disable-content.component.mjs +9 -9
- package/esm2022/eui-discussion-thread/eui-discussion-thread-item.component.mjs +3 -3
- package/esm2022/eui-discussion-thread/eui-discussion-thread.component.mjs +3 -3
- package/esm2022/eui-discussion-thread/eui-discussion-thread.module.mjs +4 -4
- package/esm2022/eui-dropdown/directives/eui-dropdown-content.directive.mjs +3 -3
- package/esm2022/eui-dropdown/dropdown-item/eui-dropdown-item.component.mjs +6 -6
- package/esm2022/eui-dropdown/eui-dropdown.component.mjs +14 -9
- package/esm2022/eui-dropdown/eui-dropdown.module.mjs +8 -8
- package/esm2022/eui-dropdown/eui-dropdown.service.mjs +3 -3
- package/esm2022/eui-feedback-message/eui-feedback-message.component.mjs +5 -5
- package/esm2022/eui-feedback-message/eui-feedback-message.module.mjs +4 -4
- package/esm2022/eui-fieldset/eui-fieldset.component.mjs +11 -11
- package/esm2022/eui-fieldset/eui-fieldset.module.mjs +4 -4
- package/esm2022/eui-file-upload/eui-file-upload.component.mjs +3 -3
- package/esm2022/eui-file-upload/eui-file-upload.module.mjs +4 -4
- package/esm2022/eui-file-upload/file-preview/file-preview.component.mjs +5 -5
- package/esm2022/eui-file-upload/pipes/filesize.pipe.mjs +3 -3
- package/esm2022/eui-file-upload/progress/eui-file-upload-progress.component.mjs +3 -3
- package/esm2022/eui-file-upload/utils/eui-file-upload.utils.mjs +4 -4
- package/esm2022/eui-growl/eui-growl.component.mjs +5 -5
- package/esm2022/eui-growl/eui-growl.module.mjs +4 -4
- package/esm2022/eui-icon/eui-icon-color.component.mjs +3 -3
- package/esm2022/eui-icon/eui-icon-svg.component.mjs +6 -6
- package/esm2022/eui-icon/eui-icon.component.mjs +5 -5
- package/esm2022/eui-icon/eui-icon.module.mjs +4 -4
- package/esm2022/eui-icon-toggle/eui-icon-toggle.component.mjs +3 -3
- package/esm2022/eui-icon-toggle/eui-icon-toggle.module.mjs +4 -4
- package/esm2022/eui-input-checkbox/eui-input-checkbox.component.mjs +6 -6
- package/esm2022/eui-input-checkbox/eui-input-checkbox.module.mjs +4 -4
- package/esm2022/eui-input-group/eui-input-group.component.mjs +4 -4
- package/esm2022/eui-input-group/eui-input-group.module.mjs +4 -4
- package/esm2022/eui-input-number/eui-input-number.component.mjs +7 -7
- package/esm2022/eui-input-number/eui-input-number.module.mjs +4 -4
- package/esm2022/eui-input-number/eui-number-control.directive.mjs +5 -5
- package/esm2022/eui-input-radio/eui-input-radio.component.mjs +6 -6
- package/esm2022/eui-input-radio/eui-input-radio.module.mjs +4 -4
- package/esm2022/eui-input-text/eui-input-text.component.mjs +7 -7
- package/esm2022/eui-input-text/eui-input-text.module.mjs +4 -4
- package/esm2022/eui-label/eui-label.component.mjs +5 -5
- package/esm2022/eui-label/eui-label.module.mjs +4 -4
- package/esm2022/eui-list/eui-list-item/eui-list-item.component.mjs +5 -5
- package/esm2022/eui-list/eui-list.component.mjs +5 -5
- package/esm2022/eui-list/eui-list.module.mjs +4 -4
- package/esm2022/eui-list/services/eui-list.service.mjs +3 -3
- package/esm2022/eui-menu/eui-menu-item.component.mjs +5 -5
- package/esm2022/eui-menu/eui-menu.component.mjs +5 -5
- package/esm2022/eui-menu/eui-menu.module.mjs +4 -4
- package/esm2022/eui-message-box/eui-message-box.component.mjs +18 -9
- package/esm2022/eui-message-box/eui-message-box.module.mjs +4 -4
- package/esm2022/eui-message-box/services/eui-message-box.service.mjs +6 -6
- package/esm2022/eui-overlay/components/eui-overlay-body/eui-overlay-body.component.mjs +6 -6
- package/esm2022/eui-overlay/components/eui-overlay-footer/eui-overlay-footer.component.mjs +6 -6
- package/esm2022/eui-overlay/components/eui-overlay-header/eui-overlay-header-title/eui-overlay-header-title.component.mjs +6 -6
- package/esm2022/eui-overlay/components/eui-overlay-header/eui-overlay-header.component.mjs +6 -6
- package/esm2022/eui-overlay/eui-overlay.component.mjs +36 -18
- package/esm2022/eui-page/components/eui-page-breadcrumb/eui-page-breadcrumb.component.mjs +3 -3
- package/esm2022/eui-page/components/eui-page-column/eui-page-column.component.mjs +23 -23
- package/esm2022/eui-page/components/eui-page-columns/eui-page-columns.component.mjs +3 -3
- package/esm2022/eui-page/components/eui-page-content/eui-page-content.component.mjs +3 -3
- package/esm2022/eui-page/components/eui-page-footer/eui-page-footer.component.mjs +5 -5
- package/esm2022/eui-page/components/eui-page-header/eui-page-header.component.mjs +15 -11
- package/esm2022/eui-page/components/eui-page-hero-header/eui-page-hero-header.component.mjs +3 -3
- package/esm2022/eui-page/components/eui-page-top-content/eui-page-top-content.component.mjs +5 -5
- package/esm2022/eui-page/eui-page.component.mjs +4 -4
- package/esm2022/eui-page/eui-page.module.mjs +4 -4
- package/esm2022/eui-paginator/eui-paginator.component.mjs +5 -5
- package/esm2022/eui-paginator/eui-paginator.module.mjs +4 -4
- package/esm2022/eui-picker/eui-picker.component.mjs +5 -5
- package/esm2022/eui-picker/eui-picker.module.mjs +4 -4
- package/esm2022/eui-picker/modal-picker/eui-modal-picker.component.mjs +5 -5
- package/esm2022/eui-popover/directives/eui-popover-arrow-position.directive.mjs +6 -6
- package/esm2022/eui-popover/eui-popover.component.mjs +5 -5
- package/esm2022/eui-popover/eui-popover.module.mjs +4 -4
- package/esm2022/eui-progress-bar/eui-progress-bar.component.mjs +5 -5
- package/esm2022/eui-progress-bar/eui-progress-bar.module.mjs +4 -4
- package/esm2022/eui-progress-circle/eui-progress-circle.component.mjs +9 -9
- package/esm2022/eui-select/eui-select-control.directive.mjs +6 -6
- package/esm2022/eui-select/eui-select-multiple.directive.mjs +6 -6
- package/esm2022/eui-select/eui-select-mutli-option.directive.mjs +6 -6
- package/esm2022/eui-select/eui-select-option.directive.mjs +6 -6
- package/esm2022/eui-select/eui-select.component.mjs +6 -6
- package/esm2022/eui-select/eui-select.module.mjs +4 -4
- package/esm2022/eui-sidebar-menu/eui-sidebar-menu.component.mjs +3 -3
- package/esm2022/eui-sidebar-menu/eui-sidebar-menu.module.mjs +4 -4
- package/esm2022/eui-slide-toggle/eui-slide-toggle.component.mjs +6 -6
- package/esm2022/eui-slide-toggle/eui-slide-toggle.module.mjs +4 -4
- package/esm2022/eui-table/directives/eui-table-sticky-columns.directive.mjs +3 -3
- package/esm2022/eui-table/eui-table.component.mjs +39 -9
- package/esm2022/eui-table/eui-table.module.mjs +4 -4
- package/esm2022/eui-table/expandable-row/eui-table-expandable-row.component.mjs +3 -3
- package/esm2022/eui-table/filter/eui-table-filter.component.mjs +5 -5
- package/esm2022/eui-table/pipes/eui-table-highlight-filter.pipe.mjs +3 -3
- package/esm2022/eui-table/selectable-header/eui-table-selectable-header.component.mjs +5 -5
- package/esm2022/eui-table/selectable-row/eui-table-selectable-row.component.mjs +5 -5
- package/esm2022/eui-table/services/eui-table-selectable-row.service.mjs +3 -3
- package/esm2022/eui-table/services/eui-table-sort.service.mjs +3 -3
- package/esm2022/eui-table/sortable-col/eui-table-sortable-col.component.mjs +5 -5
- package/esm2022/eui-tabs/eui-tab/eui-tab.component.mjs +5 -5
- package/esm2022/eui-tabs/eui-tab-content/eui-tab-content.component.mjs +5 -5
- package/esm2022/eui-tabs/eui-tab-label/eui-tab-label.component.mjs +8 -8
- package/esm2022/eui-tabs/eui-tabs.component.mjs +8 -8
- package/esm2022/eui-tabs/eui-tabs.module.mjs +4 -4
- package/esm2022/eui-textarea/auto-resize.directive.mjs +6 -6
- package/esm2022/eui-textarea/eui-textarea.component.mjs +6 -6
- package/esm2022/eui-textarea/eui-textarea.module.mjs +4 -4
- package/esm2022/eui-timebar/eui-timebar.component.mjs +9 -9
- package/esm2022/eui-timeline/eui-timeline-item.component.mjs +6 -6
- package/esm2022/eui-timeline/eui-timeline.component.mjs +3 -3
- package/esm2022/eui-timeline/eui-timeline.module.mjs +4 -4
- package/esm2022/eui-timepicker/eui-timepicker.component.mjs +6 -6
- package/esm2022/eui-timepicker/eui-timepicker.module.mjs +4 -4
- package/esm2022/eui-tree/eui-dropdown-tree.directive.mjs +10 -10
- package/esm2022/eui-tree/eui-tree-form-control.directive.mjs +10 -10
- package/esm2022/eui-tree/eui-tree.component.mjs +9 -9
- package/esm2022/eui-wizard/eui-wizard-step.component.mjs +3 -3
- package/esm2022/eui-wizard/eui-wizard.component.mjs +3 -3
- package/esm2022/eui-wizard/eui-wizard.module.mjs +4 -4
- package/esm2022/eui-wizard/services/eui-wizard.service.mjs +4 -4
- package/esm2022/externals/charts/chart/chart.component.mjs +3 -3
- package/esm2022/externals/charts/eui-charts.module.mjs +4 -4
- package/esm2022/externals/eui-editor/counters/eui-editor-counters.component.mjs +3 -3
- package/esm2022/externals/eui-editor/directives/eui-editor-maxlength.directive.mjs +6 -6
- package/esm2022/externals/eui-editor/eui-editor.component.mjs +10 -10
- package/esm2022/externals/eui-editor/eui-editor.module.mjs +4 -4
- package/esm2022/externals/eui-editor/html-view/eui-editor-html-view.component.mjs +5 -5
- package/esm2022/externals/eui-editor/image-url-dialog/image-url-dialog.component.mjs +5 -5
- package/esm2022/externals/eui-editor/json-view/eui-editor-json-view.component.mjs +6 -6
- package/esm2022/externals/quill/quill-editor.component.mjs +6 -6
- package/esm2022/externals/quill/quill.module.mjs +4 -4
- package/esm2022/layout/eui-app/eui-app-breadcrumb/breadcrumb.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-breadcrumb/breadcrumb.module.mjs +4 -4
- package/esm2022/layout/eui-app/eui-app-footer/footer.component.mjs +3 -3
- package/esm2022/layout/eui-app/eui-app-footer/footer.module.mjs +4 -4
- package/esm2022/layout/eui-app/eui-app-header/header.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-header/header.module.mjs +4 -4
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-body/sidebar-body.component.mjs +3 -3
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-drawer/sidebar-drawer.component.mjs +3 -3
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-footer/sidebar-footer.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-header/sidebar-header.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-header-user-profile/sidebar-header-user-profile.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-menu/sidebar-menu.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar.component.mjs +6 -6
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar.module.mjs +4 -4
- package/esm2022/layout/eui-app/eui-app-toolbar/toolbar.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-toolbar/toolbar.module.mjs +4 -4
- package/esm2022/layout/eui-app/eui-app-top-message/top-message.component.mjs +5 -5
- package/esm2022/layout/eui-app/eui-app-top-message/top-message.module.mjs +4 -4
- package/esm2022/layout/eui-app/eui-app.component.mjs +10 -9
- package/esm2022/layout/eui-app/eui-app.module.mjs +4 -4
- package/esm2022/layout/eui-breadcrumb/breadcrumb.component.mjs +5 -5
- package/esm2022/layout/eui-breadcrumb/breadcrumb.module.mjs +4 -4
- package/esm2022/layout/eui-breadcrumb/breadcrumb.service.mjs +4 -4
- package/esm2022/layout/eui-breadcrumb/collapsed-breadcrumb/collapsed-breadcrumb.component.mjs +8 -8
- package/esm2022/layout/eui-breadcrumb/item/breadcrumb-item.component.mjs +6 -6
- package/esm2022/layout/eui-footer/footer.component.mjs +5 -5
- package/esm2022/layout/eui-footer/footer.module.mjs +4 -4
- package/esm2022/layout/eui-header/header-app/header-app.component.mjs +15 -15
- package/esm2022/layout/eui-header/header-app-name/header-app-name.component.mjs +6 -6
- package/esm2022/layout/eui-header/header-app-name-logo/header-app-name-logo.component.mjs +6 -6
- package/esm2022/layout/eui-header/header-app-subtitle/header-app-subtitle.component.mjs +6 -6
- package/esm2022/layout/eui-header/header-environment/header-environment.component.mjs +6 -6
- package/esm2022/layout/eui-header/header-logo/header-logo.component.mjs +6 -6
- package/esm2022/layout/eui-header/header-user-profile/header-user-profile.component.mjs +4 -4
- package/esm2022/layout/eui-header/header.component.mjs +3 -3
- package/esm2022/layout/eui-header/header.module.mjs +4 -4
- package/esm2022/layout/eui-language-selector/language-selector.component.mjs +5 -5
- package/esm2022/layout/eui-language-selector/language-selector.module.mjs +4 -4
- package/esm2022/layout/eui-language-selector/modal-selector/modal-selector.component.mjs +5 -5
- package/esm2022/layout/eui-layout.module.mjs +4 -4
- package/esm2022/layout/eui-notifications/eui-notification-item.component.mjs +3 -3
- package/esm2022/layout/eui-notifications/eui-notifications.component.mjs +3 -3
- package/esm2022/layout/eui-notifications/eui-notifications.module.mjs +4 -4
- package/esm2022/layout/eui-notifications-v2/eui-notification-item.component.mjs +5 -5
- package/esm2022/layout/eui-notifications-v2/eui-notifications.component.mjs +5 -5
- package/esm2022/layout/eui-notifications-v2/eui-notifications.module.mjs +4 -4
- package/esm2022/layout/eui-search/search.component.mjs +5 -5
- package/esm2022/layout/eui-search/search.module.mjs +4 -4
- package/esm2022/layout/eui-sidebar-toggle/sidebar-toggle.component.mjs +5 -5
- package/esm2022/layout/eui-sidebar-toggle/sidebar-toggle.module.mjs +4 -4
- package/esm2022/layout/eui-toolbar/toolbar-app/toolbar-app.component.mjs +3 -3
- package/esm2022/layout/eui-toolbar/toolbar-center/toolbar-center.component.mjs +3 -3
- package/esm2022/layout/eui-toolbar/toolbar-environment/toolbar-environment.component.mjs +3 -3
- package/esm2022/layout/eui-toolbar/toolbar-item/toolbar-item.component.mjs +3 -3
- package/esm2022/layout/eui-toolbar/toolbar-item-notifications/toolbar-item-notifications.component.mjs +3 -3
- package/esm2022/layout/eui-toolbar/toolbar-item-search/toolbar-item-search.component.mjs +3 -3
- package/esm2022/layout/eui-toolbar/toolbar-item-user-profile/toolbar-item-user-profile.component.mjs +21 -6
- package/esm2022/layout/eui-toolbar/toolbar-items/toolbar-items.component.mjs +5 -5
- package/esm2022/layout/eui-toolbar/toolbar-logo/toolbar-logo.component.mjs +5 -5
- package/esm2022/layout/eui-toolbar/toolbar-menu/toolbar-menu.component.mjs +5 -5
- package/esm2022/layout/eui-toolbar/toolbar.component.mjs +5 -5
- package/esm2022/layout/eui-toolbar/toolbar.module.mjs +4 -4
- package/esm2022/layout/eui-user-profile/user-profile-card/user-profile-card.component.mjs +12 -6
- package/esm2022/layout/eui-user-profile/user-profile-menu/user-profile-menu.component.mjs +5 -5
- package/esm2022/layout/eui-user-profile/user-profile-menu-item/user-profile-menu-item.component.mjs +5 -5
- package/esm2022/layout/eui-user-profile/user-profile.component.mjs +13 -7
- package/esm2022/layout/eui-user-profile/user-profile.module.mjs +4 -4
- package/esm2022/pipes/eui-is-empty.pipe.mjs +7 -7
- package/esm2022/pipes/eui-truncate.pipe.mjs +7 -7
- package/esm2022/shared/base/base-states.directive.mjs +3 -3
- package/esm2022/shared/base/base.directive.mjs +3 -3
- package/esm2022/shared/eui-common-header/common-header.component.mjs +16 -10
- package/esm2022/shared/eui-expand-content/eui-expand-content.component.mjs +7 -7
- package/esm2022/shared/input.directive.mjs +5 -5
- package/eui-all/eui-all.module.d.ts +20 -19
- package/eui-all/eui-all.module.d.ts.map +1 -1
- package/eui-autocomplete/eui-autocomplete.component.d.ts +0 -1
- package/eui-autocomplete/eui-autocomplete.component.d.ts.map +1 -1
- package/eui-dialog/container/eui-dialog-container.component.d.ts +4 -0
- package/eui-dialog/container/eui-dialog-container.component.d.ts.map +1 -1
- package/eui-dropdown/eui-dropdown.component.d.ts.map +1 -1
- package/eui-message-box/eui-message-box.component.d.ts +4 -1
- package/eui-message-box/eui-message-box.component.d.ts.map +1 -1
- package/eui-overlay/eui-overlay.component.d.ts +8 -3
- package/eui-overlay/eui-overlay.component.d.ts.map +1 -1
- package/eui-page/components/eui-page-header/eui-page-header.component.d.ts +3 -1
- package/eui-page/components/eui-page-header/eui-page-header.component.d.ts.map +1 -1
- package/eui-table/eui-table.component.d.ts +1 -0
- package/eui-table/eui-table.component.d.ts.map +1 -1
- package/fesm2022/eui-components-directives.mjs +89 -88
- package/fesm2022/eui-components-directives.mjs.map +1 -1
- package/fesm2022/eui-components-eui-alert.mjs +8 -8
- package/fesm2022/eui-components-eui-alert.mjs.map +1 -1
- package/fesm2022/eui-components-eui-all.mjs +9 -8
- package/fesm2022/eui-components-eui-all.mjs.map +1 -1
- package/fesm2022/eui-components-eui-autocomplete.mjs +16 -15
- package/fesm2022/eui-components-eui-autocomplete.mjs.map +1 -1
- package/fesm2022/eui-components-eui-badge.mjs +8 -8
- package/fesm2022/eui-components-eui-badge.mjs.map +1 -1
- package/fesm2022/eui-components-eui-block-content.mjs +8 -8
- package/fesm2022/eui-components-eui-block-content.mjs.map +1 -1
- package/fesm2022/eui-components-eui-block-document.mjs +8 -8
- package/fesm2022/eui-components-eui-block-document.mjs.map +1 -1
- package/fesm2022/eui-components-eui-button-group.mjs +8 -8
- package/fesm2022/eui-components-eui-button-group.mjs.map +1 -1
- package/fesm2022/eui-components-eui-button.mjs +8 -8
- package/fesm2022/eui-components-eui-button.mjs.map +1 -1
- package/fesm2022/eui-components-eui-buttons.mjs +14 -14
- package/fesm2022/eui-components-eui-buttons.mjs.map +1 -1
- package/fesm2022/eui-components-eui-card.mjs +48 -48
- package/fesm2022/eui-components-eui-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-chip-list.mjs +14 -14
- package/fesm2022/eui-components-eui-chip-list.mjs.map +1 -1
- package/fesm2022/eui-components-eui-chip.mjs +8 -8
- package/fesm2022/eui-components-eui-chip.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dashboard-button.mjs +14 -14
- package/fesm2022/eui-components-eui-dashboard-button.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dashboard-card.mjs +8 -8
- package/fesm2022/eui-components-eui-dashboard-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-date-range-selector.mjs +10 -10
- package/fesm2022/eui-components-eui-date-range-selector.mjs.map +1 -1
- package/fesm2022/eui-components-eui-datepicker.mjs +22 -22
- package/fesm2022/eui-components-eui-datepicker.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dialog.mjs +38 -24
- package/fesm2022/eui-components-eui-dialog.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dimmer.mjs +8 -8
- package/fesm2022/eui-components-eui-dimmer.mjs.map +1 -1
- package/fesm2022/eui-components-eui-disable-content.mjs +8 -8
- package/fesm2022/eui-components-eui-disable-content.mjs.map +1 -1
- package/fesm2022/eui-components-eui-discussion-thread.mjs +10 -10
- package/fesm2022/eui-components-eui-dropdown.mjs +32 -27
- package/fesm2022/eui-components-eui-dropdown.mjs.map +1 -1
- package/fesm2022/eui-components-eui-feedback-message.mjs +8 -8
- package/fesm2022/eui-components-eui-feedback-message.mjs.map +1 -1
- package/fesm2022/eui-components-eui-fieldset.mjs +14 -14
- package/fesm2022/eui-components-eui-fieldset.mjs.map +1 -1
- package/fesm2022/eui-components-eui-file-upload.mjs +21 -21
- package/fesm2022/eui-components-eui-file-upload.mjs.map +1 -1
- package/fesm2022/eui-components-eui-growl.mjs +8 -8
- package/fesm2022/eui-components-eui-growl.mjs.map +1 -1
- package/fesm2022/eui-components-eui-icon-toggle.mjs +7 -7
- package/fesm2022/eui-components-eui-icon.mjs +16 -16
- package/fesm2022/eui-components-eui-icon.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-checkbox.mjs +9 -9
- package/fesm2022/eui-components-eui-input-checkbox.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-group.mjs +8 -8
- package/fesm2022/eui-components-eui-input-group.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-number.mjs +15 -15
- package/fesm2022/eui-components-eui-input-number.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-radio.mjs +9 -9
- package/fesm2022/eui-components-eui-input-radio.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-text.mjs +10 -10
- package/fesm2022/eui-components-eui-input-text.mjs.map +1 -1
- package/fesm2022/eui-components-eui-label.mjs +8 -8
- package/fesm2022/eui-components-eui-label.mjs.map +1 -1
- package/fesm2022/eui-components-eui-list.mjs +15 -15
- package/fesm2022/eui-components-eui-list.mjs.map +1 -1
- package/fesm2022/eui-components-eui-menu.mjs +12 -12
- package/fesm2022/eui-components-eui-menu.mjs.map +1 -1
- package/fesm2022/eui-components-eui-message-box.mjs +26 -17
- package/fesm2022/eui-components-eui-message-box.mjs.map +1 -1
- package/fesm2022/eui-components-eui-overlay.mjs +55 -37
- package/fesm2022/eui-components-eui-overlay.mjs.map +1 -1
- package/fesm2022/eui-components-eui-page.mjs +64 -60
- package/fesm2022/eui-components-eui-page.mjs.map +1 -1
- package/fesm2022/eui-components-eui-paginator.mjs +8 -8
- package/fesm2022/eui-components-eui-paginator.mjs.map +1 -1
- package/fesm2022/eui-components-eui-picker.mjs +13 -13
- package/fesm2022/eui-components-eui-picker.mjs.map +1 -1
- package/fesm2022/eui-components-eui-popover.mjs +13 -13
- package/fesm2022/eui-components-eui-popover.mjs.map +1 -1
- package/fesm2022/eui-components-eui-progress-bar.mjs +8 -8
- package/fesm2022/eui-components-eui-progress-bar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-progress-circle.mjs +8 -8
- package/fesm2022/eui-components-eui-progress-circle.mjs.map +1 -1
- package/fesm2022/eui-components-eui-select.mjs +29 -29
- package/fesm2022/eui-components-eui-select.mjs.map +1 -1
- package/fesm2022/eui-components-eui-sidebar-menu.mjs +7 -7
- package/fesm2022/eui-components-eui-slide-toggle.mjs +9 -9
- package/fesm2022/eui-components-eui-slide-toggle.mjs.map +1 -1
- package/fesm2022/eui-components-eui-table.mjs +73 -43
- package/fesm2022/eui-components-eui-table.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tabs.mjs +26 -26
- package/fesm2022/eui-components-eui-tabs.mjs.map +1 -1
- package/fesm2022/eui-components-eui-textarea.mjs +14 -14
- package/fesm2022/eui-components-eui-textarea.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timebar.mjs +8 -8
- package/fesm2022/eui-components-eui-timebar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timeline.mjs +12 -12
- package/fesm2022/eui-components-eui-timeline.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timepicker.mjs +9 -9
- package/fesm2022/eui-components-eui-timepicker.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree.mjs +26 -26
- package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
- package/fesm2022/eui-components-eui-wizard.mjs +14 -14
- package/fesm2022/eui-components-externals-charts.mjs +7 -7
- package/fesm2022/eui-components-externals-eui-editor.mjs +35 -35
- package/fesm2022/eui-components-externals-eui-editor.mjs.map +1 -1
- package/fesm2022/eui-components-externals-quill.mjs +9 -9
- package/fesm2022/eui-components-externals-quill.mjs.map +1 -1
- package/fesm2022/eui-components-layout.mjs +311 -283
- package/fesm2022/eui-components-layout.mjs.map +1 -1
- package/fesm2022/eui-components-pipes.mjs +14 -14
- package/fesm2022/eui-components-shared-base.mjs +6 -6
- package/fesm2022/eui-components-shared.mjs +26 -20
- package/fesm2022/eui-components-shared.mjs.map +1 -1
- package/layout/eui-app/eui-app.component.d.ts.map +1 -1
- package/layout/eui-toolbar/toolbar-item-user-profile/toolbar-item-user-profile.component.d.ts +7 -2
- package/layout/eui-toolbar/toolbar-item-user-profile/toolbar-item-user-profile.component.d.ts.map +1 -1
- package/layout/eui-user-profile/user-profile-card/user-profile-card.component.d.ts +3 -1
- package/layout/eui-user-profile/user-profile-card/user-profile-card.component.d.ts.map +1 -1
- package/layout/eui-user-profile/user-profile.component.d.ts +3 -0
- package/layout/eui-user-profile/user-profile.component.d.ts.map +1 -1
- package/package.json +7 -7
- package/shared/eui-common-header/common-header.component.d.ts +5 -2
- package/shared/eui-common-header/common-header.component.d.ts.map +1 -1
@@ -540,13 +540,13 @@ export class EuiTreeComponent {
|
|
540
540
|
});
|
541
541
|
return isMultiLevel;
|
542
542
|
}
|
543
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.
|
544
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-next.4", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", autoTranslate: "autoTranslate" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, usesOnChanges: true, ngImport: i0, template: "<ul class=\"eui-tree__wrapper\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\" class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeItemModel\"\n title=\"{{\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\" (click)=\"onNodeClick(treeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect: onSelectFn(treeItemModel.path, treeItemModel),\n id: uid + treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeItemModel\"\n title=\"{{\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-u-mr-xs\">\n <span\n euiIcon\n *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel) && collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span\n euiIcon\n *ngIf=\"cdkTreeControl.isExpanded(treeItemModel) && expandedIconClass\"\n [iconClass]=\"expandedIconClass\"></span>\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect: onSelectFn(treeItemModel?.path, treeItemModel),\n id: uid + treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass || 'primary'\"\n iconClass=\"{{ node?.treeContentBlock?.iconClass }}\"\n euiSizeS\n class=\"eui-u-mr-xs\">\n </eui-icon>\n </ng-container>\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'grey-100' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-mr-s\"\n [class.eui-label--selected]=\"node?.isSelected\"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-mr-m\">\n <a class=\"eui-u-text-link\" [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-mr-m\">\n <a\n class=\"eui-u-text-link-external\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiSizeM euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-y:auto;position:relative;width:100%}.eui-tree::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-35)}.eui-tree::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;padding:0;position:relative;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-base-spacing-2xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper ul.eui-tree-node{padding-inline-start:var(--eui-base-spacing-xl)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-base-spacing-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "styleClass", "checked", "id"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i4.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i4.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i4.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i4.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i4.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i5.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i6.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i6.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i7.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i8.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "component", type: i9.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared"], outputs: ["remove"] }, { kind: "component", type: i10.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isDropDownRightAligned", "isClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation"] }, { kind: "directive", type: i10.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
543
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: EuiTreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
544
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-next.7", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", autoTranslate: "autoTranslate" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, usesOnChanges: true, ngImport: i0, template: "<ul class=\"eui-tree__wrapper\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\" class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeItemModel\"\n title=\"{{\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\" (click)=\"onNodeClick(treeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect: onSelectFn(treeItemModel.path, treeItemModel),\n id: uid + treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeItemModel\"\n title=\"{{\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-u-mr-xs\">\n <span\n euiIcon\n *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel) && collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span\n euiIcon\n *ngIf=\"cdkTreeControl.isExpanded(treeItemModel) && expandedIconClass\"\n [iconClass]=\"expandedIconClass\"></span>\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect: onSelectFn(treeItemModel?.path, treeItemModel),\n id: uid + treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass || 'primary'\"\n iconClass=\"{{ node?.treeContentBlock?.iconClass }}\"\n euiSizeS\n class=\"eui-u-mr-xs\">\n </eui-icon>\n </ng-container>\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'grey-100' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-mr-s\"\n [class.eui-label--selected]=\"node?.isSelected\"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-mr-m\">\n <a class=\"eui-u-text-link\" [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-mr-m\">\n <a\n class=\"eui-u-text-link-external\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiSizeM euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-y:auto;position:relative;width:100%}.eui-tree::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-35)}.eui-tree::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;padding:0;position:relative;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-base-spacing-2xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper ul.eui-tree-node{padding-inline-start:var(--eui-base-spacing-xl)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-base-spacing-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "styleClass", "checked", "id"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i4.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i4.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i4.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i4.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i4.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i5.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i6.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i6.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i7.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i8.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["aria-label"] }, { kind: "component", type: i9.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared"], outputs: ["remove"] }, { kind: "component", type: i10.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isDropDownRightAligned", "isClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation"] }, { kind: "directive", type: i10.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
545
545
|
}
|
546
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.
|
546
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: EuiTreeComponent, decorators: [{
|
547
547
|
type: Component,
|
548
548
|
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ul class=\"eui-tree__wrapper\">\n <cdk-tree [dataSource]=\"cdkArrayDataSource\" [treeControl]=\"cdkTreeControl\" [trackBy]=\"trackBy\" *ngIf=\"renderTree\" class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeItemModel\"\n title=\"{{\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\" (click)=\"onNodeClick(treeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect: onSelectFn(treeItemModel.path, treeItemModel),\n id: uid + treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </li>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <li\n class=\"eui-tree-node\"\n *ngIf=\"treeItemModel\"\n title=\"{{\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + treeItemModel?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-u-mr-xs\">\n <span\n euiIcon\n *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel) && collapsedIconClass\"\n [iconClass]=\"collapsedIconClass\"></span>\n <span\n euiIcon\n *ngIf=\"cdkTreeControl.isExpanded(treeItemModel) && expandedIconClass\"\n [iconClass]=\"expandedIconClass\"></span>\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeItemModel?.path)?.node,\n onSelect: onSelectFn(treeItemModel?.path, treeItemModel),\n id: uid + treeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <ul class=\"eui-tree-node\" *ngIf=\"cdkTreeControl.isExpanded(treeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </cdk-nested-tree-node>\n </cdk-tree>\n</ul>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconClass\">\n <eui-icon\n [euiVariant]=\"node?.treeContentBlock?.iconTypeClass || 'primary'\"\n iconClass=\"{{ node?.treeContentBlock?.iconClass }}\"\n euiSizeS\n class=\"eui-u-mr-xs\">\n </eui-icon>\n </ng-container>\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'grey-100' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-mr-s\"\n [class.eui-label--selected]=\"node?.isSelected\"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-mr-m\">\n <a class=\"eui-u-text-link\" [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-mr-m\">\n <a\n class=\"eui-u-text-link-external\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiSizeM euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeXS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"eui-ellipsis-vertical\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'eui-chevron-down' : 'eui-chevron-forward'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-y:auto;position:relative;width:100%}.eui-tree::-webkit-scrollbar{display:inherit;height:6px;width:6px;background-color:var(--eui-base-color-grey-5)}.eui-tree::-webkit-scrollbar-thumb{background-color:var(--eui-base-color-grey-20);border-radius:5rem}.eui-tree::-webkit-scrollbar-thumb:hover{background-color:var(--eui-base-color-grey-35)}.eui-tree::-webkit-scrollbar-track{background-color:var(--eui-base-color-grey-5);border-radius:0}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;padding:0;position:relative;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-base-spacing-2xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper ul.eui-tree-node{padding-inline-start:var(--eui-base-spacing-xl)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-base-spacing-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-base-color-grey-5)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}\n"] }]
|
549
|
-
}], ctorParameters:
|
549
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { cssClasses: [{
|
550
550
|
type: HostBinding,
|
551
551
|
args: ['class']
|
552
552
|
}], e2eAttr: [{
|
@@ -588,8 +588,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.4",
|
|
588
588
|
type: Output
|
589
589
|
}] } });
|
590
590
|
export class EuiTreeModule {
|
591
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.
|
592
|
-
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.0-next.
|
591
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: EuiTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
592
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.0-next.7", ngImport: i0, type: EuiTreeModule, declarations: [EuiTreeComponent], imports: [CommonModule,
|
593
593
|
RouterModule,
|
594
594
|
FormsModule,
|
595
595
|
TranslateModule,
|
@@ -601,7 +601,7 @@ export class EuiTreeModule {
|
|
601
601
|
EuiBadgeModule,
|
602
602
|
EuiChipModule,
|
603
603
|
EuiDropdownModule], exports: [EuiTreeComponent] }); }
|
604
|
-
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.0-next.
|
604
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: EuiTreeModule, imports: [CommonModule,
|
605
605
|
RouterModule,
|
606
606
|
FormsModule,
|
607
607
|
TranslateModule,
|
@@ -614,7 +614,7 @@ export class EuiTreeModule {
|
|
614
614
|
EuiChipModule,
|
615
615
|
EuiDropdownModule] }); }
|
616
616
|
}
|
617
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.
|
617
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.7", ngImport: i0, type: EuiTreeModule, decorators: [{
|
618
618
|
type: NgModule,
|
619
619
|
args: [{
|
620
620
|
imports: [
|
@@ -635,4 +635,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.4",
|
|
635
635
|
exports: [EuiTreeComponent],
|
636
636
|
}]
|
637
637
|
}] });
|
638
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEdBRWQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVUvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFF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QUFLO2dCQVVGLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNOztBQXFpQlgsTUFBTSxPQUFPLGFBQWE7d0lBQWIsYUFBYTt5SUFBYixhQUFhLGlCQXRtQmIsZ0JBQWdCLGFBc2xCckIsWUFBWTtZQUNaLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLHNCQUFzQjtZQUN0QixhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixjQUFjO1lBQ2QsY0FBYztZQUNkLGFBQWE7WUFDYixpQkFBaUIsYUFqbUJaLGdCQUFnQjt5SUFzbUJoQixhQUFhLFlBaEJsQixZQUFZO1lBQ1osWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2Ysc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixlQUFlO1lBQ2YsYUFBYTtZQUNiLGNBQWM7WUFDZCxjQUFjO1lBQ2QsYUFBYTtZQUNiLGlCQUFpQjs7a0dBS1osYUFBYTtrQkFsQnpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2Ysc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixpQkFBaUI7cUJBQ3BCO29CQUNELFlBQVksRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBIb3N0QmluZGluZyxcbiAgICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlLFxuICAgIFRyZWVEYXRhTW9kZWwsXG4gICAgVHJlZUl0ZW1Nb2RlbCxcbiAgICBUcmVlRGF0YVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsLFxuICAgIEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzLFxufSBmcm9tICcuL2V1aS10cmVlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXVpSW5wdXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaW5wdXQtY2hlY2tib3gnO1xuaW1wb3J0IHsgRXVpQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1idXR0b24nO1xuaW1wb3J0IHsgRXVpSWNvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaWNvbic7XG5pbXBvcnQgeyBFdWlMYWJlbE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktbGFiZWwnO1xuaW1wb3J0IHsgRXVpQmFkZ2VNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJhZGdlJztcbmltcG9ydCB7IEV1aUNoaXBNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWNoaXAnO1xuaW1wb3J0IHsgRXVpRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sLCBDZGtUcmVlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQXJyYXlEYXRhU291cmNlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZTJlJykgQElucHV0KCkgZTJlQXR0ciA9ICdldWktdHJlZSc7XG4gICAgQElucHV0KCkgbm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgQElucHV0KCkgbm9kZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHBhbmRlZFN2Z0ljb25DbGFzcyA9ICdldWktY2hldnJvbi1mb3J3YXJkOmV1aSc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkU3ZnSWNvbkNsYXNzID0gJ2V1aS1jaGV2cm9uLWRvd246ZXVpJztcblxuICAgIC8vIEBWaWV3Q2hpbGQoJ3RyZWVDb21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyB0cmVlQ29tcG9uZW50SW5zdGFuY2U6IGFueTtcbiAgICAvLyBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZTtcbiAgICB9XG5cbiAgICBzZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTXVsdGlzZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpc2VsZWN0O1xuICAgIH1cblxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgc2V0IGF1dG9UcmFuc2xhdGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9hdXRvVHJhbnNsYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcz4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBub2RlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIGNka0FycmF5RGF0YVNvdXJjZTogQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtTW9kZWw+O1xuICAgIGNka1RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbU1vZGVsPjtcbiAgICByZW5kZXJUcmVlOiBib29sZWFuO1xuICAgIHB1YmxpYyB1aWQ6IHN0cmluZyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApLnRvU3RyaW5nKCk7XG4gICAgcHJpdmF0ZSBwcm9jZXNzZWROb2RlczogVHJlZURhdGFNb2RlbDtcbiAgICBwcml2YXRlIHRyZWVEYXRhUnVuVGltZTogVHJlZURhdGFSdW5UaW1lTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWVCYWNrdXA6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlOiBBcnJheTxUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsPjtcbiAgICBwcml2YXRlIHNlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcHJpdmF0ZSBfaXNDbGlja1RvZ2dsaW5nTm9kZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzTXVsdGlzZWxlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9hdXRvVHJhbnNsYXRlID0gdHJ1ZTtcbiAgICBwcml2YXRlIHNlbGVjdGlvbk1vZGVsU3VicztcbiAgICBwcml2YXRlIF9zZWxlY3Rpb247XG4gICAgcHJpdmF0ZSBfaXNNdWx0aUxldmVsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydub2RlcyddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGVsOiBhbnkpOiBhbnkge1xuICAgICAgICByZXR1cm4gZWwucGFyZW50O1xuICAgIH1cblxuICAgIGdldFRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtTW9kZWwge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBub2RlQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kQXQocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kRGVzY2VuZGFudHModGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aFswXSkpO1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZURlc2NlbmRhbnRzKHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpKTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyVGVybShmaWx0ZXJJbnB1dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChmaWx0ZXJJbnB1dCAmJiBmaWx0ZXJJbnB1dCAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgJ2xhYmVsJywgZmlsdGVySW5wdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEFsbFNlbGVjdGlvbihpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwodGhpcy5wcm9jZXNzZWROb2RlcywgaXNDaGVja2VkLCB0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQodGhpcy5nZXRUcmVlSXRlbSh0cmVlSXRlbT8ucGF0aCkpO1xuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVUb2dnbGUodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZUl0ZW0/LnBhdGgpKTtcbiAgICB9XG5cbiAgICBub2RlU2VsZWN0ZWQoZXZ0OiBhbnksIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1Nb2RlbCA9IHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCBub2RlID0gaXRlbS5ub2RlO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgLy8gU2V0cyB0aGUgaGFzUGFyZW50IElmIHRoZXJlIGlzIGEgcGFyZW50LCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZvcm0gcGF0aEFyci5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaWxlbnRseSBzZXRzIHRoZSBpc1NlbGVjdGVkLlxuICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIC8vIFNldHMgaXNTZWxlY3RlZCBjaGFuZ2Ugb24gdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgcmVjdXJzaXZlIGl0IHNldHMgZXZlcnkgY2hpbGRyZW4gd2l0aCB0aGUgY2hhbmdlLlxuICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwoY2hpbGRyZW4sIGV2dC50YXJnZXQuY2hlY2tlZCwgdHJlZUl0ZW1Nb2RlbD8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZXMgdG8gdGhlIG5vZGUgYW5kIGl0cyBjaGlsZHJlbiBub2RlIHN0YXRlXG4gICAgICAgIHRoaXMuc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5nZXRUcmVlSXRlbShwYXRoKSkpXG4gICAgICAgICk7XG4gICAgICAgIC8vIEl0IGlzIGhlcmUgZm9yIHRoZSBmaWx0ZXIgZWRnZSBjYXNlLlxuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlcyBwYXJlbnQgcGF0aFxuICAgICAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGhBcnIuam9pbignLicpO1xuICAgICAgICAgICAgLy8gQ3JlYXRpbmcgbm9kZSBpbmRleCBzZXF1ZW5jZSBmLmUgSWYgcGF0aCBpcyAnMS4yJyBpdCB3aWxsIGJlIFsxLDJdXG4gICAgICAgICAgICBjb25zdCBub2RlSW5kZXhTZXEgPSBwYXJlbnRQYXRoLnNwbGl0KCcuJykubWFwKChpbmRleFN0cikgPT4gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKSk7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGluZyB0aGUgbm9kZSBwYXRocyBhcnJheSB0byBiZSByZS1jYWxjdWxhdGVkIGZyb20gYm90dG9tIHRvIHRvcFxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gW107XG4gICAgICAgICAgICBub2RlSW5kZXhTZXEuZm9yRWFjaCgobm9kZUluZGV4LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcVtpbmRleF0gPSBub2RlSW5kZXhTZXEuc2xpY2UoMCwgaW5kZXggKyAxKS5qb2luKCcuJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpZGVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0aGlzLmdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG5cbiAgICBvblNlbGVjdEZuKHBhdGg6IHN0cmluZywgdHJlZUl0ZW1Nb2RlbDogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodHJlZUl0ZW1Nb2RlbD8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IG5vZGVTZWxlY3RlZChldnQsIHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgcmV0dXJuIChldnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCd0cmVlSXRlbU1vZGVsLm5vZGUuc2VsZWN0YWJsZSBpcyBmYWxzZSwgeW91IGNhbiBub3QgaW1wbGVtZW50IG9uU2VsZWN0Jyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRyZWVEYXRhUnVudGltZSh0aGlzLnByb2Nlc3NlZE5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVySW5pdGlhbEV4cGFuZCh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPihcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbih0aGlzLnRyZWVEYXRhUnVuVGltZSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYT8ucGF0aCA9PT0gYj8ucGF0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3VicyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5zdWJzY3JpYmUoKHNjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRlZDogc2MuYWRkZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkOiBzYy5yZW1vdmVkLm1hcCgoXykgPT4gdGhpcy5nZXRUcmVlSXRlbShfLnBhdGgpKSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF0ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uQ2hhbmdlLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGlvbkNoYW5nZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NJbnB1dHModHJlZURhdGE6IFRyZWVEYXRhTW9kZWwpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgdHJlZURhdGEgPSB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbih0cmVlRGF0YSwgdGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiwgIXRoaXMuaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmVlRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihub2RlQXJyOiBUcmVlRGF0YU1vZGVsLCBpc1JlY3Vyc2l2ZTogYm9vbGVhbiwgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiBub2RlQXJyPy5tYXAoKGl0ZW06IFRyZWVJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNJbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdENvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZS5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICEhaXNSZWN1cnNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5vQXV0b1NlbGVjdFBhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maW5kSW5kZXgoKGkpID0+IGk/LnBhdGggPT09IHJ1blRpbWVUcmVlSXRlbT8ucGF0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZkl0ZW0gPSB0aGlzLmdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIGlmIChpbmRleE9mSXRlbSA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF07XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24uc3BsaWNlKGluZGV4T2ZJdGVtLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKC4uLm5ld1NlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIHRyZWVEYXRhUnVuVGltZSAmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSBmb3Igc2VwYXJhdGUgdGhlIGxvZ2ljLlxuICAgIHByaXZhdGUgY3JlYXRlVHJlZURhdGFSdW50aW1lKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKHsgLi4uaXRlbSB9LCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHN0cnVjdHVyZWRDbG9uZShub2Rlcyk/Lm1hcCgoaXRlbSkgPT4gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoeyAuLi5pdGVtIH0pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBydW4gdGltZSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjaGlsZHJlbiBzZWxlY3Rpb24gc3RhdGUgZm9yIHNlbGVjdGlvbiB0cmVlLlxuICAgIHByaXZhdGUgY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsKTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCB7XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbltpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udHJlZUl0ZW0sXG4gICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogaXRlbVN0YXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVjaWRlU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwpOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSB7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVJdGVtcyA9IHRyZWVJdGVtLmNoaWxkcmVuIHx8IChbXSBhcyBhbnkpO1xuICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IHJ1blRpbWVJdGVtcz8ubWFwKChpdGVtKSA9PiBpdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJykpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbE5vdFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlICYmXG4gICAgICAgICAgICBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJlxuICAgICAgICAgICAgIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJlxuICAgICAgICAgICAgIXRyZWVJdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSAmJlxuICAgICAgICAgICAgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbE5vdFNlbGVjdGVkJykgJiZcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxOb3RTZWxlY3RlZCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1TdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZVRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0obm9kZVBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVQYXRoKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtPy5ub2RlPy5zZWxlY3RhYmxlICYmIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICBpZiAoIXRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5kZXRlcm1pbmF0ZTogcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdpbmRldGVybWluYXRlJyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50cmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5kZXRlcm1pbmF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICghdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codHJlZUl0ZW0sIHRyZWVJdGVtLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCwgJ2lzU2VsZWN0ZWQ6JyArIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCwgJ2lzSW5kZXRlcm1pbmF0ZTonICsgdHJlZUl0ZW0ubm9kZS5pc0luZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgaWYgKHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGg6IHN0cmluZywgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbUFycltwYXRoSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBUcmVlRGF0YU1vZGVsLCBpc0NoZWNrZWQ6IGJvb2xlYW4sIHJ1blRpbWVUcmVlRGF0YTogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbm9kZUFyci5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVuVGltZVRyZWVEYXRhW2luZGV4XSAmJiBub2RlQXJyW2luZGV4XT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnJbaW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc0NoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlRGF0YVtpbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZURhdGFbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuVGltZVRyZWVEYXRhW2luZGV4XT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgJiYgbm9kZUFycltpbmRleF0uY2hpbGRyZW4gJiYgbm9kZUFycltpbmRleF0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLCBpc0NoZWNrZWQsIHJ1blRpbWVUcmVlRGF0YVtpbmRleF0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5tYXAoKGluZGV4OiBzdHJpbmcpID0+IHBhcnNlSW50KGluZGV4LCAxMCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlciwgcGFyZW50UGF0aD86IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgdHJlZUl0ZW0ucGF0aCA9IHBhcmVudFBhdGggPyBwYXJlbnRQYXRoICsgJy4nICsgaW5kZXggOiBpbmRleC50b1N0cmluZygpO1xuICAgICAgICB0cmVlSXRlbS5pbmRleCA9IGluZGV4O1xuICAgICAgICBpZiAodHJlZUl0ZW0uY2hpbGRyZW4gJiYgdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIHRyZWVJdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlblt0cmVlSXRlbUluZGV4XSA9IHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGNoaWxkLCB0cmVlSXRlbUluZGV4LCB0cmVlSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmVlSXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlclRyZWVEYXRhKHRyZWVEYXRhOiBUcmVlRGF0YU1vZGVsLCBrZXk6IHN0cmluZyA9ICdsYWJlbCcsIGZpbHRlclN0cjogc3RyaW5nKTogVHJlZUl0ZW1Nb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhLmZpbHRlcigodHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyVHJlZURhdGEoWy4uLnRyZWVJdGVtLmNoaWxkcmVuXSwga2V5LCBmaWx0ZXJTdHIpO1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuID0gdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHRyZWVJdGVtLmNoaWxkcmVuIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplZFN0cih0cmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwpLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplZFN0cihmaWx0ZXJTdHIpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplZFN0cihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluaXRpYWxTZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4gPSBbXTtcbiAgICAgICAgdGhpcy5zY2FuU2VsZWN0aW9uKG5vZGVzLCBzZWxlY3Rpb24pO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NhblNlbGVjdGlvbihub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwsIHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5ub2RlPy5zZWxlY3RhYmxlICYmIGl0ZW0ubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5TZWxlY3Rpb24oaXRlbS5jaGlsZHJlbiwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJJbml0aWFsRXhwYW5kKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/Lm5vZGU/LmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEF0KGl0ZW0ucGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaWYgKG5vZGVBcnIgJiYgQXJyYXkuaXNBcnJheShub2RlQXJyKSkge1xuICAgICAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnIgJiYgbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gWydldWktdHJlZScsIHRoaXMuaXNNdWx0aXNlbGVjdCA/ICdldWktdHJlZS0tbXVsdGlzZWxlY3QnIDogJycsIHRoaXMuX2lzTXVsdGlMZXZlbCA/ICdldWktdHJlZS0td2l0aC1jaGlsZHJlbicgOiAnJ11cbiAgICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lmTXVsdGlMZXZlbCh0cmVlOiBUcmVlRGF0YU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpc011bHRpTGV2ZWwgPSBmYWxzZTtcbiAgICAgICAgdHJlZS5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpc011bHRpTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzTXVsdGlMZXZlbDtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRXVpSW5wdXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgQ2RrVHJlZU1vZHVsZSxcbiAgICAgICAgRXVpQnV0dG9uTW9kdWxlLFxuICAgICAgICBFdWlJY29uTW9kdWxlLFxuICAgICAgICBFdWlMYWJlbE1vZHVsZSxcbiAgICAgICAgRXVpQmFkZ2VNb2R1bGUsXG4gICAgICAgIEV1aUNoaXBNb2R1bGUsXG4gICAgICAgIEV1aURyb3Bkb3duTW9kdWxlLFxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbRXVpVHJlZUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0V1aVRyZWVDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlTW9kdWxlIHt9XG4iLCI8dWwgY2xhc3M9XCJldWktdHJlZV9fd3JhcHBlclwiPlxuICAgIDxjZGstdHJlZSBbZGF0YVNvdXJjZV09XCJjZGtBcnJheURhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwiY2RrVHJlZUNvbnRyb2xcIiBbdHJhY2tCeV09XCJ0cmFja0J5XCIgKm5nSWY9XCJyZW5kZXJUcmVlXCIgY2xhc3M9XCJldWktY2RrLXRyZWVcIj5cbiAgICAgICAgPCEtLSBUaGVyZSBhcmUgdHdvIHN0YXRlcyBvZiBnZW5lcmljIGNkay1uZXN0ZWQtdHJlZS1ub2RlIGRlY2xhcmF0aW9ucy5cbiAgICAgICAgRmlyc3Qgb25lIGlzIHdpdGhvdXQgY2hpbGQuIE5vIHN1YiByZW5kZXJpbmcuXG4gICAgICAgIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVJdGVtTW9kZWxcIiBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZVwiPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRyZWVJdGVtTW9kZWxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnRvb2x0aXBMYWJlbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXG4gICAgICAgICAgICAgICAgfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCIgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWYgfHwgbm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZUl0ZW1Nb2RlbC5wYXRoLCB0cmVlSXRlbU1vZGVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVJdGVtTW9kZWwucGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGVcbiAgICAgICAgICAgICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlSXRlbU1vZGVsOyB3aGVuOiBoYXNDaGlsZFwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZSBldWktY2RrLW5lc3RlZC10cmVlLW5vZGUtLXdpdGgtY2hpbGRcIj5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmVlSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFxuICAgICAgICAgICAgICAgIH19XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tSGVyZSB3cmFwcyB0aGUgbm9kZSwgYW5kIGxpc3RlbiBmb3Igbm9kZSBjbGlja3MuLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVJdGVtTW9kZWwpXCIgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFeHBhbmQvY29sbGFwc2UgYWN0aW9uIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpQmFzaWNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGUgJyArIHRyZWVJdGVtTW9kZWw/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKHRyZWVJdGVtTW9kZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtUcmVlTm9kZVRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkgJiYgY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25DbGFzc109XCJjb2xsYXBzZWRJY29uQ2xhc3NcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkgJiYgZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkNsYXNzXT1cImV4cGFuZGVkSWNvbkNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbU1vZGVsKSAmJiAhY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXhwYW5kZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbU1vZGVsKSAmJiAhZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2xsYXBzZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWYgfHwgbm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZUl0ZW1Nb2RlbD8ucGF0aCwgdHJlZUl0ZW1Nb2RlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLXVzZXMgY2RrVHJlZU5vZGVPdXRsZXQgdG8gcmVuZGVyIGNoaWxkcmVuIG5vZGVzLCBDZGtUcmVlQ29udHJvbCBpcyB1c2VkIHRvIGNvbnRyb2wgaXNFeHBhbmRlZCBzdGF0ZS4tLT5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJldWktdHJlZS1ub2RlXCIgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgPC9jZGstdHJlZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1cImlkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnRcIiBbY2xhc3MuZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdC0tc2VsZWN0ZWRdPVwibm9kZT8uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPCEtLWlucHV0IGNoZWNrYm94IGFyZWEtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhbm9kZT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiISFub2RlPy5pc0luZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1tXCIgLz5cblxuICAgICAgICAgICAgPCEtLWljb24gYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvblxuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3MgfHwgJ2dyZXktMTAwJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLmNoaXBzXCJcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1iYWRnZSAodHlwZUxhYmVsICYgdHlwZUNsYXNzKSBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsXCIgW25nU3dpdGNoXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiIGNsYXNzPVwiZXVpLXUtZmxleC1uby1zaHJpbmsgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLWxhYmVsIGFyZWEtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLW1pZGRsZVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsICYmICFub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgZXVpTGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJ7eyBpZCB9fVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LW1yLXNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbGFiZWwtLXNlbGVjdGVkXT1cIm5vZGU/LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS1jdXJzb3ItcG9pbnRlcl09XCJub2RlPy5zZWxlY3RhYmxlXCI+XG4gICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiIGV1aUxhYmVsIGZvcj1cInt7IGlkIH19XCIgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LW1yLW1cIj5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImV1aS11LXRleHQtbGlua1wiIFtyb3V0ZXJMaW5rXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtbXItbVwiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ2JsYW5rJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudFwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItcmlnaHRcIj5cbiAgICAgICAgICAgIDwhLS1iYWRnZXMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uYmFkZ2VzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1iYWRnZSBldWlTaXplTSBldWlPdXRsaW5lIFtldWlWYXJpYW50XT1cImJhZGdlLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgYmFkZ2UubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWNoaXBzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1Db250ZXh0IG1lbnUtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhICYmIHJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24gY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlTaXplUyBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gZXVpU2Vjb25kYXJ5IFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wdGlvbnMgbWVudSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImV1aS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLW1ldGFkYXRhLCB1c2VzIHRoZSBoZWxwIG9mIG5nIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGR5bmFtaWMgZXhwYW5kIHZhcmlhYmxlIHdpdGhvdXQgaGFuZGxpbmcgc3RhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSAmJiBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBleHBhbmRlZDogZmFsc2UgfVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyIGxldC1tZXRhRGF0YUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWQgPSAhbWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIFtpY29uXT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID8gJ2V1aS1jaGV2cm9uLWRvd24nIDogJ2V1aS1jaGV2cm9uLWZvcndhcmQnXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZFwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZV9fbWV0YWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8IS0tcGFzc2luZyBtZXRhZGF0YSBvZiB0aGUgbm9kZSBjb250ZW50IHRvIHByb3ZpZGVkIHRlbXBsYXRlLXJlZjpub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWYtLT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
638
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEdBRWQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVUvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBU3RELE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsSUFDVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFXRCx5RUFBeUU7SUFDekUseUVBQXlFO0lBRXpFLElBQ0ksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLG1CQUFtQixDQUFDLEtBQW1CO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFDSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFtQjtRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUNJLG9CQUFvQjtRQUNwQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxLQUFtQjtRQUN4QyxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQ0ksMEJBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLDBCQUEwQixDQUFDLEtBQW1CO1FBQzlDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFDSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFtQjtRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUF1QkQsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUEvRWpCLFlBQU8sR0FBRyxVQUFVLENBQUM7UUFPbkQseUJBQW9CLEdBQUcseUJBQXlCLENBQUM7UUFDakQsMEJBQXFCLEdBQUcsc0JBQXNCLENBQUM7UUFrRDlDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDOUQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzlDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUlsRCxRQUFHLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFNL0QseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixnQ0FBMkIsR0FBRyxJQUFJLENBQUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFzSzlCLGFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFqSzFDLENBQUM7SUFFNUQsUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhLEVBQUUsRUFBTztRQUMxQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3BCLE1BQU0sUUFBUSxHQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMzQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDN0IsT0FBTyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDSCxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM3QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBWTtRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFtQjtRQUMxQixJQUFJLFdBQVcsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUM5RyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksaUJBQWlCLENBQXVCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVGLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGlCQUFpQixDQUF1QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBa0I7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUE4QjtRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQThCO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFRLEVBQUUsSUFBWTtRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNyQyxzRkFBc0Y7UUFDdEYsSUFBSSxTQUFTLEVBQUU7WUFDWCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDakI7UUFDRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNyQyx5Q0FBeUM7UUFDekMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLG1FQUFtRTtRQUNuRSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxJQUFJLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFO2dCQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNsRjtTQUNKO1FBQ0QscURBQXFEO1FBQ3JELElBQUksQ0FBQyxxQ0FBcUMsQ0FDdEMsSUFBSSxFQUNKLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ3JGLENBQUM7UUFDRix1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLElBQUksU0FBUyxFQUFFO1lBQ1gseUJBQXlCO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMscUVBQXFFO1lBQ3JFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckYsMEVBQTBFO1lBQzFFLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN0QyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsb0NBQW9DLENBQ3JDLFFBQVEsRUFDUixJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ3ZGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUlELFVBQVUsQ0FBQyxJQUFZLEVBQUUsYUFBbUM7UUFDeEQsSUFBSSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsNkRBQTZEO1FBQzdELE9BQU8sQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLFFBQVE7UUFDWixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGlCQUFpQixDQUF1QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUNwQyxJQUFJLEVBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDOUMsSUFBSSxFQUNKLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUNoQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN6QztZQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDbkUsTUFBTSxlQUFlLEdBQUc7b0JBQ3BCLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hELFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxRixDQUFDO2dCQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQXVCO1FBQ3pDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixRQUFRLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUM1SDtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxpQ0FBaUMsQ0FBQyxPQUFzQixFQUFFLFdBQW9CLEVBQUUsa0JBQTJCO1FBQy9HLE9BQU8sT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUN4QyxJQUFJLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxPQUFPO29CQUNILEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsR0FBRyxJQUFJLENBQUMsSUFBSTt3QkFDWixVQUFVLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVO3dCQUN6RixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsWUFBWSxFQUFFOzRCQUNWLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZOzRCQUN6QixTQUFTLEVBQ0wsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTLEtBQUssV0FBVztnQ0FDdEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO2dDQUNmLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTOzRCQUM3QyxrQkFBa0IsRUFDZCxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixLQUFLLFdBQVc7Z0NBQy9ELENBQUMsQ0FBQyxrQkFBa0I7Z0NBQ3BCLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxrQkFBa0I7eUJBQ3pEO3FCQUNKO29CQUNELFFBQVEsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLENBQUM7aUJBQ25HLENBQUM7YUFDTDtpQkFBTTtnQkFDSCxPQUFPO29CQUNILEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsR0FBRyxJQUFJLENBQUMsSUFBSTt3QkFDWixVQUFVLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVO3FCQUM1RjtpQkFDSixDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxlQUFxQztRQUNqRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVPLGNBQWMsQ0FBQyxlQUFxQztRQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEUsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDL0M7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsZUFBcUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7U0FDckQ7SUFDTCxDQUFDO0lBRUQsbUZBQW1GO0lBQzNFLHFCQUFxQixDQUFDLEtBQW9CO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsOEJBQThCLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUVELHNGQUFzRjtJQUM5RSxvQ0FBb0MsQ0FBQyxRQUF1QjtRQUNoRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN2QyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsTUFBTSxTQUFTLEdBQTRCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4RixPQUFPO1lBQ0gsR0FBRyxRQUFRO1lBQ1gsdUJBQXVCLEVBQUUsU0FBUztTQUNyQyxDQUFDO0lBQ04sQ0FBQztJQUVPLDZCQUE2QixDQUFDLFFBQXlDO1FBQzNFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUssRUFBVSxDQUFDO1FBQ3RELE1BQU0sV0FBVyxHQUFHLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksU0FBUyxHQUE0QixlQUFlLENBQUM7UUFDekQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEVBQUU7WUFDbkYsU0FBUyxHQUFHLGFBQWEsQ0FBQztTQUM3QjthQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLENBQUMsRUFBRTtZQUM5RixTQUFTLEdBQUcsZ0JBQWdCLENBQUM7U0FDaEM7YUFBTSxJQUNILFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVM7WUFDdEMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLGFBQWEsQ0FBQztZQUNyRCxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUN6QixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUNuRDtZQUNFLFNBQVMsR0FBRyxhQUFhLENBQUM7U0FDN0I7YUFBTSxJQUNILFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVM7WUFDdEMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLGdCQUFnQixDQUFDO1lBQ3hELFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUMxQjtZQUNFLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztTQUNoQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxRQUFRO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFELE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRTtnQkFDbEQsUUFBUSxDQUFDLElBQUksR0FBRztvQkFDWixHQUFHLFFBQVEsQ0FBQyxJQUFJO29CQUNoQixVQUFVLEVBQUUsNkJBQTZCLENBQUMsdUJBQXVCLEtBQUssYUFBYTtvQkFDbkYsZUFBZSxFQUFFLDZCQUE2QixDQUFDLHVCQUF1QixLQUFLLGVBQWU7aUJBQzdGLENBQUM7YUFDTDtpQkFBTTtnQkFDSCxRQUFRLENBQUMsSUFBSSxHQUFHO29CQUNaLEdBQUcsUUFBUSxDQUFDLElBQUk7b0JBQ2hCLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSw2QkFBNkIsQ0FBQyx1QkFBdUIsS0FBSyxhQUFhO29CQUMvRyxlQUFlLEVBQ1gsNkJBQTZCLENBQUMsdUJBQXVCLEtBQUssZUFBZTt3QkFDekUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLDZCQUE2QixDQUFDLHVCQUF1QixLQUFLLGFBQWEsQ0FBQztpQkFDN0csQ0FBQzthQUNMO1lBQ0QsNkpBQTZKO1lBQzdKLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3hDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMxQztTQUNKO0lBQ0wsQ0FBQztJQUVPLGlDQUFpQyxDQUFDLElBQVk7UUFDbEQsTUFBTSxRQUFRLEdBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDO1FBQ1QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWlCLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDO2FBQzFDO2lCQUFNO2dCQUNILElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDN0I7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxxQ0FBcUMsQ0FBQyxJQUFZLEVBQUUsSUFBcUM7UUFDN0YsTUFBTSxRQUFRLEdBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDO1FBQ2xELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzFDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQzthQUMxQztpQkFBTTtnQkFDSCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQzdCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0NBQW9DLENBQUMsSUFBWSxFQUFFLHVCQUFnRDtRQUN2RyxNQUFNLFFBQVEsR0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUM7UUFDbEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWlCLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDO2FBQzFDO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRztvQkFDakIsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO29CQUNyQix1QkFBdUI7aUJBQzFCLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQXNCLEVBQUUsU0FBa0IsRUFBRSxlQUFxQztRQUN4RyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBbUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNuRCxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDNUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHO29CQUNiLEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsR0FBRyxJQUFJLENBQUMsSUFBSTt3QkFDWixVQUFVLEVBQUUsU0FBUzt3QkFDckIsZUFBZSxFQUFFLEtBQUs7cUJBQ3pCO2lCQUNKLENBQUM7Z0JBQ0YsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDL0M7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDthQUNKO1lBQ0QsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQy9HLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEc7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBWTtRQUM1QixPQUFPLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFFBQThCLEVBQUUsS0FBYSxFQUFFLFVBQW1CO1FBQzVGLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUU7Z0JBQy9DLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZHLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQXVCLEVBQUUsTUFBYyxPQUFPLEVBQUUsU0FBaUI7UUFDcEYsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBdUIsRUFBVyxFQUFFO1lBQ3hELElBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2hGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDcEY7WUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO2dCQUNsRyxPQUFPLElBQUksQ0FBQzthQUNmO2lCQUFNLElBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QyxPQUFPLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUN6QztpQkFBTTtnQkFDSCxPQUFPLEtBQUssQ0FBQzthQUNoQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFXO1FBQzdCLE9BQU8sR0FBRzthQUNMLFdBQVcsRUFBRTthQUNiLFNBQVMsQ0FBQyxLQUFLLENBQUM7YUFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUEyQjtRQUNuRCxNQUFNLFNBQVMsR0FBZ0MsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBMkIsRUFBRSxTQUFzQztRQUNyRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQy9DLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEI7WUFDRCxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ2hEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBMkI7UUFDbkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQTBCLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUNELElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzNDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBWTtRQUNuQyxNQUFNLFFBQVEsR0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBaUIsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzdCLE9BQU8sR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztpQkFDckQ7cUJBQU07b0JBQ0gsSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDN0I7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGFBQWE7UUFDakIsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDdEgsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNULElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFtQjtRQUN6QyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUNqQyxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDNUIsWUFBWSxHQUFHLElBQUksQ0FBQzthQUN2QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQzt3SUFqbEJRLGdCQUFnQjs0SEFBaEIsZ0JBQWdCLHExQkMvQzdCLHVnYUFxUEE7O2tHRHRNYSxnQkFBZ0I7a0JBUDVCLFNBQVM7K0JBQ0ksVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJO3NGQUkxQixVQUFVO3NCQURwQixXQUFXO3VCQUFDLE9BQU87Z0JBSW1CLE9BQU87c0JBQTdDLFdBQVc7dUJBQUMsZUFBZTs7c0JBQUcsS0FBSztnQkFDM0IsS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csOEJBQThCO3NCQUF0QyxLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVVGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBVUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQVVGLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNOztBQXFpQlgsTUFBTSxPQUFPLGFBQWE7d0lBQWIsYUFBYTt5SUFBYixhQUFhLGlCQXRtQmIsZ0JBQWdCLGFBc2xCckIsWUFBWTtZQUNaLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLHNCQUFzQjtZQUN0QixhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixjQUFjO1lBQ2QsY0FBYztZQUNkLGFBQWE7WUFDYixpQkFBaUIsYUFqbUJaLGdCQUFnQjt5SUFzbUJoQixhQUFhLFlBaEJsQixZQUFZO1lBQ1osWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2Ysc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixlQUFlO1lBQ2YsYUFBYTtZQUNiLGNBQWM7WUFDZCxjQUFjO1lBQ2QsYUFBYTtZQUNiLGlCQUFpQjs7a0dBS1osYUFBYTtrQkFsQnpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2Ysc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixpQkFBaUI7cUJBQ3BCO29CQUNELFlBQVksRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBIb3N0QmluZGluZyxcbiAgICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlLFxuICAgIFRyZWVEYXRhTW9kZWwsXG4gICAgVHJlZUl0ZW1Nb2RlbCxcbiAgICBUcmVlRGF0YVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsLFxuICAgIEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzLFxufSBmcm9tICcuL2V1aS10cmVlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXVpSW5wdXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaW5wdXQtY2hlY2tib3gnO1xuaW1wb3J0IHsgRXVpQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1idXR0b24nO1xuaW1wb3J0IHsgRXVpSWNvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaWNvbic7XG5pbXBvcnQgeyBFdWlMYWJlbE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktbGFiZWwnO1xuaW1wb3J0IHsgRXVpQmFkZ2VNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJhZGdlJztcbmltcG9ydCB7IEV1aUNoaXBNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWNoaXAnO1xuaW1wb3J0IHsgRXVpRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sLCBDZGtUcmVlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQXJyYXlEYXRhU291cmNlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZTJlJykgQElucHV0KCkgZTJlQXR0ciA9ICdldWktdHJlZSc7XG4gICAgQElucHV0KCkgbm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgQElucHV0KCkgbm9kZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHBhbmRlZFN2Z0ljb25DbGFzcyA9ICdldWktY2hldnJvbi1mb3J3YXJkOmV1aSc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkU3ZnSWNvbkNsYXNzID0gJ2V1aS1jaGV2cm9uLWRvd246ZXVpJztcblxuICAgIC8vIEBWaWV3Q2hpbGQoJ3RyZWVDb21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyB0cmVlQ29tcG9uZW50SW5zdGFuY2U6IGFueTtcbiAgICAvLyBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZTtcbiAgICB9XG5cbiAgICBzZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTXVsdGlzZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpc2VsZWN0O1xuICAgIH1cblxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgc2V0IGF1dG9UcmFuc2xhdGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9hdXRvVHJhbnNsYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcz4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBub2RlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIGNka0FycmF5RGF0YVNvdXJjZTogQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtTW9kZWw+O1xuICAgIGNka1RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbU1vZGVsPjtcbiAgICByZW5kZXJUcmVlOiBib29sZWFuO1xuICAgIHB1YmxpYyB1aWQ6IHN0cmluZyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApLnRvU3RyaW5nKCk7XG4gICAgcHJpdmF0ZSBwcm9jZXNzZWROb2RlczogVHJlZURhdGFNb2RlbDtcbiAgICBwcml2YXRlIHRyZWVEYXRhUnVuVGltZTogVHJlZURhdGFSdW5UaW1lTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWVCYWNrdXA6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlOiBBcnJheTxUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsPjtcbiAgICBwcml2YXRlIHNlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcHJpdmF0ZSBfaXNDbGlja1RvZ2dsaW5nTm9kZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzTXVsdGlzZWxlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9hdXRvVHJhbnNsYXRlID0gdHJ1ZTtcbiAgICBwcml2YXRlIHNlbGVjdGlvbk1vZGVsU3VicztcbiAgICBwcml2YXRlIF9zZWxlY3Rpb247XG4gICAgcHJpdmF0ZSBfaXNNdWx0aUxldmVsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydub2RlcyddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGVsOiBhbnkpOiBhbnkge1xuICAgICAgICByZXR1cm4gZWwucGFyZW50O1xuICAgIH1cblxuICAgIGdldFRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtTW9kZWwge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBub2RlQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kQXQocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kRGVzY2VuZGFudHModGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aFswXSkpO1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZURlc2NlbmRhbnRzKHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpKTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyVGVybShmaWx0ZXJJbnB1dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChmaWx0ZXJJbnB1dCAmJiBmaWx0ZXJJbnB1dCAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgJ2xhYmVsJywgZmlsdGVySW5wdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEFsbFNlbGVjdGlvbihpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwodGhpcy5wcm9jZXNzZWROb2RlcywgaXNDaGVja2VkLCB0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQodGhpcy5nZXRUcmVlSXRlbSh0cmVlSXRlbT8ucGF0aCkpO1xuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVUb2dnbGUodHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZUl0ZW0/LnBhdGgpKTtcbiAgICB9XG5cbiAgICBub2RlU2VsZWN0ZWQoZXZ0OiBhbnksIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1Nb2RlbCA9IHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCBub2RlID0gaXRlbS5ub2RlO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgLy8gU2V0cyB0aGUgaGFzUGFyZW50IElmIHRoZXJlIGlzIGEgcGFyZW50LCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZvcm0gcGF0aEFyci5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaWxlbnRseSBzZXRzIHRoZSBpc1NlbGVjdGVkLlxuICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIC8vIFNldHMgaXNTZWxlY3RlZCBjaGFuZ2Ugb24gdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgcmVjdXJzaXZlIGl0IHNldHMgZXZlcnkgY2hpbGRyZW4gd2l0aCB0aGUgY2hhbmdlLlxuICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwoY2hpbGRyZW4sIGV2dC50YXJnZXQuY2hlY2tlZCwgdHJlZUl0ZW1Nb2RlbD8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZXMgdG8gdGhlIG5vZGUgYW5kIGl0cyBjaGlsZHJlbiBub2RlIHN0YXRlXG4gICAgICAgIHRoaXMuc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5nZXRUcmVlSXRlbShwYXRoKSkpXG4gICAgICAgICk7XG4gICAgICAgIC8vIEl0IGlzIGhlcmUgZm9yIHRoZSBmaWx0ZXIgZWRnZSBjYXNlLlxuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlcyBwYXJlbnQgcGF0aFxuICAgICAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGhBcnIuam9pbignLicpO1xuICAgICAgICAgICAgLy8gQ3JlYXRpbmcgbm9kZSBpbmRleCBzZXF1ZW5jZSBmLmUgSWYgcGF0aCBpcyAnMS4yJyBpdCB3aWxsIGJlIFsxLDJdXG4gICAgICAgICAgICBjb25zdCBub2RlSW5kZXhTZXEgPSBwYXJlbnRQYXRoLnNwbGl0KCcuJykubWFwKChpbmRleFN0cikgPT4gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKSk7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGluZyB0aGUgbm9kZSBwYXRocyBhcnJheSB0byBiZSByZS1jYWxjdWxhdGVkIGZyb20gYm90dG9tIHRvIHRvcFxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gW107XG4gICAgICAgICAgICBub2RlSW5kZXhTZXEuZm9yRWFjaCgobm9kZUluZGV4LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcVtpbmRleF0gPSBub2RlSW5kZXhTZXEuc2xpY2UoMCwgaW5kZXggKyAxKS5qb2luKCcuJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpZGVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0aGlzLmdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG5cbiAgICBvblNlbGVjdEZuKHBhdGg6IHN0cmluZywgdHJlZUl0ZW1Nb2RlbDogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodHJlZUl0ZW1Nb2RlbD8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IG5vZGVTZWxlY3RlZChldnQsIHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgcmV0dXJuIChldnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCd0cmVlSXRlbU1vZGVsLm5vZGUuc2VsZWN0YWJsZSBpcyBmYWxzZSwgeW91IGNhbiBub3QgaW1wbGVtZW50IG9uU2VsZWN0Jyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRyZWVEYXRhUnVudGltZSh0aGlzLnByb2Nlc3NlZE5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVySW5pdGlhbEV4cGFuZCh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPihcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbih0aGlzLnRyZWVEYXRhUnVuVGltZSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYT8ucGF0aCA9PT0gYj8ucGF0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3VicyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5zdWJzY3JpYmUoKHNjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRlZDogc2MuYWRkZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkOiBzYy5yZW1vdmVkLm1hcCgoXykgPT4gdGhpcy5nZXRUcmVlSXRlbShfLnBhdGgpKSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF0ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uQ2hhbmdlLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGlvbkNoYW5nZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NJbnB1dHModHJlZURhdGE6IFRyZWVEYXRhTW9kZWwpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgdHJlZURhdGEgPSB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbih0cmVlRGF0YSwgdGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiwgIXRoaXMuaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmVlRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihub2RlQXJyOiBUcmVlRGF0YU1vZGVsLCBpc1JlY3Vyc2l2ZTogYm9vbGVhbiwgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuKTogVHJlZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiBub2RlQXJyPy5tYXAoKGl0ZW06IFRyZWVJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNJbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdENvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZS5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICEhaXNSZWN1cnNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5vQXV0b1NlbGVjdFBhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogaXRlbT8ubm9kZT8uc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maW5kSW5kZXgoKGkpID0+IGk/LnBhdGggPT09IHJ1blRpbWVUcmVlSXRlbT8ucGF0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZkl0ZW0gPSB0aGlzLmdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIGlmIChpbmRleE9mSXRlbSA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF07XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24uc3BsaWNlKGluZGV4T2ZJdGVtLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKC4uLm5ld1NlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIHRyZWVEYXRhUnVuVGltZSAmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSBmb3Igc2VwYXJhdGUgdGhlIGxvZ2ljLlxuICAgIHByaXZhdGUgY3JlYXRlVHJlZURhdGFSdW50aW1lKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKHsgLi4uaXRlbSB9LCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHN0cnVjdHVyZWRDbG9uZShub2Rlcyk/Lm1hcCgoaXRlbSkgPT4gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoeyAuLi5pdGVtIH0pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBydW4gdGltZSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjaGlsZHJlbiBzZWxlY3Rpb24gc3RhdGUgZm9yIHNlbGVjdGlvbiB0cmVlLlxuICAgIHByaXZhdGUgY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsKTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCB7XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbltpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udHJlZUl0ZW0sXG4gICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogaXRlbVN0YXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVjaWRlU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwpOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSB7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVJdGVtcyA9IHRyZWVJdGVtLmNoaWxkcmVuIHx8IChbXSBhcyBhbnkpO1xuICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IHJ1blRpbWVJdGVtcz8ubWFwKChpdGVtKSA9PiBpdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJykpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbE5vdFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlICYmXG4gICAgICAgICAgICBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJlxuICAgICAgICAgICAgIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJlxuICAgICAgICAgICAgIXRyZWVJdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSAmJlxuICAgICAgICAgICAgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbE5vdFNlbGVjdGVkJykgJiZcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxOb3RTZWxlY3RlZCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1TdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZVRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0obm9kZVBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVQYXRoKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtPy5ub2RlPy5zZWxlY3RhYmxlICYmIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICBpZiAoIXRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5kZXRlcm1pbmF0ZTogcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdpbmRldGVybWluYXRlJyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50cmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5kZXRlcm1pbmF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICghdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codHJlZUl0ZW0sIHRyZWVJdGVtLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCwgJ2lzU2VsZWN0ZWQ6JyArIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCwgJ2lzSW5kZXRlcm1pbmF0ZTonICsgdHJlZUl0ZW0ubm9kZS5pc0luZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgaWYgKHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGg6IHN0cmluZywgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbUFycltwYXRoSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBUcmVlRGF0YU1vZGVsLCBpc0NoZWNrZWQ6IGJvb2xlYW4sIHJ1blRpbWVUcmVlRGF0YTogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbm9kZUFyci5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVuVGltZVRyZWVEYXRhW2luZGV4XSAmJiBub2RlQXJyW2luZGV4XT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnJbaW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc0NoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVUcmVlRGF0YVtpbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZURhdGFbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuVGltZVRyZWVEYXRhW2luZGV4XT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgJiYgbm9kZUFycltpbmRleF0uY2hpbGRyZW4gJiYgbm9kZUFycltpbmRleF0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLCBpc0NoZWNrZWQsIHJ1blRpbWVUcmVlRGF0YVtpbmRleF0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5tYXAoKGluZGV4OiBzdHJpbmcpID0+IHBhcnNlSW50KGluZGV4LCAxMCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlciwgcGFyZW50UGF0aD86IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgdHJlZUl0ZW0ucGF0aCA9IHBhcmVudFBhdGggPyBwYXJlbnRQYXRoICsgJy4nICsgaW5kZXggOiBpbmRleC50b1N0cmluZygpO1xuICAgICAgICB0cmVlSXRlbS5pbmRleCA9IGluZGV4O1xuICAgICAgICBpZiAodHJlZUl0ZW0uY2hpbGRyZW4gJiYgdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIHRyZWVJdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlblt0cmVlSXRlbUluZGV4XSA9IHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGNoaWxkLCB0cmVlSXRlbUluZGV4LCB0cmVlSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmVlSXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlclRyZWVEYXRhKHRyZWVEYXRhOiBUcmVlRGF0YU1vZGVsLCBrZXk6IHN0cmluZyA9ICdsYWJlbCcsIGZpbHRlclN0cjogc3RyaW5nKTogVHJlZUl0ZW1Nb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhLmZpbHRlcigodHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyVHJlZURhdGEoWy4uLnRyZWVJdGVtLmNoaWxkcmVuXSwga2V5LCBmaWx0ZXJTdHIpO1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuID0gdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHRyZWVJdGVtLmNoaWxkcmVuIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplZFN0cih0cmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwpLmluY2x1ZGVzKHRoaXMubm9ybWFsaXplZFN0cihmaWx0ZXJTdHIpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplZFN0cihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluaXRpYWxTZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4gPSBbXTtcbiAgICAgICAgdGhpcy5zY2FuU2VsZWN0aW9uKG5vZGVzLCBzZWxlY3Rpb24pO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NhblNlbGVjdGlvbihub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwsIHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5ub2RlPy5zZWxlY3RhYmxlICYmIGl0ZW0ubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5TZWxlY3Rpb24oaXRlbS5jaGlsZHJlbiwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJJbml0aWFsRXhwYW5kKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/Lm5vZGU/LmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEF0KGl0ZW0ucGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaWYgKG5vZGVBcnIgJiYgQXJyYXkuaXNBcnJheShub2RlQXJyKSkge1xuICAgICAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnIgJiYgbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gWydldWktdHJlZScsIHRoaXMuaXNNdWx0aXNlbGVjdCA/ICdldWktdHJlZS0tbXVsdGlzZWxlY3QnIDogJycsIHRoaXMuX2lzTXVsdGlMZXZlbCA/ICdldWktdHJlZS0td2l0aC1jaGlsZHJlbicgOiAnJ11cbiAgICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lmTXVsdGlMZXZlbCh0cmVlOiBUcmVlRGF0YU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpc011bHRpTGV2ZWwgPSBmYWxzZTtcbiAgICAgICAgdHJlZS5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpc011bHRpTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzTXVsdGlMZXZlbDtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRXVpSW5wdXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgQ2RrVHJlZU1vZHVsZSxcbiAgICAgICAgRXVpQnV0dG9uTW9kdWxlLFxuICAgICAgICBFdWlJY29uTW9kdWxlLFxuICAgICAgICBFdWlMYWJlbE1vZHVsZSxcbiAgICAgICAgRXVpQmFkZ2VNb2R1bGUsXG4gICAgICAgIEV1aUNoaXBNb2R1bGUsXG4gICAgICAgIEV1aURyb3Bkb3duTW9kdWxlLFxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbRXVpVHJlZUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0V1aVRyZWVDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlTW9kdWxlIHt9XG4iLCI8dWwgY2xhc3M9XCJldWktdHJlZV9fd3JhcHBlclwiPlxuICAgIDxjZGstdHJlZSBbZGF0YVNvdXJjZV09XCJjZGtBcnJheURhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwiY2RrVHJlZUNvbnRyb2xcIiBbdHJhY2tCeV09XCJ0cmFja0J5XCIgKm5nSWY9XCJyZW5kZXJUcmVlXCIgY2xhc3M9XCJldWktY2RrLXRyZWVcIj5cbiAgICAgICAgPCEtLSBUaGVyZSBhcmUgdHdvIHN0YXRlcyBvZiBnZW5lcmljIGNkay1uZXN0ZWQtdHJlZS1ub2RlIGRlY2xhcmF0aW9ucy5cbiAgICAgICAgRmlyc3Qgb25lIGlzIHdpdGhvdXQgY2hpbGQuIE5vIHN1YiByZW5kZXJpbmcuXG4gICAgICAgIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVJdGVtTW9kZWxcIiBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZVwiPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRyZWVJdGVtTW9kZWxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnRvb2x0aXBMYWJlbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXG4gICAgICAgICAgICAgICAgfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCIgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWYgfHwgbm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZUl0ZW1Nb2RlbC5wYXRoLCB0cmVlSXRlbU1vZGVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVJdGVtTW9kZWwucGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGVcbiAgICAgICAgICAgICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlSXRlbU1vZGVsOyB3aGVuOiBoYXNDaGlsZFwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZSBldWktY2RrLW5lc3RlZC10cmVlLW5vZGUtLXdpdGgtY2hpbGRcIj5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmVlSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFxuICAgICAgICAgICAgICAgIH19XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tSGVyZSB3cmFwcyB0aGUgbm9kZSwgYW5kIGxpc3RlbiBmb3Igbm9kZSBjbGlja3MuLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVJdGVtTW9kZWwpXCIgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFeHBhbmQvY29sbGFwc2UgYWN0aW9uIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpQmFzaWNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGUgJyArIHRyZWVJdGVtTW9kZWw/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKHRyZWVJdGVtTW9kZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtUcmVlTm9kZVRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkgJiYgY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25DbGFzc109XCJjb2xsYXBzZWRJY29uQ2xhc3NcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1Nb2RlbCkgJiYgZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkNsYXNzXT1cImV4cGFuZGVkSWNvbkNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbU1vZGVsKSAmJiAhY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXhwYW5kZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbU1vZGVsKSAmJiAhZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2xsYXBzZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWYgfHwgbm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZUl0ZW1Nb2RlbD8ucGF0aCwgdHJlZUl0ZW1Nb2RlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLXVzZXMgY2RrVHJlZU5vZGVPdXRsZXQgdG8gcmVuZGVyIGNoaWxkcmVuIG5vZGVzLCBDZGtUcmVlQ29udHJvbCBpcyB1c2VkIHRvIGNvbnRyb2wgaXNFeHBhbmRlZCBzdGF0ZS4tLT5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJldWktdHJlZS1ub2RlXCIgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgPC9jZGstdHJlZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1cImlkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnRcIiBbY2xhc3MuZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdC0tc2VsZWN0ZWRdPVwibm9kZT8uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPCEtLWlucHV0IGNoZWNrYm94IGFyZWEtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhbm9kZT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiISFub2RlPy5pc0luZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1tXCIgLz5cblxuICAgICAgICAgICAgPCEtLWljb24gYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvblxuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3MgfHwgJ2dyZXktMTAwJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLmNoaXBzXCJcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1iYWRnZSAodHlwZUxhYmVsICYgdHlwZUNsYXNzKSBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsXCIgW25nU3dpdGNoXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiIGNsYXNzPVwiZXVpLXUtZmxleC1uby1zaHJpbmsgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLWxhYmVsIGFyZWEtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLW1pZGRsZVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsICYmICFub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgZXVpTGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJ7eyBpZCB9fVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LW1yLXNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbGFiZWwtLXNlbGVjdGVkXT1cIm5vZGU/LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS1jdXJzb3ItcG9pbnRlcl09XCJub2RlPy5zZWxlY3RhYmxlXCI+XG4gICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiIGV1aUxhYmVsIGZvcj1cInt7IGlkIH19XCIgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LW1yLW1cIj5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImV1aS11LXRleHQtbGlua1wiIFtyb3V0ZXJMaW5rXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtbXItbVwiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ2JsYW5rJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudFwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItcmlnaHRcIj5cbiAgICAgICAgICAgIDwhLS1iYWRnZXMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uYmFkZ2VzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1iYWRnZSBldWlTaXplTSBldWlPdXRsaW5lIFtldWlWYXJpYW50XT1cImJhZGdlLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgYmFkZ2UubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWNoaXBzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1Db250ZXh0IG1lbnUtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhICYmIHJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24gY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlTaXplUyBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gZXVpU2Vjb25kYXJ5IFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wdGlvbnMgbWVudSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImV1aS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLW1ldGFkYXRhLCB1c2VzIHRoZSBoZWxwIG9mIG5nIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGR5bmFtaWMgZXhwYW5kIHZhcmlhYmxlIHdpdGhvdXQgaGFuZGxpbmcgc3RhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSAmJiBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBleHBhbmRlZDogZmFsc2UgfVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyIGxldC1tZXRhRGF0YUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWQgPSAhbWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIFtpY29uXT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID8gJ2V1aS1jaGV2cm9uLWRvd24nIDogJ2V1aS1jaGV2cm9uLWZvcndhcmQnXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZFwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZV9fbWV0YWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8IS0tcGFzc2luZyBtZXRhZGF0YSBvZiB0aGUgbm9kZSBjb250ZW50IHRvIHByb3ZpZGVkIHRlbXBsYXRlLXJlZjpub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWYtLT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|