desy-angular 14.0.1 → 14.2.0
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/esm2022/lib/desy-angular.module.mjs +2 -2
- package/esm2022/lib/desy-buttons/components/button/button.component.mjs +3 -3
- package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +3 -3
- package/esm2022/lib/desy-buttons/components/dropdown/dropdown.component.mjs +10 -9
- package/esm2022/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +1 -1
- package/esm2022/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +1 -1
- package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +18 -19
- package/esm2022/lib/desy-buttons/components/pill/pill.component.mjs +3 -3
- package/esm2022/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +3 -3
- package/esm2022/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +3 -3
- package/esm2022/lib/desy-buttons/components/toggle/toggle.component.mjs +3 -3
- package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +7 -18
- package/esm2022/lib/desy-commons/components/content/content.component.mjs +1 -1
- package/esm2022/lib/desy-commons/components/description/description.component.mjs +2 -2
- package/esm2022/lib/desy-commons/components/divider/divider.component.mjs +3 -3
- package/esm2022/lib/desy-commons/components/icon/icon.component.mjs +1 -1
- package/esm2022/lib/desy-commons/components/title/title.component.mjs +2 -2
- package/esm2022/lib/desy-commons/desy-commons.module.mjs +6 -34
- package/esm2022/lib/desy-commons/interfaces/description-data.mjs +1 -1
- package/esm2022/lib/desy-commons/interfaces/divider-data.mjs +1 -1
- package/esm2022/lib/desy-commons/interfaces/icon-data.mjs +1 -1
- package/esm2022/lib/desy-commons/interfaces/title-data.mjs +1 -1
- package/esm2022/lib/desy-forms/components/character-count/character-count.component.mjs +10 -10
- package/esm2022/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +12 -9
- package/esm2022/lib/desy-forms/components/checkboxes/checkboxes-parent.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +23 -17
- package/esm2022/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +34 -25
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +14 -14
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +3 -3
- package/esm2022/lib/desy-forms/components/error-message/error-message.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/fieldset/fieldset.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/fieldset/legend/legend.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/file-upload/file-upload.component.mjs +7 -7
- package/esm2022/lib/desy-forms/components/form-field/form-field.component.mjs +12 -5
- package/esm2022/lib/desy-forms/components/hint/hint.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/input/input.component.mjs +10 -10
- package/esm2022/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +1 -1
- package/esm2022/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/input-group/input-group.component.mjs +18 -15
- package/esm2022/lib/desy-forms/components/label/label.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +7 -5
- package/esm2022/lib/desy-forms/components/radios/radios-parent.component.mjs +2 -2
- package/esm2022/lib/desy-forms/components/radios/radios.component.mjs +20 -16
- package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +12 -8
- package/esm2022/lib/desy-forms/components/select/option/option.component.mjs +1 -1
- package/esm2022/lib/desy-forms/components/select/option-group/option-group.component.mjs +1 -1
- package/esm2022/lib/desy-forms/components/select/select-item/select-item.component.mjs +1 -1
- package/esm2022/lib/desy-forms/components/select/select.component.mjs +13 -13
- package/esm2022/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/textarea/textarea.component.mjs +8 -8
- package/esm2022/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.mjs +1 -1
- package/esm2022/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +9 -9
- package/esm2022/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +37 -34
- package/esm2022/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +4 -4
- package/esm2022/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +5 -5
- package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +45 -42
- package/esm2022/lib/desy-forms/desy-forms.module.mjs +2 -2
- package/esm2022/lib/desy-forms/directives/condition.directive.mjs +2 -2
- package/esm2022/lib/desy-forms/interfaces/error-message-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/fieldset-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-checkbox-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-date-input-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-divider-date-input-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-radio-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/item-radio-with-template-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/label-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/legend-data.mjs +1 -1
- package/esm2022/lib/desy-forms/interfaces/select-item-data.mjs +1 -1
- package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +11 -7
- package/esm2022/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +2 -2
- package/esm2022/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +2 -2
- package/esm2022/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +2 -2
- package/esm2022/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +2 -2
- package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +18 -9
- package/esm2022/lib/desy-modals/desy-modals.module.mjs +6 -17
- package/esm2022/lib/desy-modals/interfaces/dialog-options.mjs +1 -1
- package/esm2022/lib/desy-modals/interfaces/modal-button-data.mjs +1 -1
- package/esm2022/lib/desy-modals/interfaces/modal-data.mjs +1 -1
- package/esm2022/lib/desy-modals/interfaces/modal-icon-data.mjs +1 -1
- package/esm2022/lib/desy-modals/interfaces/modal-options.mjs +1 -1
- package/esm2022/lib/desy-modals/services/dialog.service.mjs +6 -6
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/error-summary/error-summary.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +6 -4
- package/esm2022/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +5 -5
- package/esm2022/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +6 -6
- package/esm2022/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +4 -4
- package/esm2022/lib/desy-nav/components/header/header.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +5 -5
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/links-list/links-list-item-sub/links-list-item-sub.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +6 -6
- package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +21 -17
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +11 -15
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +8 -6
- package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +23 -19
- package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +1 -1
- package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +5 -5
- package/esm2022/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +2 -2
- package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +9 -17
- package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +3 -3
- package/esm2022/lib/desy-nav/desy-nav.module.mjs +5 -16
- package/esm2022/lib/desy-nav/directives/dynamic-heading.directive.mjs +3 -3
- package/esm2022/lib/desy-nav/interfaces/breadcrumbs.data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/error-summary-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/footer-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-advanced-logo.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-dropdown-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-mobile-text-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-skiplink-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/header-subnav-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/index.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-navigation.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/menubar-item.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/nav-item-event.data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/nav-item.data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/notification-items-data.mjs +1 -1
- package/esm2022/lib/desy-nav/interfaces/notification-options.mjs +1 -1
- package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +17 -12
- package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +2 -2
- package/esm2022/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +2 -2
- package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +6 -35
- package/esm2022/lib/desy-tables/components/table/components/table-caption.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table/components/table-cell.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table/components/table-footer.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table/components/table-header.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table/components/table-row.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table/table.component.mjs +4 -4
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +10 -6
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +2 -2
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +3 -3
- package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +225 -33
- package/esm2022/lib/desy-tables/desy-tables.module.mjs +5 -22
- package/esm2022/lib/desy-tables/directives/cell.directive.mjs +2 -2
- package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +6 -3
- package/esm2022/lib/desy-tables/directives/row.directive.mjs +3 -3
- package/esm2022/lib/desy-tables/interfaces/cell-data.mjs +1 -1
- package/esm2022/lib/desy-tables/interfaces/head-cell-data.mjs +1 -1
- package/esm2022/lib/desy-tables/interfaces/recalculate-table-params.mjs +1 -1
- package/esm2022/lib/desy-tables/interfaces/row-data.mjs +1 -1
- package/esm2022/lib/desy-tables/interfaces/wrapper-data.mjs +1 -1
- package/esm2022/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +1 -1
- package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +9 -9
- package/esm2022/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +1 -1
- package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +3 -3
- package/esm2022/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/alert/alert.component.mjs +4 -4
- package/esm2022/lib/desy-views/components/card/card-sectors/card-left.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/card/card-sectors/card-right.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/card/card-sectors/card-sub.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/card/card-sectors/card-super.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/card/card.component.mjs +4 -4
- package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +3 -3
- package/esm2022/lib/desy-views/components/description-list/definition/definition.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/description-list/description-item/description-item.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/description-list/description-list.component.mjs +4 -4
- package/esm2022/lib/desy-views/components/description-list/term/term.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/details/details.component.mjs +3 -3
- package/esm2022/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/item/item-item/item-item.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/item/item.component.mjs +6 -6
- package/esm2022/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +3 -3
- package/esm2022/lib/desy-views/components/media-object/media-object.component.mjs +5 -5
- package/esm2022/lib/desy-views/components/status/status.component.mjs +3 -3
- package/esm2022/lib/desy-views/components/status-item/status-item.component.mjs +7 -7
- package/esm2022/lib/desy-views/components/tabs/panel/panel.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +2 -2
- package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +9 -8
- package/esm2022/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +1 -1
- package/esm2022/lib/desy-views/components/tooltip/tooltip.component.mjs +15 -9
- package/esm2022/lib/desy-views/desy-views.module.mjs +5 -19
- package/esm2022/lib/desy-views/interfaces/description-item.data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/status-icon-data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/status-item-title-data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/tabs-items-data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/tabs-panel-data.mjs +1 -1
- package/esm2022/lib/desy-views/interfaces/term-definition.data.mjs +1 -1
- package/esm2022/lib/desy-views/services/alert.service.mjs +5 -5
- package/esm2022/lib/shared/components/accessibility/accessibility-attributes.mjs +2 -2
- package/esm2022/lib/shared/components/accessibility/accessibility.component.mjs +2 -2
- package/esm2022/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +2 -2
- package/esm2022/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +2 -2
- package/esm2022/lib/shared/components/content-base/content-base.component.mjs +2 -2
- package/esm2022/lib/shared/components/index.mjs +1 -1
- package/esm2022/lib/shared/components/spinner/spinner.component.mjs +5 -5
- package/esm2022/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +2 -2
- package/esm2022/lib/shared/decorators/desy-content-child.decorator.mjs +7 -3
- package/esm2022/lib/shared/decorators/desy-on-input-change.decorator.mjs +2 -2
- package/esm2022/lib/shared/directives/accessibility-directive.mjs +7 -5
- package/esm2022/lib/shared/directives/attribute-change.directive.mjs +5 -5
- package/esm2022/lib/shared/directives/click-outside.directive.mjs +2 -2
- package/esm2022/lib/shared/directives/content-change.directive.mjs +3 -3
- package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +9 -7
- package/esm2022/lib/shared/directives/inner-content.directive.mjs +2 -2
- package/esm2022/lib/shared/interfaces/accessibility-data.mjs +1 -1
- package/esm2022/lib/shared/pipes/external-href.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/inner-html.pipe.mjs +2 -2
- package/esm2022/lib/shared/pipes/make-html-list.pipe.mjs +3 -3
- package/esm2022/lib/shared/shared.module.mjs +4 -6
- package/esm2022/lib/shared/sharedExternal.module.mjs +3 -7
- package/esm2022/lib/shared/utils/focus-utils.mjs +2 -3
- package/esm2022/lib/shared/utils/search-utils.mjs +5 -5
- package/esm2022/lib/shared/utils/string-utils.mjs +9 -7
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/desy-angular.mjs +901 -754
- package/fesm2022/desy-angular.mjs.map +1 -1
- package/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.d.ts +3 -3
- package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +2 -1
- package/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.d.ts +1 -1
- package/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.d.ts +3 -3
- package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +7 -7
- package/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.d.ts +1 -1
- package/lib/desy-forms/components/tree/tree-sub/tree-sub.component.d.ts +2 -2
- package/lib/desy-forms/components/tree/tree.component.d.ts +5 -5
- package/lib/desy-forms/interfaces/select-item-data.d.ts +1 -1
- package/lib/desy-modals/components/dialog/dialog.component.d.ts +1 -1
- package/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.d.ts +2 -2
- package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +1 -1
- package/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.d.ts +2 -2
- package/lib/desy-nav/interfaces/header-dropdown-data.d.ts +1 -1
- package/lib/desy-nav/interfaces/header-mobile-text-data.d.ts +1 -1
- package/lib/desy-nav/interfaces/header-subnav-data.d.ts +1 -1
- package/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.d.ts +2 -2
- package/lib/desy-nav/interfaces/nav-item-event.data.d.ts +1 -1
- package/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.d.ts +3 -3
- package/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.d.ts +1 -1
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +19 -1
- package/lib/desy-tables/interfaces/head-cell-data.d.ts +1 -1
- package/lib/desy-views/components/alert/alert.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, QueryList, ViewChild, ViewChildren } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, QueryList, ViewChild, ViewChildren, } from '@angular/core';
|
|
2
2
|
import { AccessibilityComponent } from '../../../shared/components';
|
|
3
3
|
import { MenubaritemDirective } from '../menubar/directives/menubaritem.directive';
|
|
4
4
|
import { MenuNavigationItemComponent } from './components/menu-navigation-item/menu-navigation-item.component';
|
|
@@ -124,7 +124,7 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
124
124
|
open: false,
|
|
125
125
|
currentFocusSubItemIndex: 0,
|
|
126
126
|
currentFocusSubSubItemIndex: 0,
|
|
127
|
-
menuItem: this.menuItems.toArray()[index]
|
|
127
|
+
menuItem: this.menuItems.toArray()[index],
|
|
128
128
|
};
|
|
129
129
|
this.menuData.push(itemData);
|
|
130
130
|
});
|
|
@@ -146,10 +146,10 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
146
146
|
items.forEach((item) => {
|
|
147
147
|
let subItems = this.getItemSubitems(item);
|
|
148
148
|
if (subItems instanceof MenuNavigationItemComponent) {
|
|
149
|
-
item.active = subItems.sub.items.filter(subItem => subItem.active).length > 0;
|
|
149
|
+
item.active = subItems.sub.items.filter((subItem) => subItem.active).length > 0;
|
|
150
150
|
}
|
|
151
151
|
else if (item?.sub?.items) {
|
|
152
|
-
item.active = item.sub.items.filter(subItem => subItem.active).length > 0;
|
|
152
|
+
item.active = item.sub.items.filter((subItem) => subItem.active).length > 0;
|
|
153
153
|
}
|
|
154
154
|
});
|
|
155
155
|
}
|
|
@@ -364,7 +364,7 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
364
364
|
this.menuData[itemIndex].open = false;
|
|
365
365
|
}
|
|
366
366
|
else {
|
|
367
|
-
this.menuData.forEach(item => item.open = false);
|
|
367
|
+
this.menuData.forEach((item) => (item.open = false));
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
370
|
hasPopupMenu(itemIndex) {
|
|
@@ -418,13 +418,14 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
418
418
|
return !this.getItems()[itemIndex].disabled;
|
|
419
419
|
}
|
|
420
420
|
focusItemByFirstChar(char) {
|
|
421
|
-
const itemContents = this.menuItems.map(menuItem => menuItem.itemContentWrapper.nativeElement.textContent);
|
|
421
|
+
const itemContents = this.menuItems.map((menuItem) => menuItem.itemContentWrapper.nativeElement.textContent);
|
|
422
422
|
let index = this.currentFocusItemIndex;
|
|
423
423
|
let foundIndex = -1;
|
|
424
424
|
do {
|
|
425
425
|
index = (index + itemContents.length + 1) % itemContents.length;
|
|
426
|
-
if (itemContents[index] &&
|
|
427
|
-
|
|
426
|
+
if (itemContents[index] &&
|
|
427
|
+
itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase() &&
|
|
428
|
+
this.isItemFocusable(index)) {
|
|
428
429
|
foundIndex = index;
|
|
429
430
|
}
|
|
430
431
|
} while (foundIndex === -1 && index !== this.currentFocusItemIndex);
|
|
@@ -464,7 +465,7 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
464
465
|
const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step);
|
|
465
466
|
nextSubIndex = nextIndexes.subIndex;
|
|
466
467
|
nextSubSubIndex = nextIndexes.subSubIndex;
|
|
467
|
-
allSubItemsChecked =
|
|
468
|
+
allSubItemsChecked = fromItemSubIndex === nextSubIndex && fromItemSubSubIndex === nextSubSubIndex;
|
|
468
469
|
} while (!this.isSubItemFocusable(itemIndex, nextSubIndex, nextSubSubIndex) && !allSubItemsChecked);
|
|
469
470
|
if (!allSubItemsChecked) {
|
|
470
471
|
this.focusSubItem(itemIndex, nextSubIndex, nextSubSubIndex);
|
|
@@ -508,7 +509,8 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
508
509
|
return isFocusable;
|
|
509
510
|
}
|
|
510
511
|
focusSubItemByFirstChar(itemIndex, char) {
|
|
511
|
-
const itemContents = this.menuItems
|
|
512
|
+
const itemContents = this.menuItems
|
|
513
|
+
.toArray()[itemIndex].popupMenuItems.map((menuItem) => menuItem.nativeElement.textContent);
|
|
512
514
|
let subItemIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
|
|
513
515
|
let subSubItemIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
|
|
514
516
|
let foundSubIndex = -1;
|
|
@@ -520,13 +522,15 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
520
522
|
subItemIndex = nextIndexes.subIndex;
|
|
521
523
|
subSubItemIndex = nextIndexes.subSubIndex;
|
|
522
524
|
const index = subItemIndex;
|
|
523
|
-
if (itemContents[index] &&
|
|
524
|
-
|
|
525
|
+
if (itemContents[index] &&
|
|
526
|
+
itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase() &&
|
|
527
|
+
this.isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex)) {
|
|
525
528
|
foundSubIndex = subItemIndex;
|
|
526
529
|
foundSubSubIndex = subSubItemIndex;
|
|
527
530
|
}
|
|
528
|
-
allSubItemsChecked =
|
|
529
|
-
|
|
531
|
+
allSubItemsChecked =
|
|
532
|
+
this.menuData[itemIndex].currentFocusSubItemIndex === subItemIndex &&
|
|
533
|
+
this.menuData[itemIndex].currentFocusSubSubItemIndex === subSubItemIndex;
|
|
530
534
|
} while (foundSubIndex === -1 && !allSubItemsChecked);
|
|
531
535
|
if (foundSubIndex >= 0) {
|
|
532
536
|
this.focusSubItem(itemIndex, foundSubIndex, foundSubSubIndex);
|
|
@@ -588,11 +592,11 @@ export class MenuNavigationComponent extends AccessibilityComponent {
|
|
|
588
592
|
return id;
|
|
589
593
|
}
|
|
590
594
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
591
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MenuNavigationComponent, selector: "desy-menu-navigation", inputs: { idPrefix: "idPrefix", items: "items", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menu-navigation": "this.cfg", "attr.id": "this.id", "attr.role": "this.role", "attr.aria-label": "this.ariaLabel", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-labelledby": "this.ariaLabelledBy", "attr.aria-hidden": "this.ariaHidden", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-controls": "this.ariaControls", "attr.aria-current": "this.ariaCurrent", "attr.aria-live": "this.ariaLive", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-errormessage": "this.ariaErrorMessage", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-modal": "this.ariaModal", "attr.aria-checked": "this.ariaChecked", "attr.aria-pressed": "this.ariaPressed", "attr.aria-readonly": "this.ariaReadonly", "attr.aria-required": "this.ariaRequired", "attr.aria-selected": "this.ariaSelected", "attr.aria-valuemin": "this.ariaValuemin", "attr.aria-valuemax": "this.ariaValuemax", "attr.aria-valuenow": "this.ariaValuenow", "attr.aria-valuetext": "this.ariaValuetext", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-level": "this.ariaLevel", "attr.aria-multiselectable": "this.ariaMultiselectable", "attr.aria-placeholder": "this.ariaPlaceholder", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-sort": "this.ariaSort", "attr.aria-busy": "this.ariaBusy", "attr.aria-dropeffect": "this.ariaDropeffect", "attr.aria-grabbed": "this.ariaGrabbed", "attr.aria-activedescendant": "this.ariaActivedescendant", "attr.aria-atomic": "this.ariaAtomic", "attr.aria-autocomplete": "this.ariaAutocomplete", "attr.aria-braillelabel": "this.ariaBraillelabel", "attr.aria-brailleroledescription": "this.ariaBrailleroledescription", "attr.aria-colcount": "this.ariaColcount", "attr.aria-colindex": "this.ariaColindex", "attr.aria-colindextext": "this.ariaColindextext", "attr.aria-colspan": "this.ariaColspan", "attr.aria-description": "this.ariaDescription", "attr.aria-details": "this.ariaDetails", "attr.aria-flowto": "this.ariaFlowto", "attr.aria-invalid": "this.ariaInvalid", "attr.aria-keyshortcuts": "this.ariaKeyshortcuts", "attr.aria-owns": "this.ariaOwns", "attr.aria-relevant": "this.ariaRelevant", "attr.aria-roledescription": "this.ariaRoledescription", "attr.aria-rowcount": "this.ariaRowcount", "attr.aria-rowindex": "this.ariaRowindex", "attr.aria-rowindextext": "this.ariaRowindextext", "attr.aria-rowspan": "this.ariaRowspan", "attr.tabindex": "this.tabindex", "attr.title": "this.title", "attr.alt": "this.alt", "attr.lang": "this.lang", "attr.accesskey": "this.accesskey", "attr.autocomplete": "this.autocomplete", "attr.autofocus": "this.autofocus", "attr.contenteditable": "this.contenteditable", "attr.dir": "this.dir", "attr.draggable": "this.draggable", "attr.enterkeyhint": "this.enterkeyhint", "attr.hidden": "this.hidden", "attr.inputmode": "this.inputmode", "attr.spellcheck": "this.spellcheck", "attr.translate": "this.translate", "attr.aria-multiline": "this.ariaMultiline", "attr.for": "this.for", "attr.form": "this.form", "attr.headers": "this.headers", "attr.placeholder": "this.placeholder", "attr.readonly": "this.readonly", "attr.required": "this.required" } }, queries: [{ propertyName: "itemComponentList", predicate: MenuNavigationItemComponent }], viewQueries: [{ propertyName: "menunavigation", first: true, predicate: ["menunavigation"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ul #menunavigation [id]=\"id + '-menu-navigation'\" class=\"flex flex-wrap gap-base\"\n(focusin)=\"handleMenuFocusIn()\"\n(focusout)=\"handleMenuFocusOut($event)\"\n[ngClass]=\"{ 'focus': isFocused }\"\n[attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n<ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n<li class=\"relative\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.href\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <a *ngIf=\"!item.href && item.routerLink\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <button *ngIf=\"!item.href && !item.routerLink\" #link #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span *ngIf=\"item.active\" class=\"sr-only\">Item activo: </span>\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg *ngIf=\"item.sub\" class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </button> \n\n <div *ngIf=\"item.sub && getItemSubitems(item)\" class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul [id]=\"id + '-sub-list'\" [style]=\"menuData && menuData[itemIndex].open?'display:block':'display:none'\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [class]=\"item.sub.classes ? item.sub.classes : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\t\t\t\t\n <li #popupMenuItem tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a *ngIf=\"subItem.href\" #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n <a *ngIf=\"!subItem.href && subItem.routerLink\" #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n </li>\n <li *ngIf=\"subItem.divider\" class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n</li>\n<li #popupMenuItem *ngIf=\"item.divider\" [class]=\"item.divider.classes\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *desyCustomInnerContent=\"{ component: item.divider, html: item.divider.html, text: item.divider.text}\"></ng-container>\n</li>\n</ng-container>\n</ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "directive", type: i6.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
|
|
595
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MenuNavigationComponent, selector: "desy-menu-navigation", inputs: { idPrefix: "idPrefix", items: "items", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menu-navigation": "this.cfg", "attr.id": "this.id", "attr.role": "this.role", "attr.aria-label": "this.ariaLabel", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-labelledby": "this.ariaLabelledBy", "attr.aria-hidden": "this.ariaHidden", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-controls": "this.ariaControls", "attr.aria-current": "this.ariaCurrent", "attr.aria-live": "this.ariaLive", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-errormessage": "this.ariaErrorMessage", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-modal": "this.ariaModal", "attr.aria-checked": "this.ariaChecked", "attr.aria-pressed": "this.ariaPressed", "attr.aria-readonly": "this.ariaReadonly", "attr.aria-required": "this.ariaRequired", "attr.aria-selected": "this.ariaSelected", "attr.aria-valuemin": "this.ariaValuemin", "attr.aria-valuemax": "this.ariaValuemax", "attr.aria-valuenow": "this.ariaValuenow", "attr.aria-valuetext": "this.ariaValuetext", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-level": "this.ariaLevel", "attr.aria-multiselectable": "this.ariaMultiselectable", "attr.aria-placeholder": "this.ariaPlaceholder", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-sort": "this.ariaSort", "attr.aria-busy": "this.ariaBusy", "attr.aria-dropeffect": "this.ariaDropeffect", "attr.aria-grabbed": "this.ariaGrabbed", "attr.aria-activedescendant": "this.ariaActivedescendant", "attr.aria-atomic": "this.ariaAtomic", "attr.aria-autocomplete": "this.ariaAutocomplete", "attr.aria-braillelabel": "this.ariaBraillelabel", "attr.aria-brailleroledescription": "this.ariaBrailleroledescription", "attr.aria-colcount": "this.ariaColcount", "attr.aria-colindex": "this.ariaColindex", "attr.aria-colindextext": "this.ariaColindextext", "attr.aria-colspan": "this.ariaColspan", "attr.aria-description": "this.ariaDescription", "attr.aria-details": "this.ariaDetails", "attr.aria-flowto": "this.ariaFlowto", "attr.aria-invalid": "this.ariaInvalid", "attr.aria-keyshortcuts": "this.ariaKeyshortcuts", "attr.aria-owns": "this.ariaOwns", "attr.aria-relevant": "this.ariaRelevant", "attr.aria-roledescription": "this.ariaRoledescription", "attr.aria-rowcount": "this.ariaRowcount", "attr.aria-rowindex": "this.ariaRowindex", "attr.aria-rowindextext": "this.ariaRowindextext", "attr.aria-rowspan": "this.ariaRowspan", "attr.tabindex": "this.tabindex", "attr.title": "this.title", "attr.alt": "this.alt", "attr.lang": "this.lang", "attr.accesskey": "this.accesskey", "attr.autocomplete": "this.autocomplete", "attr.autofocus": "this.autofocus", "attr.contenteditable": "this.contenteditable", "attr.dir": "this.dir", "attr.draggable": "this.draggable", "attr.enterkeyhint": "this.enterkeyhint", "attr.hidden": "this.hidden", "attr.inputmode": "this.inputmode", "attr.spellcheck": "this.spellcheck", "attr.translate": "this.translate", "attr.aria-multiline": "this.ariaMultiline", "attr.for": "this.for", "attr.form": "this.form", "attr.headers": "this.headers", "attr.placeholder": "this.placeholder", "attr.readonly": "this.readonly", "attr.required": "this.required" } }, queries: [{ propertyName: "itemComponentList", predicate: MenuNavigationItemComponent }], viewQueries: [{ propertyName: "menunavigation", first: true, predicate: ["menunavigation"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ul\n #menunavigation\n [id]=\"id + '-menu-navigation'\"\n class=\"flex flex-wrap gap-base\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ focus: isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li\n class=\"relative\"\n desyMenubaritem\n (contentChanged)=\"checkChanges()\">\n <a\n *ngIf=\"item.href\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <button\n *ngIf=\"!item.href && !item.routerLink\"\n #link\n #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n *ngIf=\"item.active\"\n class=\"sr-only\">\n Item activo:\n </span>\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n <svg\n *ngIf=\"item.sub\"\n class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\"\n viewBox=\"0 0 96 96\"\n aria-hidden=\"true\"\n fill=\"currentColor\"\n focusable=\"false\"\n width=\"1.5em\"\n height=\"1.5em\">\n <g>\n <path\n d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\" />\n </g>\n </svg>\n </button>\n\n <div\n *ngIf=\"item.sub && getItemSubitems(item)\"\n class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul\n [id]=\"id + '-sub-list'\"\n [style]=\"menuData && menuData[itemIndex].open ? 'display:block' : 'display:none'\"\n #popupMenu\n role=\"menu\"\n tabindex=\"-1\"\n [class]=\"\n item.sub.classes\n ? item.sub.classes\n : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\n \"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : item.sub.ariaLabel ? item.sub.ariaLabel : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <li\n #popupMenuItem\n tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a\n *ngIf=\"subItem.href\"\n #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n <a\n *ngIf=\"!subItem.href && subItem.routerLink\"\n #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n </li>\n <li\n *ngIf=\"subItem.divider\"\n class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n </li>\n <li\n #popupMenuItem\n *ngIf=\"item.divider\"\n [class]=\"item.divider.classes\"\n role=\"presentation\"\n aria-hidden=\"true\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: item.divider,\n html: item.divider.html,\n text: item.divider.text,\n }\"></ng-container>\n </li>\n </ng-container>\n</ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "directive", type: i6.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
|
|
592
596
|
}
|
|
593
597
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, decorators: [{
|
|
594
598
|
type: Component,
|
|
595
|
-
args: [{ selector: 'desy-menu-navigation', template: "<ul #menunavigation [id]=\"id + '-menu-navigation'\" class=\"flex flex-wrap gap-base\"\n(focusin)=\"handleMenuFocusIn()\"\n(focusout)=\"handleMenuFocusOut($event)\"\n[ngClass]=\"{ 'focus': isFocused }\"\n[attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n<ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n<li class=\"relative\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.href\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <a *ngIf=\"!item.href && item.routerLink\" #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : (item.ariaCurrent ? item.ariaCurrent : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span> \n </a>\n <button *ngIf=\"!item.href && !item.routerLink\" #link #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menu-navigation__button--disabled': item.disabled, 'c-menu-navigation__button--primary': item.active, 'c-menu-navigation__button--has-selection': item.active}\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span *ngIf=\"item.active\" class=\"sr-only\">Item activo: </span>\n <span class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </span>\n <svg *ngIf=\"item.sub\" class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </button> \n\n <div *ngIf=\"item.sub && getItemSubitems(item)\" class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul [id]=\"id + '-sub-list'\" [style]=\"menuData && menuData[itemIndex].open?'display:block':'display:none'\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [class]=\"item.sub.classes ? item.sub.classes : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\t\t\t\t\n <li #popupMenuItem tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a *ngIf=\"subItem.href\" #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n <a *ngIf=\"!subItem.href && subItem.routerLink\" #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"['flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', subItem.classes] | makeHtmlList\"\n [ngClass]=\"{'pointer-events-none': subItem.disabled}\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong class=\"font-bold\" *ngIf=\"subItem.active; else noActive\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </ng-template>\n <svg *ngIf=\"subItem.disabled\" viewBox=\"0 0 140 140\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\" class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\" aria-hidden=\"true\" focusable=\"false\" ><path d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\"/></svg>\n </a>\n </li>\n <li *ngIf=\"subItem.divider\" class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n</li>\n<li #popupMenuItem *ngIf=\"item.divider\" [class]=\"item.divider.classes\" role=\"presentation\" aria-hidden=\"true\">\n <ng-container *desyCustomInnerContent=\"{ component: item.divider, html: item.divider.html, text: item.divider.text}\"></ng-container>\n</li>\n</ng-container>\n</ul>\n" }]
|
|
599
|
+
args: [{ selector: 'desy-menu-navigation', template: "<ul\n #menunavigation\n [id]=\"id + '-menu-navigation'\"\n class=\"flex flex-wrap gap-base\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ focus: isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li\n class=\"relative\"\n desyMenubaritem\n (contentChanged)=\"checkChanges()\">\n <a\n *ngIf=\"item.href\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <button\n *ngIf=\"!item.href && !item.routerLink\"\n #link\n #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n *ngIf=\"item.active\"\n class=\"sr-only\">\n Item activo:\n </span>\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n <svg\n *ngIf=\"item.sub\"\n class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\"\n viewBox=\"0 0 96 96\"\n aria-hidden=\"true\"\n fill=\"currentColor\"\n focusable=\"false\"\n width=\"1.5em\"\n height=\"1.5em\">\n <g>\n <path\n d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\" />\n </g>\n </svg>\n </button>\n\n <div\n *ngIf=\"item.sub && getItemSubitems(item)\"\n class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul\n [id]=\"id + '-sub-list'\"\n [style]=\"menuData && menuData[itemIndex].open ? 'display:block' : 'display:none'\"\n #popupMenu\n role=\"menu\"\n tabindex=\"-1\"\n [class]=\"\n item.sub.classes\n ? item.sub.classes\n : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\n \"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : item.sub.ariaLabel ? item.sub.ariaLabel : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <li\n #popupMenuItem\n tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a\n *ngIf=\"subItem.href\"\n #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n <a\n *ngIf=\"!subItem.href && subItem.routerLink\"\n #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n </li>\n <li\n *ngIf=\"subItem.divider\"\n class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n </li>\n <li\n #popupMenuItem\n *ngIf=\"item.divider\"\n [class]=\"item.divider.classes\"\n role=\"presentation\"\n aria-hidden=\"true\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: item.divider,\n html: item.divider.html,\n text: item.divider.text,\n }\"></ng-container>\n </li>\n </ng-container>\n</ul>\n" }]
|
|
596
600
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { idPrefix: [{
|
|
597
601
|
type: Input
|
|
598
602
|
}], items: [{
|
|
@@ -851,4 +855,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
851
855
|
type: HostBinding,
|
|
852
856
|
args: ['attr.required']
|
|
853
857
|
}] } });
|
|
854
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktbmF2L2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uL21lbnUtbmF2aWdhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi9tZW51LW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDL0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7OztBQU14SCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBSWpFLElBQ0ksS0FBSyxDQUFDLEtBQTJCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUE4RkQsWUFBb0IsaUJBQW9DO1FB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QyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0UsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbSwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1lbnVOYXZpZ2F0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1uYXZpZ2F0aW9uJztcbmltcG9ydCB7IE1lbnViYXJpdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vbWVudWJhci9kaXJlY3RpdmVzL21lbnViYXJpdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uLWl0ZW0vbWVudS1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnVOYXZpZ2F0aW9uU3ViaXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tZW51LW5hdmlnYXRpb24tc3ViaXRlbS9tZW51LW5hdmlnYXRpb24tc3ViaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LW1lbnUtbmF2aWdhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVOYXZpZ2F0aW9uQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgX2l0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXTtcbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5hY3RpdmVJdGVtSWZTdWJJdGVtSXNBY3RpdmUoaXRlbXMpXG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1xuICB9XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudU5hdmlnYXRpb25JdGVtW10+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVJdGVtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51TmF2aWdhdGlvbkl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVTdWJJdGVtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbWVudW5hdmlnYXRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbWVudW5hdmlnYXRpb246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGRyZW4oTWVudWJhcml0ZW1EaXJlY3RpdmUpIG1lbnVJdGVtczogUXVlcnlMaXN0PE1lbnViYXJpdGVtRGlyZWN0aXZlPjtcbiAgQENvbnRlbnRDaGlsZHJlbihNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIGl0ZW1Db21wb25lbnRMaXN0OiBRdWVyeUxpc3Q8TWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50PjtcblxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NlczogYW55O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmMtbWVudS1uYXZpZ2F0aW9uJykgY2ZnID0gdHJ1ZVxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNQb3B1cDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNoZWNrZWQnKSBhcmlhQ2hlY2tlZDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcHJlc3NlZCcpIGFyaWFQcmVzc2VkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yZWFkb25seScpIGFyaWFSZWFkb25seTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVxdWlyZWQnKSBhcmlhUmVxdWlyZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgYXJpYVNlbGVjdGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpIGFyaWFWYWx1ZW1pbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKSBhcmlhVmFsdWVtYXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JykgYXJpYVZhbHVlbm93OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZXRleHQnKSBhcmlhVmFsdWV0ZXh0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vcmllbnRhdGlvbicpIGFyaWFPcmllbnRhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBhcmlhTGV2ZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZScpIGFyaWFNdWx0aXNlbGVjdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXBsYWNlaG9sZGVyJykgYXJpYVBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1wb3NpbnNldCcpIGFyaWFQb3NpbnNldDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2V0c2l6ZScpIGFyaWFTZXRzaXplOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JykgYXJpYVNvcnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWJ1c3knKSBhcmlhQnVzeTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZHJvcGVmZmVjdCcpIGFyaWFEcm9wZWZmZWN0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1ncmFiYmVkJykgYXJpYUdyYWJiZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhcmlhQWN0aXZlZGVzY2VuZGFudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXRvbWljJykgYXJpYUF0b21pYzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJykgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZWxhYmVsJykgYXJpYUJyYWlsbGVsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbicpIGFyaWFCcmFpbGxlcm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb2xjb3VudCcpIGFyaWFDb2xjb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29saW5kZXgnKSBhcmlhQ29saW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbGluZGV4dGV4dCcpIGFyaWFDb2xpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbHNwYW4nKSBhcmlhQ29sc3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpcHRpb24nKSBhcmlhRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRldGFpbHMnKSBhcmlhRGV0YWlsczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZmxvd3RvJykgYXJpYUZsb3d0bzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpIGFyaWFJbnZhbGlkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1rZXlzaG9ydGN1dHMnKSBhcmlhS2V5c2hvcnRjdXRzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgYXJpYU93bnM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlbGV2YW50JykgYXJpYVJlbGV2YW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBhcmlhUm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb3djb3VudCcpIGFyaWFSb3djb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKSBhcmlhUm93aW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4dGV4dCcpIGFyaWFSb3dpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd3NwYW4nKSBhcmlhUm93c3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYWx0JykgYWx0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubGFuZycpIGxhbmc6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hY2Nlc3NrZXknKSBhY2Nlc3NrZXk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvZm9jdXMnKSBhdXRvZm9jdXM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZW50ZWRpdGFibGUnKSBjb250ZW50ZWRpdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXInKSBkaXI6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5lbnRlcmtleWhpbnQnKSBlbnRlcmtleWhpbnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKSBoaWRkZW46IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaW5wdXRtb2RlJykgaW5wdXRtb2RlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3BlbGxjaGVjaycpIHNwZWxsY2hlY2s6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50cmFuc2xhdGUnKSB0cmFuc2xhdGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpbGluZScpIGFyaWFNdWx0aWxpbmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKSBmb3I6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3JtJykgZm9ybTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhlYWRlcnMnKSBoZWFkZXJzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlYWRvbmx5JykgcmVhZG9ubHk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yZXF1aXJlZCcpIHJlcXVpcmVkOiBzdHJpbmcgPSBudWxsO1xuXG4gIG1lbnVEYXRhOiBhbnlbXTtcbiAgdmlld0luaXQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMuYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zLnRvQXJyYXkoKSkpXG4gIH1cblxuICBjaGVja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnVJdGVtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVudURhdGEgPSBbXTtcbiAgICB0aGlzLmdldEl0ZW1zKCkuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1EYXRhID0ge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBjdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg6IDAsXG4gICAgICAgIG1lbnVJdGVtOiB0aGlzLm1lbnVJdGVtcy50b0FycmF5KClbaW5kZXhdXG4gICAgICB9O1xuICAgICAgdGhpcy5tZW51RGF0YS5wdXNoKGl0ZW1EYXRhKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnZpZXdJbml0KSB7XG4gICAgICB0aGlzLmNoZWNrUmVxdWlyZWQoKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggJSBpdGVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9PT0gbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdKSB7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbGV0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbSlcbiAgICAgIGlmIChzdWJJdGVtcyBpbnN0YW5jZW9mIE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IHN1Ykl0ZW1zLnN1Yi5pdGVtcy5maWx0ZXIoc3ViSXRlbSA9PiBzdWJJdGVtLmFjdGl2ZSkubGVuZ3RoID4gMDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbT8uc3ViPy5pdGVtcykge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IGl0ZW0uc3ViLml0ZW1zLmZpbHRlcihzdWJJdGVtID0+IHN1Ykl0ZW0uYWN0aXZlKS5sZW5ndGggPiAwO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZU1lbnVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVGb2N1c091dChldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51bmF2aWdhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1DbGljayhldmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCAtMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsICsxKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW1CeUZpcnN0Q2hhcihldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgsIHRydWUpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBjdXJyZW50U3ViU3ViSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIGlmICh0aGlzLm11c3RDbG9zZUFmdGVyU2VsZWN0UG9wdXBJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLmFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBjdXJyZW50U3ViSW5kZXgsIGN1cnJlbnRTdWJTdWJJbmRleCwgLTEpO1xuICAgICAgICAvLyB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIChjdXJyZW50U3ViSW5kZXggKyBsaXN0TGVuZ3RoIC0gMSkgJSBsaXN0TGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBjdXJyZW50U3ViSW5kZXgsIGN1cnJlbnRTdWJTdWJJbmRleCwgKzEpO1xuICAgICAgICAvLyB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIChjdXJyZW50U3ViSW5kZXggKyBsaXN0TGVuZ3RoICsgMSkgJSBsaXN0TGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgoaXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoIC0gMSkgJSBpdGVtcy5sZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgoaXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc1ByaW50YWJsZUNoYXIoZXZlbnQua2V5KSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNTdWJJdGVtQnlGaXJzdENoYXIoaXRlbUluZGV4LCBldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICB9XG5cbiAgLypcbiAgICogQ29tdW5lc1xuICAgKi9cblxuICBjaGVja1JlcXVpcmVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICB9XG5cblxuICBhY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgdGhpcy5hY3RpdmVJdGVtQ2hhbmdlLmVtaXQoaXRlbXNbaXRlbUluZGV4XSBhcyBNZW51TmF2aWdhdGlvbkl0ZW0pO1xuICAgIGlmIChpdGVtc1tpdGVtSW5kZXhdIGluc3RhbmNlb2YgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KSB7XG4gICAgICAoaXRlbXNbaXRlbUluZGV4XSBhcyBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpLnNlbGVjdGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBhY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuXG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICB0aGlzLmFjdGl2ZVN1Ykl0ZW1DaGFuZ2UuZW1pdChpdGVtIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbSk7XG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvblN1Yml0ZW1Db21wb25lbnQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RDbG9zZUFmdGVyU2VsZWN0UG9wdXBJdGVtKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbSB8IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcblxuICAgIHJldHVybiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbWNoZWNrYm94JyAmJiBpdGVtLnJvbGUgIT09ICdtZW51aXRlbXJhZGlvJztcbiAgfVxuXG4gIG9wZW5NZW51KGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzT3BlbmVkID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW47XG4gICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPSB0cnVlO1xuICAgIGlmICh3YXNPcGVuZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShpdGVtSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTWVudShpdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaXRlbUluZGV4ICE9PSBudWxsICYmIGl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lbnVEYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLm9wZW4gPSBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgaGFzUG9wdXBNZW51KGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICByZXR1cm4gaXRlbXNbaXRlbUluZGV4XS5zdWIgJiYgc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNQcmludGFibGVDaGFyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDEgJiYgISFzdHIubWF0Y2goL1xcUy8pO1xuICB9XG5cblxuXG4gIC8qXG4gICAqIENvbXVuZXMgLSBmb2N1c1xuICAgKi9cblxuICBmb2N1c0l0ZW0oaXRlbUluZGV4OiBudW1iZXIsIGhvdmVyPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhhc0ZvY3VzID0gdGhpcy5tZW51bmF2aWdhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXhdLm9wZW47XG5cbiAgICBpZiAoIWhvdmVyIHx8IGhhc0ZvY3VzKSB7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ubGluay5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICBpZiAoaXNPcGVuICYmIHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9IGl0ZW1JbmRleDtcbiAgfVxuXG4gIGZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oZnJvbUl0ZW1JbmRleDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgbmV4dEl0ZW0gPSBmcm9tSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIG5leHRJdGVtID0gKG5leHRJdGVtICsgaXRlbXMubGVuZ3RoICsgc3RlcCkgJSBpdGVtcy5sZW5ndGg7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNJdGVtRm9jdXNhYmxlKG5leHRJdGVtKSAmJiBuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCk7XG5cbiAgICBpZiAobmV4dEl0ZW0gIT09IGZyb21JdGVtSW5kZXgpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKG5leHRJdGVtKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoMCkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oMCwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdEl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgaWYgKHRoaXMuaXNJdGVtRm9jdXNhYmxlKGl0ZW1zLmxlbmd0aCAtIDEpKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShpdGVtcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKGl0ZW1zLmxlbmd0aCAtIDEsIC0xKTtcbiAgICB9XG4gIH1cblxuICBpc0l0ZW1Gb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZ2V0SXRlbXMoKVtpdGVtSW5kZXhdLmRpc2FibGVkO1xuICB9XG5cbiAgZm9jdXNJdGVtQnlGaXJzdENoYXIoY2hhcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbUNvbnRlbnRzOiBzdHJpbmdbXSA9IHRoaXMubWVudUl0ZW1zLm1hcChtZW51SXRlbSA9PiBtZW51SXRlbS5pdGVtQ29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBkbyB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGl0ZW1Db250ZW50cy5sZW5ndGggKyAxKSAlIGl0ZW1Db250ZW50cy5sZW5ndGg7XG4gICAgICBpZiAoaXRlbUNvbnRlbnRzW2luZGV4XSAmJiBpdGVtQ29udGVudHNbaW5kZXhdLnRyaW0oKS5zdWJzdHIoMCwgMSkudG9Mb3dlckNhc2UoKSA9PT0gY2hhci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICYmIHRoaXMuaXNJdGVtRm9jdXNhYmxlKGluZGV4KSkge1xuICAgICAgICBmb3VuZEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmRJbmRleCA9PT0gLTEgJiYgaW5kZXggIT09IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4KTtcblxuICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGZvdW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWVudURhdGFJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgY29uc3QgZWxlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy50b0FycmF5KClbbWVudURhdGFJbmRleF0ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGNvbnN0IGFFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChhRWxlbSkge1xuICAgICAgICAgIGFFbGVtLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc3ViaXRlbSB0byBmb2N1cycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtcycpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIGZyb21JdGVtU3ViSW5kZXg6IG51bWJlciwgZnJvbUl0ZW1TdWJTdWJJbmRleDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgbmV4dFN1YkluZGV4ID0gZnJvbUl0ZW1TdWJJbmRleDtcbiAgICBsZXQgbmV4dFN1YlN1YkluZGV4ID0gZnJvbUl0ZW1TdWJTdWJJbmRleDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgsIHN0ZXApO1xuICAgICAgbmV4dFN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBuZXh0U3ViU3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IChmcm9tSXRlbVN1YkluZGV4ID09PSBuZXh0U3ViSW5kZXggJiYgZnJvbUl0ZW1TdWJTdWJJbmRleCA9PT0gbmV4dFN1YlN1YkluZGV4KTtcbiAgICB9IHdoaWxlICghdGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCkgJiYgIWFsbFN1Ykl0ZW1zQ2hlY2tlZCk7XG5cbiAgICBpZiAoIWFsbFN1Ykl0ZW1zQ2hlY2tlZCkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgZmlyc3RTdWJTdWJJdGVtID0gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGlmIChzdWJJdGVtcyAmJiBzdWJJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBmaXJzdFN1YlN1Ykl0ZW0gPSAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSkpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgY29uc3QgbGFzdEl0ZW1JbmRleCA9IHN1Ykl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgbGFzdEl0ZW0gPSBzdWJJdGVtc1tsYXN0SXRlbUluZGV4XTtcbiAgICBsZXQgbGFzdFN1YlN1Ykl0ZW0gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0sIC0xKTtcbiAgICB9XG4gIH1cblxuICBpc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuXG4gICAgbGV0IGlzRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgaWYgKGl0ZW0ucm9sZSAhPT0gJ3NlcGFyYXRvcicgJiYgaXRlbS5yb2xlICE9PSAnbm9uZScpIHtcbiAgICAgIGlzRm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRm9jdXNhYmxlO1xuICB9XG5cbiAgZm9jdXNTdWJJdGVtQnlGaXJzdENoYXIoaXRlbUluZGV4OiBudW1iZXIsIGNoYXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1Db250ZW50czogc3RyaW5nW10gPSB0aGlzLm1lbnVJdGVtcy50b0FycmF5KClbaXRlbUluZGV4XS5wb3B1cE1lbnVJdGVtcy5tYXAobWVudUl0ZW0gPT4gbWVudUl0ZW0ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgbGV0IHN1Ykl0ZW1JbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgbGV0IHN1YlN1Ykl0ZW1JbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kU3ViSW5kZXggPSAtMTtcbiAgICBsZXQgZm91bmRTdWJTdWJJbmRleCA9IG51bGw7XG4gICAgbGV0IGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgsICsxKTtcbiAgICAgIHN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YkluZGV4O1xuICAgICAgc3ViU3ViSXRlbUluZGV4ID0gbmV4dEluZGV4ZXMuc3ViU3ViSW5kZXg7XG4gICAgICBjb25zdCBpbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIGlmIChpdGVtQ29udGVudHNbaW5kZXhdICYmIGl0ZW1Db250ZW50c1tpbmRleF0udHJpbSgpLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpID09PSBjaGFyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgJiYgdGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCkpIHtcbiAgICAgICAgZm91bmRTdWJJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgICAgZm91bmRTdWJTdWJJbmRleCA9IHN1YlN1Ykl0ZW1JbmRleDtcbiAgICAgIH1cbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9ICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID09PSBzdWJJdGVtSW5kZXhcbiAgICAgICAgJiYgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9PT0gc3ViU3ViSXRlbUluZGV4KTtcbiAgICB9IHdoaWxlIChmb3VuZFN1YkluZGV4ID09PSAtMSAmJiAhYWxsU3ViSXRlbXNDaGVja2VkKTtcblxuICAgIGlmIChmb3VuZFN1YkluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgZm91bmRTdWJJbmRleCwgZm91bmRTdWJTdWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogTWV0b2RvcyBwYXJhIGZhY2lsaXRhciBjb250ZW5pZG9cbiAgICovXG5cbiAgZ2V0SXRlbXMoKTogTWVudU5hdmlnYXRpb25JdGVtW10gfCBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnRbXSB7XG4gICAgbGV0IGl0ZW1zO1xuICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICYmIHRoaXMuaXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1Db21wb25lbnRMaXN0LnRvQXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBnZXRJdGVtU3ViaXRlbXMoaXRlbTogTWVudU5hdmlnYXRpb25JdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVtdIHwgTWVudU5hdmlnYXRpb25TdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KSB7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLnN1YiA/IGl0ZW0uc3ViLml0ZW1zIDogW107XG4gICAgfVxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldE5leHRTdWJJdGVtSW5kZXhlcyhpdGVtcywgaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCwgc3RlcCk6IHsgc3ViSW5kZXg6IG51bWJlciwgc3ViU3ViSW5kZXg/OiBudW1iZXIgfSB7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcblxuICAgIGxldCBjaGVja05leHRTdWJJdGVtID0gdHJ1ZTtcbiAgICBpZiAoY2hlY2tOZXh0U3ViSXRlbSkge1xuICAgICAgbmV4dFN1YkluZGV4ID0gKG5leHRTdWJJbmRleCArIHN0ZXAgKyBzdWJJdGVtcy5sZW5ndGgpICUgc3ViSXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJJbmRleDogbmV4dFN1YkluZGV4LCBzdWJTdWJJbmRleDogbmV4dFN1YlN1YkluZGV4IH07XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnbWVudW5hdmlnYXRpb24taXRlbSc7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGBzdWItJHtwYXJlbnRJZH0tJHsrK2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxuXG59XG4iLCI8dWwgI21lbnVuYXZpZ2F0aW9uIFtpZF09XCJpZCArICctbWVudS1uYXZpZ2F0aW9uJ1wiIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLWJhc2VcIlxuKGZvY3VzaW4pPVwiaGFuZGxlTWVudUZvY3VzSW4oKVwiXG4oZm9jdXNvdXQpPVwiaGFuZGxlTWVudUZvY3VzT3V0KCRldmVudClcIlxuW25nQ2xhc3NdPVwieyAnZm9jdXMnOiBpc0ZvY3VzZWQgfVwiXG5bYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IG51bGxcIj5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgaW5kZXggYXMgaXRlbUluZGV4XCI+XG48bGkgY2xhc3M9XCJyZWxhdGl2ZVwiIGRlc3lNZW51YmFyaXRlbSAoY29udGVudENoYW5nZWQpPVwiY2hlY2tDaGFuZ2VzKClcIj5cbiAgPGEgKm5nSWY9XCJpdGVtLmhyZWZcIiAjbGlua1xuICAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgICBbYXR0ci5yb2xlXT1cIml0ZW0uZGlzYWJsZWQgPyBsaW5rIDogbnVsbFwiXG4gICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgICBbaHJlZl09XCJpdGVtLmhyZWZcIlxuICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgW25nQ2xhc3NdPVwieydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1wcmltYXJ5JzogaXRlbS5hY3RpdmUsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmV9XCJcbiAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGUgPyBpdGVtLnRpdGxlIDogbnVsbFwiXG4gICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IChpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbClcIlxuICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uZGlzYWJsZWQgPyAncGFnZScgOiAoaXRlbS5hcmlhQ3VycmVudCA/IGl0ZW0uYXJpYUN1cnJlbnQgOiBudWxsKVwiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbVwiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiAoaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTEpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZSBwb2ludGVyLWV2ZW50cy1ub25lXCIgI2l0ZW1Db250ZW50V3JhcHBlcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9zcGFuPiAgICAgICAgICBcbiAgPC9hPlxuICA8YSAqbmdJZj1cIiFpdGVtLmhyZWYgJiYgaXRlbS5yb3V0ZXJMaW5rXCIgI2xpbmtcbiAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAoa2V5ZG93bik9XCJoYW5kbGVNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgpXCJcbiAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgIFthdHRyLnJvbGVdPVwiaXRlbS5kaXNhYmxlZCA/IGxpbmsgOiBudWxsXCJcbiAgICAgW2lkXT1cImdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpXCJcbiAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXG4gICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG4gICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIml0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgPyBpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzIDogW11cIlxuICAgICBbZnJhZ21lbnRdPVwiaXRlbS5mcmFnbWVudFwiXG4gICAgIFtjbGFzc109XCJbJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24nLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgW25nQ2xhc3NdPVwieydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1wcmltYXJ5JzogaXRlbS5hY3RpdmUsICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmV9XCJcbiAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBudWxsXCJcbiAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IChpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbClcIlxuICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbVwiXG4gICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpdGVtLmRpc2FibGVkID8gJ3BhZ2UnIDogKGl0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbClcIlxuICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiAoaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTEpXCI+XG4gICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlIHBvaW50ZXItZXZlbnRzLW5vbmVcIiAjaXRlbUNvbnRlbnRXcmFwcGVyPlxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgPC9zcGFuPiAgICAgICAgICBcbiAgPC9hPlxuICA8YnV0dG9uICpuZ0lmPVwiIWl0ZW0uaHJlZiAmJiAhaXRlbS5yb3V0ZXJMaW5rXCIgI2xpbmsgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAoY2xpY2spPVwiaGFuZGxlTWVudUl0ZW1DbGljaygkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIiBbYXR0cmlidXRlc1RvQ2hlY2tdPVwiJ2Rpc2FibGVkJ1wiXG4gICAgICBbY2xhc3NdPVwiWydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICBbbmdDbGFzc109XCJ7J2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCwgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLXByaW1hcnknOiBpdGVtLmFjdGl2ZSwgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWhhcy1zZWxlY3Rpb24nOiBpdGVtLmFjdGl2ZX1cIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtLnN1YiA/ICghIShtZW51RGF0YSAmJiBtZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4pID8gIHRydWUgOiAgZmFsc2UpIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uc3ViID8gKCEhKG1lbnVEYXRhICYmIG1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbikgPyAgdHJ1ZSA6ICBmYWxzZSkgOiBudWxsXCJcbiAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogKGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbVwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uc3ViID8gKGl0ZW0uYXJpYUNvbnRyb2xzID8gIGl0ZW0uYXJpYUNvbnRyb2xzIDogIGlkICsgJy1zdWItbGlzdCcpIDogbnVsbFwiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiAoaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTEpXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmFjdGl2ZVwiIGNsYXNzPVwic3Itb25seVwiPkl0ZW0gYWN0aXZvOiA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmUtZmxleCBzZWxmLWNlbnRlciBtYXgtdy14cyBhbGlnbi1taWRkbGUgdHJ1bmNhdGUgcG9pbnRlci1ldmVudHMtbm9uZVwiICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogaXRlbS5odG1sLCB0ZXh0OiBpdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHN2ZyAqbmdJZj1cIml0ZW0uc3ViXCIgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgIGFsaWduLW1pZGRsZSAtbXktcHggcG9pbnRlci1ldmVudHMtbm9uZVwiIHZpZXdCb3g9XCIwIDAgOTYgOTZcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiB3aWR0aD1cIjEuNWVtXCIgaGVpZ2h0PVwiMS41ZW1cIj48Zz48cGF0aCBkPVwiTTQ2LjcxIDU4LjAzN2ExLjgyMyAxLjgyMyAwIDAwMi41ODEgMEw2Mi4wNDggNDUuMjhhMS44MjMgMS44MjMgMCAwMC0xLjI5LTMuMTEzSDM1LjI0M2ExLjgyMyAxLjgyMyAwIDAwLTEuMjkxIDMuMTEzelwiLz48L2c+PC9zdmc+XG4gIDwvYnV0dG9uPiAgICAgICAgXG5cbiAgPGRpdiAqbmdJZj1cIml0ZW0uc3ViICYmIGdldEl0ZW1TdWJpdGVtcyhpdGVtKVwiIGNsYXNzPVwiYy1tZW51LW5hdmlnYXRpb25fX3N1YiBhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTBcIj5cbiAgICAgIDx1bCAgW2lkXT1cImlkICsgJy1zdWItbGlzdCdcIiBbc3R5bGVdPVwibWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuPydkaXNwbGF5OmJsb2NrJzonZGlzcGxheTpub25lJ1wiICNwb3B1cE1lbnUgcm9sZT1cIm1lbnVcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgIFtjbGFzc109XCJpdGVtLnN1Yi5jbGFzc2VzID8gaXRlbS5zdWIuY2xhc3NlcyA6ICdjLW1lbnUtbmF2aWdhdGlvbl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSBzaGFkb3ctbWQgYmctd2hpdGUgdGV4dC1zbSdcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFyaWFMYWJlbCA/IGl0ZW0uYXJpYUxhYmVsIDogKGl0ZW0uc3ViLmFyaWFMYWJlbCA/IGl0ZW0uc3ViLmFyaWFMYWJlbCA6IG51bGwpXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5zdWIuYXJpYURpc2FibGVkID8gaXRlbS5zdWIuYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwiaXRlbS5zdWJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBnZXRJdGVtU3ViaXRlbXMoaXRlbSk7IGluZGV4IGFzIHN1Ykl0ZW1JbmRleFwiPlx0XHRcdFx0XG4gICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJJdGVtLCBzdWJJdGVtSW5kZXgsIGdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCI+XG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwic3ViSXRlbS5ocmVmXCIgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgICAgW2hyZWZdPVwic3ViSXRlbS5ocmVmXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlsnZmxleCBpdGVtcy1jZW50ZXIgcHgtYmFzZSBweS1zbSB0ZXh0LXNtIGhvdmVyOmJnLXByaW1hcnktYmFzZSBob3Zlcjp0ZXh0LXdoaXRlIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMgZm9jdXM6dGV4dC1ibGFjaycsIHN1Ykl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydwb2ludGVyLWV2ZW50cy1ub25lJzogc3ViSXRlbS5kaXNhYmxlZH1cIlxuICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInN1Ykl0ZW0uZGlzYWJsZWQgPyAtMSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cInN1Ykl0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cInN1Ykl0ZW0udGFyZ2V0XCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZm9udC1ib2xkXCIgKm5nSWY9XCJzdWJJdGVtLmFjdGl2ZTsgZWxzZSBub0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJzdWJJdGVtLmRpc2FibGVkXCIgdmlld0JveD1cIjAgMCAxNDAgMTQwXCIgaGVpZ2h0PVwiMWVtXCIgd2lkdGg9XCIxZW1cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJpbmxpbmUtYmxvY2sgYWxpZ24tbWlkZGxlIGZsZXgtaW5pdGlhbCBtbC1zbSB0ZXh0LW5ldXRyYWwtYmFzZSBmaWxsLWN1cnJlbnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiID48cGF0aCBkPVwiTTcwIDBhNzAgNzAgMCAxMDcwIDcwQTcwLjA4IDcwLjA4IDAgMDA3MCAwek0yMCA3MGE1MCA1MCAwIDAxNzQuOC00My40IDIuNTEgMi41MSAwIDAxMS4yMyAxLjg0IDIuNDggMi40OCAwIDAxLS43MSAyLjFMMzAuNTQgOTUuMzJhMi41MSAyLjUxIDAgMDEtMy45NC0uNTJBNDkuNjMgNDkuNjMgMCAwMTIwIDcwem0xMDAgMGE1MCA1MCAwIDAxLTc0LjggNDMuNCAyLjUxIDIuNTEgMCAwMS0xLjIzLTEuODQgMi40OCAyLjQ4IDAgMDEuNzEtMi4xbDY0Ljc4LTY0Ljc4YTIuNTEgMi41MSAwIDAxMy45NC41MkE0OS42MyA0OS42MyAwIDAxMTIwIDcwelwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8YSAqbmdJZj1cIiFzdWJJdGVtLmhyZWYgJiYgc3ViSXRlbS5yb3V0ZXJMaW5rXCIgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic3ViSXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cInN1Ykl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgPyBzdWJJdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzIDogW11cIlxuICAgICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInN1Ykl0ZW0uZnJhZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiWydmbGV4IGl0ZW1zLWNlbnRlciBweC1iYXNlIHB5LXNtIHRleHQtc20gaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGUgZm9jdXM6Ymctd2FybmluZy1iYXNlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpzaGFkb3ctb3V0bGluZS1mb2N1cyBmb2N1czp0ZXh0LWJsYWNrJywgc3ViSXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3BvaW50ZXItZXZlbnRzLW5vbmUnOiBzdWJJdGVtLmRpc2FibGVkfVwiXG4gICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic3ViSXRlbS5kaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3ViSXRlbS5hY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwic3ViSXRlbS50YXJnZXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJmb250LWJvbGRcIiAqbmdJZj1cInN1Ykl0ZW0uYWN0aXZlOyBlbHNlIG5vQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViSXRlbSwgaHRtbDogc3ViSXRlbS5odG1sLCB0ZXh0OiBzdWJJdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViSXRlbSwgaHRtbDogc3ViSXRlbS5odG1sLCB0ZXh0OiBzdWJJdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInN1Ykl0ZW0uZGlzYWJsZWRcIiB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIiBoZWlnaHQ9XCIxZW1cIiB3aWR0aD1cIjFlbVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImlubGluZS1ibG9jayBhbGlnbi1taWRkbGUgZmxleC1pbml0aWFsIG1sLXNtIHRleHQtbmV1dHJhbC1iYXNlIGZpbGwtY3VycmVudFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZvY3VzYWJsZT1cImZhbHNlXCIgPjxwYXRoIGQ9XCJNNzAgMGE3MCA3MCAwIDEwNzAgNzBBNzAuMDggNzAuMDggMCAwMDcwIDB6TTIwIDcwYTUwIDUwIDAgMDE3NC44LTQzLjQgMi41MSAyLjUxIDAgMDExLjIzIDEuODQgMi40OCAyLjQ4IDAgMDEtLjcxIDIuMUwzMC41NCA5NS4zMmEyLjUxIDIuNTEgMCAwMS0zLjk0LS41MkE0OS42MyA0OS42MyAwIDAxMjAgNzB6bTEwMCAwYTUwIDUwIDAgMDEtNzQuOCA0My40IDIuNTEgMi41MSAwIDAxLTEuMjMtMS44NCAyLjQ4IDIuNDggMCAwMS43MS0yLjFsNjQuNzgtNjQuNzhhMi41MSAyLjUxIDAgMDEzLjk0LjUyQTQ5LjYzIDQ5LjYzIDAgMDExMjAgNzB6XCIvPjwvc3ZnPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cInN1Ykl0ZW0uZGl2aWRlclwiIGNsYXNzPVwibXktc20gYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Itb25seVwiPlNlcGFyYWRvcjwvZGl2PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC91bD5cbiAgPC9kaXY+XG48L2xpPlxuPGxpICNwb3B1cE1lbnVJdGVtICpuZ0lmPVwiaXRlbS5kaXZpZGVyXCIgW2NsYXNzXT1cIml0ZW0uZGl2aWRlci5jbGFzc2VzXCIgcm9sZT1cInByZXNlbnRhdGlvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbS5kaXZpZGVyLCBodG1sOiBpdGVtLmRpdmlkZXIuaHRtbCwgdGV4dDogaXRlbS5kaXZpZGVyLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG48L2xpPlxuPC9uZy1jb250YWluZXI+XG48L3VsPlxuIl19
|
|
858
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktbmF2L2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uL21lbnUtbmF2aWdhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi9tZW51LW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDL0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7OztBQU14SCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBR2pFLElBQ0ksS0FBSyxDQUFDLEtBQTJCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUE4RkQsWUFBb0IsaUJBQW9DO1FB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QVc7dUJBQUMsY0FBYztnQkFDTSxXQUFXO3NCQUEzQyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0UsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcbmltcG9ydCB7IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0sIE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnUtbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBNZW51YmFyaXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL21lbnViYXIvZGlyZWN0aXZlcy9tZW51YmFyaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi1pdGVtL21lbnUtbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvblN1Yml0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uLXN1Yml0ZW0vbWVudS1uYXZpZ2F0aW9uLXN1Yml0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS1tZW51LW5hdmlnYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTWVudU5hdmlnYXRpb25Db21wb25lbnQgZXh0ZW5kcyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgX2l0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXTtcbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5hY3RpdmVJdGVtSWZTdWJJdGVtSXNBY3RpdmUoaXRlbXMpO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51TmF2aWdhdGlvbkl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVN1Ykl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtU3ViSXRlbT4oKTtcblxuICBAVmlld0NoaWxkKCdtZW51bmF2aWdhdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtZW51bmF2aWdhdGlvbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihNZW51YmFyaXRlbURpcmVjdGl2ZSkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8TWVudWJhcml0ZW1EaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkgaXRlbUNvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQ+O1xuXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzc2VzOiBhbnk7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYy1tZW51LW5hdmlnYXRpb24nKSBjZmcgPSB0cnVlO1xuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNQb3B1cDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNoZWNrZWQnKSBhcmlhQ2hlY2tlZDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcHJlc3NlZCcpIGFyaWFQcmVzc2VkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yZWFkb25seScpIGFyaWFSZWFkb25seTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVxdWlyZWQnKSBhcmlhUmVxdWlyZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgYXJpYVNlbGVjdGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpIGFyaWFWYWx1ZW1pbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKSBhcmlhVmFsdWVtYXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JykgYXJpYVZhbHVlbm93OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZXRleHQnKSBhcmlhVmFsdWV0ZXh0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vcmllbnRhdGlvbicpIGFyaWFPcmllbnRhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBhcmlhTGV2ZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZScpIGFyaWFNdWx0aXNlbGVjdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXBsYWNlaG9sZGVyJykgYXJpYVBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1wb3NpbnNldCcpIGFyaWFQb3NpbnNldDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2V0c2l6ZScpIGFyaWFTZXRzaXplOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JykgYXJpYVNvcnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWJ1c3knKSBhcmlhQnVzeTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZHJvcGVmZmVjdCcpIGFyaWFEcm9wZWZmZWN0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1ncmFiYmVkJykgYXJpYUdyYWJiZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhcmlhQWN0aXZlZGVzY2VuZGFudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXRvbWljJykgYXJpYUF0b21pYzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJykgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZWxhYmVsJykgYXJpYUJyYWlsbGVsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbicpIGFyaWFCcmFpbGxlcm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb2xjb3VudCcpIGFyaWFDb2xjb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29saW5kZXgnKSBhcmlhQ29saW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbGluZGV4dGV4dCcpIGFyaWFDb2xpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbHNwYW4nKSBhcmlhQ29sc3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpcHRpb24nKSBhcmlhRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRldGFpbHMnKSBhcmlhRGV0YWlsczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZmxvd3RvJykgYXJpYUZsb3d0bzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpIGFyaWFJbnZhbGlkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1rZXlzaG9ydGN1dHMnKSBhcmlhS2V5c2hvcnRjdXRzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgYXJpYU93bnM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlbGV2YW50JykgYXJpYVJlbGV2YW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBhcmlhUm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb3djb3VudCcpIGFyaWFSb3djb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKSBhcmlhUm93aW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4dGV4dCcpIGFyaWFSb3dpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd3NwYW4nKSBhcmlhUm93c3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYWx0JykgYWx0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubGFuZycpIGxhbmc6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hY2Nlc3NrZXknKSBhY2Nlc3NrZXk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvZm9jdXMnKSBhdXRvZm9jdXM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZW50ZWRpdGFibGUnKSBjb250ZW50ZWRpdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXInKSBkaXI6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5lbnRlcmtleWhpbnQnKSBlbnRlcmtleWhpbnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKSBoaWRkZW46IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaW5wdXRtb2RlJykgaW5wdXRtb2RlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3BlbGxjaGVjaycpIHNwZWxsY2hlY2s6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50cmFuc2xhdGUnKSB0cmFuc2xhdGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpbGluZScpIGFyaWFNdWx0aWxpbmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKSBmb3I6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3JtJykgZm9ybTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhlYWRlcnMnKSBoZWFkZXJzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlYWRvbmx5JykgcmVhZG9ubHk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yZXF1aXJlZCcpIHJlcXVpcmVkOiBzdHJpbmcgPSBudWxsO1xuXG4gIG1lbnVEYXRhOiBhbnlbXTtcbiAgdmlld0luaXQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMuYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zLnRvQXJyYXkoKSkpO1xuICB9XG5cbiAgY2hlY2tDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51SXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVEYXRhID0gW107XG4gICAgdGhpcy5nZXRJdGVtcygpLmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpdGVtRGF0YSA9IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDogMCxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBtZW51SXRlbTogdGhpcy5tZW51SXRlbXMudG9BcnJheSgpW2luZGV4XSxcbiAgICAgIH07XG4gICAgICB0aGlzLm1lbnVEYXRhLnB1c2goaXRlbURhdGEpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggJSBpdGVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9PT0gbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdKSB7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbGV0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpZiAoc3ViSXRlbXMgaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgaXRlbS5hY3RpdmUgPSBzdWJJdGVtcy5zdWIuaXRlbXMuZmlsdGVyKChzdWJJdGVtKSA9PiBzdWJJdGVtLmFjdGl2ZSkubGVuZ3RoID4gMDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbT8uc3ViPy5pdGVtcykge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IGl0ZW0uc3ViLml0ZW1zLmZpbHRlcigoc3ViSXRlbSkgPT4gc3ViSXRlbS5hY3RpdmUpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZU1lbnVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVGb2N1c091dChldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51bmF2aWdhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1DbGljayhldmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCAtMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsICsxKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW1CeUZpcnN0Q2hhcihldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgsIHRydWUpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgaXRlbUluZGV4OiBudW1iZXIsXG4gICAgc3ViSXRlbUluZGV4OiBudW1iZXIsXG4gICAgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdWJJbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgY29uc3QgY3VycmVudFN1YlN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5tdXN0Q2xvc2VBZnRlclNlbGVjdFBvcHVwSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsIC0xKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCAtIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsICsxKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCArIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCAtIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCArIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmludGFibGVDaGFyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleCwgZXZlbnQua2V5KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbXVuZXNcbiAgICovXG5cbiAgY2hlY2tSZXF1aXJlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgfVxuXG4gIGFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UuZW1pdChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbSk7XG4gICAgaWYgKGl0ZW1zW2l0ZW1JbmRleF0gaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIHtcbiAgICAgIChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkuc2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtU3ViSXRlbSA9IHN1Ykl0ZW1zW3N1Ykl0ZW1JbmRleF07XG5cbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgIHRoaXMuYWN0aXZlU3ViSXRlbUNoYW5nZS5lbWl0KGl0ZW0gYXMgTWVudU5hdmlnYXRpb25JdGVtKTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnVOYXZpZ2F0aW9uU3ViaXRlbUNvbXBvbmVudCkge1xuICAgICAgaXRlbS5zZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdENsb3NlQWZ0ZXJTZWxlY3RQb3B1cEl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuXG4gICAgcmV0dXJuIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtY2hlY2tib3gnICYmIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtcmFkaW8nO1xuICB9XG5cbiAgb3Blbk1lbnUoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3YXNPcGVuZWQgPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbjtcbiAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IHRydWU7XG4gICAgaWYgKHdhc09wZW5lZCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KGl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpdGVtSW5kZXggIT09IG51bGwgJiYgaXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVudURhdGEuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0ub3BlbiA9IGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgaGFzUG9wdXBNZW51KGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICByZXR1cm4gaXRlbXNbaXRlbUluZGV4XS5zdWIgJiYgc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNQcmludGFibGVDaGFyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDEgJiYgISFzdHIubWF0Y2goL1xcUy8pO1xuICB9XG5cbiAgLypcbiAgICogQ29tdW5lcyAtIGZvY3VzXG4gICAqL1xuXG4gIGZvY3VzSXRlbShpdGVtSW5kZXg6IG51bWJlciwgaG92ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRm9jdXMgPSB0aGlzLm1lbnVuYXZpZ2F0aW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5tZW51RGF0YVt0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleF0ub3BlbjtcblxuICAgIGlmICghaG92ZXIgfHwgaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5saW5rLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIGlmIChpc09wZW4gJiYgdGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gaXRlbUluZGV4O1xuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShmcm9tSXRlbUluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBuZXh0SXRlbSA9IGZyb21JdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgbmV4dEl0ZW0gPSAobmV4dEl0ZW0gKyBpdGVtcy5sZW5ndGggKyBzdGVwKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICB9IHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUobmV4dEl0ZW0pICYmIG5leHRJdGVtICE9PSBmcm9tSXRlbUluZGV4KTtcblxuICAgIGlmIChuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dEl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSXRlbUZvY3VzYWJsZSgwKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbSgwLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0SXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoaXRlbXMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbXMubGVuZ3RoIC0gMSwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlzSXRlbUZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5nZXRJdGVtcygpW2l0ZW1JbmRleF0uZGlzYWJsZWQ7XG4gIH1cblxuICBmb2N1c0l0ZW1CeUZpcnN0Q2hhcihjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXMubWFwKFxuICAgICAgKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5pdGVtQ29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudFxuICAgICk7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBkbyB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGl0ZW1Db250ZW50cy5sZW5ndGggKyAxKSAlIGl0ZW1Db250ZW50cy5sZW5ndGg7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1Db250ZW50c1tpbmRleF0gJiZcbiAgICAgICAgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICB0aGlzLmlzSXRlbUZvY3VzYWJsZShpbmRleClcbiAgICAgICkge1xuICAgICAgICBmb3VuZEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmRJbmRleCA9PT0gLTEgJiYgaW5kZXggIT09IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4KTtcblxuICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGZvdW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWVudURhdGFJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgY29uc3QgZWxlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy50b0FycmF5KClbbWVudURhdGFJbmRleF0ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGNvbnN0IGFFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChhRWxlbSkge1xuICAgICAgICAgIGFFbGVtLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtIHRvIGZvY3VzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1Yml0ZW1zJyk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShcbiAgICBpdGVtSW5kZXg6IG51bWJlcixcbiAgICBmcm9tSXRlbVN1YkluZGV4OiBudW1iZXIsXG4gICAgZnJvbUl0ZW1TdWJTdWJJbmRleDogbnVtYmVyLFxuICAgIHN0ZXA6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBsZXQgbmV4dFN1YkluZGV4ID0gZnJvbUl0ZW1TdWJJbmRleDtcbiAgICBsZXQgbmV4dFN1YlN1YkluZGV4ID0gZnJvbUl0ZW1TdWJTdWJJbmRleDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgsIHN0ZXApO1xuICAgICAgbmV4dFN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBuZXh0U3ViU3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IGZyb21JdGVtU3ViSW5kZXggPT09IG5leHRTdWJJbmRleCAmJiBmcm9tSXRlbVN1YlN1YkluZGV4ID09PSBuZXh0U3ViU3ViSW5kZXg7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKCFhbGxTdWJJdGVtc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGZpcnN0U3ViU3ViSXRlbSA9IG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBpZiAoc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgZmlyc3RTdWJTdWJJdGVtID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IGxhc3RJdGVtSW5kZXggPSBzdWJJdGVtcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RJdGVtID0gc3ViSXRlbXNbbGFzdEl0ZW1JbmRleF07XG4gICAgbGV0IGxhc3RTdWJTdWJJdGVtID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKSkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbSB8IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcblxuICAgIGxldCBpc0ZvY3VzYWJsZSA9IGZhbHNlO1xuICAgIGlmIChpdGVtLnJvbGUgIT09ICdzZXBhcmF0b3InICYmIGl0ZW0ucm9sZSAhPT0gJ25vbmUnKSB7XG4gICAgICBpc0ZvY3VzYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBpc0ZvY3VzYWJsZTtcbiAgfVxuXG4gIGZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleDogbnVtYmVyLCBjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXNcbiAgICAgIC50b0FycmF5KClcbiAgICAgIFtpdGVtSW5kZXhdLnBvcHVwTWVudUl0ZW1zLm1hcCgobWVudUl0ZW0pID0+IG1lbnVJdGVtLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIGxldCBzdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4O1xuICAgIGxldCBzdWJTdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGxldCBmb3VuZFN1YkluZGV4ID0gLTE7XG4gICAgbGV0IGZvdW5kU3ViU3ViSW5kZXggPSBudWxsO1xuICAgIGxldCBhbGxTdWJJdGVtc0NoZWNrZWQgPSBmYWxzZTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBjb25zdCBuZXh0SW5kZXhlcyA9IHRoaXMuZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4LCArMSk7XG4gICAgICBzdWJJdGVtSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJJbmRleDtcbiAgICAgIHN1YlN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YlN1YkluZGV4O1xuICAgICAgY29uc3QgaW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1Db250ZW50c1tpbmRleF0gJiZcbiAgICAgICAgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICB0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KVxuICAgICAgKSB7XG4gICAgICAgIGZvdW5kU3ViSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICAgIGZvdW5kU3ViU3ViSW5kZXggPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgICB9XG4gICAgICBhbGxTdWJJdGVtc0NoZWNrZWQgPVxuICAgICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID09PSBzdWJJdGVtSW5kZXggJiZcbiAgICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9PT0gc3ViU3ViSXRlbUluZGV4O1xuICAgIH0gd2hpbGUgKGZvdW5kU3ViSW5kZXggPT09IC0xICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKGZvdW5kU3ViSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBmb3VuZFN1YkluZGV4LCBmb3VuZFN1YlN1YkluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBNZXRvZG9zIHBhcmEgZmFjaWxpdGFyIGNvbnRlbmlkb1xuICAgKi9cblxuICBnZXRJdGVtcygpOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgaXRlbXM7XG4gICAgaWYgKHRoaXMuaXRlbUNvbXBvbmVudExpc3QgJiYgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldEl0ZW1TdWJpdGVtcyhcbiAgICBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnRcbiAgKTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVtdIHwgTWVudU5hdmlnYXRpb25TdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KSB7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLnN1YiA/IGl0ZW0uc3ViLml0ZW1zIDogW107XG4gICAgfVxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldE5leHRTdWJJdGVtSW5kZXhlcyhcbiAgICBpdGVtcyxcbiAgICBpdGVtSW5kZXgsXG4gICAgbmV4dFN1YkluZGV4LFxuICAgIG5leHRTdWJTdWJJbmRleCxcbiAgICBzdGVwXG4gICk6IHsgc3ViSW5kZXg6IG51bWJlcjsgc3ViU3ViSW5kZXg/OiBudW1iZXIgfSB7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcblxuICAgIGxldCBjaGVja05leHRTdWJJdGVtID0gdHJ1ZTtcbiAgICBpZiAoY2hlY2tOZXh0U3ViSXRlbSkge1xuICAgICAgbmV4dFN1YkluZGV4ID0gKG5leHRTdWJJbmRleCArIHN0ZXAgKyBzdWJJdGVtcy5sZW5ndGgpICUgc3ViSXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJJbmRleDogbmV4dFN1YkluZGV4LCBzdWJTdWJJbmRleDogbmV4dFN1YlN1YkluZGV4IH07XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnbWVudW5hdmlnYXRpb24taXRlbSc7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGBzdWItJHtwYXJlbnRJZH0tJHsrK2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxufVxuIiwiPHVsXG4gICNtZW51bmF2aWdhdGlvblxuICBbaWRdPVwiaWQgKyAnLW1lbnUtbmF2aWdhdGlvbidcIlxuICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC1iYXNlXCJcbiAgKGZvY3VzaW4pPVwiaGFuZGxlTWVudUZvY3VzSW4oKVwiXG4gIChmb2N1c291dCk9XCJoYW5kbGVNZW51Rm9jdXNPdXQoJGV2ZW50KVwiXG4gIFtuZ0NsYXNzXT1cInsgZm9jdXM6IGlzRm9jdXNlZCB9XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgaW5kZXggYXMgaXRlbUluZGV4XCI+XG4gICAgPGxpXG4gICAgICBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgIGRlc3lNZW51YmFyaXRlbVxuICAgICAgKGNvbnRlbnRDaGFuZ2VkKT1cImNoZWNrQ2hhbmdlcygpXCI+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cIml0ZW0uaHJlZlwiXG4gICAgICAgICNsaW5rXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJpdGVtLmRpc2FibGVkID8gbGluayA6IG51bGxcIlxuICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcbiAgICAgICAgW2hyZWZdPVwiaXRlbS5ocmVmXCJcbiAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmUsXG4gICAgICAgIH1cIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlID8gaXRlbS50aXRsZSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5kaXNhYmxlZCA/ICdwYWdlJyA6IGl0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTFcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZSBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAjaXRlbUNvbnRlbnRXcmFwcGVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogaXRlbS5odG1sLCB0ZXh0OiBpdGVtLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cIiFpdGVtLmhyZWYgJiYgaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgI2xpbmtcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCJcbiAgICAgICAgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cIml0ZW0uZGlzYWJsZWQgPyBsaW5rIDogbnVsbFwiXG4gICAgICAgIFtpZF09XCJnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KVwiXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxuICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzID8gaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA6IFtdXCJcbiAgICAgICAgW2ZyYWdtZW50XT1cIml0ZW0uZnJhZ21lbnRcIlxuICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1wcmltYXJ5JzogaXRlbS5hY3RpdmUsXG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWhhcy1zZWxlY3Rpb24nOiBpdGVtLmFjdGl2ZSxcbiAgICAgICAgfVwiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uZGlzYWJsZWQgPyAncGFnZScgOiBpdGVtLmFyaWFDdXJyZW50ID8gaXRlbS5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaXRlbS5ocmVmICYmICFpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICAjbGlua1xuICAgICAgICAjaXRlbUNvbnRlbnRXcmFwcGVyXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmUsXG4gICAgICAgIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uc3ViID8gKCEhKG1lbnVEYXRhICYmIG1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbikgPyB0cnVlIDogZmFsc2UpIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5zdWIgPyAoISEobWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuKSA/IHRydWUgOiBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cIml0ZW1cIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uc3ViID8gKGl0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBpZCArICctc3ViLWxpc3QnKSA6IG51bGxcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgIGNsYXNzPVwic3Itb25seVwiPlxuICAgICAgICAgIEl0ZW0gYWN0aXZvOlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBzZWxmLWNlbnRlciBtYXgtdy14cyBhbGlnbi1taWRkbGUgdHJ1bmNhdGUgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLnN1YlwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgYWxpZ24tbWlkZGxlIC1teS1weCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDk2IDk2XCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICB3aWR0aD1cIjEuNWVtXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjVlbVwiPlxuICAgICAgICAgIDxnPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk00Ni43MSA1OC4wMzdhMS44MjMgMS44MjMgMCAwMDIuNTgxIDBMNjIuMDQ4IDQ1LjI4YTEuODIzIDEuODIzIDAgMDAtMS4yOS0zLjExM0gzNS4yNDNhMS44MjMgMS44MjMgMCAwMC0xLjI5MSAzLjExM3pcIiAvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIml0ZW0uc3ViICYmIGdldEl0ZW1TdWJpdGVtcyhpdGVtKVwiXG4gICAgICAgIGNsYXNzPVwiYy1tZW51LW5hdmlnYXRpb25fX3N1YiBhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTBcIj5cbiAgICAgICAgPHVsXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1zdWItbGlzdCdcIlxuICAgICAgICAgIFtzdHlsZV09XCJtZW51RGF0YSAmJiBtZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPyAnZGlzcGxheTpibG9jaycgOiAnZGlzcGxheTpub25lJ1wiXG4gICAgICAgICAgI3BvcHVwTWVudVxuICAgICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICBpdGVtLnN1Yi5jbGFzc2VzXG4gICAgICAgICAgICAgID8gaXRlbS5zdWIuY2xhc3Nlc1xuICAgICAgICAgICAgICA6ICdjLW1lbnUtbmF2aWdhdGlvbl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSBzaGFkb3ctbWQgYmctd2hpdGUgdGV4dC1zbSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWwgPyBpdGVtLmFyaWFMYWJlbCA6IGl0ZW0uc3ViLmFyaWFMYWJlbCA/IGl0ZW0uc3ViLmFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5zdWIuYXJpYURpc2FibGVkID8gaXRlbS5zdWIuYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cIml0ZW0uc3ViXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBnZXRJdGVtU3ViaXRlbXMoaXRlbSk7IGluZGV4IGFzIHN1Ykl0ZW1JbmRleFwiPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICNwb3B1cE1lbnVJdGVtXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgIFtocmVmXT1cInN1Ykl0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgcHgtYmFzZSBweS1zbSB0ZXh0LXNtIGhvdmVyOmJnLXByaW1hcnktYmFzZSBob3Zlcjp0ZXh0LXdoaXRlIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMgZm9jdXM6dGV4dC1ibGFjaycsXG4gICAgICAgICAgICAgICAgICAgIHN1Ykl0ZW0uY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIF0gfCBtYWtlSHRtbExpc3RcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3BvaW50ZXItZXZlbnRzLW5vbmUnOiBzdWJJdGVtLmRpc2FibGVkIH1cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzdWJJdGVtLmRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3ViSXRlbS5hY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cInN1Ykl0ZW0udGFyZ2V0XCI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZ1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJJdGVtLmFjdGl2ZTsgZWxzZSBub0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN1Ykl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbDogc3ViSXRlbS5odG1sLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN1Ykl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BY3RpdmU+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3ViSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBodG1sOiBzdWJJdGVtLmh0bWwsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3ViSXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNDAgMTQwXCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGFsaWduLW1pZGRsZSBmbGV4LWluaXRpYWwgbWwtc20gdGV4dC1uZXV0cmFsLWJhc2UgZmlsbC1jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk03MCAwYTcwIDcwIDAgMTA3MCA3MEE3MC4wOCA3MC4wOCAwIDAwNzAgMHpNMjAgNzBhNTAgNTAgMCAwMTc0LjgtNDMuNCAyLjUxIDIuNTEgMCAwMTEuMjMgMS44NCAyLjQ4IDIuNDggMCAwMS0uNzEgMi4xTDMwLjU0IDk1LjMyYTIuNTEgMi41MSAwIDAxLTMuOTQtLjUyQTQ5LjYzIDQ5LjYzIDAgMDEyMCA3MHptMTAwIDBhNTAgNTAgMCAwMS03NC44IDQzLjQgMi41MSAyLjUxIDAgMDEtMS4yMy0xLjg0IDIuNDggMi40OCAwIDAxLjcxLTIuMWw2NC43OC02NC43OGEyLjUxIDIuNTEgMCAwMTMuOTQuNTJBNDkuNjMgNDkuNjMgMCAwMTEyMCA3MHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhc3ViSXRlbS5ocmVmICYmIHN1Ykl0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN1Ykl0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwic3ViSXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA/IHN1Ykl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgOiBbXVwiXG4gICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInN1Ykl0ZW0uZnJhZ21lbnRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHB4LWJhc2UgcHktc20gdGV4dC1zbSBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZSBmb2N1czpiZy13YXJuaW5nLWJhc2UgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzIGZvY3VzOnRleHQtYmxhY2snLFxuICAgICAgICAgICAgICAgICAgICBzdWJJdGVtLmNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICBdIHwgbWFrZUh0bWxMaXN0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwb2ludGVyLWV2ZW50cy1ub25lJzogc3ViSXRlbS5kaXNhYmxlZCB9XCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic3ViSXRlbS5kaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cInN1Ykl0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09XCJzdWJJdGVtLnRhcmdldFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmdcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3ViSXRlbS5hY3RpdmU7IGVsc2Ugbm9BY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdWJJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IHN1Ykl0ZW0uaHRtbCxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdWJJdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQWN0aXZlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN1Ykl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbDogc3ViSXRlbS5odG1sLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN1Ykl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBhbGlnbi1taWRkbGUgZmxleC1pbml0aWFsIG1sLXNtIHRleHQtbmV1dHJhbC1iYXNlIGZpbGwtY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNzAgMGE3MCA3MCAwIDEwNzAgNzBBNzAuMDggNzAuMDggMCAwMDcwIDB6TTIwIDcwYTUwIDUwIDAgMDE3NC44LTQzLjQgMi41MSAyLjUxIDAgMDExLjIzIDEuODQgMi40OCAyLjQ4IDAgMDEtLjcxIDIuMUwzMC41NCA5NS4zMmEyLjUxIDIuNTEgMCAwMS0zLjk0LS41MkE0OS42MyA0OS42MyAwIDAxMjAgNzB6bTEwMCAwYTUwIDUwIDAgMDEtNzQuOCA0My40IDIuNTEgMi41MSAwIDAxLTEuMjMtMS44NCAyLjQ4IDIuNDggMCAwMS43MS0yLjFsNjQuNzgtNjQuNzhhMi41MSAyLjUxIDAgMDEzLjk0LjUyQTQ5LjYzIDQ5LjYzIDAgMDExMjAgNzB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uZGl2aWRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXktc20gYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Itb25seVwiPlNlcGFyYWRvcjwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICAgPGxpXG4gICAgICAjcG9wdXBNZW51SXRlbVxuICAgICAgKm5nSWY9XCJpdGVtLmRpdmlkZXJcIlxuICAgICAgW2NsYXNzXT1cIml0ZW0uZGl2aWRlci5jbGFzc2VzXCJcbiAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICAgIGNvbXBvbmVudDogaXRlbS5kaXZpZGVyLFxuICAgICAgICAgIGh0bWw6IGl0ZW0uZGl2aWRlci5odG1sLFxuICAgICAgICAgIHRleHQ6IGl0ZW0uZGl2aWRlci50ZXh0LFxuICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9saT5cbiAgPC9uZy1jb250YWluZXI+XG48L3VsPlxuIl19
|