ngx-tethys 17.0.0-next.1 → 17.0.0-next.3
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/CHANGELOG.md +13 -0
- package/action/action.component.d.ts +3 -3
- package/action/action.module.d.ts +1 -1
- package/action/actions.component.d.ts +5 -5
- package/affix/affix.component.d.ts +3 -3
- package/affix/affix.module.d.ts +1 -1
- package/alert/alert.component.d.ts +3 -3
- package/alert/alert.module.d.ts +1 -1
- package/anchor/anchor-link.component.d.ts +5 -5
- package/anchor/anchor.component.d.ts +9 -9
- package/anchor/anchor.module.d.ts +1 -1
- package/arrow-switcher/arrow-switcher.component.d.ts +3 -3
- package/arrow-switcher/module.d.ts +1 -1
- package/autocomplete/autocomplete.component.d.ts +9 -9
- package/autocomplete/autocomplete.trigger.directive.d.ts +6 -6
- package/autocomplete/module.d.ts +1 -1
- package/autocomplete/overlay/autocomplete-container.component.d.ts +3 -3
- package/autocomplete/overlay/autocomplete-ref.d.ts +4 -4
- package/autocomplete/overlay/autocomplete.service.d.ts +5 -5
- package/avatar/avatar-list/avatar-list.component.d.ts +6 -6
- package/avatar/avatar.component.d.ts +3 -3
- package/avatar/avatar.module.d.ts +1 -1
- package/back-top/back-top.component.d.ts +3 -3
- package/back-top/back-top.module.d.ts +1 -1
- package/badge/badge.component.d.ts +3 -3
- package/badge/badge.module.d.ts +1 -1
- package/breadcrumb/breadcrumb-item.component.d.ts +3 -3
- package/breadcrumb/breadcrumb.component.d.ts +3 -3
- package/breadcrumb/module.d.ts +1 -1
- package/button/button-group.component.d.ts +3 -3
- package/button/button-icon.component.d.ts +3 -3
- package/button/button.component.d.ts +3 -3
- package/button/button.module.d.ts +1 -1
- package/calendar/calendar-header.component.d.ts +3 -3
- package/calendar/calendar.component.d.ts +3 -3
- package/calendar/module.d.ts +1 -1
- package/card/card.component.d.ts +3 -3
- package/card/card.module.d.ts +1 -1
- package/card/content.component.d.ts +3 -3
- package/card/header.component.d.ts +3 -3
- package/carousel/carousel.component.d.ts +3 -3
- package/carousel/engine/carousel-base.d.ts +3 -3
- package/carousel/engine/carousel-fade.d.ts +2 -2
- package/carousel/engine/carousel-noop.d.ts +2 -2
- package/carousel/engine/carousel-slide.d.ts +2 -2
- package/carousel/module.d.ts +1 -1
- package/cascader/cascader.component.d.ts +3 -3
- package/cascader/module.d.ts +1 -1
- package/checkbox/checkbox.component.d.ts +3 -3
- package/checkbox/module.d.ts +1 -1
- package/collapse/collapse-item.component.d.ts +5 -5
- package/collapse/collapse.component.d.ts +7 -7
- package/collapse/module.d.ts +1 -1
- package/color-picker/color-picker-custom-panel.component.d.ts +3 -3
- package/color-picker/color-picker-panel.component.d.ts +6 -6
- package/color-picker/color-picker.component.d.ts +3 -3
- package/color-picker/module.d.ts +1 -1
- package/color-picker/parts/alpha/alpha.component.d.ts +3 -3
- package/color-picker/parts/hue/hue.component.d.ts +3 -3
- package/color-picker/parts/indicator/indicator.component.d.ts +3 -3
- package/color-picker/parts/inputs/inputs.component.d.ts +3 -3
- package/color-picker/parts/saturation/saturation.component.d.ts +3 -3
- package/comment/comment.component.d.ts +3 -3
- package/comment/comment.module.d.ts +1 -1
- package/date-picker/abstract-picker.component.d.ts +2 -2
- package/date-picker/base-picker.component.d.ts +5 -5
- package/date-picker/date-picker.component.d.ts +4 -4
- package/date-picker/date-picker.module.d.ts +1 -1
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +3 -3
- package/date-picker/lib/date/date-header.component.d.ts +3 -3
- package/date-picker/lib/date/date-table-cell.component.d.ts +3 -3
- package/date-picker/lib/date/date-table.component.d.ts +3 -3
- package/date-picker/lib/date-carousel/date-carousel.component.d.ts +3 -3
- package/date-picker/lib/decade/decade-header.component.d.ts +3 -3
- package/date-picker/lib/decade/decade-table.component.d.ts +3 -3
- package/date-picker/lib/lib-packer.module.d.ts +1 -1
- package/date-picker/lib/month/month-header.component.d.ts +3 -3
- package/date-picker/lib/month/month-table.component.d.ts +3 -3
- package/date-picker/lib/popups/date-popup.component.d.ts +4 -4
- package/date-picker/lib/popups/inner-popup.component.d.ts +3 -3
- package/date-picker/lib/quarter/quarter-table.component.d.ts +3 -3
- package/date-picker/lib/year/year-header.component.d.ts +3 -3
- package/date-picker/lib/year/year-table.component.d.ts +3 -3
- package/date-picker/month-picker.component.d.ts +4 -4
- package/date-picker/picker.component.d.ts +3 -3
- package/date-picker/quarter-picker.component.d.ts +4 -4
- package/date-picker/range-picker.component.d.ts +4 -4
- package/date-picker/week-picker.component.d.ts +4 -4
- package/date-picker/year-picker.component.d.ts +4 -4
- package/date-range/date-range.component.d.ts +3 -3
- package/date-range/module.d.ts +1 -1
- package/date-range/optional-dates/optional-dates.component.d.ts +3 -3
- package/dialog/body/dialog-body.component.d.ts +3 -3
- package/dialog/confirm/confirm.component.d.ts +4 -4
- package/dialog/dialog-container.component.d.ts +3 -3
- package/dialog/dialog-ref.d.ts +4 -4
- package/dialog/dialog.module.d.ts +1 -1
- package/dialog/dialog.service.d.ts +5 -5
- package/dialog/footer/dialog-footer.component.d.ts +3 -3
- package/dialog/header/dialog-header.component.d.ts +5 -5
- package/dialog/index.d.ts +1 -1
- package/divider/divider.component.d.ts +3 -3
- package/divider/divider.module.d.ts +1 -1
- package/dot/dot.component.d.ts +3 -3
- package/dot/dot.module.d.ts +1 -1
- package/dropdown/dropdown-menu.component.d.ts +6 -6
- package/dropdown/dropdown-submenu.component.d.ts +3 -3
- package/dropdown/module.d.ts +1 -1
- package/empty/empty.component.d.ts +3 -3
- package/empty/empty.module.d.ts +1 -1
- package/esm2022/action/action.component.mjs +10 -10
- package/esm2022/action/action.module.mjs +7 -7
- package/esm2022/action/actions.component.mjs +7 -7
- package/esm2022/affix/affix.component.mjs +7 -7
- package/esm2022/affix/affix.module.mjs +5 -5
- package/esm2022/alert/alert.component.mjs +8 -8
- package/esm2022/alert/alert.module.mjs +6 -6
- package/esm2022/anchor/anchor-link.component.mjs +7 -7
- package/esm2022/anchor/anchor.component.mjs +11 -11
- package/esm2022/anchor/anchor.module.mjs +7 -7
- package/esm2022/arrow-switcher/arrow-switcher.component.mjs +13 -13
- package/esm2022/arrow-switcher/module.mjs +6 -6
- package/esm2022/autocomplete/autocomplete.component.mjs +13 -13
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +2 -2
- package/esm2022/autocomplete/module.mjs +10 -10
- package/esm2022/autocomplete/overlay/autocomplete-container.component.mjs +5 -5
- package/esm2022/autocomplete/overlay/autocomplete-ref.mjs +1 -1
- package/esm2022/autocomplete/overlay/autocomplete.service.mjs +4 -4
- package/esm2022/avatar/avatar-list/avatar-list.component.mjs +8 -8
- package/esm2022/avatar/avatar.component.mjs +11 -11
- package/esm2022/avatar/avatar.module.mjs +7 -7
- package/esm2022/back-top/back-top.component.mjs +8 -8
- package/esm2022/back-top/back-top.module.mjs +6 -6
- package/esm2022/badge/badge.component.mjs +10 -10
- package/esm2022/badge/badge.module.mjs +5 -5
- package/esm2022/breadcrumb/breadcrumb-item.component.mjs +7 -7
- package/esm2022/breadcrumb/breadcrumb.component.mjs +8 -8
- package/esm2022/breadcrumb/module.mjs +7 -7
- package/esm2022/button/button-group.component.mjs +5 -5
- package/esm2022/button/button-icon.component.mjs +9 -9
- package/esm2022/button/button.component.mjs +9 -9
- package/esm2022/button/button.module.mjs +8 -8
- package/esm2022/calendar/calendar-header.component.mjs +8 -8
- package/esm2022/calendar/calendar.component.mjs +8 -8
- package/esm2022/calendar/module.mjs +11 -11
- package/esm2022/card/card.component.mjs +8 -8
- package/esm2022/card/card.module.mjs +7 -7
- package/esm2022/card/content.component.mjs +5 -5
- package/esm2022/card/header.component.mjs +5 -5
- package/esm2022/carousel/carousel.component.mjs +13 -13
- package/esm2022/carousel/engine/carousel-base.mjs +1 -1
- package/esm2022/carousel/engine/carousel-fade.mjs +1 -1
- package/esm2022/carousel/engine/carousel-noop.mjs +1 -1
- package/esm2022/carousel/engine/carousel-slide.mjs +1 -1
- package/esm2022/carousel/module.mjs +5 -5
- package/esm2022/cascader/cascader-li.component.mjs +6 -6
- package/esm2022/cascader/cascader-search-option.component.mjs +7 -16
- package/esm2022/cascader/cascader.component.mjs +22 -22
- package/esm2022/cascader/module.mjs +7 -7
- package/esm2022/checkbox/checkbox.component.mjs +8 -8
- package/esm2022/checkbox/module.mjs +5 -5
- package/esm2022/collapse/collapse-item.component.mjs +11 -11
- package/esm2022/collapse/collapse.component.mjs +6 -6
- package/esm2022/collapse/module.mjs +7 -7
- package/esm2022/color-picker/color-picker-custom-panel.component.mjs +11 -11
- package/esm2022/color-picker/color-picker-panel.component.mjs +10 -10
- package/esm2022/color-picker/color-picker.component.mjs +3 -3
- package/esm2022/color-picker/module.mjs +25 -25
- package/esm2022/color-picker/parts/alpha/alpha.component.mjs +5 -5
- package/esm2022/color-picker/parts/hue/hue.component.mjs +5 -5
- package/esm2022/color-picker/parts/indicator/indicator.component.mjs +5 -5
- package/esm2022/color-picker/parts/inputs/inputs.component.mjs +7 -7
- package/esm2022/color-picker/parts/saturation/saturation.component.mjs +5 -5
- package/esm2022/comment/comment.component.mjs +7 -7
- package/esm2022/comment/comment.module.mjs +7 -7
- package/esm2022/date-picker/abstract-picker.component.mjs +4 -4
- package/esm2022/date-picker/abstract-picker.directive.mjs +3 -3
- package/esm2022/date-picker/base-picker.component.mjs +8 -8
- package/esm2022/date-picker/date-picker.component.mjs +12 -12
- package/esm2022/date-picker/date-picker.module.mjs +44 -44
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +10 -10
- package/esm2022/date-picker/lib/date/date-header.component.mjs +7 -7
- package/esm2022/date-picker/lib/date/date-table-cell.component.mjs +5 -5
- package/esm2022/date-picker/lib/date/date-table.component.mjs +7 -7
- package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +11 -11
- package/esm2022/date-picker/lib/decade/decade-header.component.mjs +7 -7
- package/esm2022/date-picker/lib/decade/decade-table.component.mjs +5 -5
- package/esm2022/date-picker/lib/lib-packer.module.mjs +79 -79
- package/esm2022/date-picker/lib/month/month-header.component.mjs +7 -7
- package/esm2022/date-picker/lib/month/month-table.component.mjs +5 -5
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +15 -15
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +23 -23
- package/esm2022/date-picker/lib/quarter/quarter-table.component.mjs +5 -5
- package/esm2022/date-picker/lib/year/year-header.component.mjs +7 -7
- package/esm2022/date-picker/lib/year/year-table.component.mjs +5 -5
- package/esm2022/date-picker/month-picker.component.mjs +12 -12
- package/esm2022/date-picker/picker.component.mjs +8 -8
- package/esm2022/date-picker/quarter-picker.component.mjs +12 -12
- package/esm2022/date-picker/range-picker.component.mjs +12 -12
- package/esm2022/date-picker/week-picker.component.mjs +12 -12
- package/esm2022/date-picker/year-picker.component.mjs +12 -12
- package/esm2022/date-range/date-range.component.mjs +13 -13
- package/esm2022/date-range/module.mjs +10 -10
- package/esm2022/date-range/optional-dates/optional-dates.component.mjs +7 -7
- package/esm2022/dialog/body/dialog-body.component.mjs +5 -5
- package/esm2022/dialog/confirm/confirm.component.mjs +10 -18
- package/esm2022/dialog/dialog-container.component.mjs +5 -5
- package/esm2022/dialog/dialog-ref.mjs +1 -1
- package/esm2022/dialog/dialog.module.mjs +22 -22
- package/esm2022/dialog/dialog.service.mjs +4 -4
- package/esm2022/dialog/footer/dialog-footer.component.mjs +6 -6
- package/esm2022/dialog/header/dialog-header.component.mjs +11 -11
- package/esm2022/dialog/index.mjs +2 -2
- package/esm2022/divider/divider.component.mjs +7 -7
- package/esm2022/divider/divider.module.mjs +5 -5
- package/esm2022/dot/dot.component.mjs +5 -5
- package/esm2022/dot/dot.module.mjs +5 -5
- package/esm2022/dropdown/dropdown-menu.component.mjs +9 -9
- package/esm2022/dropdown/dropdown-submenu.component.mjs +5 -5
- package/esm2022/dropdown/module.mjs +15 -15
- package/esm2022/empty/empty.component.mjs +8 -8
- package/esm2022/empty/empty.module.mjs +6 -6
- package/esm2022/flexible-text/flexible-text.component.mjs +7 -7
- package/esm2022/flexible-text/flexible-text.module.mjs +5 -5
- package/esm2022/form/form-group-error/form-group-error.component.mjs +8 -8
- package/esm2022/form/form-group.component.mjs +8 -8
- package/esm2022/form/from-group-footer/form-group-footer.component.mjs +5 -5
- package/esm2022/form/module.mjs +18 -18
- package/esm2022/grid/module.mjs +6 -6
- package/esm2022/grid/thy-grid-item.component.mjs +5 -5
- package/esm2022/grid/thy-grid.component.mjs +4 -4
- package/esm2022/guider/guider-hint/guider-hint.component.mjs +6 -6
- package/esm2022/guider/guider.module.mjs +6 -24
- package/esm2022/icon/icon.component.mjs +8 -8
- package/esm2022/icon/icon.module.mjs +5 -5
- package/esm2022/icon/index.mjs +2 -2
- package/esm2022/image/image-group.component.mjs +5 -5
- package/esm2022/image/image.directive.mjs +3 -3
- package/esm2022/image/image.service.mjs +3 -3
- package/esm2022/image/module.mjs +9 -9
- package/esm2022/image/preview/image-preview-ref.mjs +1 -1
- package/esm2022/image/preview/image-preview.component.mjs +10 -21
- package/esm2022/input/input-count.component.mjs +7 -7
- package/esm2022/input/input-group.component.mjs +5 -5
- package/esm2022/input/input-search.component.mjs +9 -9
- package/esm2022/input/input.component.mjs +10 -10
- package/esm2022/input/module.mjs +16 -16
- package/esm2022/input-number/input-number.component.mjs +14 -14
- package/esm2022/input-number/module.mjs +6 -6
- package/esm2022/layout/content-main.component.mjs +5 -5
- package/esm2022/layout/content-section.component.mjs +5 -5
- package/esm2022/layout/content.component.mjs +5 -5
- package/esm2022/layout/header.component.mjs +7 -7
- package/esm2022/layout/layout.component.mjs +5 -5
- package/esm2022/layout/layout.module.mjs +48 -48
- package/esm2022/layout/sidebar-content.component.mjs +5 -5
- package/esm2022/layout/sidebar-footer.component.mjs +5 -5
- package/esm2022/layout/sidebar-header.component.mjs +5 -5
- package/esm2022/layout/sidebar.component.mjs +15 -24
- package/esm2022/list/list-item-meta.component.mjs +7 -7
- package/esm2022/list/list-item.component.mjs +5 -5
- package/esm2022/list/list.component.mjs +6 -6
- package/esm2022/list/list.module.mjs +9 -26
- package/esm2022/list/selection/selection-list.mjs +12 -12
- package/esm2022/list/selection/selection.interface.mjs +1 -1
- package/esm2022/loading/loading.component.mjs +7 -7
- package/esm2022/loading/loading.module.mjs +5 -5
- package/esm2022/mention/mention.directive.mjs +3 -3
- package/esm2022/mention/mention.module.mjs +5 -24
- package/esm2022/mention/suggestions/suggestions.component.mjs +9 -9
- package/esm2022/menu/divider/menu-divider.component.mjs +5 -5
- package/esm2022/menu/group/menu-group.component.mjs +13 -13
- package/esm2022/menu/item/action/menu-item-action.component.mjs +6 -6
- package/esm2022/menu/item/icon/menu-item-icon.component.mjs +5 -5
- package/esm2022/menu/item/menu-item.component.mjs +7 -7
- package/esm2022/menu/item/name/menu-item-name.component.mjs +6 -6
- package/esm2022/menu/menu.component.mjs +6 -6
- package/esm2022/menu/menu.module.mjs +25 -39
- package/esm2022/message/message-container.component.mjs +7 -7
- package/esm2022/message/message.component.mjs +7 -7
- package/esm2022/message/message.service.mjs +3 -3
- package/esm2022/message/module.mjs +7 -7
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +7 -7
- package/esm2022/nav/icon-nav/icon-nav.component.mjs +5 -5
- package/esm2022/nav/nav.component.mjs +11 -11
- package/esm2022/nav/nav.module.mjs +14 -14
- package/esm2022/notify/module.mjs +7 -7
- package/esm2022/notify/notify-container.component.mjs +7 -7
- package/esm2022/notify/notify.component.mjs +7 -7
- package/esm2022/notify/notify.service.mjs +3 -3
- package/esm2022/pagination/pagination.component.mjs +20 -30
- package/esm2022/pagination/pagination.module.mjs +6 -25
- package/esm2022/popover/body/popover-body.component.mjs +5 -5
- package/esm2022/popover/header/popover-header.component.mjs +7 -7
- package/esm2022/popover/module.mjs +13 -13
- package/esm2022/popover/popover-container.component.mjs +5 -5
- package/esm2022/popover/popover-ref.mjs +1 -1
- package/esm2022/popover/popover.service.mjs +4 -4
- package/esm2022/progress/progress-circle.component.mjs +8 -8
- package/esm2022/progress/progress-strip.component.mjs +6 -6
- package/esm2022/progress/progress.component.mjs +15 -15
- package/esm2022/progress/progress.module.mjs +7 -7
- package/esm2022/property/module.mjs +7 -7
- package/esm2022/property/properties.component.mjs +6 -6
- package/esm2022/property/property-item.component.mjs +11 -11
- package/esm2022/property-operation/group/property-operation-group.component.mjs +5 -5
- package/esm2022/property-operation/module.mjs +7 -23
- package/esm2022/property-operation/property-operation.component.mjs +14 -14
- package/esm2022/radio/button/radio-button.component.mjs +8 -8
- package/esm2022/radio/group/radio-group.component.mjs +8 -8
- package/esm2022/radio/module.mjs +7 -7
- package/esm2022/radio/radio.component.mjs +9 -9
- package/esm2022/rate/module.mjs +7 -7
- package/esm2022/rate/rate-item.component.mjs +9 -9
- package/esm2022/rate/rate.component.mjs +13 -13
- package/esm2022/resizable/module.mjs +6 -6
- package/esm2022/resizable/resize-handle.component.mjs +6 -6
- package/esm2022/resizable/resize-handles.component.mjs +8 -8
- package/esm2022/result/result.component.mjs +5 -5
- package/esm2022/result/result.module.mjs +5 -5
- package/esm2022/segment/segment-item.component.mjs +8 -8
- package/esm2022/segment/segment.component.mjs +12 -12
- package/esm2022/segment/segment.module.mjs +7 -7
- package/esm2022/segment/segment.token.mjs +1 -1
- package/esm2022/select/custom-select/custom-select.component.mjs +37 -37
- package/esm2022/select/index.mjs +3 -3
- package/esm2022/select/module.mjs +10 -10
- package/esm2022/select/native-select/native-select.component.mjs +103 -0
- package/esm2022/shared/option/group/option-group.component.mjs +11 -11
- package/esm2022/shared/option/list-option/list-option.component.mjs +8 -8
- package/esm2022/shared/option/module.mjs +10 -37
- package/esm2022/shared/option/option-group.component.mjs +5 -5
- package/esm2022/shared/option/option.component.mjs +8 -8
- package/esm2022/shared/option/option.token.mjs +1 -1
- package/esm2022/shared/option/options-container.component.mjs +5 -5
- package/esm2022/shared/select/module.mjs +6 -6
- package/esm2022/shared/select/select-control/select-control.component.mjs +15 -15
- package/esm2022/skeleton/module.mjs +9 -26
- package/esm2022/skeleton/skeleton-circle.component.mjs +9 -9
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +11 -11
- package/esm2022/skeleton/skeleton.component.mjs +6 -6
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +14 -14
- package/esm2022/skeleton/stylized/list.component.mjs +12 -12
- package/esm2022/skeleton/stylized/paragraph.component.mjs +14 -14
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +5 -5
- package/esm2022/slide/slide-body/slide-body.component.mjs +5 -5
- package/esm2022/slide/slide-container.component.mjs +5 -5
- package/esm2022/slide/slide-footer/slide-footer.component.mjs +5 -5
- package/esm2022/slide/slide-header/slide-header.component.mjs +8 -8
- package/esm2022/slide/slide-layout/slide-layout.component.mjs +5 -5
- package/esm2022/slide/slide-ref.service.mjs +4 -4
- package/esm2022/slide/slide.module.mjs +23 -35
- package/esm2022/slide/slide.service.mjs +4 -4
- package/esm2022/slider/slider.component.mjs +12 -12
- package/esm2022/slider/slider.module.mjs +5 -5
- package/esm2022/space/space.component.mjs +6 -6
- package/esm2022/space/space.module.mjs +5 -5
- package/esm2022/statistic/statistic.component.mjs +5 -5
- package/esm2022/statistic/statistic.module.mjs +5 -5
- package/esm2022/stepper/step-header.component.mjs +8 -8
- package/esm2022/stepper/step.component.mjs +5 -5
- package/esm2022/stepper/stepper-button.directive.mjs +6 -6
- package/esm2022/stepper/stepper.component.mjs +15 -15
- package/esm2022/stepper/stepper.module.mjs +7 -19
- package/esm2022/strength/strength.component.mjs +7 -7
- package/esm2022/strength/strength.module.mjs +5 -5
- package/esm2022/switch/switch.component.mjs +8 -8
- package/esm2022/switch/switch.module.mjs +5 -5
- package/esm2022/table/table-skeleton.component.mjs +12 -12
- package/esm2022/table/table.component.mjs +34 -34
- package/esm2022/table/table.module.mjs +10 -10
- package/esm2022/tabs/tab-content.component.mjs +5 -5
- package/esm2022/tabs/tab.component.mjs +6 -6
- package/esm2022/tabs/tabs.component.mjs +12 -12
- package/esm2022/tabs/tabs.module.mjs +8 -8
- package/esm2022/tag/tag.component.mjs +6 -6
- package/esm2022/tag/tag.module.mjs +6 -6
- package/esm2022/tag/tags.component.mjs +5 -5
- package/esm2022/time-picker/inner/inner-time-picker.component.mjs +6 -6
- package/esm2022/time-picker/time-picker-panel.component.mjs +12 -12
- package/esm2022/time-picker/time-picker.component.mjs +17 -17
- package/esm2022/time-picker/time-picker.module.mjs +7 -7
- package/esm2022/timeline/timeline-item.component.mjs +5 -5
- package/esm2022/timeline/timeline.component.mjs +8 -8
- package/esm2022/timeline/timeline.module.mjs +6 -6
- package/esm2022/tooltip/tooltip-ref.mjs +3 -3
- package/esm2022/tooltip/tooltip.component.mjs +5 -5
- package/esm2022/tooltip/tooltip.module.mjs +4 -4
- package/esm2022/transfer/transfer-list.component.mjs +7 -18
- package/esm2022/transfer/transfer.component.mjs +9 -9
- package/esm2022/transfer/transfer.module.mjs +10 -10
- package/esm2022/tree/tree-node.component.mjs +5 -5
- package/esm2022/tree/tree.component.mjs +17 -17
- package/esm2022/tree/tree.module.mjs +7 -7
- package/esm2022/tree-select/module.mjs +9 -9
- package/esm2022/tree-select/tree-select.component.mjs +29 -29
- package/esm2022/typography/module.mjs +6 -6
- package/esm2022/typography/text/text.component.mjs +7 -7
- package/esm2022/upload/file-select.component.mjs +8 -8
- package/esm2022/upload/module.mjs +5 -5
- package/esm2022/version.mjs +2 -2
- package/esm2022/vote/vote.component.mjs +10 -10
- package/esm2022/vote/vote.module.mjs +6 -6
- package/fesm2022/ngx-tethys-action.mjs +19 -19
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-affix.mjs +10 -10
- package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +12 -12
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +20 -20
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +17 -17
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +26 -26
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +21 -21
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-back-top.mjs +12 -12
- package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +13 -13
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-breadcrumb.mjs +17 -17
- package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +24 -24
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-calendar.mjs +22 -22
- package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +19 -19
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +16 -16
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +35 -44
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +11 -11
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +19 -19
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +54 -54
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-comment.mjs +12 -12
- package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +248 -248
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +24 -24
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +48 -56
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +10 -10
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dot.mjs +8 -8
- package/fesm2022/ngx-tethys-dot.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +25 -25
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +12 -12
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +10 -10
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +33 -33
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-grid.mjs +11 -11
- package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
- package/fesm2022/ngx-tethys-guider.mjs +10 -28
- package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +11 -11
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +22 -33
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +18 -18
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +37 -37
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +86 -95
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +31 -48
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +10 -10
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-mention.mjs +13 -32
- package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +58 -72
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-message.mjs +17 -17
- package/fesm2022/ngx-tethys-message.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +30 -30
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-notify.mjs +17 -17
- package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +24 -53
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +26 -26
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-progress.mjs +28 -28
- package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +22 -38
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +19 -19
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +23 -23
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +24 -24
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +15 -15
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-result.mjs +8 -8
- package/fesm2022/ngx-tethys-result.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +22 -22
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +58 -58
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +52 -79
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +57 -74
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +48 -60
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +15 -15
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +9 -9
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-statistic.mjs +8 -8
- package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +31 -43
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-strength.mjs +10 -10
- package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +11 -11
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +51 -51
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +23 -23
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +13 -13
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +35 -35
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +14 -14
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +8 -8
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-transfer.mjs +21 -32
- package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +36 -36
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +26 -26
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-typography.mjs +11 -11
- package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +11 -11
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +14 -14
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/flexible-text/flexible-text.component.d.ts +3 -3
- package/flexible-text/flexible-text.module.d.ts +1 -1
- package/form/form-group-error/form-group-error.component.d.ts +3 -3
- package/form/form-group.component.d.ts +3 -3
- package/form/from-group-footer/form-group-footer.component.d.ts +3 -3
- package/form/module.d.ts +1 -1
- package/grid/module.d.ts +1 -1
- package/grid/thy-grid-item.component.d.ts +4 -4
- package/grid/thy-grid.component.d.ts +2 -2
- package/guider/guider-hint/guider-hint.component.d.ts +3 -3
- package/guider/guider.module.d.ts +1 -1
- package/icon/icon.component.d.ts +3 -3
- package/icon/icon.module.d.ts +1 -1
- package/icon/index.d.ts +1 -1
- package/image/image-group.component.d.ts +3 -3
- package/image/module.d.ts +1 -1
- package/image/preview/image-preview-ref.d.ts +4 -4
- package/image/preview/image-preview.component.d.ts +4 -4
- package/input/input-count.component.d.ts +5 -5
- package/input/input-group.component.d.ts +4 -4
- package/input/input-search.component.d.ts +3 -3
- package/input/input.component.d.ts +3 -3
- package/input/module.d.ts +1 -1
- package/input-number/input-number.component.d.ts +3 -3
- package/input-number/module.d.ts +1 -1
- package/layout/content-main.component.d.ts +3 -3
- package/layout/content-section.component.d.ts +3 -3
- package/layout/content.component.d.ts +3 -3
- package/layout/header.component.d.ts +3 -3
- package/layout/layout.component.d.ts +3 -3
- package/layout/layout.module.d.ts +1 -1
- package/layout/sidebar-content.component.d.ts +3 -3
- package/layout/sidebar-footer.component.d.ts +3 -3
- package/layout/sidebar-header.component.d.ts +3 -3
- package/layout/sidebar.component.d.ts +3 -3
- package/list/list-item-meta.component.d.ts +3 -3
- package/list/list-item.component.d.ts +3 -3
- package/list/list.component.d.ts +3 -3
- package/list/list.module.d.ts +1 -1
- package/list/selection/selection-list.d.ts +9 -9
- package/list/selection/selection.interface.d.ts +4 -4
- package/loading/loading.component.d.ts +3 -3
- package/loading/loading.module.d.ts +1 -1
- package/mention/mention.directive.d.ts +2 -2
- package/mention/mention.module.d.ts +1 -1
- package/mention/suggestions/suggestions.component.d.ts +3 -3
- package/menu/divider/menu-divider.component.d.ts +3 -3
- package/menu/group/menu-group.component.d.ts +3 -3
- package/menu/item/action/menu-item-action.component.d.ts +3 -3
- package/menu/item/icon/menu-item-icon.component.d.ts +3 -3
- package/menu/item/menu-item.component.d.ts +3 -3
- package/menu/item/name/menu-item-name.component.d.ts +3 -3
- package/menu/menu.component.d.ts +3 -3
- package/menu/menu.module.d.ts +1 -1
- package/message/message-container.component.d.ts +3 -3
- package/message/message.component.d.ts +3 -3
- package/message/message.service.d.ts +2 -2
- package/message/module.d.ts +1 -1
- package/nav/icon-nav/icon-nav-link.directive.d.ts +3 -3
- package/nav/icon-nav/icon-nav.component.d.ts +3 -3
- package/nav/nav.component.d.ts +3 -3
- package/nav/nav.module.d.ts +1 -1
- package/notify/module.d.ts +1 -1
- package/notify/notify-container.component.d.ts +3 -3
- package/notify/notify.component.d.ts +3 -3
- package/notify/notify.service.d.ts +2 -2
- package/package.json +134 -134
- package/pagination/pagination.component.d.ts +3 -3
- package/pagination/pagination.module.d.ts +1 -1
- package/popover/body/popover-body.component.d.ts +3 -3
- package/popover/header/popover-header.component.d.ts +3 -3
- package/popover/module.d.ts +1 -1
- package/popover/popover-container.component.d.ts +3 -3
- package/popover/popover-ref.d.ts +4 -4
- package/popover/popover.service.d.ts +5 -5
- package/progress/progress-circle.component.d.ts +3 -3
- package/progress/progress-strip.component.d.ts +4 -4
- package/progress/progress.component.d.ts +6 -6
- package/progress/progress.module.d.ts +1 -1
- package/property/module.d.ts +1 -1
- package/property/properties.component.d.ts +3 -3
- package/property/property-item.component.d.ts +5 -5
- package/property-operation/group/property-operation-group.component.d.ts +3 -3
- package/property-operation/module.d.ts +1 -1
- package/property-operation/property-operation.component.d.ts +3 -3
- package/radio/button/radio-button.component.d.ts +6 -6
- package/radio/group/radio-group.component.d.ts +7 -7
- package/radio/module.d.ts +1 -1
- package/radio/radio.component.d.ts +6 -6
- package/rate/module.d.ts +1 -1
- package/rate/rate-item.component.d.ts +3 -3
- package/rate/rate.component.d.ts +3 -3
- package/resizable/module.d.ts +1 -1
- package/resizable/resize-handle.component.d.ts +3 -3
- package/resizable/resize-handles.component.d.ts +3 -3
- package/result/result.component.d.ts +3 -3
- package/result/result.module.d.ts +1 -1
- package/schematics/dependencies.js +1 -1
- package/schematics/ng-update/data/class-names.js +740 -4
- package/schematics/ng-update/update-17/index.spec.js +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +3 -3
- package/segment/segment.component.d.ts +7 -7
- package/segment/segment.module.d.ts +1 -1
- package/segment/segment.token.d.ts +3 -3
- package/select/custom-select/custom-select.component.d.ts +17 -17
- package/select/index.d.ts +2 -2
- package/select/module.d.ts +2 -2
- package/select/{select.component.d.ts → native-select/native-select.component.d.ts} +4 -4
- package/select/{custom-select/styles → styles}/custom-select.scss +1 -1
- package/select/{custom-select/styles → styles}/mixin.scss +2 -2
- package/select/styles/select.scss +4 -4
- package/shared/option/group/option-group.component.d.ts +5 -5
- package/shared/option/list-option/list-option.component.d.ts +3 -3
- package/shared/option/module.d.ts +1 -1
- package/shared/option/option-group.component.d.ts +3 -3
- package/shared/option/option.component.d.ts +6 -6
- package/shared/option/option.token.d.ts +7 -7
- package/shared/option/options-container.component.d.ts +3 -3
- package/shared/select/module.d.ts +1 -1
- package/shared/select/select-control/select-control.component.d.ts +3 -3
- package/shared/select/select-control/select-control.scss +1 -1
- package/skeleton/module.d.ts +1 -1
- package/skeleton/skeleton-circle.component.d.ts +5 -5
- package/skeleton/skeleton-rectangle.component.d.ts +5 -5
- package/skeleton/skeleton.component.d.ts +3 -3
- package/skeleton/stylized/bullet-list.component.d.ts +3 -3
- package/skeleton/stylized/list.component.d.ts +3 -3
- package/skeleton/stylized/paragraph.component.d.ts +3 -3
- package/slide/slide-body/slide-body-section.component.d.ts +3 -3
- package/slide/slide-body/slide-body.component.d.ts +3 -3
- package/slide/slide-container.component.d.ts +3 -3
- package/slide/slide-footer/slide-footer.component.d.ts +3 -3
- package/slide/slide-header/slide-header.component.d.ts +3 -3
- package/slide/slide-layout/slide-layout.component.d.ts +3 -3
- package/slide/slide-ref.service.d.ts +4 -4
- package/slide/slide.module.d.ts +1 -1
- package/slide/slide.service.d.ts +5 -5
- package/slider/slider.component.d.ts +3 -3
- package/slider/slider.module.d.ts +1 -1
- package/space/space.component.d.ts +3 -3
- package/space/space.module.d.ts +1 -1
- package/statistic/statistic.component.d.ts +3 -3
- package/statistic/statistic.module.d.ts +1 -1
- package/stepper/step-header.component.d.ts +3 -3
- package/stepper/step.component.d.ts +4 -4
- package/stepper/stepper-button.directive.d.ts +3 -3
- package/stepper/stepper.component.d.ts +10 -10
- package/stepper/stepper.module.d.ts +1 -1
- package/strength/strength.component.d.ts +3 -3
- package/strength/strength.module.d.ts +1 -1
- package/styles/index.scss +1 -1
- package/styles/mixins/index.scss +1 -1
- package/switch/switch.component.d.ts +3 -3
- package/switch/switch.module.d.ts +1 -1
- package/table/table-skeleton.component.d.ts +3 -3
- package/table/table.component.d.ts +3 -3
- package/table/table.module.d.ts +1 -1
- package/tabs/tab-content.component.d.ts +3 -3
- package/tabs/tab.component.d.ts +3 -3
- package/tabs/tabs.component.d.ts +7 -7
- package/tabs/tabs.module.d.ts +1 -1
- package/tag/tag.component.d.ts +3 -3
- package/tag/tag.module.d.ts +1 -1
- package/tag/tags.component.d.ts +3 -3
- package/time-picker/inner/inner-time-picker.component.d.ts +3 -3
- package/time-picker/time-picker-panel.component.d.ts +3 -3
- package/time-picker/time-picker.component.d.ts +3 -3
- package/time-picker/time-picker.module.d.ts +1 -1
- package/timeline/timeline-item.component.d.ts +3 -3
- package/timeline/timeline.component.d.ts +6 -6
- package/timeline/timeline.module.d.ts +1 -1
- package/tooltip/tooltip.component.d.ts +3 -3
- package/tooltip/tooltip.module.d.ts +1 -1
- package/transfer/transfer-list.component.d.ts +3 -3
- package/transfer/transfer.component.d.ts +3 -3
- package/transfer/transfer.module.d.ts +1 -1
- package/tree/tree.component.d.ts +3 -3
- package/tree/tree.module.d.ts +1 -1
- package/tree-select/module.d.ts +1 -1
- package/tree-select/tree-select.component.d.ts +8 -8
- package/typography/module.d.ts +1 -1
- package/typography/text/text.component.d.ts +3 -3
- package/upload/file-select.component.d.ts +3 -3
- package/upload/module.d.ts +1 -1
- package/vote/vote.component.d.ts +3 -3
- package/vote/vote.module.d.ts +1 -1
- package/divider/examples/color/color.component.scss +0 -5
- package/divider/examples/deeper/deeper.component.scss +0 -5
- package/divider/examples/with-text/with-text.component.scss +0 -5
- package/esm2022/select/select.component.mjs +0 -103
|
@@ -12,13 +12,13 @@ import { THY_TABLE_COLUMN_PARENT_COMPONENT, ThyTableColumnComponent } from './ta
|
|
|
12
12
|
import { ThyTableSortDirection } from './table.interface';
|
|
13
13
|
import { TableRowDragDisabledPipe } from './pipes/drag.pipe';
|
|
14
14
|
import { TableIsValidModelValuePipe } from './pipes/table.pipe';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
15
|
+
import { ThyPagination } from 'ngx-tethys/pagination';
|
|
16
|
+
import { ThyTableSkeleton } from './table-skeleton.component';
|
|
17
|
+
import { ThyEmpty } from 'ngx-tethys/empty';
|
|
18
|
+
import { ThySwitch } from 'ngx-tethys/switch';
|
|
19
19
|
import { FormsModule } from '@angular/forms';
|
|
20
20
|
import { ThyDragDropDirective, ThyContextMenuDirective } from 'ngx-tethys/shared';
|
|
21
|
-
import {
|
|
21
|
+
import { ThyIcon } from 'ngx-tethys/icon';
|
|
22
22
|
import { CdkScrollable } from '@angular/cdk/scrolling';
|
|
23
23
|
import { ThyTableColumnSkeletonType } from './enums';
|
|
24
24
|
import * as i0 from "@angular/core";
|
|
@@ -54,7 +54,7 @@ const _MixinBase = mixinUnsubscribe(MixinBase);
|
|
|
54
54
|
* @name thy-table
|
|
55
55
|
* @order 10
|
|
56
56
|
*/
|
|
57
|
-
export class
|
|
57
|
+
export class ThyTable extends _MixinBase {
|
|
58
58
|
get tableScrollElement() {
|
|
59
59
|
return this.elementRef.nativeElement.getElementsByClassName(css.tableBody)[0];
|
|
60
60
|
}
|
|
@@ -797,92 +797,92 @@ export class ThyTableComponent extends _MixinBase {
|
|
|
797
797
|
super.ngOnDestroy();
|
|
798
798
|
this._destroyInvalidAttribute();
|
|
799
799
|
}
|
|
800
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type:
|
|
801
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.2", type:
|
|
800
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: ThyTable, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i1.ViewportRuler }, { token: i2.UpdateHostClassService }, { token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
801
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.2", type: ThyTable, isStandalone: true, selector: "thy-table", inputs: { thyMode: "thyMode", thyGroupBy: "thyGroupBy", thyRowKey: "thyRowKey", thyGroups: "thyGroups", thyModel: "thyModel", thyTheme: "thyTheme", thySize: "thySize", thyMinWidth: "thyMinWidth", thyLayoutFixed: "thyLayoutFixed", thyHeaderFixed: "thyHeaderFixed", thyHeight: "thyHeight", thyClassName: "thyClassName", thyRowClassName: "thyRowClassName", thyLoadingDone: "thyLoadingDone", thyLoadingText: "thyLoadingText", thyEmptyOptions: "thyEmptyOptions", thyDraggable: "thyDraggable", thyPageIndex: "thyPageIndex", thyPageSize: "thyPageSize", thyPageTotal: "thyPageTotal", thyWholeRowSelect: "thyWholeRowSelect", thyHeadless: "thyHeadless", thyShowHeader: "thyShowHeader", showTotal: ["thyShowTotal", "showTotal"], showSizeChanger: ["thyShowSizeChanger", "showSizeChanger"], pageSizeOptions: ["thyPageSizeOptions", "pageSizeOptions"], thyIndent: "thyIndent", thyChildrenKey: "thyChildrenKey", thyHoverDisplayOperation: "thyHoverDisplayOperation", thyDragDisabledPredicate: "thyDragDisabledPredicate", thyColumnSkeletonTypes: "thyColumnSkeletonTypes" }, outputs: { thyOnSwitchChange: "thyOnSwitchChange", thyOnPageChange: "thyOnPageChange", thyOnPageIndexChange: "thyOnPageIndexChange", thyOnPageSizeChange: "thyOnPageSizeChange", thyOnMultiSelectChange: "thyOnMultiSelectChange", thyOnRadioSelectChange: "thyOnRadioSelectChange", thyOnDraggableChange: "thyOnDraggableChange", thyOnRowClick: "thyOnRowClick", thySortChange: "thySortChange", thyOnRowContextMenu: "thyOnRowContextMenu" }, host: { properties: { "class.thy-table-bordered": "theme === 'bordered'", "class.thy-table-boxed": "theme === 'boxed'", "class.thy-table-fixed-header": "thyHeaderFixed", "style.height": "this.thyHeight", "class.thy-table-hover-display-operation": "this.thyHoverDisplayOperation" }, classAttribute: "thy-table" }, providers: [
|
|
802
802
|
{
|
|
803
803
|
provide: THY_TABLE_COLUMN_PARENT_COMPONENT,
|
|
804
|
-
useExisting:
|
|
804
|
+
useExisting: ThyTable
|
|
805
805
|
},
|
|
806
806
|
UpdateHostClassService
|
|
807
|
-
], queries: [{ propertyName: "emptyTemplate", first: true, predicate: ["empty"], descendants: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "listOfColumnComponents", predicate: ThyTableColumnComponent }], viewQueries: [{ propertyName: "tableElementRef", first: true, predicate: ["table"], descendants: true, static: true }, { propertyName: "rows", predicate: ["rows"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"thy-table-body\"\n cdkScrollable\n [ngClass]=\"{ 'thy-table-fixed': hasFixed, 'thy-table-bordered-theme': theme === 'bordered' && hasFixed }\">\n <table\n #table\n class=\"table\"\n [ngClass]=\"[className]\"\n [class.table-fixed]=\"thyLayoutFixed\"\n [class.table-draggable]=\"draggable\"\n [class.table-group]=\"mode === 'group'\"\n [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns\" [width]=\"column.width\" [style.minWidth]=\"hasFixed ? column.width : column.minWidth\" />\n </colgroup>\n\n <thead *ngIf=\"!thyHeadless\">\n <tr>\n <th\n *ngFor=\"let column of columns\"\n [ngClass]=\"column.headerClassName\"\n [class.thy-table-column-sortable]=\"column.sortable\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n (click)=\"onColumnHeaderClick($event, column)\">\n <ng-container *ngIf=\"!column.headerTemplateRef\">\n <span>{{ column.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"column.headerTemplateRef\">\n <ng-template [ngTemplateOutlet]=\"column.headerTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.sortable\">\n <thy-icon [ngClass]=\"['thy-table-column-sortable-icon', 'px-1', column.sortDirection]\" thyIconName=\"sort-vertical-tt\">\n </thy-icon>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"loadingDone\"\n thyDragDrop\n cdkDropList\n [cdkDropListDisabled]=\"!draggable\"\n [cdkDropListSortPredicate]=\"dropListEnterPredicate\"\n (cdkDropListDropped)=\"onDragDropped($event)\">\n <!-- group -->\n <ng-container *ngIf=\"mode === 'group'\">\n <ng-container *ngFor=\"let group of groups\">\n <tr\n class=\"thy-table-group\"\n (click)=\"expandGroup(group)\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"group\"\n [cdkDragDisabled]=\"group | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragGroupStarted($event)\"\n (cdkDragEnded)=\"onDragGroupEnd($event)\">\n <td [attr.colspan]=\"columns.length\">\n <div class=\"thy-table-group-container\">\n <ng-container *ngIf=\"draggable && !(group | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n <thy-icon class=\"expand-icon\" [thyIconName]=\"group.expand ? 'angle-down' : 'angle-right'\"></thy-icon>\n <ng-container *ngIf=\"groupTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"></ng-template>\n </ng-container>\n </div>\n </td>\n </tr>\n <ng-container *ngIf=\"group.children?.length && group.expand\">\n <ng-container *ngFor=\"let row of group.children; trackBy: trackByFn; let i = index\">\n <ng-template\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- list\u6A21\u5F0F\u4E0B\u6CA1\u6709\u76F4\u63A5\u4F7F\u7528item\u6A21\u677F\uFF0C\u662F\u56E0\u4E3A\u4F7F\u7528\u4E86\u6A21\u677F\u5F71\u54CD\u4E86Angular\u7684\u4F9D\u8D56\u6811\uFF0C\u5BFC\u81F4CdkDragDrop\u6392\u5E8F\u5931\u6548\uFF0C\u76EE\u524D\u8FD9\u6837\u4FEE\u6539\u53EF\u4EE5\u6682\u65F6\u89E3\u51B3\u7EBF\u4E0A\u4E0D\u80FD\u6392\u5E8F\u7684\u95EE\u9898\uFF0CTree\u6A21\u5F0F\u7684\u6392\u5E8F\u6682\u65F6\u4E0D\u652F\u6301 -->\n <ng-container *ngIf=\"mode === 'list'\">\n <tr\n #rows\n *ngFor=\"let row of model; trackBy: trackByFn; let i = index\"\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </tr>\n </ng-container>\n\n <ng-container *ngIf=\"mode === 'tree'\">\n <ng-container *ngFor=\"let row of model; trackBy: trackByFn; let i = index\">\n <ng-template [ngTemplateOutlet]=\"trTemplate\" [ngTemplateOutletContext]=\"{ row: row, index: i, level: 0 }\"></ng-template>\n </ng-container>\n </ng-container>\n\n <ng-template #trTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <tr\n #rows\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: level + 1\n }\"></ng-template>\n </tr>\n\n <ng-container *ngIf=\"mode === 'tree' && isExpanded(row)\">\n <ng-template\n *ngFor=\"let child of row[thyChildrenKey]; trackBy: trackByFn; let j = index\"\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{ row: child, index: j, level: level + 1 }\"></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #tdsTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <td\n *ngFor=\"let column of columns; let j = index\"\n [ngClass]=\"column.className\"\n [class.thy-operation-links]=\"!!column.operational\"\n [class.thy-table-column-secondary]=\"!!column.secondary\"\n [class.thy-table-checkbox-column]=\"column.type === customType.checkbox\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n [ngStyle]=\"mode === 'tree' && column.expand ? tdIndentComputed(level) : null\">\n <ng-container *ngIf=\"j === 0 && draggable && !(row | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n\n <!--template-->\n <ng-container *ngIf=\"isTemplateRef(column.cellTemplateRef)\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.left.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-template [ngTemplateOutlet]=\"column.cellTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </ng-container>\n\n <!--not template-->\n <ng-container *ngIf=\"!isTemplateRef(column.cellTemplateRef)\">\n <!-- default -->\n <ng-container *ngIf=\"column.model && !column.type\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.marginLeft.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-container *ngIf=\"getModelValue(row, column.model) | isValidModelValue; else default\">\n {{ getModelValue(row, column.model) }}\n </ng-container>\n <ng-template #default>\n <div *ngIf=\"column.defaultText\" class=\"text-desc\">\n {{ column.defaultText }}\n </div>\n </ng-template>\n </ng-container>\n\n <!-- index -->\n <ng-container *ngIf=\"column.type === customType.index\">\n {{ i + 1 }}\n </ng-container>\n\n <!-- checkbox -->\n <ng-container *ngIf=\"column.type === customType.checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onCheckboxChange(row, column)\"\n (click)=\"onStopPropagation($event)\"\n [disabled]=\"column.disabled\" />\n </ng-container>\n\n <!-- radio -->\n <ng-container *ngIf=\"column.type === customType.radio\">\n <input\n type=\"radio\"\n [(ngModel)]=\"selectedRadioRow\"\n [value]=\"row\"\n [disabled]=\"column.disabled\"\n (click)=\"onStopPropagation($event)\"\n (change)=\"onRadioSelectChange($event, row)\" />\n </ng-container>\n\n <!-- switch -->\n <ng-container *ngIf=\"column.type === customType.switch\">\n <thy-switch\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onModelChange(row, column)\"\n [disabled]=\"column.disabled\"\n (thyChange)=\"onSwitchChange($event, row, column)\"></thy-switch>\n </ng-container>\n </ng-container>\n </td>\n </ng-template>\n </tbody>\n </table>\n\n <div *ngIf=\"loadingDone && model.length === 0 && groups.length === 0\" class=\"thy-table-empty clear-hover\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n <ng-template #defaultEmpty>\n <thy-empty\n [thyMessage]=\"emptyOptions.message\"\n [thyTranslationKey]=\"emptyOptions.translationKey\"\n [thyTranslationValues]=\"emptyOptions.translationValues\"\n [thyEntityName]=\"emptyOptions.entityName\"\n [thyEntityNameTranslateKey]=\"emptyOptions.entityNameTranslateKey\"\n [thyIconName]=\"emptyOptions.iconName\"\n [thySize]=\"emptyOptions.size\"\n [thyMarginTop]=\"emptyOptions.marginTop\"\n [thyTopAuto]=\"emptyOptions.topAuto\"\n [thyContainer]=\"emptyOptions.container\"></thy-empty>\n </ng-template>\n </div>\n\n <thy-table-skeleton\n *ngIf=\"!loadingDone\"\n [thyRowCount]=\"6\"\n [thyHeadless]=\"true\"\n [thyTheme]=\"theme\"\n [thySize]=\"size\"\n [thyMinWidth]=\"thyMinWidth\"\n [thyColumns]=\"skeletonColumns\">\n </thy-table-skeleton>\n\n <div class=\"thy-table-footer\" *ngIf=\"pagination.total > pagination.size\" [class.thy-table-footer-has-padding]=\"theme === 'default'\">\n <thy-pagination\n [thyPageIndex]=\"pagination.index\"\n [thyTotal]=\"pagination.total\"\n [thyPageSize]=\"pagination.size\"\n [thyPageSizeOptions]=\"pagination.sizeOptions\"\n [thyShowSizeChanger]=\"showSizeChanger\"\n [thyShowTotal]=\"showTotal\"\n (thyPageChanged)=\"onPageChange($event)\"\n (thyPageIndexChange)=\"onPageIndexChange($event)\"\n (thyPageSizeChanged)=\"onPageSizeChange($event)\"></thy-pagination>\n </div>\n</div>\n\n<ng-template>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyDragDropDirective, selector: "[thyDragDrop]" }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: ThyContextMenuDirective, selector: "[thyContextMenu]", outputs: ["thyContextMenu"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThySwitchComponent, selector: "thy-switch", inputs: ["thyType", "thySize", "thyDisabled", "thyLoading"], outputs: ["thyChange"] }, { kind: "component", type: ThyEmptyComponent, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyTableSkeletonComponent, selector: "thy-table-skeleton", inputs: ["thyBorderRadius", "thyRowHeight", "thyAnimated", "thyAnimatedInterval", "thyPrimaryColor", "thySecondaryColor", "thyRowCount", "thyHeadless", "thyTheme", "thySize", "thyMinWidth", "thyColumns"] }, { kind: "component", type: ThyPaginationComponent, selector: "thy-pagination", inputs: ["thyPageIndex", "thyPageSize", "thyTotal", "thyCustomPages", "thyDisabled", "thyShowQuickJumper", "thyShowTotalPageCount", "thySize", "thyMaxCount", "thyMarginalCount", "thyRangeCount", "thyShowSizeChanger", "thyPageSizeOptions", "thyHideOnSinglePage", "thyShowTotal"], outputs: ["thyPageIndexChange", "thyPageChanged", "thyPageSizeChanged"] }, { kind: "pipe", type: TableIsValidModelValuePipe, name: "isValidModelValue" }, { kind: "pipe", type: TableRowDragDisabledPipe, name: "tableRowDragDisabled" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
807
|
+
], queries: [{ propertyName: "emptyTemplate", first: true, predicate: ["empty"], descendants: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "listOfColumnComponents", predicate: ThyTableColumnComponent }], viewQueries: [{ propertyName: "tableElementRef", first: true, predicate: ["table"], descendants: true, static: true }, { propertyName: "rows", predicate: ["rows"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"thy-table-body\"\n cdkScrollable\n [ngClass]=\"{ 'thy-table-fixed': hasFixed, 'thy-table-bordered-theme': theme === 'bordered' && hasFixed }\">\n <table\n #table\n class=\"table\"\n [ngClass]=\"[className]\"\n [class.table-fixed]=\"thyLayoutFixed\"\n [class.table-draggable]=\"draggable\"\n [class.table-group]=\"mode === 'group'\"\n [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns\" [width]=\"column.width\" [style.minWidth]=\"hasFixed ? column.width : column.minWidth\" />\n </colgroup>\n\n <thead *ngIf=\"!thyHeadless\">\n <tr>\n <th\n *ngFor=\"let column of columns\"\n [ngClass]=\"column.headerClassName\"\n [class.thy-table-column-sortable]=\"column.sortable\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n (click)=\"onColumnHeaderClick($event, column)\">\n <ng-container *ngIf=\"!column.headerTemplateRef\">\n <span>{{ column.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"column.headerTemplateRef\">\n <ng-template [ngTemplateOutlet]=\"column.headerTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.sortable\">\n <thy-icon [ngClass]=\"['thy-table-column-sortable-icon', 'px-1', column.sortDirection]\" thyIconName=\"sort-vertical-tt\">\n </thy-icon>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"loadingDone\"\n thyDragDrop\n cdkDropList\n [cdkDropListDisabled]=\"!draggable\"\n [cdkDropListSortPredicate]=\"dropListEnterPredicate\"\n (cdkDropListDropped)=\"onDragDropped($event)\">\n <!-- group -->\n <ng-container *ngIf=\"mode === 'group'\">\n <ng-container *ngFor=\"let group of groups\">\n <tr\n class=\"thy-table-group\"\n (click)=\"expandGroup(group)\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"group\"\n [cdkDragDisabled]=\"group | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragGroupStarted($event)\"\n (cdkDragEnded)=\"onDragGroupEnd($event)\">\n <td [attr.colspan]=\"columns.length\">\n <div class=\"thy-table-group-container\">\n <ng-container *ngIf=\"draggable && !(group | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n <thy-icon class=\"expand-icon\" [thyIconName]=\"group.expand ? 'angle-down' : 'angle-right'\"></thy-icon>\n <ng-container *ngIf=\"groupTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"></ng-template>\n </ng-container>\n </div>\n </td>\n </tr>\n <ng-container *ngIf=\"group.children?.length && group.expand\">\n <ng-container *ngFor=\"let row of group.children; trackBy: trackByFn; let i = index\">\n <ng-template\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- list\u6A21\u5F0F\u4E0B\u6CA1\u6709\u76F4\u63A5\u4F7F\u7528item\u6A21\u677F\uFF0C\u662F\u56E0\u4E3A\u4F7F\u7528\u4E86\u6A21\u677F\u5F71\u54CD\u4E86Angular\u7684\u4F9D\u8D56\u6811\uFF0C\u5BFC\u81F4CdkDragDrop\u6392\u5E8F\u5931\u6548\uFF0C\u76EE\u524D\u8FD9\u6837\u4FEE\u6539\u53EF\u4EE5\u6682\u65F6\u89E3\u51B3\u7EBF\u4E0A\u4E0D\u80FD\u6392\u5E8F\u7684\u95EE\u9898\uFF0CTree\u6A21\u5F0F\u7684\u6392\u5E8F\u6682\u65F6\u4E0D\u652F\u6301 -->\n <ng-container *ngIf=\"mode === 'list'\">\n <tr\n #rows\n *ngFor=\"let row of model; trackBy: trackByFn; let i = index\"\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </tr>\n </ng-container>\n\n <ng-container *ngIf=\"mode === 'tree'\">\n <ng-container *ngFor=\"let row of model; trackBy: trackByFn; let i = index\">\n <ng-template [ngTemplateOutlet]=\"trTemplate\" [ngTemplateOutletContext]=\"{ row: row, index: i, level: 0 }\"></ng-template>\n </ng-container>\n </ng-container>\n\n <ng-template #trTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <tr\n #rows\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: level + 1\n }\"></ng-template>\n </tr>\n\n <ng-container *ngIf=\"mode === 'tree' && isExpanded(row)\">\n <ng-template\n *ngFor=\"let child of row[thyChildrenKey]; trackBy: trackByFn; let j = index\"\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{ row: child, index: j, level: level + 1 }\"></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #tdsTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <td\n *ngFor=\"let column of columns; let j = index\"\n [ngClass]=\"column.className\"\n [class.thy-operation-links]=\"!!column.operational\"\n [class.thy-table-column-secondary]=\"!!column.secondary\"\n [class.thy-table-checkbox-column]=\"column.type === customType.checkbox\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n [ngStyle]=\"mode === 'tree' && column.expand ? tdIndentComputed(level) : null\">\n <ng-container *ngIf=\"j === 0 && draggable && !(row | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n\n <!--template-->\n <ng-container *ngIf=\"isTemplateRef(column.cellTemplateRef)\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.left.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-template [ngTemplateOutlet]=\"column.cellTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </ng-container>\n\n <!--not template-->\n <ng-container *ngIf=\"!isTemplateRef(column.cellTemplateRef)\">\n <!-- default -->\n <ng-container *ngIf=\"column.model && !column.type\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.marginLeft.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-container *ngIf=\"getModelValue(row, column.model) | isValidModelValue; else default\">\n {{ getModelValue(row, column.model) }}\n </ng-container>\n <ng-template #default>\n <div *ngIf=\"column.defaultText\" class=\"text-desc\">\n {{ column.defaultText }}\n </div>\n </ng-template>\n </ng-container>\n\n <!-- index -->\n <ng-container *ngIf=\"column.type === customType.index\">\n {{ i + 1 }}\n </ng-container>\n\n <!-- checkbox -->\n <ng-container *ngIf=\"column.type === customType.checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onCheckboxChange(row, column)\"\n (click)=\"onStopPropagation($event)\"\n [disabled]=\"column.disabled\" />\n </ng-container>\n\n <!-- radio -->\n <ng-container *ngIf=\"column.type === customType.radio\">\n <input\n type=\"radio\"\n [(ngModel)]=\"selectedRadioRow\"\n [value]=\"row\"\n [disabled]=\"column.disabled\"\n (click)=\"onStopPropagation($event)\"\n (change)=\"onRadioSelectChange($event, row)\" />\n </ng-container>\n\n <!-- switch -->\n <ng-container *ngIf=\"column.type === customType.switch\">\n <thy-switch\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onModelChange(row, column)\"\n [disabled]=\"column.disabled\"\n (thyChange)=\"onSwitchChange($event, row, column)\"></thy-switch>\n </ng-container>\n </ng-container>\n </td>\n </ng-template>\n </tbody>\n </table>\n\n <div *ngIf=\"loadingDone && model.length === 0 && groups.length === 0\" class=\"thy-table-empty clear-hover\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n <ng-template #defaultEmpty>\n <thy-empty\n [thyMessage]=\"emptyOptions.message\"\n [thyTranslationKey]=\"emptyOptions.translationKey\"\n [thyTranslationValues]=\"emptyOptions.translationValues\"\n [thyEntityName]=\"emptyOptions.entityName\"\n [thyEntityNameTranslateKey]=\"emptyOptions.entityNameTranslateKey\"\n [thyIconName]=\"emptyOptions.iconName\"\n [thySize]=\"emptyOptions.size\"\n [thyMarginTop]=\"emptyOptions.marginTop\"\n [thyTopAuto]=\"emptyOptions.topAuto\"\n [thyContainer]=\"emptyOptions.container\"></thy-empty>\n </ng-template>\n </div>\n\n <thy-table-skeleton\n *ngIf=\"!loadingDone\"\n [thyRowCount]=\"6\"\n [thyHeadless]=\"true\"\n [thyTheme]=\"theme\"\n [thySize]=\"size\"\n [thyMinWidth]=\"thyMinWidth\"\n [thyColumns]=\"skeletonColumns\">\n </thy-table-skeleton>\n\n <div class=\"thy-table-footer\" *ngIf=\"pagination.total > pagination.size\" [class.thy-table-footer-has-padding]=\"theme === 'default'\">\n <thy-pagination\n [thyPageIndex]=\"pagination.index\"\n [thyTotal]=\"pagination.total\"\n [thyPageSize]=\"pagination.size\"\n [thyPageSizeOptions]=\"pagination.sizeOptions\"\n [thyShowSizeChanger]=\"showSizeChanger\"\n [thyShowTotal]=\"showTotal\"\n (thyPageChanged)=\"onPageChange($event)\"\n (thyPageIndexChange)=\"onPageIndexChange($event)\"\n (thyPageSizeChanged)=\"onPageSizeChange($event)\"></thy-pagination>\n </div>\n</div>\n\n<ng-template>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyDragDropDirective, selector: "[thyDragDrop]" }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: ThyContextMenuDirective, selector: "[thyContextMenu]", outputs: ["thyContextMenu"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThySwitch, selector: "thy-switch", inputs: ["thyType", "thySize", "thyDisabled", "thyLoading"], outputs: ["thyChange"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyTableSkeleton, selector: "thy-table-skeleton", inputs: ["thyBorderRadius", "thyRowHeight", "thyAnimated", "thyAnimatedInterval", "thyPrimaryColor", "thySecondaryColor", "thyRowCount", "thyHeadless", "thyTheme", "thySize", "thyMinWidth", "thyColumns"] }, { kind: "component", type: ThyPagination, selector: "thy-pagination", inputs: ["thyPageIndex", "thyPageSize", "thyTotal", "thyCustomPages", "thyDisabled", "thyShowQuickJumper", "thyShowTotalPageCount", "thySize", "thyMaxCount", "thyMarginalCount", "thyRangeCount", "thyShowSizeChanger", "thyPageSizeOptions", "thyHideOnSinglePage", "thyShowTotal"], outputs: ["thyPageIndexChange", "thyPageChanged", "thyPageSizeChanged"] }, { kind: "pipe", type: TableIsValidModelValuePipe, name: "isValidModelValue" }, { kind: "pipe", type: TableRowDragDisabledPipe, name: "tableRowDragDisabled" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
808
808
|
}
|
|
809
809
|
__decorate([
|
|
810
810
|
InputCssPixel(),
|
|
811
811
|
__metadata("design:type", Object)
|
|
812
|
-
],
|
|
812
|
+
], ThyTable.prototype, "thyMinWidth", void 0);
|
|
813
813
|
__decorate([
|
|
814
814
|
InputBoolean(),
|
|
815
815
|
__metadata("design:type", Boolean)
|
|
816
|
-
],
|
|
816
|
+
], ThyTable.prototype, "thyLayoutFixed", void 0);
|
|
817
817
|
__decorate([
|
|
818
818
|
InputBoolean(),
|
|
819
819
|
__metadata("design:type", Boolean)
|
|
820
|
-
],
|
|
820
|
+
], ThyTable.prototype, "thyHeaderFixed", void 0);
|
|
821
821
|
__decorate([
|
|
822
822
|
InputCssPixel(),
|
|
823
823
|
__metadata("design:type", String)
|
|
824
|
-
],
|
|
824
|
+
], ThyTable.prototype, "thyHeight", void 0);
|
|
825
825
|
__decorate([
|
|
826
826
|
InputBoolean(),
|
|
827
827
|
__metadata("design:type", Boolean),
|
|
828
828
|
__metadata("design:paramtypes", [Boolean])
|
|
829
|
-
],
|
|
829
|
+
], ThyTable.prototype, "thyLoadingDone", null);
|
|
830
830
|
__decorate([
|
|
831
831
|
InputBoolean(),
|
|
832
832
|
__metadata("design:type", Boolean),
|
|
833
833
|
__metadata("design:paramtypes", [Boolean])
|
|
834
|
-
],
|
|
834
|
+
], ThyTable.prototype, "thyDraggable", null);
|
|
835
835
|
__decorate([
|
|
836
836
|
InputNumber(),
|
|
837
837
|
__metadata("design:type", Number),
|
|
838
838
|
__metadata("design:paramtypes", [Number])
|
|
839
|
-
],
|
|
839
|
+
], ThyTable.prototype, "thyPageIndex", null);
|
|
840
840
|
__decorate([
|
|
841
841
|
InputNumber(),
|
|
842
842
|
__metadata("design:type", Number),
|
|
843
843
|
__metadata("design:paramtypes", [Number])
|
|
844
|
-
],
|
|
844
|
+
], ThyTable.prototype, "thyPageSize", null);
|
|
845
845
|
__decorate([
|
|
846
846
|
InputNumber(),
|
|
847
847
|
__metadata("design:type", Number),
|
|
848
848
|
__metadata("design:paramtypes", [Number])
|
|
849
|
-
],
|
|
849
|
+
], ThyTable.prototype, "thyPageTotal", null);
|
|
850
850
|
__decorate([
|
|
851
851
|
InputBoolean(),
|
|
852
852
|
__metadata("design:type", Boolean),
|
|
853
853
|
__metadata("design:paramtypes", [Boolean])
|
|
854
|
-
],
|
|
854
|
+
], ThyTable.prototype, "thyWholeRowSelect", null);
|
|
855
855
|
__decorate([
|
|
856
856
|
InputBoolean(),
|
|
857
857
|
__metadata("design:type", Object)
|
|
858
|
-
],
|
|
858
|
+
], ThyTable.prototype, "thyHeadless", void 0);
|
|
859
859
|
__decorate([
|
|
860
860
|
InputBoolean(),
|
|
861
861
|
__metadata("design:type", Boolean),
|
|
862
862
|
__metadata("design:paramtypes", [Boolean])
|
|
863
|
-
],
|
|
863
|
+
], ThyTable.prototype, "thyShowHeader", null);
|
|
864
864
|
__decorate([
|
|
865
865
|
InputBoolean(),
|
|
866
866
|
__metadata("design:type", Object)
|
|
867
|
-
],
|
|
867
|
+
], ThyTable.prototype, "showTotal", void 0);
|
|
868
868
|
__decorate([
|
|
869
869
|
InputBoolean(),
|
|
870
870
|
__metadata("design:type", Object)
|
|
871
|
-
],
|
|
871
|
+
], ThyTable.prototype, "showSizeChanger", void 0);
|
|
872
872
|
__decorate([
|
|
873
873
|
InputNumber(),
|
|
874
874
|
__metadata("design:type", Object)
|
|
875
|
-
],
|
|
875
|
+
], ThyTable.prototype, "thyIndent", void 0);
|
|
876
876
|
__decorate([
|
|
877
877
|
InputBoolean(),
|
|
878
878
|
__metadata("design:type", Boolean)
|
|
879
|
-
],
|
|
880
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type:
|
|
879
|
+
], ThyTable.prototype, "thyHoverDisplayOperation", void 0);
|
|
880
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: ThyTable, decorators: [{
|
|
881
881
|
type: Component,
|
|
882
882
|
args: [{ selector: 'thy-table', providers: [
|
|
883
883
|
{
|
|
884
884
|
provide: THY_TABLE_COLUMN_PARENT_COMPONENT,
|
|
885
|
-
useExisting:
|
|
885
|
+
useExisting: ThyTable
|
|
886
886
|
},
|
|
887
887
|
UpdateHostClassService
|
|
888
888
|
], encapsulation: ViewEncapsulation.None, host: {
|
|
@@ -896,17 +896,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
896
896
|
NgFor,
|
|
897
897
|
NgIf,
|
|
898
898
|
NgTemplateOutlet,
|
|
899
|
-
|
|
899
|
+
ThyIcon,
|
|
900
900
|
ThyDragDropDirective,
|
|
901
901
|
CdkDropList,
|
|
902
902
|
CdkDrag,
|
|
903
903
|
ThyContextMenuDirective,
|
|
904
904
|
NgStyle,
|
|
905
905
|
FormsModule,
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
906
|
+
ThySwitch,
|
|
907
|
+
ThyEmpty,
|
|
908
|
+
ThyTableSkeleton,
|
|
909
|
+
ThyPagination,
|
|
910
910
|
TableIsValidModelValuePipe,
|
|
911
911
|
TableRowDragDisabledPipe
|
|
912
912
|
], template: "<div\n class=\"thy-table-body\"\n cdkScrollable\n [ngClass]=\"{ 'thy-table-fixed': hasFixed, 'thy-table-bordered-theme': theme === 'bordered' && hasFixed }\">\n <table\n #table\n class=\"table\"\n [ngClass]=\"[className]\"\n [class.table-fixed]=\"thyLayoutFixed\"\n [class.table-draggable]=\"draggable\"\n [class.table-group]=\"mode === 'group'\"\n [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns\" [width]=\"column.width\" [style.minWidth]=\"hasFixed ? column.width : column.minWidth\" />\n </colgroup>\n\n <thead *ngIf=\"!thyHeadless\">\n <tr>\n <th\n *ngFor=\"let column of columns\"\n [ngClass]=\"column.headerClassName\"\n [class.thy-table-column-sortable]=\"column.sortable\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n (click)=\"onColumnHeaderClick($event, column)\">\n <ng-container *ngIf=\"!column.headerTemplateRef\">\n <span>{{ column.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"column.headerTemplateRef\">\n <ng-template [ngTemplateOutlet]=\"column.headerTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.sortable\">\n <thy-icon [ngClass]=\"['thy-table-column-sortable-icon', 'px-1', column.sortDirection]\" thyIconName=\"sort-vertical-tt\">\n </thy-icon>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"loadingDone\"\n thyDragDrop\n cdkDropList\n [cdkDropListDisabled]=\"!draggable\"\n [cdkDropListSortPredicate]=\"dropListEnterPredicate\"\n (cdkDropListDropped)=\"onDragDropped($event)\">\n <!-- group -->\n <ng-container *ngIf=\"mode === 'group'\">\n <ng-container *ngFor=\"let group of groups\">\n <tr\n class=\"thy-table-group\"\n (click)=\"expandGroup(group)\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"group\"\n [cdkDragDisabled]=\"group | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragGroupStarted($event)\"\n (cdkDragEnded)=\"onDragGroupEnd($event)\">\n <td [attr.colspan]=\"columns.length\">\n <div class=\"thy-table-group-container\">\n <ng-container *ngIf=\"draggable && !(group | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n <thy-icon class=\"expand-icon\" [thyIconName]=\"group.expand ? 'angle-down' : 'angle-right'\"></thy-icon>\n <ng-container *ngIf=\"groupTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"></ng-template>\n </ng-container>\n </div>\n </td>\n </tr>\n <ng-container *ngIf=\"group.children?.length && group.expand\">\n <ng-container *ngFor=\"let row of group.children; trackBy: trackByFn; let i = index\">\n <ng-template\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- list\u6A21\u5F0F\u4E0B\u6CA1\u6709\u76F4\u63A5\u4F7F\u7528item\u6A21\u677F\uFF0C\u662F\u56E0\u4E3A\u4F7F\u7528\u4E86\u6A21\u677F\u5F71\u54CD\u4E86Angular\u7684\u4F9D\u8D56\u6811\uFF0C\u5BFC\u81F4CdkDragDrop\u6392\u5E8F\u5931\u6548\uFF0C\u76EE\u524D\u8FD9\u6837\u4FEE\u6539\u53EF\u4EE5\u6682\u65F6\u89E3\u51B3\u7EBF\u4E0A\u4E0D\u80FD\u6392\u5E8F\u7684\u95EE\u9898\uFF0CTree\u6A21\u5F0F\u7684\u6392\u5E8F\u6682\u65F6\u4E0D\u652F\u6301 -->\n <ng-container *ngIf=\"mode === 'list'\">\n <tr\n #rows\n *ngFor=\"let row of model; trackBy: trackByFn; let i = index\"\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </tr>\n </ng-container>\n\n <ng-container *ngIf=\"mode === 'tree'\">\n <ng-container *ngFor=\"let row of model; trackBy: trackByFn; let i = index\">\n <ng-template [ngTemplateOutlet]=\"trTemplate\" [ngTemplateOutletContext]=\"{ row: row, index: i, level: 0 }\"></ng-template>\n </ng-container>\n </ng-container>\n\n <ng-template #trTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <tr\n #rows\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: level + 1\n }\"></ng-template>\n </tr>\n\n <ng-container *ngIf=\"mode === 'tree' && isExpanded(row)\">\n <ng-template\n *ngFor=\"let child of row[thyChildrenKey]; trackBy: trackByFn; let j = index\"\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{ row: child, index: j, level: level + 1 }\"></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #tdsTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <td\n *ngFor=\"let column of columns; let j = index\"\n [ngClass]=\"column.className\"\n [class.thy-operation-links]=\"!!column.operational\"\n [class.thy-table-column-secondary]=\"!!column.secondary\"\n [class.thy-table-checkbox-column]=\"column.type === customType.checkbox\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n [ngStyle]=\"mode === 'tree' && column.expand ? tdIndentComputed(level) : null\">\n <ng-container *ngIf=\"j === 0 && draggable && !(row | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n\n <!--template-->\n <ng-container *ngIf=\"isTemplateRef(column.cellTemplateRef)\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.left.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-template [ngTemplateOutlet]=\"column.cellTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </ng-container>\n\n <!--not template-->\n <ng-container *ngIf=\"!isTemplateRef(column.cellTemplateRef)\">\n <!-- default -->\n <ng-container *ngIf=\"column.model && !column.type\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.marginLeft.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-container *ngIf=\"getModelValue(row, column.model) | isValidModelValue; else default\">\n {{ getModelValue(row, column.model) }}\n </ng-container>\n <ng-template #default>\n <div *ngIf=\"column.defaultText\" class=\"text-desc\">\n {{ column.defaultText }}\n </div>\n </ng-template>\n </ng-container>\n\n <!-- index -->\n <ng-container *ngIf=\"column.type === customType.index\">\n {{ i + 1 }}\n </ng-container>\n\n <!-- checkbox -->\n <ng-container *ngIf=\"column.type === customType.checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onCheckboxChange(row, column)\"\n (click)=\"onStopPropagation($event)\"\n [disabled]=\"column.disabled\" />\n </ng-container>\n\n <!-- radio -->\n <ng-container *ngIf=\"column.type === customType.radio\">\n <input\n type=\"radio\"\n [(ngModel)]=\"selectedRadioRow\"\n [value]=\"row\"\n [disabled]=\"column.disabled\"\n (click)=\"onStopPropagation($event)\"\n (change)=\"onRadioSelectChange($event, row)\" />\n </ng-container>\n\n <!-- switch -->\n <ng-container *ngIf=\"column.type === customType.switch\">\n <thy-switch\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onModelChange(row, column)\"\n [disabled]=\"column.disabled\"\n (thyChange)=\"onSwitchChange($event, row, column)\"></thy-switch>\n </ng-container>\n </ng-container>\n </td>\n </ng-template>\n </tbody>\n </table>\n\n <div *ngIf=\"loadingDone && model.length === 0 && groups.length === 0\" class=\"thy-table-empty clear-hover\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n <ng-template #defaultEmpty>\n <thy-empty\n [thyMessage]=\"emptyOptions.message\"\n [thyTranslationKey]=\"emptyOptions.translationKey\"\n [thyTranslationValues]=\"emptyOptions.translationValues\"\n [thyEntityName]=\"emptyOptions.entityName\"\n [thyEntityNameTranslateKey]=\"emptyOptions.entityNameTranslateKey\"\n [thyIconName]=\"emptyOptions.iconName\"\n [thySize]=\"emptyOptions.size\"\n [thyMarginTop]=\"emptyOptions.marginTop\"\n [thyTopAuto]=\"emptyOptions.topAuto\"\n [thyContainer]=\"emptyOptions.container\"></thy-empty>\n </ng-template>\n </div>\n\n <thy-table-skeleton\n *ngIf=\"!loadingDone\"\n [thyRowCount]=\"6\"\n [thyHeadless]=\"true\"\n [thyTheme]=\"theme\"\n [thySize]=\"size\"\n [thyMinWidth]=\"thyMinWidth\"\n [thyColumns]=\"skeletonColumns\">\n </thy-table-skeleton>\n\n <div class=\"thy-table-footer\" *ngIf=\"pagination.total > pagination.size\" [class.thy-table-footer-has-padding]=\"theme === 'default'\">\n <thy-pagination\n [thyPageIndex]=\"pagination.index\"\n [thyTotal]=\"pagination.total\"\n [thyPageSize]=\"pagination.size\"\n [thyPageSizeOptions]=\"pagination.sizeOptions\"\n [thyShowSizeChanger]=\"showSizeChanger\"\n [thyShowTotal]=\"showTotal\"\n (thyPageChanged)=\"onPageChange($event)\"\n (thyPageIndexChange)=\"onPageIndexChange($event)\"\n (thyPageSizeChanged)=\"onPageSizeChange($event)\"></thy-pagination>\n </div>\n</div>\n\n<ng-template>\n <ng-content></ng-content>\n</ng-template>\n" }]
|
|
@@ -1023,4 +1023,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
1023
1023
|
type: ContentChildren,
|
|
1024
1024
|
args: [ThyTableColumnComponent]
|
|
1025
1025
|
}] } });
|
|
1026
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsc0JBQXNCLEVBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFl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RCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR25DLHNCQUFzQjtzQkFEekIsZUFBZTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbnN0cnVjdG9yLFxuICAgIElucHV0Qm9vbGVhbixcbiAgICBJbnB1dENzc1BpeGVsLFxuICAgIElucHV0TnVtYmVyLFxuICAgIE1peGluQmFzZSxcbiAgICBtaXhpblVuc3Vic2NyaWJlLFxuICAgIFRoeVVuc3Vic2NyaWJlLFxuICAgIFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2Vcbn0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIFNhZmVBbnkgfSBmcm9tICduZ3gtdGV0aHlzL3R5cGVzJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgZ2V0LCBoZWxwZXJzLCBpc1N0cmluZywga2V5QnksIHNldCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBFTVBUWSwgZnJvbUV2ZW50LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZUNoYW5nZXMsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCwgVEhZX1RBQkxFX0NPTFVNTl9QQVJFTlRfQ09NUE9ORU5ULCBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIFBhZ2VDaGFuZ2VkRXZlbnQsXG4gICAgVGh5TXVsdGlTZWxlY3RFdmVudCxcbiAgICBUaHlQYWdlLFxuICAgIFRoeVJhZGlvU2VsZWN0RXZlbnQsXG4gICAgVGh5U3dpdGNoRXZlbnQsXG4gICAgVGh5VGFibGVTa2VsZXRvbkNvbHVtbixcbiAgICBUaHlUYWJsZURyYWdnYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlRW1wdHlPcHRpb25zLFxuICAgIFRoeVRhYmxlRXZlbnQsXG4gICAgVGh5VGFibGVSb3dFdmVudCxcbiAgICBUaHlUYWJsZVNvcnREaXJlY3Rpb24sXG4gICAgVGh5VGFibGVTb3J0RXZlbnRcbn0gZnJvbSAnLi90YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVSb3dEcmFnRGlzYWJsZWRQaXBlIH0gZnJvbSAnLi9waXBlcy9kcmFnLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL3RhYmxlLnBpcGUnO1xuaW1wb3J0IHsgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUaHlUYWJsZVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5RW1wdHlDb21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeVN3aXRjaENvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvc3dpdGNoJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5SWNvbkNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnIHwgJ2JvcmRlcmVkJyB8ICdib3hlZCc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlTW9kZSA9ICdsaXN0JyB8ICdncm91cCcgfCAndHJlZSc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlU2l6ZSA9ICdtZCcgfCAnc20nIHwgJ3hzJyB8ICdsZycgfCAneGxnJyB8ICdkZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGh5Rml4ZWREaXJlY3Rpb24ge1xuICAgIGxlZnQgPSAnbGVmdCcsXG4gICAgcmlnaHQgPSAncmlnaHQnXG59XG5cbmludGVyZmFjZSBUaHlUYWJsZUdyb3VwPFQgPSB1bmtub3duPiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgZXhwYW5kPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IG9iamVjdFtdO1xuICAgIG9yaWdpbj86IFQ7XG59XG5cbmNvbnN0IHRhYmxlVGhlbWVNYXAgPSB7XG4gICAgZGVmYXVsdDogJ3RhYmxlLWRlZmF1bHQnLFxuICAgIGJvcmRlcmVkOiAndGFibGUtYm9yZGVyZWQnLFxuICAgIGJveGVkOiAndGFibGUtYm94ZWQnXG59O1xuXG5jb25zdCBjdXN0b21UeXBlID0ge1xuICAgIGluZGV4OiAnaW5kZXgnLFxuICAgIGNoZWNrYm94OiAnY2hlY2tib3gnLFxuICAgIHJhZGlvOiAncmFkaW8nLFxuICAgIHN3aXRjaDogJ3N3aXRjaCdcbn07XG5cbmNvbnN0IGNzcyA9IHtcbiAgICB0YWJsZUJvZHk6ICd0aHktdGFibGUtYm9keScsXG4gICAgdGFibGVTY3JvbGxMZWZ0OiAndGh5LXRhYmxlLXNjcm9sbC1sZWZ0JyxcbiAgICB0YWJsZVNjcm9sbFJpZ2h0OiAndGh5LXRhYmxlLXNjcm9sbC1yaWdodCcsXG4gICAgdGFibGVTY3JvbGxNaWRkbGU6ICd0aHktdGFibGUtc2Nyb2xsLW1pZGRsZSdcbn07XG5cbmNvbnN0IHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyA9IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG5jb25zdCBfTWl4aW5CYXNlOiBDb25zdHJ1Y3RvcjxUaHlVbnN1YnNjcmliZT4gJiB0eXBlb2YgTWl4aW5CYXNlID0gbWl4aW5VbnN1YnNjcmliZShNaXhpbkJhc2UpO1xuXG4vKipcbiAqIOihqOagvOe7hOS7tlxuICogQG5hbWUgdGh5LXRhYmxlXG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUaHlUYWJsZUNvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktdGFibGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3JkZXJlZF0nOiBgdGhlbWUgPT09ICdib3JkZXJlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3hlZF0nOiBgdGhlbWUgPT09ICdib3hlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1maXhlZC1oZWFkZXJdJzogJ3RoeUhlYWRlckZpeGVkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUaHlJY29uQ29tcG9uZW50LFxuICAgICAgICBUaHlEcmFnRHJvcERpcmVjdGl2ZSxcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVGh5U3dpdGNoQ29tcG9uZW50LFxuICAgICAgICBUaHlFbXB0eUNvbXBvbmVudCxcbiAgICAgICAgVGh5VGFibGVTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgVGh5UGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUsXG4gICAgICAgIFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VGFibGVDb21wb25lbnQgZXh0ZW5kcyBfTWl4aW5CYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSVRoeVRhYmxlQ29sdW1uUGFyZW50Q29tcG9uZW50IHtcbiAgICBwdWJsaWMgY3VzdG9tVHlwZSA9IGN1c3RvbVR5cGU7XG5cbiAgICBwdWJsaWMgbW9kZWw6IG9iamVjdFtdID0gW107XG5cbiAgICBwdWJsaWMgZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10gPSBbXTtcblxuICAgIHB1YmxpYyByb3dLZXkgPSAnX2lkJztcblxuICAgIHB1YmxpYyBncm91cEJ5OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgbW9kZTogVGh5VGFibGVNb2RlID0gJ2xpc3QnO1xuXG4gICAgcHVibGljIHRoZW1lOiBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnO1xuXG4gICAgcHVibGljIGNsYXNzTmFtZSA9ICcnO1xuXG4gICAgcHVibGljIHNpemU6IFRoeVRhYmxlU2l6ZSA9ICdtZCc7XG5cbiAgICBwdWJsaWMgcm93Q2xhc3NOYW1lOiBzdHJpbmcgfCBGdW5jdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nRG9uZSA9IHRydWU7XG5cbiAgICBwdWJsaWMgbG9hZGluZ1RleHQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBlbXB0eU9wdGlvbnM6IFRoeVRhYmxlRW1wdHlPcHRpb25zID0ge307XG5cbiAgICBwdWJsaWMgZHJhZ2dhYmxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRSYWRpb1JvdzogU2FmZUFueSA9IG51bGw7XG5cbiAgICBwdWJsaWMgcGFnaW5hdGlvbjogVGh5UGFnZSA9IHsgaW5kZXg6IDEsIHNpemU6IDIwLCB0b3RhbDogMCwgc2l6ZU9wdGlvbnM6IFsyMCwgNTAsIDEwMF0gfTtcblxuICAgIHB1YmxpYyB0cmFja0J5Rm46IFNhZmVBbnk7XG5cbiAgICBwdWJsaWMgd2hvbGVSb3dTZWxlY3QgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBmaXhlZERpcmVjdGlvbiA9IFRoeUZpeGVkRGlyZWN0aW9uO1xuXG4gICAgcHVibGljIGhhc0ZpeGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29sdW1uczogVGh5VGFibGVDb2x1bW5Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZGlmZjogSXRlcmFibGVEaWZmZXI8U2FmZUFueT47XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9vbGRUaHlDbGFzc05hbWUgPSAnJztcblxuICAgIHByaXZhdGUgc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTGVmdDtcblxuICAgIHByaXZhdGUgZ2V0IHRhYmxlU2Nyb2xsRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzcy50YWJsZUJvZHkpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHNjcm9sbCQoKSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCA/IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcpIDogRU1QVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaVsOaNruS4uuepuuaXtuWxleekuueahOaooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPFNhZmVBbnk+O1xuXG4gICAgQFZpZXdDaGlsZHJlbigncm93cycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSByb3dzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85bGV56S65pa55byP77yM5YiX6KGoL+WIhue7hC/moJFcbiAgICAgKiBAdHlwZSBsaXN0IHwgZ3JvdXAgfCB0cmVlXG4gICAgICogQGRlZmF1bHQgbGlzdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGUodmFsdWU6IFRoeVRhYmxlTW9kZSkge1xuICAgICAgICB0aGlzLm1vZGUgPSB2YWx1ZSB8fCB0aGlzLm1vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZeeahOWAvOS4uiBgZ3JvdXBgIOaXtuWIhue7hOeahCBLZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlHcm91cEJ5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5ncm91cEJ5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6KGM5pWw5o2u55qE5ZSv5LiA5qCH6K+G5bGe5oCn5ZCNXG4gICAgICogQGRlZmF1bHQgX2lkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Um93S2V5KHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMucm93S2V5ID0gdmFsdWUgfHwgdGhpcy5yb3dLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiG57uE5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBzKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRHcm91cHModmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pWw5o2u5rqQXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TW9kZWwodmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlIHx8IFtdO1xuICAgICAgICB0aGlzLl9kaWZmID0gdGhpcy5fZGlmZmVycy5maW5kKHRoaXMubW9kZWwpLmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YU1vZGVsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTmmL7npLrpo47moLzvvIxgYm9yZGVyZWRgIOaXtuWktOmDqOacieiDjOaZr+iJsuS4lOWIhuWJsue6v+WMuuWIq+aYjuaYvlxuICAgICAqIEB0eXBlIGRlZmF1bHQgfCBib3JkZXJlZCB8IGJveGVkXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVRoZW1lKHZhbHVlOiBUaHlUYWJsZVRoZW1lKSB7XG4gICAgICAgIHRoaXMudGhlbWUgPSB2YWx1ZSB8fCB0aGlzLnRoZW1lO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOWkp+Wwj1xuICAgICAqIEB0eXBlIHhzIHwgc20gfCBtZCB8IGxnIHwgeGxnIHwgZGVmYXVsdFxuICAgICAqIEBkZWZhdWx0IG1kXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZSh2YWx1ZTogVGh5VGFibGVTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHZhbHVlIHx8IHRoaXMuc2l6ZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzmnIDlsI/lrr3luqbvvIzkuIDoiKzmmK/pgILnlKjkuo7orr7nva7liJflrr3kuLrnmb7liIbkuYvmiJZhdXRv5pe26ZmQ5Yi26KGo5qC85pyA5bCP5a695bqmJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeU1pbldpZHRoOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuLogZml4ZWQg5biD5bGA6KGo5qC877yM6K6+572uIGZpeGVkIOWQju+8jOWIl+WuveWwhuS4peagvOaMieeFp+iuvue9ruWuveW6puWxleekuu+8jOWIl+WuveWwhuS4jeS8muagueaNruihqOagvOWGheWuueiHquWKqOiwg+aVtFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUxheW91dEZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm6KGo5aS05Zu65a6a77yM6Iul6K6+572u5Li6IHRydWXvvIwg6ZyA6KaB5ZCM5q2l6K6+572uIHRoeUhlaWdodFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUhlYWRlckZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE6auY5bqmXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Q3NzUGl4ZWwoKVxuICAgIHRoeUhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC855qE5qC35byPXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGEgPT4gYS50cmltKCkpO1xuICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gbGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSB0aGlzLl9vbGRUaHlDbGFzc05hbWUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbGRUaHlDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBsaXN0LmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzooYznmoTmoLflvI/vvIzkvKDlhaXlh73mlbDvvIzmlK/mjIEgcm9344CBaW5kZXhcbiAgICAgKiBAdHlwZSBzdHJpbmcgfCAocm93LCBpbmRleCkgPT4gc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Um93Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcgfCBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLnJvd0NsYXNzTmFtZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWKoOi9veeKtuaAgVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlMb2FkaW5nRG9uZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvYWRpbmdEb25lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Yqg6L295pe25pi+56S655qE5paH5pys77yM5bey5bqf5byDXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlMb2FkaW5nVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDphY3nva7nqbrnirbmgIHnu4Tku7ZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eU9wdGlvbnModmFsdWU6IFRoeVRhYmxlRW1wdHlPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZW1wdHlPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byA5ZCv6KGM5ouW5ou9XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlEcmFnZ2FibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAoKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkgJiYgdGhpcy5kcmFnZ2FibGUgJiYgdGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJlZSBtb2RlIHNvcnRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN6aG156CBXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0TnVtYmVyKClcbiAgICBzZXQgdGh5UGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLmluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6aG15pi+56S65pWw6YePXG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mgLvpobXmlbBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VUb3RhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi50b3RhbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAieS4reW9k+WJjeihjOaYr+WQpuiHquWKqOmAieS4rSBDaGVja2JveO+8jOS4jeW8gOWQr+aXtuWPquacieeCueWHuyBDaGVja2JveCDliJfml7bmiY3kvJrop6blj5HpgInkuK1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeVdob2xlUm93U2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyB0YWJsZS1ob3Zlcic7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aG9sZVJvd1NlbGVjdCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuihqOagvOWktFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeUhlYWRsZXNzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrooajmoLzlpLTvvIzlt7Llup/lvIPvvIzor7fkvb/nlKggdGh5SGVhZGxlc3NcbiAgICAgKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIHRoeUhlYWRsZXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5U2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRoeUhlYWRsZXNzID0gIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuW3puS+pyBUb3RhbFxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5U2hvd1RvdGFsJykgQElucHV0Qm9vbGVhbigpIHNob3dUb3RhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66LCD5pW05q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGGXG4gICAgICovXG4gICAgQElucHV0KCd0aHlTaG93U2l6ZUNoYW5nZXInKSBASW5wdXRCb29sZWFuKCkgc2hvd1NpemVDaGFuZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmr4/pobXmmL7npLrmnaHmlbDkuIvmi4nmoYblj6/pgInpoblcbiAgICAgKiBAdHlwZSBudW1iZXJbXVxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5UGFnZVNpemVPcHRpb25zJylcbiAgICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2RlIOS4uiB0cmVlIOaXtu+8jOiuvue9riBUcmVlIOagkeeKtuaVsOaNruWxleekuuaXtueahOe8qei/m1xuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHRoeUluZGVudCA9IDIwO1xuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lr7nosaHkuK3nmoTlrZDoioLngrkgS2V5XG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nO1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCvIEhvdmVyIOWQjuaYvuekuuaTjeS9nO+8jOm7mOiupOS4jeaYvuekuuaTjeS9nOWMuuWGheWuue+8jOm8oOaghyBIb3ZlciDml7blsZXnpLpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRhYmxlLWhvdmVyLWRpc3BsYXktb3BlcmF0aW9uJylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHRoeUhvdmVyRGlzcGxheU9wZXJhdGlvbjogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZTogKGl0ZW06IFNhZmVBbnkpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWIl+eahOmqqOaetuexu+Wei1xuICAgICAqIEB0eXBlIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlDb2x1bW5Ta2VsZXRvblR5cGVzOiBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZVtdID0gW1xuICAgICAgICBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS50aXRsZSxcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUubWVtYmVyLFxuICAgICAgICBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5kZWZhdWx0XG4gICAgXTtcblxuICAgIC8qKlxuICAgICAqIOWIh+aNoue7hOS7tuWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblN3aXRjaENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5U3dpdGNoRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliIbpobXlvZPliY3pobXmlLnlj5jlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGh5T25QYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIOWkmumAieWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbk11bHRpU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5TXVsdGlTZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDljZXpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25SYWRpb1NlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVJhZGlvU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5ouW5Yqo5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uRHJhZ2dhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVEcmFnZ2FibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzooYzngrnlh7vop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Sb3dDbGljazogRXZlbnRFbWl0dGVyPFRoeVRhYmxlUm93RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5YiX5o6S5bqP5L+u5pS55LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeVNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlU29ydEV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICAgIHNldCBsaXN0T2ZDb2x1bW5Db21wb25lbnRzKGNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxUaHlUYWJsZUNvbHVtbkNvbXBvbmVudD4pIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbXBvbmVudHMudG9BcnJheSgpO1xuICAgICAgICAgICAgdGhpcy5oYXNGaXhlZCA9ICEhdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZml4ZWQgPT09IHRoaXMuZml4ZWREaXJlY3Rpb24ubGVmdCB8fCBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU2tlbGV0b25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5pWw5o2u55qE5oqY5Y+g5bGV5byA54q25oCBXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcDogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgcHVibGljIGV4cGFuZFN0YXR1c01hcE9mR3JvdXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHByaXZhdGUgZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWc6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIGRyYWdQcmV2aWV3Q2xhc3MgPSAndGh5LXRhYmxlLWRyYWctcHJldmlldyc7XG5cbiAgICBwdWJsaWMgc2tlbGV0b25Db2x1bW5zOiBUaHlUYWJsZVNrZWxldG9uQ29sdW1uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gICAgICAgIHByaXZhdGUgdXBkYXRlSG9zdENsYXNzU2VydmljZTogVXBkYXRlSG9zdENsYXNzU2VydmljZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogU2FmZUFueSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2JpbmRUcmFja0ZuKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zLnNvbWUoaXRlbSA9PiBpdGVtLmV4cGFuZCA9PT0gdHJ1ZSkgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1swXS5leHBhbmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5GaXhlZFBvc2l0aW9ucygpIHtcbiAgICAgICAgY29uc3QgbGVmdEZpeGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLmZpeGVkID09PSBUaHlGaXhlZERpcmVjdGlvbi5sZWZ0KTtcbiAgICAgICAgbGVmdEZpeGVkQ29sdW1ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBsZWZ0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLmxlZnQgPSBwcmV2aW91cyA/IHByZXZpb3VzLmxlZnQgKyBwYXJzZUludChwcmV2aW91cy53aWR0aC50b1N0cmluZygpLCAxMCkgOiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmlnaHRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ucmlnaHQpLnJldmVyc2UoKTtcbiAgICAgICAgcmlnaHRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gcmlnaHRGaXhlZENvbHVtbnNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIGl0ZW0ucmlnaHQgPSBwcmV2aW91cyA/IHByZXZpb3VzLnJpZ2h0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURhdGFNb2RlbCgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNlbGVjdGlvbnMocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3Rpb25zLmluY2x1ZGVzKHJvd1t0aGlzLnJvd0tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3c6IG9iamVjdCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSBnZXQocm93LCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsQ3VzdG9tTW9kZWxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlczogSXRlcmFibGVDaGFuZ2VzPFNhZmVBbnk+KSB7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2hBZGRlZEl0ZW0oKHJlY29yZDogSXRlcmFibGVDaGFuZ2VSZWNvcmQ8U2FmZUFueT4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VzdG9tTW9kZWxWYWx1ZShyZWNvcmQuaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2JpbmRUcmFja0ZuKCkge1xuICAgICAgICB0aGlzLnRyYWNrQnlGbiA9IGZ1bmN0aW9uICh0aGlzOiBTYWZlQW55LCBpbmRleDogbnVtYmVyLCByb3c6IFNhZmVBbnkpOiBTYWZlQW55IHtcbiAgICAgICAgICAgIHJldHVybiByb3cgJiYgdGhpcy5yb3dLZXkgPyByb3dbdGhpcy5yb3dLZXldIDogaW5kZXg7XG4gICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZXN0cm95SW52YWxpZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdbJCRjb2x1bW5dJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0Q2xhc3MoZmlyc3QgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIWZpcnN0ICYmICF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2l6ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGB0YWJsZS0ke3RoaXMuc2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVUaGVtZU1hcFt0aGlzLnRoZW1lXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLnVwZGF0ZUNsYXNzKGNsYXNzTmFtZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVDb2x1bW5TZWxlY3Rpb25zKGtleTogc3RyaW5nLCBzZWxlY3Rpb25zOiBTYWZlQW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGtleSk7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbnMocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUZW1wbGF0ZVJlZihyZWY6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHJlZiBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb2RlbFZhbHVlKHJvdzogU2FmZUFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBnZXQocm93LCBwYXRoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyUm93Q2xhc3NOYW1lKHJvdzogU2FmZUFueSwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMucm93Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5yb3dDbGFzc05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzc05hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucm93Q2xhc3NOYW1lIGFzIEZ1bmN0aW9uKShyb3csIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLm1vZGVsKSB7XG4gICAgICAgICAgICBzZXQocm93LCBjb2x1bW4ubW9kZWwsIHJvd1tjb2x1bW4ua2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLndob2xlUm93U2VsZWN0KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VkRXZlbnQpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZUluZGV4Q2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VJbmRleENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlU2l6ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGVja2JveENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgdGhpcy5vbk11bHRpU2VsZWN0Q2hhbmdlKG51bGwsIHJvdywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25NdWx0aVNlbGVjdENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5tb2RlbC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVtjb2x1bW4ua2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG11bHRpU2VsZWN0RXZlbnQ6IFRoeU11bHRpU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPbk11bHRpU2VsZWN0Q2hhbmdlLmVtaXQobXVsdGlTZWxlY3RFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmFkaW9TZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgcmFkaW9TZWxlY3RFdmVudDogVGh5UmFkaW9TZWxlY3RFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25SYWRpb1NlbGVjdENoYW5nZS5lbWl0KHJhZGlvU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN3aXRjaENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSwgY29sdW1uOiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHN3aXRjaEV2ZW50OiBUaHlTd2l0Y2hFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgcmVmcmVzaDogKHZhbHVlOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCByb3c7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW2NvbHVtbi5rZXldID0gZ2V0KHZhbHVlLCBjb2x1bW4ubW9kZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uU3dpdGNoQ2hhbmdlLmVtaXQoc3dpdGNoRXZlbnQpO1xuICAgIH1cblxuICAgIHNob3dFeHBhbmQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByb3dbdGhpcy50aHlDaGlsZHJlbktleV0gJiYgcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNFeHBhbmRlZChyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dO1xuICAgIH1cblxuICAgIGljb25JbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICd0cmVlJykge1xuICAgICAgICAgICAgcmV0dXJuIGxldmVsICogdGhpcy50aHlJbmRlbnQgLSA1O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGRJbmRlbnRDb21wdXRlZChsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBgJHsobGV2ZWwgKyAxKSAqIHRoaXMudGh5SW5kZW50IC0gNX1weGBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZChyb3cpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnR3JvdXBTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZyA9IHsgLi4udGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwIH07XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cC5leHBhbmQpO1xuICAgICAgICB0aGlzLmZvbGRHcm91cHMoZ3JvdXBzKTtcbiAgICAgICAgdGhpcy5vbkRyYWdTdGFydGVkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwRW5kKGV2ZW50OiBDZGtEcmFnRW5kPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnW2dyb3VwLmlkXSk7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRHJhZ0dyb3VwRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGEuaWQgPT09IGdyb3VwLmlkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwXG4gICAgICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgbW9kZWw6IGV2ZW50Lml0ZW0sXG4gICAgICAgICAgICAgICAgbW9kZWxzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgICAgICAgICBvbGRJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZ3JvdXBzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkcmFnIGdyb3VwIGNoaWxkcmVuXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5pdGVtLmRhdGFbdGhpcy5ncm91cEJ5XSA9PT0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPVxuICAgICAgICAgICAgICAgIGV2ZW50LmNvbnRhaW5lci5nZXRTb3J0ZWRJdGVtcygpLmZpbmRJbmRleChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YS5pZCA9PT0gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV07XG4gICAgICAgICAgICAgICAgfSkgKyAxO1xuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogZ3JvdXAuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXggLSBncm91cEluZGV4LFxuICAgICAgICAgICAgICAgIG5ld0luZGV4OiBldmVudC5jdXJyZW50SW5kZXggLSBncm91cEluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGdyb3VwLmNoaWxkcmVuLCBkcmFnRXZlbnQub2xkSW5kZXgsIGRyYWdFdmVudC5uZXdJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDx1bmtub3duPikge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmRyYWdQcmV2aWV3Q2xhc3MpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGRzOiBIVE1MQ29sbGVjdGlvbiA9IGV2ZW50LnNvdXJjZS5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShwcmV2aWV3Py5jaGlsZHJlbikuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtvcmlnaW5hbFRkc1tpbmRleF0/LmNsaWVudFdpZHRofXB4YDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkcm9wTGlzdEVudGVyUHJlZGljYXRlID0gKGluZGV4OiBudW1iZXIsIGRyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBkcm9wLmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdLmRhdGEuZ3JvdXBfaWQgPT09IGRyYWcuZGF0YS5ncm91cF9pZDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkRyYWdNb2RlbERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgbW9kZWxzOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4XG4gICAgICAgIH07XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm1vZGVsLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ0dyb3VwRHJvcHBlZChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgIHRoaXMub25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uSGVhZGVyQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc29ydERpcmVjdGlvbiwgbW9kZWwsIHNvcnRDaGFuZ2UgfSA9IGNvbHVtbjtcbiAgICAgICAgICAgIGxldCBkaXJlY3Rpb247XG4gICAgICAgICAgICBpZiAoc29ydERpcmVjdGlvbiA9PT0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uZGVzYztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc29ydERpcmVjdGlvbiA9PT0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2MpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uYXNjO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uZGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbi5zb3J0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICAgICAgY29uc3Qgc29ydEV2ZW50ID0geyBldmVudCwga2V5OiBtb2RlbCwgZGlyZWN0aW9uIH07XG4gICAgICAgICAgICBzb3J0Q2hhbmdlLmVtaXQoc29ydEV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMudGh5U29ydENoYW5nZS5lbWl0KHNvcnRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dDbGljayhldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5vblJvd0NsaWNrUHJvcGFnYXRpb25FdmVudEhhbmRsZXIoZXZlbnQsIHJvdyk7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94IHx8IGl0ZW0udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpbztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmtleV0gPSAhcm93W2NvbHVtbi5rZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShldmVudCwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvUm93ID0gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50LCByb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93RXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy50aHlPblJvd0NsaWNrLmVtaXQocm93RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJvd0NsaWNrUHJvcGFnYXRpb25FdmVudEhhbmRsZXIoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuY2xvc2VzdCgnLnRyZWUtZXhwYW5kLWljb24nKSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRDaGlsZHJlbihyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0NvbnRleHRNZW51KGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNZW51RXZlbnQ6IFRoeVRhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUm93Q29udGV4dE1lbnUuZW1pdChjb250ZXh0TWVudUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgX2NvbHVtbnMgPSBjb21wb25lbnRzLm1hcChjb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogY29tcG9uZW50LndpZHRoLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY29tcG9uZW50LmNsYXNzTmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKG4sIGkpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obiwgX2NvbHVtbnNbaV0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkR3JvdXBzKG9yaWdpbkdyb3VwczogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBvcmlnaW5Hcm91cHNNYXAgPSBoZWxwZXJzLmtleUJ5KG9yaWdpbkdyb3VwcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgICAgIG9yaWdpbkdyb3Vwcy5mb3JFYWNoKChvcmlnaW46IFNhZmVBbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBUaHlUYWJsZUdyb3VwID0geyBpZDogb3JpZ2luW3RoaXMucm93S2V5XSwgY2hpbGRyZW46IFtdLCBvcmlnaW4gfTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cC5oYXNPd25Qcm9wZXJ0eShncm91cC5pZCkpIHtcbiAgICAgICAgICAgICAgICBncm91cC5leHBhbmQgPSB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBbZ3JvdXAuaWRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cC5leHBhbmQgPSAhIShvcmlnaW5Hcm91cHNNYXBbZ3JvdXAuaWRdIGFzIFNhZmVBbnkpLmV4cGFuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRNb2RlbCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzTWFwID0ga2V5QnkodGhpcy5ncm91cHMsICdpZCcpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzTWFwW3Jvd1t0aGlzLmdyb3VwQnldXTtcbiAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnB1c2gocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cGFuZEdyb3VwKGdyb3VwOiBUaHlUYWJsZUdyb3VwKSB7XG4gICAgICAgIGdyb3VwLmV4cGFuZCA9ICFncm91cC5leHBhbmQ7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cFtncm91cC5pZF0gPSBncm91cC5leHBhbmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRHcm91cHMoZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10pIHtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRHcm91cChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9sZEdyb3Vwcyhncm91cHM6IFRoeVRhYmxlR3JvdXBbXSkge1xuICAgICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxDbGFzcygpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMudGFibGVTY3JvbGxFbGVtZW50O1xuICAgICAgICBjb25zdCBtYXhTY3JvbGxMZWZ0ID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxXaWR0aCAtIHNjcm9sbEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHNjcm9sbFggPSBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IGxhc3RTY3JvbGxDbGFzc05hbWUgPSB0aGlzLnNjcm9sbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSAnJztcbiAgICAgICAgaWYgKHNjcm9sbEVsZW1lbnQuc2Nyb2xsV2lkdGggPiBzY3JvbGxFbGVtZW50LmNsaWVudFdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsWCA+PSBtYXhTY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxSaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxNaWRkbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RTY3JvbGxDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsIGxhc3RTY3JvbGxDbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgdGhpcy5zY3JvbGxDbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS5pbml0aWFsaXplRWxlbWVudCh0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3ModHJ1ZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIG1lcmdlKHRoaXMudmlld3BvcnRSdWxlci5jaGFuZ2UoMjAwKSwgb2YobnVsbCkucGlwZShkZWxheSgyMDApKSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbENsYXNzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFNrZWxldG9uQ29sdW1ucygpIHtcbiAgICAgICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBbXTtcblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnRoeUNvbHVtblNrZWxldG9uVHlwZXNbaW5kZXhdIHx8IFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCB8fCAnYXV0bydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uQ29sdW1ucyA9IFsuLi50aGlzLnNrZWxldG9uQ29sdW1ucywgaXRlbV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLnJvd3MpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlPEV2ZW50PihzdWJzY3JpYmVyID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnJvd3MubWFwKHJvdyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHRoZXJlJ3Mgbm8gbmVlZCB0byBhZGQgdG91Y2gsIHBvaW50ZXIgYW5kIG1vdXNlIGV2ZW50IGxpc3RlbmVycyB0b2dldGhlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2Ygcm93cywgd2hpY2ggd2lsbCBsZWFkIHRvIGFkZGluZyBOICogMyBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYyAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvI2V4YW1wbGVzKSwgd2UgY2FuIHVzZSBmZWF0dXJlIGRldGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgaWYgcG9pbnRlciBldmVudHMgYXJlIGF2YWlsYWJsZS4gSWYgcG9pbnRlciBldmVudHMgYXJlIGF2YWlsYWJsZSwgd2UgaGF2ZSB0byBsaXN0ZW4gb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgYHBvaW50ZXJkb3duYCBldmVudC4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGRldGVybWluZSBpZiB3ZSdyZSBvbiBhIHRvdWNoIGRldmljZSBvciBub3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdWNoIGV2ZW50cyBhcmUgaGFuZGxlZCBlYXJsaWVyIHRoYW4gbW91c2UgZXZlbnRzLCB0aG8gbm90IGFsbCB1c2VyIGFnZW50cyBkaXNwYXRjaCBtb3VzZSBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdG91Y2ggZXZlbnRzLiBTZWUgdGhlIHNwZWM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvI21vdXNlLWV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBvaW50ZXJFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncG9pbnRlcmRvd24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdvbnRvdWNoc3RhcnQnIGluIHJvdy5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICd0b3VjaHN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbW91c2Vkb3duJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogc2luY2UgQ2hyb21lIDU2IGRlZmF1bHRzIGRvY3VtZW50IGxldmVsIGB0b3VjaHN0YXJ0YCBsaXN0ZW5lciB0byBwYXNzaXZlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZWxlbWVudCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgaXMgbm90IHBhc3NpdmUgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZXZlciBjYWxsIGBwcmV2ZW50RGVmYXVsdCgpYCBvbiBpdCwgc28gd2UncmUgc2FmZSBtYWtpbmcgaXQgcGFzc2l2ZSB0b28uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucz5wYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgbW9kZUNoYW5nZSA9IHNpbXBsZUNoYW5nZXMudGh5TW9kZTtcbiAgICAgICAgY29uc3QgdGh5R3JvdXBzQ2hhbmdlID0gc2ltcGxlQ2hhbmdlcy50aHlHcm91cHM7XG4gICAgICAgIGNvbnN0IGlzR3JvdXBNb2RlID0gbW9kZUNoYW5nZSAmJiBtb2RlQ2hhbmdlLmN1cnJlbnRWYWx1ZSA9PT0gJ2dyb3VwJztcbiAgICAgICAgaWYgKGlzR3JvdXBNb2RlICYmIHRoeUdyb3Vwc0NoYW5nZSAmJiB0aHlHcm91cHNDaGFuZ2UuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRHcm91cHModGh5R3JvdXBzQ2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTW9kZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kaWZmKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5fZGlmZi5kaWZmKHRoaXMubW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbHlEaWZmQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95SW52YWxpZEF0dHJpYnV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0aHktdGFibGUtYm9keVwiXG4gIGNka1Njcm9sbGFibGVcbiAgW25nQ2xhc3NdPVwieyAndGh5LXRhYmxlLWZpeGVkJzogaGFzRml4ZWQsICd0aHktdGFibGUtYm9yZGVyZWQtdGhlbWUnOiB0aGVtZSA9PT0gJ2JvcmRlcmVkJyAmJiBoYXNGaXhlZCB9XCI+XG4gIDx0YWJsZVxuICAgICN0YWJsZVxuICAgIGNsYXNzPVwidGFibGVcIlxuICAgIFtuZ0NsYXNzXT1cIltjbGFzc05hbWVdXCJcbiAgICBbY2xhc3MudGFibGUtZml4ZWRdPVwidGh5TGF5b3V0Rml4ZWRcIlxuICAgIFtjbGFzcy50YWJsZS1kcmFnZ2FibGVdPVwiZHJhZ2dhYmxlXCJcbiAgICBbY2xhc3MudGFibGUtZ3JvdXBdPVwibW9kZSA9PT0gJ2dyb3VwJ1wiXG4gICAgW3N0eWxlLm1pbi13aWR0aF09XCJ0aHlNaW5XaWR0aFwiPlxuICAgIDxjb2xncm91cD5cbiAgICAgIDxjb2wgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgW3dpZHRoXT1cImNvbHVtbi53aWR0aFwiIFtzdHlsZS5taW5XaWR0aF09XCJoYXNGaXhlZCA/IGNvbHVtbi53aWR0aCA6IGNvbHVtbi5taW5XaWR0aFwiIC8+XG4gICAgPC9jb2xncm91cD5cblxuICAgIDx0aGVhZCAqbmdJZj1cIiF0aHlIZWFkbGVzc1wiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGhcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5oZWFkZXJDbGFzc05hbWVcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY29sdW1uLXNvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tbGVmdF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLmxlZnRcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLXJpZ2h0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ucmlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICBbc3R5bGUucmlnaHQucHhdPVwiY29sdW1uLnJpZ2h0XCJcbiAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5IZWFkZXJDbGljaygkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbHVtbiB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCI+XG4gICAgICAgICAgICA8dGh5LWljb24gW25nQ2xhc3NdPVwiWyd0aHktdGFibGUtY29sdW1uLXNvcnRhYmxlLWljb24nLCAncHgtMScsIGNvbHVtbi5zb3J0RGlyZWN0aW9uXVwiIHRoeUljb25OYW1lPVwic29ydC12ZXJ0aWNhbC10dFwiPlxuICAgICAgICAgICAgPC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cblxuICAgIDx0Ym9keVxuICAgICAgKm5nSWY9XCJsb2FkaW5nRG9uZVwiXG4gICAgICB0aHlEcmFnRHJvcFxuICAgICAgY2RrRHJvcExpc3RcbiAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFkcmFnZ2FibGVcIlxuICAgICAgW2Nka0Ryb3BMaXN0U29ydFByZWRpY2F0ZV09XCJkcm9wTGlzdEVudGVyUHJlZGljYXRlXCJcbiAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25EcmFnRHJvcHBlZCgkZXZlbnQpXCI+XG4gICAgICA8IS0tIGdyb3VwIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdncm91cCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzXCI+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInRoeS10YWJsZS1ncm91cFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kR3JvdXAoZ3JvdXApXCJcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImdyb3VwXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiZ3JvdXAgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnR3JvdXBTdGFydGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdHcm91cEVuZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LXRhYmxlLWdyb3VwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmFnZ2FibGUgJiYgIShncm91cCB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlKVwiPlxuICAgICAgICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwidGFibGUtZHJhZ2dhYmxlLWljb25cIiB0aHlJY29uTmFtZT1cImRyYWdcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cImV4cGFuZC1pY29uXCIgW3RoeUljb25OYW1lXT1cImdyb3VwLmV4cGFuZCA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZ3JvdXAub3JpZ2luLCBncm91cDogZ3JvdXAub3JpZ2luIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXAuY2hpbGRyZW4/Lmxlbmd0aCAmJiBncm91cC5leHBhbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBncm91cC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGxpc3TmqKHlvI/kuIvmsqHmnInnm7TmjqXkvb/nlKhpdGVt5qih5p2/77yM5piv5Zug5Li65L2/55So5LqG5qih5p2/5b2x5ZON5LqGQW5ndWxhcueahOS+nei1luagke+8jOWvvOiHtENka0RyYWdEcm9w5o6S5bqP5aSx5pWI77yM55uu5YmN6L+Z5qC35L+u5pS55Y+v5Lul5pqC5pe26Kej5Yaz57q/5LiK5LiN6IO95o6S5bqP55qE6Zeu6aKY77yMVHJlZeaooeW8j+eahOaOkuW6j+aaguaXtuS4jeaUr+aMgSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnbGlzdCdcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgI3Jvd3NcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIG1vZGVsOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwidGh5LXNvcnRhYmxlLWl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cInJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRkc1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAndHJlZSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIG1vZGVsOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93LCBpbmRleDogaSwgbGV2ZWw6IDAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdHJUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWk9XCJpbmRleFwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICNyb3dzXG4gICAgICAgICAgY2xhc3M9XCJ0aHktc29ydGFibGUtaXRlbVwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxuICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwicm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbmRlclJvd0NsYXNzTmFtZShyb3csIGkpXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICh0aHlDb250ZXh0TWVudSk9XCJvblJvd0NvbnRleHRNZW51KCRldmVudCwgcm93KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxXG4gICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGlzRXhwYW5kZWQocm93KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIHJvd1t0aHlDaGlsZHJlbktleV07IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGogPSBpbmRleFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogY2hpbGQsIGluZGV4OiBqLCBsZXZlbDogbGV2ZWwgKyAxIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGRzVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaW5kZXhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIlxuICAgICAgICAgIFtjbGFzcy50aHktb3BlcmF0aW9uLWxpbmtzXT1cIiEhY29sdW1uLm9wZXJhdGlvbmFsXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNvbHVtbi1zZWNvbmRhcnldPVwiISFjb2x1bW4uc2Vjb25kYXJ5XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNoZWNrYm94LWNvbHVtbl09XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tbGVmdF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLmxlZnRcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLXJpZ2h0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ucmlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICBbc3R5bGUucmlnaHQucHhdPVwiY29sdW1uLnJpZ2h0XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZCA/IHRkSW5kZW50Q29tcHV0ZWQobGV2ZWwpIDogbnVsbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJqID09PSAwICYmIGRyYWdnYWJsZSAmJiAhKHJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlKVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwidGFibGUtZHJhZ2dhYmxlLWljb25cIiB0aHlJY29uTmFtZT1cImRyYWdcIj48L3RoeS1pY29uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLXRlbXBsYXRlLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGVtcGxhdGVSZWYoY29sdW1uLmNlbGxUZW1wbGF0ZVJlZilcIj5cbiAgICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtZXhwYW5kLWljb24gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBjb2x1bW4uZXhwYW5kXCJcbiAgICAgICAgICAgICAgW3RoeUljb25OYW1lXT1cImlzRXhwYW5kZWQocm93KSA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIlxuICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93RXhwYW5kKHJvdykgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImljb25JbmRlbnRDb21wdXRlZChsZXZlbClcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jZWxsVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdyB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS1ub3QgdGVtcGxhdGUtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGVSZWYoY29sdW1uLmNlbGxUZW1wbGF0ZVJlZilcIj5cbiAgICAgICAgICAgIDwhLS0gZGVmYXVsdCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubW9kZWwgJiYgIWNvbHVtbi50eXBlXCI+XG4gICAgICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHJlZS1leHBhbmQtaWNvbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgICAgW3RoeUljb25OYW1lXT1cImlzRXhwYW5kZWQocm93KSA/ICdhbmdsZS1kb3duJyA6ICdhbmdsZS1yaWdodCdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dFeHBhbmQocm93KSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE1vZGVsVmFsdWUocm93LCBjb2x1bW4ubW9kZWwpIHwgaXNWYWxpZE1vZGVsVmFsdWU7IGVsc2UgZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldE1vZGVsVmFsdWUocm93LCBjb2x1bW4ubW9kZWwpIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi5kZWZhdWx0VGV4dFwiIGNsYXNzPVwidGV4dC1kZXNjXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uZGVmYXVsdFRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIGluZGV4IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmluZGV4XCI+XG4gICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBjaGVja2JveCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5rZXldXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3RvcFByb3BhZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gcmFkaW8gLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW9cIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUmFkaW9Sb3dcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9TZWxlY3RDaGFuZ2UoJGV2ZW50LCByb3cpXCIgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIHN3aXRjaCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5zd2l0Y2hcIj5cbiAgICAgICAgICAgICAgPHRoeS1zd2l0Y2hcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4ua2V5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICh0aHlDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3csIGNvbHVtbilcIj48L3RoeS1zd2l0Y2g+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ0RvbmUgJiYgbW9kZWwubGVuZ3RoID09PSAwICYmIGdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRoeS10YWJsZS1lbXB0eSBjbGVhci1ob3ZlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbXB0eVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRFbXB0eVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5PlxuICAgICAgPHRoeS1lbXB0eVxuICAgICAgICBbdGh5TWVzc2FnZV09XCJlbXB0eU9wdGlvbnMubWVzc2FnZVwiXG4gICAgICAgIFt0aHlUcmFuc2xhdGlvbktleV09XCJlbXB0eU9wdGlvbnMudHJhbnNsYXRpb25LZXlcIlxuICAgICAgICBbdGh5VHJhbnNsYXRpb25WYWx1ZXNdPVwiZW1wdHlPcHRpb25zLnRyYW5zbGF0aW9uVmFsdWVzXCJcbiAgICAgICAgW3RoeUVudGl0eU5hbWVdPVwiZW1wdHlPcHRpb25zLmVudGl0eU5hbWVcIlxuICAgICAgICBbdGh5RW50aXR5TmFtZVRyYW5zbGF0ZUtleV09XCJlbXB0eU9wdGlvbnMuZW50aXR5TmFtZVRyYW5zbGF0ZUtleVwiXG4gICAgICAgIFt0aHlJY29uTmFtZV09XCJlbXB0eU9wdGlvbnMuaWNvbk5hbWVcIlxuICAgICAgICBbdGh5U2l6ZV09XCJlbXB0eU9wdGlvbnMuc2l6ZVwiXG4gICAgICAgIFt0aHlNYXJnaW5Ub3BdPVwiZW1wdHlPcHRpb25zLm1hcmdpblRvcFwiXG4gICAgICAgIFt0aHlUb3BBdXRvXT1cImVtcHR5T3B0aW9ucy50b3BBdXRvXCJcbiAgICAgICAgW3RoeUNvbnRhaW5lcl09XCJlbXB0eU9wdGlvbnMuY29udGFpbmVyXCI+PC90aHktZW1wdHk+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPHRoeS10YWJsZS1za2VsZXRvblxuICAgICpuZ0lmPVwiIWxvYWRpbmdEb25lXCJcbiAgICBbdGh5Um93Q291bnRdPVwiNlwiXG4gICAgW3RoeUhlYWRsZXNzXT1cInRydWVcIlxuICAgIFt0aHlUaGVtZV09XCJ0aGVtZVwiXG4gICAgW3RoeVNpemVdPVwic2l6ZVwiXG4gICAgW3RoeU1pbldpZHRoXT1cInRoeU1pbldpZHRoXCJcbiAgICBbdGh5Q29sdW1uc109XCJza2VsZXRvbkNvbHVtbnNcIj5cbiAgPC90aHktdGFibGUtc2tlbGV0b24+XG5cbiAgPGRpdiBjbGFzcz1cInRoeS10YWJsZS1mb290ZXJcIiAqbmdJZj1cInBhZ2luYXRpb24udG90YWwgPiBwYWdpbmF0aW9uLnNpemVcIiBbY2xhc3MudGh5LXRhYmxlLWZvb3Rlci1oYXMtcGFkZGluZ109XCJ0aGVtZSA9PT0gJ2RlZmF1bHQnXCI+XG4gICAgPHRoeS1wYWdpbmF0aW9uXG4gICAgICBbdGh5UGFnZUluZGV4XT1cInBhZ2luYXRpb24uaW5kZXhcIlxuICAgICAgW3RoeVRvdGFsXT1cInBhZ2luYXRpb24udG90YWxcIlxuICAgICAgW3RoeVBhZ2VTaXplXT1cInBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICBbdGh5UGFnZVNpemVPcHRpb25zXT1cInBhZ2luYXRpb24uc2l6ZU9wdGlvbnNcIlxuICAgICAgW3RoeVNob3dTaXplQ2hhbmdlcl09XCJzaG93U2l6ZUNoYW5nZXJcIlxuICAgICAgW3RoeVNob3dUb3RhbF09XCJzaG93VG90YWxcIlxuICAgICAgKHRoeVBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICh0aHlQYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAodGh5UGFnZVNpemVDaGFuZ2VkKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvdGh5LXBhZ2luYXRpb24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
1026
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsc0JBQXNCLEVBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFl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QUFFO2dCQUduQyxzQkFBc0I7c0JBRHpCLGVBQWU7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb25zdHJ1Y3RvcixcbiAgICBJbnB1dEJvb2xlYW4sXG4gICAgSW5wdXRDc3NQaXhlbCxcbiAgICBJbnB1dE51bWJlcixcbiAgICBNaXhpbkJhc2UsXG4gICAgbWl4aW5VbnN1YnNjcmliZSxcbiAgICBUaHlVbnN1YnNjcmliZSxcbiAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG59IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBTYWZlQW55IH0gZnJvbSAnbmd4LXRldGh5cy90eXBlcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGdldCwgaGVscGVycywgaXNTdHJpbmcsIGtleUJ5LCBzZXQgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1TZXJ2ZXIsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXG4gICAgSXRlcmFibGVDaGFuZ2VzLFxuICAgIEl0ZXJhYmxlRGlmZmVyLFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJVGh5VGFibGVDb2x1bW5QYXJlbnRDb21wb25lbnQsIFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCwgVGh5VGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBQYWdlQ2hhbmdlZEV2ZW50LFxuICAgIFRoeU11bHRpU2VsZWN0RXZlbnQsXG4gICAgVGh5UGFnZSxcbiAgICBUaHlSYWRpb1NlbGVjdEV2ZW50LFxuICAgIFRoeVN3aXRjaEV2ZW50LFxuICAgIFRoeVRhYmxlU2tlbGV0b25Db2x1bW4sXG4gICAgVGh5VGFibGVEcmFnZ2FibGVFdmVudCxcbiAgICBUaHlUYWJsZUVtcHR5T3B0aW9ucyxcbiAgICBUaHlUYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlUm93RXZlbnQsXG4gICAgVGh5VGFibGVTb3J0RGlyZWN0aW9uLFxuICAgIFRoeVRhYmxlU29ydEV2ZW50XG59IGZyb20gJy4vdGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZSB9IGZyb20gJy4vcGlwZXMvZHJhZy5waXBlJztcbmltcG9ydCB7IFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlIH0gZnJvbSAnLi9waXBlcy90YWJsZS5waXBlJztcbmltcG9ydCB7IFRoeVBhZ2luYXRpb24gfSBmcm9tICduZ3gtdGV0aHlzL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgVGh5VGFibGVTa2VsZXRvbiB9IGZyb20gJy4vdGFibGUtc2tlbGV0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlTd2l0Y2ggfSBmcm9tICduZ3gtdGV0aHlzL3N3aXRjaCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeURyYWdEcm9wRGlyZWN0aXZlLCBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUgfSBmcm9tICcuL2VudW1zJztcblxuZXhwb3J0IHR5cGUgVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JyB8ICdib3JkZXJlZCcgfCAnYm94ZWQnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZU1vZGUgPSAnbGlzdCcgfCAnZ3JvdXAnIHwgJ3RyZWUnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVNpemUgPSAnbWQnIHwgJ3NtJyB8ICd4cycgfCAnbGcnIHwgJ3hsZycgfCAnZGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRoeUZpeGVkRGlyZWN0aW9uIHtcbiAgICBsZWZ0ID0gJ2xlZnQnLFxuICAgIHJpZ2h0ID0gJ3JpZ2h0J1xufVxuXG5pbnRlcmZhY2UgVGh5VGFibGVHcm91cDxUID0gdW5rbm93bj4ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGV4cGFuZD86IGJvb2xlYW47XG4gICAgY2hpbGRyZW4/OiBvYmplY3RbXTtcbiAgICBvcmlnaW4/OiBUO1xufVxuXG5jb25zdCB0YWJsZVRoZW1lTWFwID0ge1xuICAgIGRlZmF1bHQ6ICd0YWJsZS1kZWZhdWx0JyxcbiAgICBib3JkZXJlZDogJ3RhYmxlLWJvcmRlcmVkJyxcbiAgICBib3hlZDogJ3RhYmxlLWJveGVkJ1xufTtcblxuY29uc3QgY3VzdG9tVHlwZSA9IHtcbiAgICBpbmRleDogJ2luZGV4JyxcbiAgICBjaGVja2JveDogJ2NoZWNrYm94JyxcbiAgICByYWRpbzogJ3JhZGlvJyxcbiAgICBzd2l0Y2g6ICdzd2l0Y2gnXG59O1xuXG5jb25zdCBjc3MgPSB7XG4gICAgdGFibGVCb2R5OiAndGh5LXRhYmxlLWJvZHknLFxuICAgIHRhYmxlU2Nyb2xsTGVmdDogJ3RoeS10YWJsZS1zY3JvbGwtbGVmdCcsXG4gICAgdGFibGVTY3JvbGxSaWdodDogJ3RoeS10YWJsZS1zY3JvbGwtcmlnaHQnLFxuICAgIHRhYmxlU2Nyb2xsTWlkZGxlOiAndGh5LXRhYmxlLXNjcm9sbC1taWRkbGUnXG59O1xuXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuY29uc3QgX01peGluQmFzZTogQ29uc3RydWN0b3I8VGh5VW5zdWJzY3JpYmU+ICYgdHlwZW9mIE1peGluQmFzZSA9IG1peGluVW5zdWJzY3JpYmUoTWl4aW5CYXNlKTtcblxuLyoqXG4gKiDooajmoLznu4Tku7ZcbiAqIEBuYW1lIHRoeS10YWJsZVxuICogQG9yZGVyIDEwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfVEFCTEVfQ09MVU1OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGh5VGFibGVcbiAgICAgICAgfSxcbiAgICAgICAgVXBkYXRlSG9zdENsYXNzU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LXRhYmxlJyxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm9yZGVyZWRdJzogYHRoZW1lID09PSAnYm9yZGVyZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm94ZWRdJzogYHRoZW1lID09PSAnYm94ZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtZml4ZWQtaGVhZGVyXSc6ICd0aHlIZWFkZXJGaXhlZCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRoeVN3aXRjaCxcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIFRoeVRhYmxlU2tlbGV0b24sXG4gICAgICAgIFRoeVBhZ2luYXRpb24sXG4gICAgICAgIFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlLFxuICAgICAgICBUYWJsZVJvd0RyYWdEaXNhYmxlZFBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRhYmxlIGV4dGVuZHMgX01peGluQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCB7XG4gICAgcHVibGljIGN1c3RvbVR5cGUgPSBjdXN0b21UeXBlO1xuXG4gICAgcHVibGljIG1vZGVsOiBvYmplY3RbXSA9IFtdO1xuXG4gICAgcHVibGljIGdyb3VwczogVGh5VGFibGVHcm91cFtdID0gW107XG5cbiAgICBwdWJsaWMgcm93S2V5ID0gJ19pZCc7XG5cbiAgICBwdWJsaWMgZ3JvdXBCeTogc3RyaW5nO1xuXG4gICAgcHVibGljIG1vZGU6IFRoeVRhYmxlTW9kZSA9ICdsaXN0JztcblxuICAgIHB1YmxpYyB0aGVtZTogVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JztcblxuICAgIHB1YmxpYyBjbGFzc05hbWUgPSAnJztcblxuICAgIHB1YmxpYyBzaXplOiBUaHlUYWJsZVNpemUgPSAnbWQnO1xuXG4gICAgcHVibGljIHJvd0NsYXNzTmFtZTogc3RyaW5nIHwgRnVuY3Rpb247XG5cbiAgICBwdWJsaWMgbG9hZGluZ0RvbmUgPSB0cnVlO1xuXG4gICAgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZW1wdHlPcHRpb25zOiBUaHlUYWJsZUVtcHR5T3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkUmFkaW9Sb3c6IFNhZmVBbnkgPSBudWxsO1xuXG4gICAgcHVibGljIHBhZ2luYXRpb246IFRoeVBhZ2UgPSB7IGluZGV4OiAxLCBzaXplOiAyMCwgdG90YWw6IDAsIHNpemVPcHRpb25zOiBbMjAsIDUwLCAxMDBdIH07XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuOiBTYWZlQW55O1xuXG4gICAgcHVibGljIHdob2xlUm93U2VsZWN0ID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZml4ZWREaXJlY3Rpb24gPSBUaHlGaXhlZERpcmVjdGlvbjtcblxuICAgIHB1YmxpYyBoYXNGaXhlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbHVtbnM6IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50W10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RpZmY6IEl0ZXJhYmxlRGlmZmVyPFNhZmVBbnk+O1xuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfb2xkVGh5Q2xhc3NOYW1lID0gJyc7XG5cbiAgICBwcml2YXRlIHNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG5cbiAgICBwcml2YXRlIGdldCB0YWJsZVNjcm9sbEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3MudGFibGVCb2R5KVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzY3JvbGwkKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy50YWJsZVNjcm9sbEVsZW1lbnQgPyBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsICdzY3JvbGwnKSA6IEVNUFRZKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mlbDmja7kuLrnqbrml7blsZXnpLrnmoTmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5JykgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlRWxlbWVudFJlZjogRWxlbWVudFJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ3Jvd3MnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcm93czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWxleekuuaWueW8j++8jOWIl+ihqC/liIbnu4Qv5qCRXG4gICAgICogQHR5cGUgbGlzdCB8IGdyb3VwIHwgdHJlZVxuICAgICAqIEBkZWZhdWx0IGxpc3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNb2RlKHZhbHVlOiBUaHlUYWJsZU1vZGUpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gdmFsdWUgfHwgdGhpcy5tb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGXnmoTlgLzkuLogYGdyb3VwYCDml7bliIbnu4TnmoQgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBCeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBCeSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruavj+ihjOaVsOaNrueahOWUr+S4gOagh+ivhuWxnuaAp+WQjVxuICAgICAqIEBkZWZhdWx0IF9pZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0tleSh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICB0aGlzLnJvd0tleSA9IHZhbHVlIHx8IHRoaXMucm93S2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIhue7hOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUdyb3Vwcyh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGVsKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZSB8fCBbXTtcbiAgICAgICAgdGhpcy5fZGlmZiA9IHRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLm1vZGVsKS5jcmVhdGUoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE5pi+56S66aOO5qC877yMYGJvcmRlcmVkYCDml7blpLTpg6jmnInog4zmma/oibLkuJTliIblibLnur/ljLrliKvmmI7mmL5cbiAgICAgKiBAdHlwZSBkZWZhdWx0IHwgYm9yZGVyZWQgfCBib3hlZFxuICAgICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUaGVtZSh2YWx1ZTogVGh5VGFibGVUaGVtZSkge1xuICAgICAgICB0aGlzLnRoZW1lID0gdmFsdWUgfHwgdGhpcy50aGVtZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTlpKflsI9cbiAgICAgKiBAdHlwZSB4cyB8IHNtIHwgbWQgfCBsZyB8IHhsZyB8IGRlZmF1bHRcbiAgICAgKiBAZGVmYXVsdCBtZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUodmFsdWU6IFRoeVRhYmxlU2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSB2YWx1ZSB8fCB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85pyA5bCP5a695bqm77yM5LiA6Iis5piv6YCC55So5LqO6K6+572u5YiX5a695Li655m+5YiG5LmL5oiWYXV0b+aXtumZkOWItuihqOagvOacgOWwj+WuveW6pidcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlNaW5XaWR0aDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5Li6IGZpeGVkIOW4g+WxgOihqOagvO+8jOiuvue9riBmaXhlZCDlkI7vvIzliJflrr3lsIbkuKXmoLzmjInnhaforr7nva7lrr3luqblsZXnpLrvvIzliJflrr3lsIbkuI3kvJrmoLnmja7ooajmoLzlhoXlrrnoh6rliqjosIPmlbRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlMYXlvdXRGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuihqOWktOWbuuWumu+8jOiLpeiuvue9ruS4uiB0cnVl77yMIOmcgOimgeWQjOatpeiuvue9riB0aHlIZWlnaHRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlIZWFkZXJGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOmrmOW6plxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOeahOagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNsYXNzTmFtZS5zcGxpdCgnICcpLmZpbHRlcihhID0+IGEudHJpbSgpKTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5fb2xkVGh5Q2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkVGh5Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gbGlzdC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC86KGM55qE5qC35byP77yM5Lyg5YWl5Ye95pWw77yM5pSv5oyBIHJvd+OAgWluZGV4XG4gICAgICogQHR5cGUgc3RyaW5nIHwgKHJvdywgaW5kZXgpID0+IHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0NsYXNzTmFtZSh2YWx1ZTogc3RyaW5nIHwgRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5yb3dDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3nirbmgIFcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5TG9hZGluZ0RvbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nRG9uZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWKoOi9veaXtuaYvuekuueahOaWh+acrO+8jOW3suW6n+W8g1xuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TG9hZGluZ1RleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvYWRpbmdUZXh0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YWN572u56m654q25oCB57uE5Lu2XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5RW1wdHlPcHRpb25zKHZhbHVlOiBUaHlUYWJsZUVtcHR5T3B0aW9ucykge1xuICAgICAgICB0aGlzLmVtcHR5T3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuW8gOWQr+ihjOaLluaLvVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5RHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHRoaXMuZHJhZ2dhYmxlICYmIHRoaXMubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyZWUgbW9kZSBzb3J0aW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjemhteeggVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dE51bWJlcigpXG4gICAgc2V0IHRoeVBhZ2VJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5pbmRleCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruavj+mhteaYvuekuuaVsOmHj1xuICAgICAqIEBkZWZhdWx0IDIwXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXROdW1iZXIoKVxuICAgIHNldCB0aHlQYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5zaXplID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5oC76aG15pWwXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXROdW1iZXIoKVxuICAgIHNldCB0aHlQYWdlVG90YWwodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24udG90YWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3lvZPliY3ooYzmmK/lkKboh6rliqjpgInkuK0gQ2hlY2tib3jvvIzkuI3lvIDlkK/ml7blj6rmnInngrnlh7sgQ2hlY2tib3gg5YiX5pe25omN5Lya6Kem5Y+R6YCJ5LitXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHNldCB0aHlXaG9sZVJvd1NlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lICs9ICcgdGFibGUtaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2hvbGVSb3dTZWxlY3QgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrooajmoLzlpLRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlIZWFkbGVzcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66KGo5qC85aS077yM5bey5bqf5byD77yM6K+35L2/55SoIHRoeUhlYWRsZXNzXG4gICAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSB0aHlIZWFkbGVzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeVNob3dIZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50aHlIZWFkbGVzcyA9ICF2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrlt6bkvqcgVG90YWxcbiAgICAgKi9cbiAgICBASW5wdXQoJ3RoeVNob3dUb3RhbCcpIEBJbnB1dEJvb2xlYW4oKSBzaG93VG90YWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuiwg+aVtOavj+mhteaYvuekuuadoeaVsOS4i+aLieahhlxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5U2hvd1NpemVDaGFuZ2VyJykgQElucHV0Qm9vbGVhbigpIHNob3dTaXplQ2hhbmdlciA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGG5Y+v6YCJ6aG5XG4gICAgICogQHR5cGUgbnVtYmVyW11cbiAgICAgKi9cbiAgICBASW5wdXQoJ3RoeVBhZ2VTaXplT3B0aW9ucycpXG4gICAgc2V0IHBhZ2VTaXplT3B0aW9ucyh2YWx1ZTogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemVPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lsZXnpLrml7bnmoTnvKnov5tcbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSB0aHlJbmRlbnQgPSAyMDtcblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGUg5Li6IHRyZWUg5pe277yM6K6+572uIFRyZWUg5qCR54q25pWw5o2u5a+56LGh5Lit55qE5a2Q6IqC54K5IEtleVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNoaWxkcmVuS2V5ID0gJ2NoaWxkcmVuJztcblxuICAgIC8qKlxuICAgICAqIOW8gOWQryBIb3ZlciDlkI7mmL7npLrmk43kvZzvvIzpu5jorqTkuI3mmL7npLrmk43kvZzljLrlhoXlrrnvvIzpvKDmoIcgSG92ZXIg5pe25bGV56S6XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10YWJsZS1ob3Zlci1kaXNwbGF5LW9wZXJhdGlvbicpXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlIb3ZlckRpc3BsYXlPcGVyYXRpb246IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGU6IChpdGVtOiBTYWZlQW55KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliJfnmoTpqqjmnrbnsbvlnotcbiAgICAgKiBAdHlwZSBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q29sdW1uU2tlbGV0b25UeXBlczogVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGVbXSA9IFtcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUudGl0bGUsXG4gICAgICAgIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLm1lbWJlcixcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUuZGVmYXVsdFxuICAgIF07XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLnu4Tku7blm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Td2l0Y2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlTd2l0Y2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15b2T5YmN6aG15pS55Y+Y5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlpJrpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25NdWx0aVNlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlNdWx0aVNlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y2V6YCJ5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUmFkaW9TZWxlY3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UmFkaW9TZWxlY3RFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOaLluWKqOS/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkRyYWdnYWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZURyYWdnYWJsZUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC86KGM54K55Ye76Kem5Y+R5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVSb3dFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWIl+aOkuW6j+S/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVTb3J0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSB0aHlPblJvd0NvbnRleHRNZW51OiBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRXZlbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUaHlUYWJsZUNvbHVtbkNvbXBvbmVudClcbiAgICBzZXQgbGlzdE9mQ29sdW1uQ29tcG9uZW50cyhjb21wb25lbnRzOiBRdWVyeUxpc3Q8VGh5VGFibGVDb2x1bW5Db21wb25lbnQ+KSB7XG4gICAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb21wb25lbnRzLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzRml4ZWQgPSAhIXRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLmxlZnQgfHwgaXRlbS5maXhlZCA9PT0gdGhpcy5maXhlZERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5idWlsZFNrZWxldG9uQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRhTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOaVsOaNrueahOaKmOWPoOWxleW8gOeKtuaAgVxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXBPZkdyb3VwOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBwcml2YXRlIGV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBkcmFnUHJldmlld0NsYXNzID0gJ3RoeS10YWJsZS1kcmFnLXByZXZpZXcnO1xuXG4gICAgcHVibGljIHNrZWxldG9uQ29sdW1uczogVGh5VGFibGVTa2VsZXRvbkNvbHVtbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2RpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBwcml2YXRlIHVwZGF0ZUhvc3RDbGFzc1NlcnZpY2U6IFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IFNhZmVBbnksXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9iaW5kVHJhY2tGbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5zKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucy5zb21lKGl0ZW0gPT4gaXRlbS5leHBhbmQgPT09IHRydWUpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbMF0uZXhwYW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGxlZnRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ubGVmdCk7XG4gICAgICAgIGxlZnRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gbGVmdEZpeGVkQ29sdW1uc1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgaXRlbS5sZWZ0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5sZWZ0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0Rml4ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uZml4ZWQgPT09IFRoeUZpeGVkRGlyZWN0aW9uLnJpZ2h0KS5yZXZlcnNlKCk7XG4gICAgICAgIHJpZ2h0Rml4ZWRDb2x1bW5zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHJpZ2h0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLnJpZ2h0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5yaWdodCArIHBhcnNlSW50KHByZXZpb3VzLndpZHRoLnRvU3RyaW5nKCksIDEwKSA6IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVEYXRhTW9kZWwoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9ucyhyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxTZWxlY3Rpb25zKHJvdzogb2JqZWN0LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gY29sdW1uLnNlbGVjdGlvbnMuaW5jbHVkZXMocm93W3RoaXMucm93S2V5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaCkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gZ2V0KHJvdywgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDdXN0b21Nb2RlbFZhbHVlKHJvdzogU2FmZUFueSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXM6IEl0ZXJhYmxlQ2hhbmdlczxTYWZlQW55Pikge1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFNhZmVBbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocmVjb3JkLml0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kVHJhY2tGbigpIHtcbiAgICAgICAgdGhpcy50cmFja0J5Rm4gPSBmdW5jdGlvbiAodGhpczogU2FmZUFueSwgaW5kZXg6IG51bWJlciwgcm93OiBTYWZlQW55KTogU2FmZUFueSB7XG4gICAgICAgICAgICByZXR1cm4gcm93ICYmIHRoaXMucm93S2V5ID8gcm93W3RoaXMucm93S2V5XSA6IGluZGV4O1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnWyQkY29sdW1uXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldENsYXNzKGZpcnN0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmaXJzdCAmJiAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaChgdGFibGUtJHt0aGlzLnNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaCh0YWJsZVRoZW1lTWFwW3RoaXMudGhlbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS51cGRhdGVDbGFzcyhjbGFzc05hbWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ29sdW1uU2VsZWN0aW9ucyhrZXk6IHN0cmluZywgc2VsZWN0aW9uczogU2FmZUFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBrZXkpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVGVtcGxhdGVSZWYocmVmOiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByZWYgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TW9kZWxWYWx1ZShyb3c6IFNhZmVBbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZ2V0KHJvdywgcGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclJvd0NsYXNzTmFtZShyb3c6IFNhZmVBbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKHRoaXMucm93Q2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3NOYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJvd0NsYXNzTmFtZSBhcyBGdW5jdGlvbikocm93LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5tb2RlbCkge1xuICAgICAgICAgICAgc2V0KHJvdywgY29sdW1uLm1vZGVsLCByb3dbY29sdW1uLmtleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlSW5kZXhDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRoeU9uUGFnZVNpemVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2Uocm93OiBTYWZlQW55LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShudWxsLCByb3csIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMubW9kZWwuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bY29sdW1uLmtleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtdWx0aVNlbGVjdEV2ZW50OiBUaHlNdWx0aVNlbGVjdEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25NdWx0aVNlbGVjdENoYW5nZS5lbWl0KG11bHRpU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHJhZGlvU2VsZWN0RXZlbnQ6IFRoeVJhZGlvU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUmFkaW9TZWxlY3RDaGFuZ2UuZW1pdChyYWRpb1NlbGVjdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Td2l0Y2hDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBzd2l0Y2hFdmVudDogVGh5U3dpdGNoRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJlZnJlc2g6ICh2YWx1ZTogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgcm93O1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4ua2V5XSA9IGdldCh2YWx1ZSwgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblN3aXRjaENoYW5nZS5lbWl0KHN3aXRjaEV2ZW50KTtcbiAgICB9XG5cbiAgICBzaG93RXhwYW5kKHJvdzogU2FmZUFueSkge1xuICAgICAgICByZXR1cm4gcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldICYmIHJvd1t0aGlzLnRoeUNoaWxkcmVuS2V5XS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlzRXhwYW5kZWQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXTtcbiAgICB9XG5cbiAgICBpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXZlbCAqIHRoaXMudGh5SW5kZW50IC0gNTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRkSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogYCR7KGxldmVsICsgMSkgKiB0aGlzLnRoeUluZGVudCAtIDV9cHhgXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZXhwYW5kQ2hpbGRyZW4ocm93OiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQocm93KSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PHVua25vd24+KSB7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWcgPSB7IC4uLnRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cCB9O1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZXhwYW5kKTtcbiAgICAgICAgdGhpcy5mb2xkR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMub25EcmFnU3RhcnRlZChldmVudCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdHcm91cEVuZChldmVudDogQ2RrRHJhZ0VuZDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZ1tncm91cC5pZF0pO1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyYWdHcm91cERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZChncm91cCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhLmlkID09PSBncm91cC5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cFxuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogdGhpcy5ncm91cHMsXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGh5T25EcmFnZ2FibGVDaGFuZ2UuZW1pdChkcmFnRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cCBjaGlsZHJlblxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV0gPT09IGdyb3VwLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBncm91cEluZGV4ID1cbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGEuaWQgPT09IGV2ZW50Lml0ZW0uZGF0YVt0aGlzLmdyb3VwQnldO1xuICAgICAgICAgICAgICAgIH0pICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgICAgICBtb2RlbHM6IGdyb3VwLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4IC0gZ3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4IC0gZ3JvdXBJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShncm91cC5jaGlsZHJlbiwgZHJhZ0V2ZW50Lm9sZEluZGV4LCBkcmFnRXZlbnQubmV3SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnUHJldmlld0NsYXNzKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRkczogSFRNTENvbGxlY3Rpb24gPSBldmVudC5zb3VyY2UuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocHJldmlldz8uY2hpbGRyZW4pLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7b3JpZ2luYWxUZHNbaW5kZXhdPy5jbGllbnRXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZHJvcExpc3RFbnRlclByZWRpY2F0ZSA9IChpbmRleDogbnVtYmVyLCBkcmFnOiBDZGtEcmFnLCBkcm9wOiBDZGtEcm9wTGlzdCkgPT4ge1xuICAgICAgICByZXR1cm4gZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kYXRhLmdyb3VwX2lkID09PSBkcmFnLmRhdGEuZ3JvdXBfaWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgIG1vZGVsczogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICB9O1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5tb2RlbCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5vbkRyYWdHcm91cERyb3BwZWQoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ01vZGVsRHJvcHBlZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbkhlYWRlckNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvcnREaXJlY3Rpb24sIG1vZGVsLCBzb3J0Q2hhbmdlIH0gPSBjb2x1bW47XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZXNjKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmFzYztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW4uc29ydERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRFdmVudCA9IHsgZXZlbnQsIGtleTogbW9kZWwsIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgc29ydENoYW5nZS5lbWl0KHNvcnRFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnRoeVNvcnRDaGFuZ2UuZW1pdChzb3J0RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMub25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50LCByb3cpO1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgaWYgKHRoaXMud2hvbGVSb3dTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCB8fCBpdGVtLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW87XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbiAmJiAhY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gIXJvd1tjb2x1bW4ua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQsIHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SYWRpb1NlbGVjdENoYW5nZShldmVudCwgcm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0V2ZW50ID0ge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudGh5T25Sb3dDbGljay5lbWl0KHJvd0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoJy50cmVlLWV4cGFuZC1pY29uJykpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hpbGRyZW4ocm93KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dDb250ZXh0TWVudShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBjb250ZXh0TWVudUV2ZW50OiBUaHlUYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblJvd0NvbnRleHRNZW51LmVtaXQoY29udGV4dE1lbnVFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgICAgIGNvbnN0IF9jb2x1bW5zID0gY29tcG9uZW50cy5tYXAoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbXBvbmVudC53aWR0aCxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbXBvbmVudC5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChuLCBpKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG4sIF9jb2x1bW5zW2ldKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEdyb3VwcyhvcmlnaW5Hcm91cHM6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luR3JvdXBzTWFwID0gaGVscGVycy5rZXlCeShvcmlnaW5Hcm91cHMsICdpZCcpO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICBvcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cDogVGh5VGFibGVHcm91cCA9IHsgaWQ6IG9yaWdpblt0aGlzLnJvd0tleV0sIGNoaWxkcmVuOiBbXSwgb3JpZ2luIH07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXAuaGFzT3duUHJvcGVydHkoZ3JvdXAuaWQpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwW2dyb3VwLmlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gISEob3JpZ2luR3JvdXBzTWFwW2dyb3VwLmlkXSBhcyBTYWZlQW55KS5leHBhbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTW9kZWwoKSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwc01hcCA9IGtleUJ5KHRoaXMuZ3JvdXBzLCAnaWQnKTtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc01hcFtyb3dbdGhpcy5ncm91cEJ5XV07XG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmRHcm91cChncm91cDogVGh5VGFibGVHcm91cCkge1xuICAgICAgICBncm91cC5leHBhbmQgPSAhZ3JvdXAuZXhwYW5kO1xuICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBbZ3JvdXAuaWRdID0gZ3JvdXAuZXhwYW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kR3JvdXBzKGdyb3VwczogVGh5VGFibGVHcm91cFtdKSB7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvbGRHcm91cHMoZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10pIHtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRHcm91cChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudDtcbiAgICAgICAgY29uc3QgbWF4U2Nyb2xsTGVmdCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsV2lkdGggLSBzY3JvbGxFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBzY3JvbGxYID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCBsYXN0U2Nyb2xsQ2xhc3NOYW1lID0gdGhpcy5zY3JvbGxDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gJyc7XG4gICAgICAgIGlmIChzY3JvbGxFbGVtZW50LnNjcm9sbFdpZHRoID4gc2Nyb2xsRWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgaWYgKHNjcm9sbFggPj0gbWF4U2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsUmlnaHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTWlkZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U2Nyb2xsQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCBsYXN0U2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zY3JvbGxDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UuaW5pdGlhbGl6ZUVsZW1lbnQodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKHRydWUpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBtZXJnZSh0aGlzLnZpZXdwb3J0UnVsZXIuY2hhbmdlKDIwMCksIG9mKG51bGwpLnBpcGUoZGVsYXkoMjAwKSkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTa2VsZXRvbkNvbHVtbnMoKSB7XG4gICAgICAgIHRoaXMuc2tlbGV0b25Db2x1bW5zID0gW107XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50aHlDb2x1bW5Ta2VsZXRvblR5cGVzW2luZGV4XSB8fCBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5kZWZhdWx0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGggfHwgJ2F1dG8nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBbLi4udGhpcy5za2VsZXRvbkNvbHVtbnMsIGl0ZW1dO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93cy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5yb3dzKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxFdmVudD4oc3Vic2NyaWJlciA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5yb3dzLm1hcChyb3cgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGVyZSdzIG5vIG5lZWQgdG8gYWRkIHRvdWNoLCBwb2ludGVyIGFuZCBtb3VzZSBldmVudCBsaXN0ZW5lcnMgdG9nZXRoZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHJvd3MsIHdoaWNoIHdpbGwgbGVhZCB0byBhZGRpbmcgTiAqIDMgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzLyNleGFtcGxlcyksIHdlIGNhbiB1c2UgZmVhdHVyZSBkZXRlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUuIElmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUsIHdlIGhhdmUgdG8gbGlzdGVuIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGBwb2ludGVyZG93bmAgZXZlbnQuIE90aGVyd2lzZSwgd2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgd2UncmUgb24gYSB0b3VjaCBkZXZpY2Ugb3Igbm90LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3VjaCBldmVudHMgYXJlIGhhbmRsZWQgZWFybGllciB0aGFuIG1vdXNlIGV2ZW50cywgdGhvIG5vdCBhbGwgdXNlciBhZ2VudHMgZGlzcGF0Y2ggbW91c2UgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRvdWNoIGV2ZW50cy4gU2VlIHRoZSBzcGVjOiBodHRwczovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzLyNtb3VzZS1ldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5Qb2ludGVyRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BvaW50ZXJkb3duJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnb250b3VjaHN0YXJ0JyBpbiByb3cubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAndG91Y2hzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ21vdXNlZG93bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHNpbmNlIENocm9tZSA1NiBkZWZhdWx0cyBkb2N1bWVudCBsZXZlbCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgdG8gcGFzc2l2ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnQgYHRvdWNoc3RhcnRgIGxpc3RlbmVyIGlzIG5vdCBwYXNzaXZlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmV2ZXIgY2FsbCBgcHJldmVudERlZmF1bHQoKWAgb24gaXQsIHNvIHdlJ3JlIHNhZmUgbWFraW5nIGl0IHBhc3NpdmUgdG9vLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+cGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnN1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeU1vZGU7XG4gICAgICAgIGNvbnN0IHRoeUdyb3Vwc0NoYW5nZSA9IHNpbXBsZUNoYW5nZXMudGh5R3JvdXBzO1xuICAgICAgICBjb25zdCBpc0dyb3VwTW9kZSA9IG1vZGVDaGFuZ2UgJiYgbW9kZUNoYW5nZS5jdXJyZW50VmFsdWUgPT09ICdncm91cCc7XG4gICAgICAgIGlmIChpc0dyb3VwTW9kZSAmJiB0aHlHcm91cHNDaGFuZ2UgJiYgdGh5R3JvdXBzQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHRoeUdyb3Vwc0NoYW5nZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGlmZikge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmYuZGlmZih0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGh5LXRhYmxlLWJvZHlcIlxuICBjZGtTY3JvbGxhYmxlXG4gIFtuZ0NsYXNzXT1cInsgJ3RoeS10YWJsZS1maXhlZCc6IGhhc0ZpeGVkLCAndGh5LXRhYmxlLWJvcmRlcmVkLXRoZW1lJzogdGhlbWUgPT09ICdib3JkZXJlZCcgJiYgaGFzRml4ZWQgfVwiPlxuICA8dGFibGVcbiAgICAjdGFibGVcbiAgICBjbGFzcz1cInRhYmxlXCJcbiAgICBbbmdDbGFzc109XCJbY2xhc3NOYW1lXVwiXG4gICAgW2NsYXNzLnRhYmxlLWZpeGVkXT1cInRoeUxheW91dEZpeGVkXCJcbiAgICBbY2xhc3MudGFibGUtZHJhZ2dhYmxlXT1cImRyYWdnYWJsZVwiXG4gICAgW2NsYXNzLnRhYmxlLWdyb3VwXT1cIm1vZGUgPT09ICdncm91cCdcIlxuICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGh5TWluV2lkdGhcIj5cbiAgICA8Y29sZ3JvdXA+XG4gICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFt3aWR0aF09XCJjb2x1bW4ud2lkdGhcIiBbc3R5bGUubWluV2lkdGhdPVwiaGFzRml4ZWQgPyBjb2x1bW4ud2lkdGggOiBjb2x1bW4ubWluV2lkdGhcIiAvPlxuICAgIDwvY29sZ3JvdXA+XG5cbiAgICA8dGhlYWQgKm5nSWY9XCIhdGh5SGVhZGxlc3NcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uSGVhZGVyQ2xpY2soJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uIFtuZ0NsYXNzXT1cIlsndGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZS1pY29uJywgJ3B4LTEnLCBjb2x1bW4uc29ydERpcmVjdGlvbl1cIiB0aHlJY29uTmFtZT1cInNvcnQtdmVydGljYWwtdHRcIj5cbiAgICAgICAgICAgIDwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG5cbiAgICA8dGJvZHlcbiAgICAgICpuZ0lmPVwibG9hZGluZ0RvbmVcIlxuICAgICAgdGh5RHJhZ0Ryb3BcbiAgICAgIGNka0Ryb3BMaXN0XG4gICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZ2dhYmxlXCJcbiAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZHJvcExpc3RFbnRlclByZWRpY2F0ZVwiXG4gICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJhZ0Ryb3BwZWQoJGV2ZW50KVwiPlxuICAgICAgPCEtLSBncm91cCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnZ3JvdXAnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZEdyb3VwKGdyb3VwKVwiXG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJncm91cFwiXG4gICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ0dyb3VwU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnR3JvdXBFbmQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoeS10YWJsZS1ncm91cC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhZ2dhYmxlICYmICEoZ3JvdXAgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJleHBhbmQtaWNvblwiIFt0aHlJY29uTmFtZV09XCJncm91cC5leHBhbmQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGdyb3VwLm9yaWdpbiwgZ3JvdXA6IGdyb3VwLm9yaWdpbiB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwLmNoaWxkcmVuPy5sZW5ndGggJiYgZ3JvdXAuZXhwYW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZ3JvdXAuY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBsaXN05qih5byP5LiL5rKh5pyJ55u05o6l5L2/55SoaXRlbeaooeadv++8jOaYr+WboOS4uuS9v+eUqOS6huaooeadv+W9seWTjeS6hkFuZ3VsYXLnmoTkvp3otZbmoJHvvIzlr7zoh7RDZGtEcmFnRHJvcOaOkuW6j+WkseaViO+8jOebruWJjei/meagt+S/ruaUueWPr+S7peaaguaXtuino+WGs+e6v+S4iuS4jeiDveaOkuW6j+eahOmXrumimO+8jFRyZWXmqKHlvI/nmoTmjpLluo/mmoLml7bkuI3mlK/mjIEgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2xpc3QnXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICNyb3dzXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicmVuZGVyUm93Q2xhc3NOYW1lKHJvdywgaSlcIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgKHRoeUNvbnRleHRNZW51KT1cIm9uUm93Q29udGV4dE1lbnUoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgaW5kZXg6IGksIGxldmVsOiAwIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RyVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaW5kZXhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgIGNsYXNzPVwidGh5LXNvcnRhYmxlLWl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cInJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRkc1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMVxuICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBpc0V4cGFuZGVkKHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3dbdGh5Q2hpbGRyZW5LZXldOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IGNoaWxkLCBpbmRleDogaiwgbGV2ZWw6IGxldmVsICsgMSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Rkc1RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LW9wZXJhdGlvbi1saW5rc109XCIhIWNvbHVtbi5vcGVyYXRpb25hbFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc2Vjb25kYXJ5XT1cIiEhY29sdW1uLnNlY29uZGFyeVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jaGVja2JveC1jb2x1bW5dPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmQgPyB0ZEluZGVudENvbXB1dGVkKGxldmVsKSA6IG51bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaiA9PT0gMCAmJiBkcmFnZ2FibGUgJiYgIShyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS10ZW1wbGF0ZS0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWV4cGFuZC1pY29uIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0V4cGFuZChyb3cpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tbm90IHRlbXBsYXRlLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8IS0tIGRlZmF1bHQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm1vZGVsICYmICFjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtZXhwYW5kLWljb24gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93RXhwYW5kKHJvdykgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB8IGlzVmFsaWRNb2RlbFZhbHVlOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGVmYXVsdFRleHRcIiBjbGFzcz1cInRleHQtZGVzY1wiPlxuICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmRlZmF1bHRUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBpbmRleCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5pbmRleFwiPlxuICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4ua2V5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIHJhZGlvIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFJhZGlvUm93XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvU2VsZWN0Q2hhbmdlKCRldmVudCwgcm93KVwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBzd2l0Y2ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoXCI+XG4gICAgICAgICAgICAgIDx0aHktc3dpdGNoXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAodGh5Q2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCI+PC90aHktc3dpdGNoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdEb25lICYmIG1vZGVsLmxlbmd0aCA9PT0gMCAmJiBncm91cHMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0aHktdGFibGUtZW1wdHkgY2xlYXItaG92ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW1wdHlUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0RW1wdHlcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRFbXB0eT5cbiAgICAgIDx0aHktZW1wdHlcbiAgICAgICAgW3RoeU1lc3NhZ2VdPVwiZW1wdHlPcHRpb25zLm1lc3NhZ2VcIlxuICAgICAgICBbdGh5VHJhbnNsYXRpb25LZXldPVwiZW1wdHlPcHRpb25zLnRyYW5zbGF0aW9uS2V5XCJcbiAgICAgICAgW3RoeVRyYW5zbGF0aW9uVmFsdWVzXT1cImVtcHR5T3B0aW9ucy50cmFuc2xhdGlvblZhbHVlc1wiXG4gICAgICAgIFt0aHlFbnRpdHlOYW1lXT1cImVtcHR5T3B0aW9ucy5lbnRpdHlOYW1lXCJcbiAgICAgICAgW3RoeUVudGl0eU5hbWVUcmFuc2xhdGVLZXldPVwiZW1wdHlPcHRpb25zLmVudGl0eU5hbWVUcmFuc2xhdGVLZXlcIlxuICAgICAgICBbdGh5SWNvbk5hbWVdPVwiZW1wdHlPcHRpb25zLmljb25OYW1lXCJcbiAgICAgICAgW3RoeVNpemVdPVwiZW1wdHlPcHRpb25zLnNpemVcIlxuICAgICAgICBbdGh5TWFyZ2luVG9wXT1cImVtcHR5T3B0aW9ucy5tYXJnaW5Ub3BcIlxuICAgICAgICBbdGh5VG9wQXV0b109XCJlbXB0eU9wdGlvbnMudG9wQXV0b1wiXG4gICAgICAgIFt0aHlDb250YWluZXJdPVwiZW1wdHlPcHRpb25zLmNvbnRhaW5lclwiPjwvdGh5LWVtcHR5PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDx0aHktdGFibGUtc2tlbGV0b25cbiAgICAqbmdJZj1cIiFsb2FkaW5nRG9uZVwiXG4gICAgW3RoeVJvd0NvdW50XT1cIjZcIlxuICAgIFt0aHlIZWFkbGVzc109XCJ0cnVlXCJcbiAgICBbdGh5VGhlbWVdPVwidGhlbWVcIlxuICAgIFt0aHlTaXplXT1cInNpemVcIlxuICAgIFt0aHlNaW5XaWR0aF09XCJ0aHlNaW5XaWR0aFwiXG4gICAgW3RoeUNvbHVtbnNdPVwic2tlbGV0b25Db2x1bW5zXCI+XG4gIDwvdGh5LXRhYmxlLXNrZWxldG9uPlxuXG4gIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZm9vdGVyXCIgKm5nSWY9XCJwYWdpbmF0aW9uLnRvdGFsID4gcGFnaW5hdGlvbi5zaXplXCIgW2NsYXNzLnRoeS10YWJsZS1mb290ZXItaGFzLXBhZGRpbmddPVwidGhlbWUgPT09ICdkZWZhdWx0J1wiPlxuICAgIDx0aHktcGFnaW5hdGlvblxuICAgICAgW3RoeVBhZ2VJbmRleF09XCJwYWdpbmF0aW9uLmluZGV4XCJcbiAgICAgIFt0aHlUb3RhbF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcbiAgICAgIFt0aHlQYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnNpemVcIlxuICAgICAgW3RoeVBhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uLnNpemVPcHRpb25zXCJcbiAgICAgIFt0aHlTaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyXCJcbiAgICAgIFt0aHlTaG93VG90YWxdPVwic2hvd1RvdGFsXCJcbiAgICAgICh0aHlQYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAodGh5UGFnZUluZGV4Q2hhbmdlKT1cIm9uUGFnZUluZGV4Q2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L3RoeS1wYWdpbmF0aW9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|