ngx-tethys 17.0.0 → 17.0.2
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 +26 -7
- package/action/action.component.d.ts +3 -0
- package/affix/affix.component.d.ts +2 -0
- package/alert/alert.component.d.ts +1 -0
- package/anchor/anchor.component.d.ts +3 -0
- package/arrow-switcher/arrow-switcher.component.d.ts +1 -0
- package/autocomplete/autocomplete.component.d.ts +2 -3
- package/autocomplete/autocomplete.trigger.directive.d.ts +3 -0
- package/avatar/avatar.component.d.ts +4 -0
- package/back-top/back-top.component.d.ts +1 -0
- package/badge/badge.component.d.ts +5 -0
- package/button/button-icon.component.d.ts +2 -0
- package/button/button.component.d.ts +2 -0
- package/card/card.component.d.ts +3 -0
- package/card/content.component.d.ts +2 -1
- package/carousel/carousel.component.d.ts +5 -0
- package/cascader/cascader-li.component.d.ts +9 -2
- package/cascader/cascader-search-option.component.d.ts +7 -2
- package/cascader/cascader.component.d.ts +23 -2
- package/cascader/styles/cascader.scss +1 -0
- package/cascader/types.d.ts +1 -0
- package/checkbox/checkbox.component.d.ts +1 -0
- package/collapse/collapse-item.component.d.ts +2 -0
- package/collapse/collapse.component.d.ts +1 -0
- package/color-picker/color-picker-panel.component.d.ts +1 -0
- package/color-picker/color-picker.component.d.ts +7 -1
- package/copy/copy.directive.d.ts +1 -0
- package/core/behaviors/decorators.d.ts +6 -0
- package/date-picker/abstract-picker.component.d.ts +8 -1
- package/date-picker/abstract-picker.directive.d.ts +4 -0
- package/date-picker/base-picker.component.d.ts +2 -0
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -0
- package/date-picker/lib/popups/inner-popup.component.d.ts +1 -0
- package/date-picker/picker.component.d.ts +1 -0
- package/date-range/date-range.component.d.ts +2 -0
- package/dialog/body/dialog-body.component.d.ts +2 -1
- package/dialog/footer/dialog-footer.component.d.ts +1 -0
- package/dialog/header/dialog-header.component.d.ts +1 -0
- package/divider/divider.component.d.ts +2 -0
- package/drag-drop/drag-handle.directive.d.ts +1 -0
- package/drag-drop/drag.directive.d.ts +1 -0
- package/drag-drop/drop-container.directive.d.ts +1 -0
- package/dropdown/dropdown-menu-item.directive.d.ts +3 -1
- package/dropdown/dropdown-menu.component.d.ts +1 -0
- package/dropdown/dropdown.directive.d.ts +3 -0
- package/empty/empty.component.d.ts +1 -0
- package/esm2022/action/action.component.mjs +9 -22
- package/esm2022/affix/affix.component.mjs +8 -15
- package/esm2022/alert/alert.component.mjs +5 -10
- package/esm2022/anchor/anchor.component.mjs +10 -20
- package/esm2022/arrow-switcher/arrow-switcher.component.mjs +5 -11
- package/esm2022/autocomplete/autocomplete.component.mjs +5 -23
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +9 -20
- package/esm2022/avatar/avatar.component.mjs +14 -30
- package/esm2022/back-top/back-top.component.mjs +6 -10
- package/esm2022/badge/badge.component.mjs +15 -37
- package/esm2022/button/button-icon.component.mjs +9 -20
- package/esm2022/button/button.component.mjs +7 -16
- package/esm2022/card/card.component.mjs +6 -20
- package/esm2022/card/content.component.mjs +5 -6
- package/esm2022/carousel/carousel.component.mjs +13 -30
- package/esm2022/cascader/cascader-li.component.mjs +16 -31
- package/esm2022/cascader/cascader-search-option.component.mjs +12 -21
- package/esm2022/cascader/cascader.component.mjs +32 -52
- package/esm2022/cascader/types.mjs +1 -1
- package/esm2022/checkbox/checkbox.component.mjs +7 -13
- package/esm2022/collapse/collapse-item.component.mjs +8 -15
- package/esm2022/collapse/collapse.component.mjs +5 -10
- package/esm2022/color-picker/color-picker-panel.component.mjs +5 -10
- package/esm2022/color-picker/color-picker.component.mjs +17 -37
- package/esm2022/copy/copy.directive.mjs +5 -10
- package/esm2022/core/behaviors/decorators.mjs +7 -44
- package/esm2022/date-picker/abstract-picker.component.mjs +21 -45
- package/esm2022/date-picker/abstract-picker.directive.mjs +11 -27
- package/esm2022/date-picker/base-picker.component.mjs +8 -15
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -10
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +4 -2
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +7 -6
- package/esm2022/date-picker/picker.component.mjs +6 -10
- package/esm2022/date-range/date-range.component.mjs +7 -15
- package/esm2022/dialog/body/dialog-body.component.mjs +6 -6
- package/esm2022/dialog/footer/dialog-footer.component.mjs +6 -13
- package/esm2022/dialog/header/dialog-header.component.mjs +6 -10
- package/esm2022/divider/divider.component.mjs +7 -15
- package/esm2022/drag-drop/drag-handle.directive.mjs +5 -13
- package/esm2022/drag-drop/drag.directive.mjs +5 -11
- package/esm2022/drag-drop/drop-container.directive.mjs +5 -10
- package/esm2022/dropdown/dropdown-menu-item.directive.mjs +9 -19
- package/esm2022/dropdown/dropdown-menu.component.mjs +6 -9
- package/esm2022/dropdown/dropdown.directive.mjs +8 -22
- package/esm2022/empty/empty.component.mjs +7 -13
- package/esm2022/flexible-text/flexible-text.component.mjs +4 -11
- package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -10
- package/esm2022/form/form-group-label.directive.mjs +6 -6
- package/esm2022/form/form-group.component.mjs +13 -17
- package/esm2022/icon/icon.component.mjs +6 -20
- package/esm2022/image/image.directive.mjs +7 -15
- package/esm2022/input/input-search.component.mjs +6 -11
- package/esm2022/input/input.component.mjs +7 -15
- package/esm2022/input-number/input-number.component.mjs +12 -25
- package/esm2022/layout/header.component.mjs +9 -19
- package/esm2022/layout/sidebar-header.component.mjs +5 -10
- package/esm2022/layout/sidebar.component.mjs +22 -45
- package/esm2022/list/list.component.mjs +5 -11
- package/esm2022/list/selection/selection-list.mjs +13 -10
- package/esm2022/loading/loading.component.mjs +9 -20
- package/esm2022/menu/group/menu-group.component.mjs +12 -38
- package/esm2022/menu/item/action/menu-item-action.component.mjs +5 -10
- package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -10
- package/esm2022/menu/menu.component.mjs +5 -10
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +6 -6
- package/esm2022/nav/nav-ink-bar.directive.mjs +7 -15
- package/esm2022/nav/nav-item.directive.mjs +10 -20
- package/esm2022/nav/nav.component.mjs +12 -25
- package/esm2022/pagination/pagination.component.mjs +18 -68
- package/esm2022/popover/popover.directive.mjs +12 -33
- package/esm2022/progress/progress-circle.component.mjs +9 -20
- package/esm2022/progress/progress-strip.component.mjs +5 -11
- package/esm2022/progress/progress.component.mjs +11 -23
- package/esm2022/property/properties.component.mjs +5 -10
- package/esm2022/property/property-item.component.mjs +8 -15
- package/esm2022/property-operation/property-operation.component.mjs +16 -37
- package/esm2022/radio/group/radio-group.component.mjs +6 -21
- package/esm2022/rate/rate-item.component.mjs +5 -10
- package/esm2022/rate/rate.component.mjs +16 -25
- package/esm2022/resizable/resizable.directive.mjs +24 -62
- package/esm2022/resizable/resize-handle.component.mjs +6 -10
- package/esm2022/resizable/resize-handles.component.mjs +5 -10
- package/esm2022/segment/segment-item.component.mjs +5 -10
- package/esm2022/segment/segment.component.mjs +7 -16
- package/esm2022/select/custom-select/custom-select.component.mjs +30 -65
- package/esm2022/select/native-select/native-select.component.mjs +6 -10
- package/esm2022/shared/base-form-check.component.mjs +10 -20
- package/esm2022/shared/directives/thy-autofocus.directive.mjs +10 -15
- package/esm2022/shared/directives/thy-scroll.directive.mjs +6 -13
- package/esm2022/shared/directives/thy-show.mjs +5 -11
- package/esm2022/shared/option/group/option-group.component.mjs +5 -10
- package/esm2022/shared/option/list-option/list-option.component.mjs +6 -13
- package/esm2022/shared/option/option.component.mjs +5 -11
- package/esm2022/shared/select/select-control/select-control.component.mjs +17 -44
- package/esm2022/skeleton/skeleton-circle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +6 -9
- package/esm2022/skeleton/skeleton.component.mjs +5 -10
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/list.component.mjs +6 -9
- package/esm2022/skeleton/stylized/paragraph.component.mjs +6 -9
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +6 -6
- package/esm2022/slider/slider.component.mjs +18 -35
- package/esm2022/space/space.component.mjs +6 -10
- package/esm2022/stepper/step-header.component.mjs +9 -20
- package/esm2022/stepper/stepper.component.mjs +7 -16
- package/esm2022/switch/switch.component.mjs +12 -17
- package/esm2022/table/table-column.component.mjs +9 -31
- package/esm2022/table/table-skeleton.component.mjs +8 -14
- package/esm2022/table/table.component.mjs +32 -83
- package/esm2022/tabs/tab.component.mjs +5 -10
- package/esm2022/tabs/tabs.component.mjs +8 -15
- package/esm2022/tag/tag.component.mjs +6 -10
- package/esm2022/time-picker/time-picker-panel.component.mjs +8 -15
- package/esm2022/time-picker/time-picker.component.mjs +20 -46
- package/esm2022/timeline/timeline.component.mjs +5 -10
- package/esm2022/tooltip/tooltip.directive.mjs +11 -34
- package/esm2022/tree/tree-node.component.mjs +17 -40
- package/esm2022/tree/tree.component.mjs +19 -47
- package/esm2022/tree-select/tree-select.component.mjs +18 -40
- package/esm2022/upload/file-select-base.mjs +7 -6
- package/esm2022/upload/file-select.component.mjs +11 -26
- package/esm2022/version.mjs +2 -2
- package/esm2022/vote/vote.component.mjs +11 -33
- package/esm2022/watermark/watermark.directive.mjs +6 -10
- package/fesm2022/ngx-tethys-action.mjs +9 -21
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-affix.mjs +6 -14
- package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +4 -9
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +8 -19
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -10
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +14 -39
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +14 -29
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-back-top.mjs +5 -9
- package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +14 -36
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +13 -30
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +8 -23
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +12 -29
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +55 -95
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +5 -12
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +10 -20
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +19 -42
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +4 -9
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +6 -43
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +48 -94
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +6 -14
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +13 -21
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +6 -14
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +10 -25
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +19 -42
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +5 -12
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +3 -10
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +19 -25
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +5 -19
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +7 -14
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +11 -24
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +10 -21
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +31 -64
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +16 -18
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +8 -19
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +20 -55
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +28 -55
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +17 -67
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +11 -32
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-progress.mjs +20 -45
- package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +14 -36
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +10 -21
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +5 -19
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +18 -30
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +29 -73
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +10 -21
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +32 -70
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +49 -105
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +20 -38
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +6 -5
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +17 -34
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +5 -9
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +13 -31
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +11 -16
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +43 -120
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +10 -20
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +5 -9
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +24 -55
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +4 -9
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +10 -33
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +17 -39
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +33 -82
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +15 -28
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +10 -32
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +5 -9
- package/fesm2022/ngx-tethys-watermark.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 +1 -0
- package/form/form-group-error/form-group-error.component.d.ts +1 -0
- package/form/form-group-label.directive.d.ts +2 -1
- package/form/form-group.component.d.ts +5 -2
- package/icon/icon.component.d.ts +3 -0
- package/image/image.directive.d.ts +2 -0
- package/input/input-search.component.d.ts +1 -0
- package/input/input.component.d.ts +2 -0
- package/input-number/input-number.component.d.ts +4 -0
- package/layout/header.component.d.ts +5 -2
- package/layout/sidebar-header.component.d.ts +1 -0
- package/layout/sidebar.component.d.ts +14 -4
- package/list/list.component.d.ts +1 -0
- package/list/selection/selection-list.d.ts +4 -1
- package/loading/loading.component.d.ts +4 -2
- package/menu/group/menu-group.component.d.ts +6 -0
- package/menu/item/action/menu-item-action.component.d.ts +1 -0
- package/menu/item/name/menu-item-name.component.d.ts +1 -0
- package/menu/menu.component.d.ts +1 -0
- package/nav/icon-nav/icon-nav-link.directive.d.ts +2 -1
- package/nav/nav-ink-bar.directive.d.ts +2 -0
- package/nav/nav-item.directive.d.ts +3 -0
- package/nav/nav.component.d.ts +4 -0
- package/package.json +7 -7
- package/pagination/pagination.component.d.ts +11 -0
- package/popover/popover.directive.d.ts +5 -0
- package/progress/progress-circle.component.d.ts +3 -0
- package/progress/progress-strip.component.d.ts +1 -0
- package/progress/progress.component.d.ts +3 -0
- package/property/properties.component.d.ts +1 -0
- package/property/property-item.component.d.ts +2 -0
- package/property-operation/property-operation.component.d.ts +5 -0
- package/radio/group/radio-group.component.d.ts +2 -2
- package/rate/rate-item.component.d.ts +1 -0
- package/rate/rate.component.d.ts +5 -1
- package/resizable/resizable.directive.d.ts +10 -1
- package/resizable/resize-handle.component.d.ts +1 -0
- package/resizable/resize-handles.component.d.ts +1 -0
- package/resizable/styles/resizable.scss +1 -0
- package/schematics/dependencies.js +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +1 -0
- package/segment/segment.component.d.ts +2 -0
- package/select/custom-select/custom-select.component.d.ts +12 -1
- package/select/native-select/native-select.component.d.ts +1 -0
- package/shared/base-form-check.component.d.ts +2 -0
- package/shared/directives/thy-autofocus.directive.d.ts +3 -1
- package/shared/directives/thy-scroll.directive.d.ts +1 -0
- package/shared/directives/thy-show.d.ts +1 -0
- package/shared/option/group/option-group.component.d.ts +1 -0
- package/shared/option/list-option/list-option.component.d.ts +1 -0
- package/shared/option/option.component.d.ts +1 -0
- package/shared/option/styles/select-dropdown.scss +1 -0
- package/shared/select/select-control/select-control.component.d.ts +7 -0
- package/skeleton/skeleton-circle.component.d.ts +1 -0
- package/skeleton/skeleton-rectangle.component.d.ts +1 -0
- package/skeleton/skeleton.component.d.ts +1 -0
- package/skeleton/stylized/bullet-list.component.d.ts +1 -0
- package/skeleton/stylized/list.component.d.ts +1 -0
- package/skeleton/stylized/paragraph.component.d.ts +1 -0
- package/slide/slide-body/slide-body-section.component.d.ts +2 -1
- package/slider/slider.component.d.ts +6 -1
- package/space/space.component.d.ts +1 -0
- package/stepper/step-header.component.d.ts +3 -0
- package/stepper/stepper.component.d.ts +2 -0
- package/switch/switch.component.d.ts +3 -1
- package/table/table-column.component.d.ts +7 -2
- package/table/table-skeleton.component.d.ts +2 -0
- package/table/table.component.d.ts +14 -0
- package/tabs/tab.component.d.ts +1 -0
- package/tabs/tabs.component.d.ts +2 -0
- package/tag/tag.component.d.ts +1 -0
- package/time-picker/time-picker-panel.component.d.ts +2 -0
- package/time-picker/time-picker.component.d.ts +6 -2
- package/timeline/timeline.component.d.ts +1 -0
- package/tooltip/tooltip.directive.d.ts +5 -0
- package/tree/tree-node.component.d.ts +7 -0
- package/tree/tree.component.d.ts +8 -0
- package/tree-select/tree-select.component.d.ts +7 -0
- package/upload/file-select-base.d.ts +1 -0
- package/upload/file-select.component.d.ts +3 -0
- package/vote/vote.component.d.ts +4 -2
- package/watermark/watermark.directive.d.ts +1 -0
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { InputBoolean, InputNumber } from 'ngx-tethys/core';
|
|
3
1
|
import { helpers } from 'ngx-tethys/util';
|
|
4
2
|
import { useHostRenderer } from '@tethys/cdk/dom';
|
|
5
3
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
6
4
|
import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
|
|
7
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, forwardRef, HostBinding, Inject, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
5
|
+
import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, forwardRef, HostBinding, Inject, Input, numberAttribute, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
8
6
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
9
7
|
import { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';
|
|
10
8
|
import { ThyTreeNode } from './tree-node.class';
|
|
@@ -508,7 +506,7 @@ export class ThyTree {
|
|
|
508
506
|
this.destroy$.complete();
|
|
509
507
|
}
|
|
510
508
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyTree, deps: [{ token: i1.ThyTreeService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
511
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
509
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.3", type: ThyTree, isStandalone: true, selector: "thy-tree", inputs: { thyNodes: "thyNodes", thyShowExpand: "thyShowExpand", thyMultiple: ["thyMultiple", "thyMultiple", booleanAttribute], thyDraggable: ["thyDraggable", "thyDraggable", booleanAttribute], thyCheckable: ["thyCheckable", "thyCheckable", booleanAttribute], thyClickBehavior: "thyClickBehavior", thyCheckStateResolve: "thyCheckStateResolve", thyAsync: ["thyAsync", "thyAsync", booleanAttribute], thyType: "thyType", thyIcons: "thyIcons", thySize: "thySize", thyVirtualScroll: ["thyVirtualScroll", "thyVirtualScroll", booleanAttribute], thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", booleanAttribute], thySelectedKeys: "thySelectedKeys", thyIndent: ["thyIndent", "thyIndent", numberAttribute], thyBeforeDragStart: "thyBeforeDragStart", thyBeforeDragDrop: "thyBeforeDragDrop" }, outputs: { viewport: "viewport", thyOnClick: "thyOnClick", thyOnCheckboxChange: "thyOnCheckboxChange", thyOnExpandChange: "thyOnExpandChange", thyOnDragDrop: "thyOnDragDrop", thyDblClick: "thyDblClick" }, host: { properties: { "class.thy-multiple-selection-list": "this.thyMultiple", "class.thy-tree-draggable": "this.thyDraggable", "class.thy-virtual-scrolling-tree": "this.thyVirtualScroll", "class.thy-tree": "this.thyTreeClass", "class.thy-tree-dragging": "this.dragging" } }, providers: [
|
|
512
510
|
{
|
|
513
511
|
provide: NG_VALUE_ACCESSOR,
|
|
514
512
|
useExisting: forwardRef(() => ThyTree),
|
|
@@ -521,40 +519,6 @@ export class ThyTree {
|
|
|
521
519
|
ThyTreeService
|
|
522
520
|
], queries: [{ propertyName: "templateRef", first: true, predicate: ["treeNodeTemplate"], descendants: true, static: true }, { propertyName: "emptyChildrenTemplate", first: true, predicate: ["emptyChildrenTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true }, { propertyName: "cdkDrags", predicate: CdkDrag, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<cdk-virtual-scroll-viewport\n #viewport\n *ngIf=\"thyVirtualScroll\"\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n</cdk-virtual-scroll-viewport>\n\n<div\n *ngIf=\"!thyVirtualScroll\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n <thy-tree-node\n *ngFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: 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: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: ThyTreeNodeComponent, selector: "thy-tree-node", inputs: ["node", "thyAsync", "thyMultiple", "thyDraggable", "thyCheckable", "thyClickBehavior", "thyTitleTruncate", "templateRef", "emptyChildrenTemplateRef", "thyItemSize", "thyIndent"], outputs: ["thyOnClick", "thyDblClick", "thyOnExpandChange", "thyOnCheckboxChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: ThyTreeNodeDraggablePipe, name: "treeNodeDraggable" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
523
521
|
}
|
|
524
|
-
__decorate([
|
|
525
|
-
InputBoolean(),
|
|
526
|
-
__metadata("design:type", Object)
|
|
527
|
-
], ThyTree.prototype, "thyMultiple", void 0);
|
|
528
|
-
__decorate([
|
|
529
|
-
InputBoolean(),
|
|
530
|
-
__metadata("design:type", Boolean),
|
|
531
|
-
__metadata("design:paramtypes", [Boolean])
|
|
532
|
-
], ThyTree.prototype, "thyDraggable", null);
|
|
533
|
-
__decorate([
|
|
534
|
-
InputBoolean(),
|
|
535
|
-
__metadata("design:type", Boolean)
|
|
536
|
-
], ThyTree.prototype, "thyCheckable", void 0);
|
|
537
|
-
__decorate([
|
|
538
|
-
InputBoolean(),
|
|
539
|
-
__metadata("design:type", Object)
|
|
540
|
-
], ThyTree.prototype, "thyAsync", void 0);
|
|
541
|
-
__decorate([
|
|
542
|
-
InputBoolean(),
|
|
543
|
-
__metadata("design:type", Object)
|
|
544
|
-
], ThyTree.prototype, "thyVirtualScroll", void 0);
|
|
545
|
-
__decorate([
|
|
546
|
-
InputNumber(),
|
|
547
|
-
__metadata("design:type", Number),
|
|
548
|
-
__metadata("design:paramtypes", [Number])
|
|
549
|
-
], ThyTree.prototype, "thyItemSize", null);
|
|
550
|
-
__decorate([
|
|
551
|
-
InputBoolean(),
|
|
552
|
-
__metadata("design:type", Object)
|
|
553
|
-
], ThyTree.prototype, "thyTitleTruncate", void 0);
|
|
554
|
-
__decorate([
|
|
555
|
-
InputNumber(),
|
|
556
|
-
__metadata("design:type", Object)
|
|
557
|
-
], ThyTree.prototype, "thyIndent", void 0);
|
|
558
522
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyTree, decorators: [{
|
|
559
523
|
type: Component,
|
|
560
524
|
args: [{ selector: 'thy-tree', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
@@ -595,20 +559,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
595
559
|
type: HostBinding,
|
|
596
560
|
args: [`class.thy-multiple-selection-list`]
|
|
597
561
|
}, {
|
|
598
|
-
type: Input
|
|
562
|
+
type: Input,
|
|
563
|
+
args: [{ transform: booleanAttribute }]
|
|
599
564
|
}], thyDraggable: [{
|
|
600
565
|
type: HostBinding,
|
|
601
566
|
args: ['class.thy-tree-draggable']
|
|
602
567
|
}, {
|
|
603
|
-
type: Input
|
|
568
|
+
type: Input,
|
|
569
|
+
args: [{ transform: booleanAttribute }]
|
|
604
570
|
}], thyCheckable: [{
|
|
605
|
-
type: Input
|
|
571
|
+
type: Input,
|
|
572
|
+
args: [{ transform: booleanAttribute }]
|
|
606
573
|
}], thyClickBehavior: [{
|
|
607
574
|
type: Input
|
|
608
575
|
}], thyCheckStateResolve: [{
|
|
609
576
|
type: Input
|
|
610
577
|
}], thyAsync: [{
|
|
611
|
-
type: Input
|
|
578
|
+
type: Input,
|
|
579
|
+
args: [{ transform: booleanAttribute }]
|
|
612
580
|
}], thyType: [{
|
|
613
581
|
type: Input
|
|
614
582
|
}], thyIcons: [{
|
|
@@ -619,15 +587,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
619
587
|
type: HostBinding,
|
|
620
588
|
args: ['class.thy-virtual-scrolling-tree']
|
|
621
589
|
}, {
|
|
622
|
-
type: Input
|
|
590
|
+
type: Input,
|
|
591
|
+
args: [{ transform: booleanAttribute }]
|
|
623
592
|
}], thyItemSize: [{
|
|
624
|
-
type: Input
|
|
593
|
+
type: Input,
|
|
594
|
+
args: [{ transform: numberAttribute }]
|
|
625
595
|
}], thyTitleTruncate: [{
|
|
626
|
-
type: Input
|
|
596
|
+
type: Input,
|
|
597
|
+
args: [{ transform: booleanAttribute }]
|
|
627
598
|
}], thySelectedKeys: [{
|
|
628
599
|
type: Input
|
|
629
600
|
}], thyIndent: [{
|
|
630
|
-
type: Input
|
|
601
|
+
type: Input,
|
|
602
|
+
args: [{ transform: numberAttribute }]
|
|
631
603
|
}], thyBeforeDragStart: [{
|
|
632
604
|
type: Input
|
|
633
605
|
}], thyBeforeDragDrop: [{
|
|
@@ -658,4 +630,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
658
630
|
type: ViewChildren,
|
|
659
631
|
args: [CdkDrag]
|
|
660
632
|
}] } });
|
|
661
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFLSCxtQkFBbUIsRUFFbkIsWUFBWSxFQUdmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFP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UUFBUTtzQkFEUCxXQUFXO3VCQUFDLHlCQUF5QjtnQkFHZixRQUFRO3NCQUE5QixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IGhlbHBlcnMgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgdXNlSG9zdFJlbmRlcmVyIH0gZnJvbSAnQHRldGh5cy9jZGsvZG9tJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUSFlfVFJFRV9BQlNUUkFDVF9UT0tFTiB9IGZyb20gJy4vdHJlZS1hYnN0cmFjdCc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZSB9IGZyb20gJy4vdHJlZS1ub2RlLmNsYXNzJztcbmltcG9ydCB7XG4gICAgVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCxcbiAgICBUaHlUcmVlQmVmb3JlRHJhZ1N0YXJ0Q29udGV4dCxcbiAgICBUaHlDbGlja0JlaGF2aW9yLFxuICAgIFRoeVRyZWVEcmFnRHJvcEV2ZW50LFxuICAgIFRoeVRyZWVEcm9wUG9zaXRpb24sXG4gICAgVGh5VHJlZUVtaXRFdmVudCxcbiAgICBUaHlUcmVlSWNvbnMsXG4gICAgVGh5VHJlZU5vZGVDaGVja1N0YXRlLFxuICAgIFRoeVRyZWVOb2RlRGF0YVxufSBmcm9tICcuL3RyZWUuY2xhc3MnO1xuaW1wb3J0IHsgVGh5VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gJy4vdHJlZS1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdNb3ZlLCBDZGtEcmFnU3RhcnQsIENka0Ryb3BMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBhdWRpdFRpbWUsIGZpbHRlciwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUaHlUcmVlTm9kZURyYWdnYWJsZVBpcGUgfSBmcm9tICcuL3RyZWUucGlwZSc7XG5cbnR5cGUgVGh5VHJlZVNpemUgPSAnc20nIHwgJ2RlZmF1bHQnO1xuXG50eXBlIFRoeVRyZWVUeXBlID0gJ2RlZmF1bHQnIHwgJ2VzcGVjaWFsJztcblxuY29uc3QgdHJlZVR5cGVDbGFzc01hcCA9IHtcbiAgICBkZWZhdWx0OiBbJ3RoeS10cmVlLWRlZmF1bHQnXSxcbiAgICBlc3BlY2lhbDogWyd0aHktdHJlZS1lc3BlY2lhbCddXG59O1xuXG5jb25zdCB0cmVlSXRlbVNpemVNYXAgPSB7XG4gICAgZGVmYXVsdDogNDQsXG4gICAgc206IDQyXG59O1xuXG4vKipcbiAqIOagkeW9ouaOp+S7tue7hOS7tlxuICogQG5hbWUgdGh5LXRyZWVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5VHJlZSksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfVFJFRV9BQlNUUkFDVF9UT0tFTixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoeVRyZWUpXG4gICAgICAgIH0sXG4gICAgICAgIFRoeVRyZWVTZXJ2aWNlXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgQ2RrRHJhZyxcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgICAgICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxuICAgICAgICBUaHlUcmVlTm9kZUNvbXBvbmVudCxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIFRoeVRyZWVOb2RlRHJhZ2dhYmxlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VHJlZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX2RyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZXhwYW5kZWRLZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRLZXlzOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHByaXZhdGUgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKF86IGFueSkgPT4ge307XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8vIOe8k+WtmCBFbGVtZW50IOWSjCBEcmFnUmVmIOeahOWFs+ezu++8jOaWueS+v+WcqCBJdGVtIOaLluWKqOaXtuafpeaJvlxuICAgIHByaXZhdGUgbm9kZURyYWdzTWFwID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgQ2RrRHJhZzxUaHlUcmVlTm9kZT4+KCk7XG5cbiAgICBwcml2YXRlIG5vZGVEcmFnTW92ZWQgPSBuZXcgU3ViamVjdDxDZGtEcmFnTW92ZT4oKTtcblxuICAgIC8vIHByaXZhdGUgc3RhcnREcmFnTm9kZUV4cGFuZGVkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBzdGFydERyYWdOb2RlQ2xvbmU6IFRoeVRyZWVOb2RlO1xuXG4gICAgLy8gTm9kZSDmi5bliqjnu4/ov4fnm67moIfml7bkuLTml7borrDlvZXnm67moIdpZOS7peWPiuebuOWvueW6lOebruagh+eahOS9jee9rlxuICAgIHByaXZhdGUgbm9kZURyb3BUYXJnZXQ6IHtcbiAgICAgICAgcG9zaXRpb24/OiBUaHlUcmVlRHJvcFBvc2l0aW9uO1xuICAgICAgICBrZXk/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZHJvcEVudGVyUHJlZGljYXRlPzogKGNvbnRleHQ6IHsgc291cmNlOiBUaHlUcmVlTm9kZTsgdGFyZ2V0OiBUaHlUcmVlTm9kZTsgZHJvcFBvc2l0aW9uOiBUaHlUcmVlRHJvcFBvc2l0aW9uIH0pID0+IGJvb2xlYW4gPVxuICAgICAgICBjb250ZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dFeHBhbmQoY29udGV4dC50YXJnZXQpIHx8ICghdGhpcy5pc1Nob3dFeHBhbmQoY29udGV4dC50YXJnZXQpICYmIGNvbnRleHQuZHJvcFBvc2l0aW9uICE9PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmluKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgIHB1YmxpYyBfc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFRoeVRyZWVOb2RlPjtcblxuICAgIHB1YmxpYyBnZXQgdHJlZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS50cmVlTm9kZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGZsYXR0ZW5UcmVlTm9kZXM6IFRoeVRyZWVOb2RlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIOiZmuaLn+WMlua7muWKqOeahOinhuWPo1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBAVmlld0NoaWxkKCd2aWV3cG9ydCcsIHsgc3RhdGljOiBmYWxzZSB9KSB2aWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgLyoqXG4gICAgICogVHJlZU5vZGUg5bGV546w5omA6ZyA55qE5pWw5o2uXG4gICAgICogQHR5cGUgVGh5VHJlZU5vZGVEYXRhW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlOb2RlczogVGh5VHJlZU5vZGVEYXRhW107XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5bGV5byAXG4gICAgICogQHR5cGUgYm9vbGVhbiB8IEZ1bmN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2hvd0V4cGFuZDogYm9vbGVhbiB8ICgoXzogVGh5VHJlZU5vZGVEYXRhKSA9PiBib29sZWFuKSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbmlK/mjIHlpJrpgInoioLngrlcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoYGNsYXNzLnRoeS1tdWx0aXBsZS1zZWxlY3Rpb24tbGlzdGApXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeaLluaLveaOkuW6j1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZS1kcmFnZ2FibGUnKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeURyYWdnYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdGh5RHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIEgQ2hlY2tib3gg6YCJ5oupXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdGh5Q2hlY2thYmxlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog54K55Ye76IqC54K555qE6KGM5Li677yMYGRlZmF1bHRgIOS4uumAieS4reW9k+WJjeiKgueCue+8jGBzZWxlY3RDaGVja2JveGAg5Li66YCJ5Lit6IqC54K555qEIENoZWNrYm9477yMIGB0aHlDaGVja2FibGVgIOS4uiB0cnVlIOaXtueUn+aViOOAglxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNsaWNrQmVoYXZpb3I6IFRoeUNsaWNrQmVoYXZpb3IgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg54q25oCB55qE6K6h566X562W55WlXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHRoeUNoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmU6IChub2RlOiBUaHlUcmVlTm9kZSkgPT4gVGh5VHJlZU5vZGVDaGVja1N0YXRlKSB7XG4gICAgICAgIGlmIChyZXNvbHZlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnNldENoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeW8guatpeWKoOi9vVxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB0aHlBc3luYyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdGh5VHlwZTogVGh5VHJlZVR5cGUgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuI3lkIzlsZXnpLrnsbvlnovnmoQgVHJlZe+8jGBkZWZhdWx0YCDkuLrlsI/nrq3lpLTlsZXnpLrvvIwgYGVzcGVjaWFsYCDkuLog5Yqg5YeP5Y+35Zu+5qCH5bGV56S6XG4gICAgICogQHR5cGUgVGh5VHJlZVR5cGVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHlwZSh0eXBlOiBUaHlUcmVlVHlwZSkge1xuICAgICAgICB0aGlzLl90aHlUeXBlID0gdHlwZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdlc3BlY2lhbCcpIHtcbiAgICAgICAgICAgIHRoaXMudGh5SWNvbnMgPSB7IGV4cGFuZDogJ21pbnVzLXNxdWFyZScsIGNvbGxhcHNlOiAncGx1cy1zcXVhcmUnIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGh5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeVR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiN5ZCMIFRyZWUg5bGV5byA5oqY5Y+g55qE5Zu+5qCH77yMYGV4cGFuZGAg5Li65bGV5byA54q25oCB55qE5Zu+5qCH77yMYGNvbGxhcHNlYCDkuLrmipjlj6DnirbmgIHnmoTlm77moIdcbiAgICAgKiBAdHlwZSB7IGV4cGFuZDogc3RyaW5nLCBjb2xsYXBzZTogc3RyaW5nIH1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlJY29uczogVGh5VHJlZUljb25zID0ge307XG5cbiAgICBwcml2YXRlIF90aHlTaXplOiBUaHlUcmVlU2l6ZSA9ICdkZWZhdWx0JztcbiAgICAvKipcbiAgICAgKiDmlK/mjIEgYHNtYCB8IGBkZWZhdWx0YCDkuKTnp43lpKflsI/vvIzpu5jorqTlgLzkuLogYGRlZmF1bHRgXG4gICAgICogQHR5cGUgVGh5VHJlZVNpemVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZShzaXplOiBUaHlUcmVlU2l6ZSkge1xuICAgICAgICB0aGlzLl90aHlTaXplID0gc2l6ZTtcbiAgICAgICAgaWYgKHRoaXMuX3RoeVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RoeUl0ZW1TaXplID0gdHJlZUl0ZW1TaXplTWFwW3RoaXMuX3RoeVNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGh5SXRlbVNpemUgPSB0cmVlSXRlbVNpemVNYXAuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0aHlTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGh5U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKblvIDlkK/omZrmi5/mu5rliqhcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS12aXJ0dWFsLXNjcm9sbGluZy10cmVlJylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHRoeVZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3RoeUl0ZW1TaXplID0gNDQ7XG5cbiAgICAvKipcbiAgICAgKiDlvIDlkK/omZrmi5/mu5rliqjml7bvvIzljZXooYzoioLngrnnmoTpq5jluqbvvIzlvZNgdGh5U2l6ZWDkuLpgZGVmYXVsdGDml7bvvIzor6Xlj4LmlbDmiY3nlJ/mlYhcbiAgICAgKiBAZGVmYXVsdCA0NFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0TnVtYmVyKClcbiAgICBzZXQgdGh5SXRlbVNpemUoaXRlbVNpemU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy50aHlTaXplICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0dGluZyB0aHlTaXplIGFuZCB0aHlJdGVtU2l6ZSBhdCB0aGUgc2FtZSB0aW1lIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGh5SXRlbVNpemUgPSBpdGVtU2l6ZTtcbiAgICB9XG5cbiAgICBnZXQgdGh5SXRlbVNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aHlJdGVtU2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnlkI3np7DmmK/lkKbmlK/mjIHotoXlh7rmiKrlj5ZcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRoeVRpdGxlVHJ1bmNhdGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog5bey6YCJ5Lit55qEIG5vZGUg6IqC54K56ZuG5ZCIXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTZWxlY3RlZEtleXM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u57yp6L+b6Led56a777yM57yp6L+b6Led56a7ID0gdGh5SW5kZW50ICogbm9kZS5sZXZlbFxuICAgICAqIEB0eXBlIG51bWJlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHRoeUluZGVudCA9IDI1O1xuXG4gICAgLyoqXG4gICAgICog5ouW5ou95LmL5YmN55qE5Zue6LCD77yM5Ye95pWw6L+U5ZueIGZhbHNlIOWImemYu+atouaLluaLvVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUJlZm9yZURyYWdTdGFydDogKGNvbnRleHQ6IFRoeVRyZWVCZWZvcmVEcmFnU3RhcnRDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5ouW5pS+5Yiw5YWD57Sg5pe25Zue6LCD77yM5Ye95pWw6L+U5ZueIGZhbHNlIOWImemYu+atouaLluaUvuWIsOW9k+WJjeWFg+e0oFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUJlZm9yZURyYWdEcm9wOiAoY29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCkgPT4gYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWtkCBUcmVlTm9kZSDngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIGNoZWNrIOmAieaLqeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkNoZWNrYm94Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ngrnlh7vlsZXlvIDop6blj5Hkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25FeHBhbmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmi5bmi73kuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25EcmFnRHJvcDogRXZlbnRFbWl0dGVyPFRoeVRyZWVEcmFnRHJvcEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZURyYWdEcm9wRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlj4zlh7sgVHJlZU5vZGUg5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeURibENsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg55qE5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgndHJlZU5vZGVUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgc2V0IHRlbXBsYXRlUmVmKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0ZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWtkOeahOepuuaVsOaNrua4suafk+aooeadv1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGVtcHR5Q2hpbGRyZW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBzZXQgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmID0gdGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRyZWUnKVxuICAgIHRoeVRyZWVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLWRyYWdnaW5nJylcbiAgICBkcmFnZ2luZzogYm9vbGVhbjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oQ2RrRHJhZykgY2RrRHJhZ3M6IFF1ZXJ5TGlzdDxDZGtEcmFnPFRoeVRyZWVOb2RlPj47XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGh5VHJlZVNlcnZpY2U6IFRoeVRyZWVTZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50KSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRUaHlOb2RlcygpO1xuICAgICAgICB0aGlzLl9zZXRUcmVlVHlwZSgpO1xuICAgICAgICB0aGlzLl9zZXRUcmVlU2l6ZSgpO1xuICAgICAgICB0aGlzLl9pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2Rlcyh0aGlzLnRoeVNlbGVjdGVkS2V5cyk7XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5mbGF0dGVuTm9kZXMkLnN1YnNjcmliZShmbGF0dGVuVHJlZU5vZGVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IGZsYXR0ZW5UcmVlTm9kZXM7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka0RyYWdzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh0aGlzLmNka0RyYWdzKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZHJhZ3M6IFF1ZXJ5TGlzdDxDZGtEcmFnPFRoeVRyZWVOb2RlPj4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVEcmFnc01hcC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIGRyYWdzLmZvckVhY2goZHJhZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNka0RyYWcg5Y+Y5YyW5pe277yM57yT5a2YIEVsZW1lbnQg5LiOIERyYWdSZWYg55qE5YWz57O777yM5pa55L6/IERyYWcgTW92ZSDml7bmn6Xmib5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZURyYWdzTWFwLnNldChkcmFnLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZHJhZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZURyYWdNb3ZlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gYXVkaXRUaW1lKDMwKSxcbiAgICAgICAgICAgICAgICAvLyAgYXVkaXRUaW1lIOWPr+iDveS8muWvvOiHtOaLluWKqOe7k+adn+WQjuS7jeeEtuaJp+ihjCBtb3ZlZCDvvIzmiYDku6XpgJrov4fliKTmlq0gZHJhZ2dpbmcg54q25oCB5p2l6L+H5ruk5peg5pWIIG1vdmVkXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudDogQ2RrRHJhZ01vdmUpID0+IGV2ZW50LnNvdXJjZS5fZHJhZ1JlZi5pc0RyYWdnaW5nKCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWdNb3ZlZChldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeU5vZGVzICYmICFjaGFuZ2VzLnRoeU5vZGVzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFRoeU5vZGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5VHlwZSAmJiAhY2hhbmdlcy50aHlUeXBlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VHJlZVR5cGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50aHlNdWx0aXBsZSAmJiAhY2hhbmdlcy50aHlNdWx0aXBsZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cyAmJiAhY2hhbmdlcy50aHlTZWxlY3RlZEtleXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEtleXMgPSBjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RUcmVlTm9kZXMoY2hhbmdlcy50aHlTZWxlY3RlZEtleXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlclZpZXcgPSAoKSA9PiB7fTtcblxuICAgIGV2ZW50VHJpZ2dlckNoYW5nZWQoZXZlbnQ6IFRoeVRyZWVFbWl0RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5ldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2V4cGFuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy50aHlPbkV4cGFuZENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3hDaGFuZ2UnOlxuICAgICAgICAgICAgICAgIHRoaXMudGh5T25DaGVja2JveENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRUaHlOb2RlcygpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRLZXlzID0gdGhpcy5nZXRFeHBhbmRlZE5vZGVzKCkubWFwKG5vZGUgPT4gbm9kZS5rZXkpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEtleXMgPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmtleSk7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuaW5pdGlhbGl6ZVRyZWVOb2Rlcyh0aGlzLnRoeU5vZGVzKTtcbiAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gdGhpcy50aHlUcmVlU2VydmljZS5mbGF0dGVuVHJlZU5vZGVzO1xuICAgICAgICB0aGlzLl9zZWxlY3RUcmVlTm9kZXModGhpcy5fc2VsZWN0ZWRLZXlzKTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5leHBhbmRUcmVlTm9kZXModGhpcy5fZXhwYW5kZWRLZXlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUcmVlVHlwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5VHlwZSAmJiB0cmVlVHlwZUNsYXNzTWFwW3RoaXMudGh5VHlwZV0pIHtcbiAgICAgICAgICAgIHRyZWVUeXBlQ2xhc3NNYXBbdGhpcy50aHlUeXBlXS5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VHJlZVNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLmFkZENsYXNzKGB0aHktdHJlZS0ke3RoaXMudGh5U2l6ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy50aHlNdWx0aXBsZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0VHJlZU5vZGVzKGtleXM6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICAgICAgKGtleXMgfHwgW10pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKGtleSk7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZU5vZGUodGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChub2RlKTtcbiAgICB9XG5cbiAgICB0b2dnbGVUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiAhbm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleSB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBpc1Nob3dFeHBhbmQobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKGhlbHBlcnMuaXNGdW5jdGlvbih0aGlzLnRoeVNob3dFeHBhbmQpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudGh5U2hvd0V4cGFuZCBhcyBGdW5jdGlvbikobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlTaG93RXhwYW5kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogVGh5VHJlZU5vZGVEYXRhW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeU5vZGVzID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PFRoeVRyZWVOb2RlPikge1xuICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGFydERyYWdOb2RlQ2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIGlmIChldmVudC5zb3VyY2UuZGF0YS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICBldmVudC5zb3VyY2UuZGF0YS5zZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbWl0RHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgICAgICB0aGlzLm5vZGVEcmFnTW92ZWQubmV4dChldmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlPFRoeVRyZWVOb2RlPikge1xuICAgICAgICAvLyDpgJrov4fpvKDmoIfkvY3nva7mn6Xmib7lr7nlupTnmoTnm67moIcgSXRlbSDlhYPntKBcbiAgICAgICAgbGV0IGN1cnJlbnRQb2ludEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCFjdXJyZW50UG9pbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBjdXJyZW50UG9pbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndGh5LXRyZWUtbm9kZScpXG4gICAgICAgICAgICA/IGN1cnJlbnRQb2ludEVsZW1lbnRcbiAgICAgICAgICAgIDogKGN1cnJlbnRQb2ludEVsZW1lbnQuY2xvc2VzdCgnLnRoeS10cmVlLW5vZGUnKSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIOe8k+WtmOaUvue9ruebruagh0lkIOW5tuiuoeeul+m8oOagh+ebuOWvueW6lOeahOS9jee9rlxuICAgICAgICB0aGlzLm5vZGVEcm9wVGFyZ2V0ID0ge1xuICAgICAgICAgICAga2V5OiB0aGlzLm5vZGVEcmFnc01hcC5nZXQodGFyZ2V0RWxlbWVudCk/LmRhdGEua2V5LFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0RWxlbWVudCwgZXZlbnQpXG4gICAgICAgIH07XG4gICAgICAgIC8vIOaJp+ihjOWklumDqOS8oOWFpeeahCBkcm9wRW50ZXJQcmVkaWNhdGUg5Yik5pat5piv5ZCm5YWB6K645ouW5YWl55uu5qCH6aG5XG4gICAgICAgIGlmICh0aGlzLmRyb3BFbnRlclByZWRpY2F0ZSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMubm9kZURyYWdzTWFwLmdldCh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BFbnRlclByZWRpY2F0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZXZlbnQuc291cmNlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RHJhZ1JlZi5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBkcm9wUG9zaXRpb246IHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb25cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnRW5kZWQoZXZlbnQ6IENka0RyYWdFbmQ8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8g5ouW5ou957uT5p2f5ZCO5oGi5aSN5Y6f5aeL55qE5bGV5byA54q25oCBXG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNldEV4cGFuZGVkKHRoaXMuc3RhcnREcmFnTm9kZUNsb25lLmlzRXhwYW5kZWQpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREcmFnTm9kZUNsb25lID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25MaXN0RHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8VGh5VHJlZU5vZGVbXSwgVGh5VHJlZU5vZGVbXSwgVGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIGlmICghdGhpcy5ub2RlRHJvcFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc1Nob3dFeHBhbmQodGhpcy5zdGFydERyYWdOb2RlQ2xvbmUpICYmIHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb24gPT09IFRoeVRyZWVEcm9wUG9zaXRpb24uaW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZTtcbiAgICAgICAgY29uc3Qgc291cmNlTm9kZVBhcmVudCA9IHNvdXJjZU5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RHJhZ1JlZiA9IHRoaXMuY2RrRHJhZ3MuZmluZChpdGVtID0+IGl0ZW0uZGF0YT8ua2V5ID09PSB0aGlzLm5vZGVEcm9wVGFyZ2V0LmtleSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0YXJnZXREcmFnUmVmPy5kYXRhO1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlUGFyZW50ID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gICAgICAgIGNvbnN0IGJlZm9yZURyYWdEcm9wQ29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdEcm9wQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbTogc291cmNlTm9kZSxcbiAgICAgICAgICAgIHByZXZpb3VzQ29udGFpbmVySXRlbXM6IHNvdXJjZU5vZGVQYXJlbnQ/LmNoaWxkcmVuLFxuICAgICAgICAgICAgaXRlbTogdGFyZ2V0Tm9kZSxcbiAgICAgICAgICAgIGNvbnRhaW5lckl0ZW1zOiB0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbixcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9uXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudGh5QmVmb3JlRHJhZ0Ryb3AgJiYgIXRoaXMudGh5QmVmb3JlRHJhZ0Ryb3AoYmVmb3JlRHJhZ0Ryb3BDb250ZXh0KSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5kZWxldGVUcmVlTm9kZShzb3VyY2VOb2RlKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlSW5zZXJ0SW5kZXggPSAodGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4gfHwgdGhpcy50cmVlTm9kZXMpLmluZGV4T2YodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShzb3VyY2VOb2RlLCB0YXJnZXROb2RlUGFyZW50LCBiZWZvcmVJbnNlcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJJbnNlcnRJbmRleCA9ICh0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcykuaW5kZXhPZih0YXJnZXROb2RlKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShzb3VyY2VOb2RlLCB0YXJnZXROb2RlUGFyZW50LCBhZnRlckluc2VydEluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2luJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuXG4gICAgICAgIGxldCBhZnRlcjogVGh5VHJlZU5vZGUgPSBudWxsO1xuICAgICAgICBsZXQgdGFyZ2U6IFRoeVRyZWVOb2RlID0gbnVsbDtcbiAgICAgICAgaWYgKGJlZm9yZURyYWdEcm9wQ29udGV4dC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRhaW5lck5vZGVzID0gdGFyZ2V0Tm9kZVBhcmVudD8uY2hpbGRyZW4gfHwgdGhpcy50cmVlTm9kZXM7XG4gICAgICAgICAgICBhZnRlciA9IHRhcmdldENvbnRhaW5lck5vZGVzW3RhcmdldENvbnRhaW5lck5vZGVzLmluZGV4T2YodGFyZ2V0Tm9kZSkgLSAyXTtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZVBhcmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChiZWZvcmVEcmFnRHJvcENvbnRleHQucG9zaXRpb24gPT09IFRoeVRyZWVEcm9wUG9zaXRpb24uYWZ0ZXIpIHtcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZVBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Tm9kZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCA/IHRhcmdldE5vZGUuY2hpbGRyZW5bdGFyZ2V0Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAyXSA6IG51bGw7XG4gICAgICAgICAgICB0YXJnZSA9IHRhcmdldE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeU9uRHJhZ0Ryb3AuZW1pdCh7XG4gICAgICAgICAgICBkcmFnTm9kZTogdGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShzb3VyY2VOb2RlLmtleSksXG4gICAgICAgICAgICB0YXJnZXROb2RlOiB0YXJnZSxcbiAgICAgICAgICAgIGFmdGVyTm9kZTogYWZ0ZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFyZ2V0UG9zaXRpb24odGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZU9yQWZ0ZXJHYXAgPSB0YXJnZXRSZWN0LmhlaWdodCAqIDAuMztcbiAgICAgICAgLy8g5bCGIE5vZGUg6auY5bqm5YiG5Li65LiK5Lit5LiL5LiJ5q6177yM5YW25Lit5LiK5LiL55qEIEdhcCDkuLogaGVpZ2h0IOeahCAzMCXvvIzpgJrov4fliKTmlq3pvKDmoIfkvY3nva7lnKjlk6rkuIDmrrUgZ2FwIOadpeiuoeeul+WvueW6lOeahOS9jee9rlxuICAgICAgICBpZiAoZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgLSB0YXJnZXRSZWN0LnRvcCA8IGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiBUaHlUcmVlRHJvcFBvc2l0aW9uLmJlZm9yZTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSA+PSB0YXJnZXRSZWN0LmJvdHRvbSAtIGJlZm9yZU9yQWZ0ZXJHYXApIHtcbiAgICAgICAgICAgIHJldHVybiBUaHlUcmVlRHJvcFBvc2l0aW9uLmFmdGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uaW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpO1xuICAgICAgICBpZiAodGhpcy5ub2RlRHJvcFRhcmdldCAmJiB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5hZGQoYGRyb3AtcG9zaXRpb24tJHt0aGlzLm5vZGVEcm9wVGFyZ2V0LnBvc2l0aW9ufWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbnVwRHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24tYmVmb3JlJykuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1iZWZvcmUnKSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24tYWZ0ZXInKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWFmdGVyJykpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLXBvc2l0aW9uLWluJykuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJvcC1wb3NpdGlvbi1pbicpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFudXBEcmFnQXJ0aWZhY3RzKCkge1xuICAgICAgICB0aGlzLm5vZGVEcm9wVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbnVwRHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIoKTtcbiAgICB9XG5cbiAgICAvLyByZWdpb24gUHVibGljIEZ1bmN0aW9uc1xuXG4gICAgc2VsZWN0VHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgJiYgIW5vZGUuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG5vZGUpO1xuICAgICAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um9vdE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlTm9kZXM7XG4gICAgfVxuXG4gICAgZ2V0VHJlZU5vZGUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoa2V5KTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZE5vZGUoKTogVGh5VHJlZU5vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWROb2RlcygpOiBUaHlUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsID8gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQgOiBbXTtcbiAgICB9XG5cbiAgICBnZXRFeHBhbmRlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRFeHBhbmRlZE5vZGVzKCk7XG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRDaGVja2VkTm9kZXMoKTtcbiAgICB9XG5cbiAgICBhZGRUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZURhdGEsIHBhcmVudD86IFRoeVRyZWVOb2RlLCBpbmRleCA9IC0xKSB7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUobmV3IFRoeVRyZWVOb2RlKG5vZGUsIG51bGwsIHRoaXMudGh5VHJlZVNlcnZpY2UpLCBwYXJlbnQsIGluZGV4KTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5zeW5jRmxhdHRlblRyZWVOb2RlcygpO1xuICAgIH1cblxuICAgIGRlbGV0ZVRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmRlbGV0ZVRyZWVOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRSb290Tm9kZXMoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChuID0+IG4uc2V0RXhwYW5kZWQodHJ1ZSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlZEFsbE5vZGVzKCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Um9vdE5vZGVzKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobiA9PiBuLnNldEV4cGFuZGVkKGZhbHNlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gZW5kcmVnaW9uXG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICN2aWV3cG9ydFxuICAqbmdJZj1cInRoeVZpcnR1YWxTY3JvbGxcIlxuICBbaXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICBbc3R5bGUuaGVpZ2h0XT1cIicxMDAlJ1wiXG4gIGNka0Ryb3BMaXN0XG4gIFtjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwXT1cIjZcIlxuICBbY2RrRHJvcExpc3REYXRhXT1cImZsYXR0ZW5UcmVlTm9kZXNcIlxuICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25MaXN0RHJvcHBlZCgkZXZlbnQpXCJcbiAgPlxuICA8ZGl2IGNsYXNzPVwidmlydHVhbC10cmVlcy1jb250YWluZXJcIj5cbiAgICA8dGh5LXRyZWUtbm9kZVxuICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgbm9kZSBvZiBmbGF0dGVuVHJlZU5vZGVzOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIlxuICAgICAgY2RrRHJhZ1xuICAgICAgW2Nka0RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhdGh5RHJhZ2dhYmxlIHx8ICEobm9kZSB8IHRyZWVOb2RlRHJhZ2dhYmxlIDogdGh5QmVmb3JlRHJhZ1N0YXJ0KVwiXG4gICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJhZ01vdmVkKT1cImVtaXREcmFnTW92ZWQoJGV2ZW50KVwiXG4gICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgIFt0ZW1wbGF0ZVJlZl09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgICBbZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmXT1cImVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVwiXG4gICAgICBbdGh5QXN5bmNdPVwidGh5QXN5bmNcIlxuICAgICAgW3RoeURyYWdnYWJsZV09XCJ0aHlEcmFnZ2FibGVcIlxuICAgICAgW3RoeUNoZWNrYWJsZV09XCJ0aHlDaGVja2FibGVcIlxuICAgICAgW3RoeU11bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgIFt0aHlDbGlja0JlaGF2aW9yXT1cInRoeUNsaWNrQmVoYXZpb3JcIlxuICAgICAgW3RoeVRpdGxlVHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiXG4gICAgICBbdGh5SXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICAgICAgW3RoeUluZGVudF09XCJ0aHlJbmRlbnRcIlxuICAgICAgKHRoeU9uQ2xpY2spPVwidGh5T25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgKHRoeURibENsaWNrKT1cInRoeURibENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAodGh5T25FeHBhbmRDaGFuZ2UpPVwiZXZlbnRUcmlnZ2VyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICh0aHlPbkNoZWNrYm94Q2hhbmdlKT1cImV2ZW50VHJpZ2dlckNoYW5nZWQoJGV2ZW50KVwiPlxuICAgIDwvdGh5LXRyZWUtbm9kZT5cbiAgPC9kaXY+XG48L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuPGRpdlxuICAqbmdJZj1cIiF0aHlWaXJ0dWFsU2Nyb2xsXCJcbiAgY2RrRHJvcExpc3RcbiAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gIFtjZGtEcm9wTGlzdERhdGFdPVwiZmxhdHRlblRyZWVOb2Rlc1wiXG4gIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIj5cbiAgPHRoeS10cmVlLW5vZGVcbiAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBmbGF0dGVuVHJlZU5vZGVzOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIlxuICAgIGNka0RyYWdcbiAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhdGh5RHJhZ2dhYmxlIHx8ICEobm9kZSB8IHRyZWVOb2RlRHJhZ2dhYmxlIDogdGh5QmVmb3JlRHJhZ1N0YXJ0KVwiXG4gICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcbiAgICAoY2RrRHJhZ01vdmVkKT1cImVtaXREcmFnTW92ZWQoJGV2ZW50KVwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcbiAgICBbZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmXT1cImVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVwiXG4gICAgW3RoeUFzeW5jXT1cInRoeUFzeW5jXCJcbiAgICBbdGh5RHJhZ2dhYmxlXT1cInRoeURyYWdnYWJsZVwiXG4gICAgW3RoeUNoZWNrYWJsZV09XCJ0aHlDaGVja2FibGVcIlxuICAgIFt0aHlNdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgW3RoeVRpdGxlVHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiXG4gICAgW3RoeUl0ZW1TaXplXT1cInRoeUl0ZW1TaXplXCJcbiAgICBbdGh5Q2xpY2tCZWhhdmlvcl09XCJ0aHlDbGlja0JlaGF2aW9yXCJcbiAgICBbdGh5SW5kZW50XT1cInRoeUluZGVudFwiXG4gICAgKHRoeU9uQ2xpY2spPVwidGh5T25DbGljay5lbWl0KCRldmVudClcIlxuICAgICh0aHlEYmxDbGljayk9XCJ0aHlEYmxDbGljay5lbWl0KCRldmVudClcIlxuICAgICh0aHlPbkV4cGFuZENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICh0aHlPbkNoZWNrYm94Q2hhbmdlKT1cInRoeU9uQ2hlY2tib3hDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gIDwvdGh5LXRyZWUtbm9kZT5cbjwvZGl2PlxuIl19
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUlmLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUtILG1CQUFtQixFQUVuQixZQUFZLEVBR2YsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEs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Z0JBY08scUJBQXFCO3NCQUE3RSxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFZdkQsWUFBWTtzQkFEWCxXQUFXO3VCQUFDLGdCQUFnQjtnQkFJN0IsUUFBUTtzQkFEUCxXQUFXO3VCQUFDLHlCQUF5QjtnQkFHZixRQUFRO3NCQUE5QixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoZWxwZXJzIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVEhZX1RSRUVfQUJTVFJBQ1RfVE9LRU4gfSBmcm9tICcuL3RyZWUtYWJzdHJhY3QnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5jbGFzcyc7XG5pbXBvcnQge1xuICAgIFRoeVRyZWVCZWZvcmVEcmFnRHJvcENvbnRleHQsXG4gICAgVGh5VHJlZUJlZm9yZURyYWdTdGFydENvbnRleHQsXG4gICAgVGh5Q2xpY2tCZWhhdmlvcixcbiAgICBUaHlUcmVlRHJhZ0Ryb3BFdmVudCxcbiAgICBUaHlUcmVlRHJvcFBvc2l0aW9uLFxuICAgIFRoeVRyZWVFbWl0RXZlbnQsXG4gICAgVGh5VHJlZUljb25zLFxuICAgIFRoeVRyZWVOb2RlQ2hlY2tTdGF0ZSxcbiAgICBUaHlUcmVlTm9kZURhdGFcbn0gZnJvbSAnLi90cmVlLmNsYXNzJztcbmltcG9ydCB7IFRoeVRyZWVTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGVDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdJZiwgTmdGb3IsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnRW5kLCBDZGtEcmFnTW92ZSwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGVEcmFnZ2FibGVQaXBlIH0gZnJvbSAnLi90cmVlLnBpcGUnO1xuXG50eXBlIFRoeVRyZWVTaXplID0gJ3NtJyB8ICdkZWZhdWx0JztcblxudHlwZSBUaHlUcmVlVHlwZSA9ICdkZWZhdWx0JyB8ICdlc3BlY2lhbCc7XG5cbmNvbnN0IHRyZWVUeXBlQ2xhc3NNYXAgPSB7XG4gICAgZGVmYXVsdDogWyd0aHktdHJlZS1kZWZhdWx0J10sXG4gICAgZXNwZWNpYWw6IFsndGh5LXRyZWUtZXNwZWNpYWwnXVxufTtcblxuY29uc3QgdHJlZUl0ZW1TaXplTWFwID0ge1xuICAgIGRlZmF1bHQ6IDQ0LFxuICAgIHNtOiA0MlxufTtcblxuLyoqXG4gKiDmoJHlvaLmjqfku7bnu4Tku7ZcbiAqIEBuYW1lIHRoeS10cmVlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoeVRyZWUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhZX1RSRUVfQUJTVFJBQ1RfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlKVxuICAgICAgICB9LFxuICAgICAgICBUaHlUcmVlU2VydmljZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICAgICAgVGh5VHJlZU5vZGVDb21wb25lbnQsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBUaHlUcmVlTm9kZURyYWdnYWJsZVBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRyZWUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBfdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2V4cGFuZGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9IChfOiBhbnkpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvLyDnvJPlrZggRWxlbWVudCDlkowgRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr/lnKggSXRlbSDmi5bliqjml7bmn6Xmib5cbiAgICBwcml2YXRlIG5vZGVEcmFnc01hcCA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIENka0RyYWc8VGh5VHJlZU5vZGU+PigpO1xuXG4gICAgcHJpdmF0ZSBub2RlRHJhZ01vdmVkID0gbmV3IFN1YmplY3Q8Q2RrRHJhZ01vdmU+KCk7XG5cbiAgICAvLyBwcml2YXRlIHN0YXJ0RHJhZ05vZGVFeHBhbmRlZDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgc3RhcnREcmFnTm9kZUNsb25lOiBUaHlUcmVlTm9kZTtcblxuICAgIC8vIE5vZGUg5ouW5Yqo57uP6L+H55uu5qCH5pe25Li05pe26K6w5b2V55uu5qCHaWTku6Xlj4rnm7jlr7nlupTnm67moIfnmoTkvY3nva5cbiAgICBwcml2YXRlIG5vZGVEcm9wVGFyZ2V0OiB7XG4gICAgICAgIHBvc2l0aW9uPzogVGh5VHJlZURyb3BQb3NpdGlvbjtcbiAgICAgICAga2V5PzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGRyb3BFbnRlclByZWRpY2F0ZT86IChjb250ZXh0OiB7IHNvdXJjZTogVGh5VHJlZU5vZGU7IHRhcmdldDogVGh5VHJlZU5vZGU7IGRyb3BQb3NpdGlvbjogVGh5VHJlZURyb3BQb3NpdGlvbiB9KSA9PiBib29sZWFuID1cbiAgICAgICAgY29udGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93RXhwYW5kKGNvbnRleHQudGFyZ2V0KSB8fCAoIXRoaXMuaXNTaG93RXhwYW5kKGNvbnRleHQudGFyZ2V0KSAmJiBjb250ZXh0LmRyb3BQb3NpdGlvbiAhPT0gVGh5VHJlZURyb3BQb3NpdGlvbi5pbilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUaHlUcmVlTm9kZT47XG5cbiAgICBwdWJsaWMgZ2V0IHRyZWVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UudHJlZU5vZGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0dGVuVHJlZU5vZGVzOiBUaHlUcmVlTm9kZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDomZrmi5/ljJbmu5rliqjnmoTop4blj6NcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgQFZpZXdDaGlsZCgndmlld3BvcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAgIC8qKlxuICAgICAqIFRyZWVOb2RlIOWxleeOsOaJgOmcgOeahOaVsOaNrlxuICAgICAqIEB0eXBlIFRoeVRyZWVOb2RlRGF0YVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Tm9kZXM6IFRoeVRyZWVOb2RlRGF0YVtdO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeWxleW8gFxuICAgICAqIEB0eXBlIGJvb2xlYW4gfCBGdW5jdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNob3dFeHBhbmQ6IGJvb2xlYW4gfCAoKF86IFRoeVRyZWVOb2RlRGF0YSkgPT4gYm9vbGVhbikgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm5pSv5oyB5aSa6YCJ6IqC54K5XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKGBjbGFzcy50aHktbXVsdGlwbGUtc2VsZWN0aW9uLWxpc3RgKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHRoeU11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyB5ouW5ou95o6S5bqPXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlLWRyYWdnYWJsZScpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeURyYWdnYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdGh5RHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIEgQ2hlY2tib3gg6YCJ5oupXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5Q2hlY2thYmxlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog54K55Ye76IqC54K555qE6KGM5Li677yMYGRlZmF1bHRgIOS4uumAieS4reW9k+WJjeiKgueCue+8jGBzZWxlY3RDaGVja2JveGAg5Li66YCJ5Lit6IqC54K555qEIENoZWNrYm9477yMIGB0aHlDaGVja2FibGVgIOS4uiB0cnVlIOaXtueUn+aViOOAglxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNsaWNrQmVoYXZpb3I6IFRoeUNsaWNrQmVoYXZpb3IgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg54q25oCB55qE6K6h566X562W55WlXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHRoeUNoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmU6IChub2RlOiBUaHlUcmVlTm9kZSkgPT4gVGh5VHJlZU5vZGVDaGVja1N0YXRlKSB7XG4gICAgICAgIGlmIChyZXNvbHZlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnNldENoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeW8guatpeWKoOi9vVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlBc3luYyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdGh5VHlwZTogVGh5VHJlZVR5cGUgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuI3lkIzlsZXnpLrnsbvlnovnmoQgVHJlZe+8jGBkZWZhdWx0YCDkuLrlsI/nrq3lpLTlsZXnpLrvvIwgYGVzcGVjaWFsYCDkuLog5Yqg5YeP5Y+35Zu+5qCH5bGV56S6XG4gICAgICogQHR5cGUgVGh5VHJlZVR5cGVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHlwZSh0eXBlOiBUaHlUcmVlVHlwZSkge1xuICAgICAgICB0aGlzLl90aHlUeXBlID0gdHlwZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdlc3BlY2lhbCcpIHtcbiAgICAgICAgICAgIHRoaXMudGh5SWNvbnMgPSB7IGV4cGFuZDogJ21pbnVzLXNxdWFyZScsIGNvbGxhcHNlOiAncGx1cy1zcXVhcmUnIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGh5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeVR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiN5ZCMIFRyZWUg5bGV5byA5oqY5Y+g55qE5Zu+5qCH77yMYGV4cGFuZGAg5Li65bGV5byA54q25oCB55qE5Zu+5qCH77yMYGNvbGxhcHNlYCDkuLrmipjlj6DnirbmgIHnmoTlm77moIdcbiAgICAgKiBAdHlwZSB7IGV4cGFuZDogc3RyaW5nLCBjb2xsYXBzZTogc3RyaW5nIH1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlJY29uczogVGh5VHJlZUljb25zID0ge307XG5cbiAgICBwcml2YXRlIF90aHlTaXplOiBUaHlUcmVlU2l6ZSA9ICdkZWZhdWx0JztcbiAgICAvKipcbiAgICAgKiDmlK/mjIEgYHNtYCB8IGBkZWZhdWx0YCDkuKTnp43lpKflsI/vvIzpu5jorqTlgLzkuLogYGRlZmF1bHRgXG4gICAgICogQHR5cGUgVGh5VHJlZVNpemVcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZShzaXplOiBUaHlUcmVlU2l6ZSkge1xuICAgICAgICB0aGlzLl90aHlTaXplID0gc2l6ZTtcbiAgICAgICAgaWYgKHRoaXMuX3RoeVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RoeUl0ZW1TaXplID0gdHJlZUl0ZW1TaXplTWFwW3RoaXMuX3RoeVNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGh5SXRlbVNpemUgPSB0cmVlSXRlbVNpemVNYXAuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0aHlTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGh5U2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKblvIDlkK/omZrmi5/mu5rliqhcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS12aXJ0dWFsLXNjcm9sbGluZy10cmVlJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB0aHlWaXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90aHlJdGVtU2l6ZSA9IDQ0O1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCv6Jma5ouf5rua5Yqo5pe277yM5Y2V6KGM6IqC54K555qE6auY5bqm77yM5b2TYHRoeVNpemVg5Li6YGRlZmF1bHRg5pe277yM6K+l5Y+C5pWw5omN55Sf5pWIXG4gICAgICogQGRlZmF1bHQgNDRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlJdGVtU2l6ZShpdGVtU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeVNpemUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXR0aW5nIHRoeVNpemUgYW5kIHRoeUl0ZW1TaXplIGF0IHRoZSBzYW1lIHRpbWUgaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aHlJdGVtU2l6ZSA9IGl0ZW1TaXplO1xuICAgIH1cblxuICAgIGdldCB0aHlJdGVtU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoeUl0ZW1TaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruiKgueCueWQjeensOaYr+WQpuaUr+aMgei2heWHuuaIquWPllxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5VGl0bGVUcnVuY2F0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDlt7LpgInkuK3nmoQgbm9kZSDoioLngrnpm4blkIhcbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNlbGVjdGVkS2V5czogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7nvKnov5vot53nprvvvIznvKnov5vot53nprsgPSB0aHlJbmRlbnQgKiBub2RlLmxldmVsXG4gICAgICogQHR5cGUgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGh5SW5kZW50ID0gMjU7XG5cbiAgICAvKipcbiAgICAgKiDmi5bmi73kuYvliY3nmoTlm57osIPvvIzlh73mlbDov5Tlm54gZmFsc2Ug5YiZ6Zi75q2i5ouW5ou9XG4gICAgICovXG4gICAgQElucHV0KCkgdGh5QmVmb3JlRHJhZ1N0YXJ0OiAoY29udGV4dDogVGh5VHJlZUJlZm9yZURyYWdTdGFydENvbnRleHQpID0+IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmi5bmlL7liLDlhYPntKDml7blm57osIPvvIzlh73mlbDov5Tlm54gZmFsc2Ug5YiZ6Zi75q2i5ouW5pS+5Yiw5b2T5YmN5YWD57SgXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5QmVmb3JlRHJhZ0Ryb3A6IChjb250ZXh0OiBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5a2QIFRyZWVOb2RlIOeCueWHu+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkNsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg6YCJ5oup5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uQ2hlY2tib3hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9rueCueWHu+WxleW8gOinpuWPkeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkV4cGFuZENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaLluaLveS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkRyYWdEcm9wOiBFdmVudEVtaXR0ZXI8VGh5VHJlZURyYWdEcm9wRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRHJhZ0Ryb3BFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWPjOWHuyBUcmVlTm9kZSDkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RGJsQ2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDnmoTmuLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCd0cmVlTm9kZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzZXQgdGVtcGxhdGVSZWYodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5a2Q55qE56m65pWw5o2u5riy5p+T5qih5p2/XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHlDaGlsZHJlblRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgZW1wdHlDaGlsZHJlblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHNldCBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZScpXG4gICAgdGh5VHJlZUNsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRyZWUtZHJhZ2dpbmcnKVxuICAgIGRyYWdnaW5nOiBib29sZWFuO1xuXG4gICAgQFZpZXdDaGlsZHJlbihDZGtEcmFnKSBjZGtEcmFnczogUXVlcnlMaXN0PENka0RyYWc8VGh5VHJlZU5vZGU+PjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0aHlUcmVlU2VydmljZTogVGh5VHJlZVNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFRoeU5vZGVzKCk7XG4gICAgICAgIHRoaXMuX3NldFRyZWVUeXBlKCk7XG4gICAgICAgIHRoaXMuX3NldFRyZWVTaXplKCk7XG4gICAgICAgIHRoaXMuX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0VHJlZU5vZGVzKHRoaXMudGh5U2VsZWN0ZWRLZXlzKTtcblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmZsYXR0ZW5Ob2RlcyQuc3Vic2NyaWJlKGZsYXR0ZW5UcmVlTm9kZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gZmxhdHRlblRyZWVOb2RlcztcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrRHJhZ3MuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMuY2RrRHJhZ3MpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkcmFnczogUXVlcnlMaXN0PENka0RyYWc8VGh5VHJlZU5vZGU+PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZURyYWdzTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgZHJhZ3MuZm9yRWFjaChkcmFnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWcuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2RrRHJhZyDlj5jljJbml7bvvIznvJPlrZggRWxlbWVudCDkuI4gRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr8gRHJhZyBNb3ZlIOaXtuafpeaJvlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJhZ3NNYXAuc2V0KGRyYWcuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBkcmFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlRHJhZ01vdmVkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBhdWRpdFRpbWUoMzApLFxuICAgICAgICAgICAgICAgIC8vICBhdWRpdFRpbWUg5Y+v6IO95Lya5a+86Ie05ouW5Yqo57uT5p2f5ZCO5LuN54S25omn6KGMIG1vdmVkIO+8jOaJgOS7pemAmui/h+WIpOaWrSBkcmFnZ2luZyDnirbmgIHmnaXov4fmu6Tml6DmlYggbW92ZWRcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBDZGtEcmFnTW92ZSkgPT4gZXZlbnQuc291cmNlLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRHJhZ01vdmVkKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudGh5Tm9kZXMgJiYgIWNoYW5nZXMudGh5Tm9kZXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGh5Tm9kZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50aHlUeXBlICYmICFjaGFuZ2VzLnRoeVR5cGUuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUcmVlVHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeU11bHRpcGxlICYmICFjaGFuZ2VzLnRoeU11bHRpcGxlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzICYmICFjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkS2V5cyA9IGNoYW5nZXMudGh5U2VsZWN0ZWRLZXlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2RlcyhjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyVmlldyA9ICgpID0+IHt9O1xuXG4gICAgZXZlbnRUcmlnZ2VyQ2hhbmdlZChldmVudDogVGh5VHJlZUVtaXRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnZXhwYW5kJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeU9uRXhwYW5kQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjaGVja2JveENoYW5nZSc6XG4gICAgICAgICAgICAgICAgdGhpcy50aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFRoeU5vZGVzKCkge1xuICAgICAgICB0aGlzLl9leHBhbmRlZEtleXMgPSB0aGlzLmdldEV4cGFuZGVkTm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmtleSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkS2V5cyA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLm1hcChub2RlID0+IG5vZGUua2V5KTtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5pbml0aWFsaXplVHJlZU5vZGVzKHRoaXMudGh5Tm9kZXMpO1xuICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSB0aGlzLnRoeVRyZWVTZXJ2aWNlLmZsYXR0ZW5UcmVlTm9kZXM7XG4gICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2Rlcyh0aGlzLl9zZWxlY3RlZEtleXMpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmV4cGFuZFRyZWVOb2Rlcyh0aGlzLl9leHBhbmRlZEtleXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFRyZWVUeXBlKCkge1xuICAgICAgICBpZiAodGhpcy50aHlUeXBlICYmIHRyZWVUeXBlQ2xhc3NNYXBbdGhpcy50aHlUeXBlXSkge1xuICAgICAgICAgICAgdHJlZVR5cGVDbGFzc01hcFt0aGlzLnRoeVR5cGVdLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci5hZGRDbGFzcyhjbGFzc05hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUcmVlU2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIuYWRkQ2xhc3MoYHRoeS10cmVlLSR7dGhpcy50aHlTaXplfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLnRoeU11bHRpcGxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RUcmVlTm9kZXMoa2V5czogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgICAgICAoa2V5cyB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlTm9kZSh0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIHRvZ2dsZVRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmICFub2RlLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ua2V5IHx8IGluZGV4O1xuICAgIH1cblxuICAgIGlzU2hvd0V4cGFuZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAoaGVscGVycy5pc0Z1bmN0aW9uKHRoaXMudGh5U2hvd0V4cGFuZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy50aHlTaG93RXhwYW5kIGFzIEZ1bmN0aW9uKShub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRoeVNob3dFeHBhbmQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBUaHlUcmVlTm9kZURhdGFbXSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Tm9kZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRUaHlOb2RlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICAgICAgaWYgKGV2ZW50LnNvdXJjZS5kYXRhLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVtaXREcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIHRoaXMubm9kZURyYWdNb3ZlZC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmU8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIC8vIOmAmui/h+m8oOagh+S9jee9ruafpeaJvuWvueW6lOeahOebruaghyBJdGVtIOWFg+e0oFxuICAgICAgICBsZXQgY3VycmVudFBvaW50RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC5wb2ludGVyUG9zaXRpb24ueCwgZXZlbnQucG9pbnRlclBvc2l0aW9uLnkpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoIWN1cnJlbnRQb2ludEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGN1cnJlbnRQb2ludEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aHktdHJlZS1ub2RlJylcbiAgICAgICAgICAgID8gY3VycmVudFBvaW50RWxlbWVudFxuICAgICAgICAgICAgOiAoY3VycmVudFBvaW50RWxlbWVudC5jbG9zZXN0KCcudGh5LXRyZWUtbm9kZScpIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8g57yT5a2Y5pS+572u55uu5qCHSWQg5bm26K6h566X6byg5qCH55u45a+55bqU55qE5L2N572uXG4gICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSB7XG4gICAgICAgICAgICBrZXk6IHRoaXMubm9kZURyYWdzTWFwLmdldCh0YXJnZXRFbGVtZW50KT8uZGF0YS5rZXksXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5nZXRUYXJnZXRQb3NpdGlvbih0YXJnZXRFbGVtZW50LCBldmVudClcbiAgICAgICAgfTtcbiAgICAgICAgLy8g5omn6KGM5aSW6YOo5Lyg5YWl55qEIGRyb3BFbnRlclByZWRpY2F0ZSDliKTmlq3mmK/lkKblhYHorrjmi5blhaXnm67moIfpoblcbiAgICAgICAgaWYgKHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXREcmFnUmVmID0gdGhpcy5ub2RlRHJhZ3NNYXAuZ2V0KHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBldmVudC5zb3VyY2UuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXREcmFnUmVmLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGRyb3BQb3NpdGlvbjogdGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdFbmRlZChldmVudDogQ2RrRHJhZ0VuZDxUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAvLyDmi5bmi73nu5PmnZ/lkI7mgaLlpI3ljp/lp4vnmoTlsZXlvIDnirbmgIFcbiAgICAgICAgZXZlbnQuc291cmNlLmRhdGEuc2V0RXhwYW5kZWQodGhpcy5zdGFydERyYWdOb2RlQ2xvbmUuaXNFeHBhbmRlZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFydERyYWdOb2RlQ2xvbmUgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkxpc3REcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxUaHlUcmVlTm9kZVtdLCBUaHlUcmVlTm9kZVtdLCBUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVEcm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzU2hvd0V4cGFuZCh0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZSkgJiYgdGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5pbikge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHRoaXMuc3RhcnREcmFnTm9kZUNsb25lO1xuICAgICAgICBjb25zdCBzb3VyY2VOb2RlUGFyZW50ID0gc291cmNlTm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCB0YXJnZXREcmFnUmVmID0gdGhpcy5jZGtEcmFncy5maW5kKGl0ZW0gPT4gaXRlbS5kYXRhPy5rZXkgPT09IHRoaXMubm9kZURyb3BUYXJnZXQua2V5KTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldERyYWdSZWY/LmRhdGE7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGVQYXJlbnQgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgICAgICAgY29uc3QgYmVmb3JlRHJhZ0Ryb3BDb250ZXh0OiBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0ID0ge1xuICAgICAgICAgICAgcHJldmlvdXNJdGVtOiBzb3VyY2VOb2RlLFxuICAgICAgICAgICAgcHJldmlvdXNDb250YWluZXJJdGVtczogc291cmNlTm9kZVBhcmVudD8uY2hpbGRyZW4sXG4gICAgICAgICAgICBpdGVtOiB0YXJnZXROb2RlLFxuICAgICAgICAgICAgY29udGFpbmVySXRlbXM6IHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb25cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50aHlCZWZvcmVEcmFnRHJvcCAmJiAhdGhpcy50aHlCZWZvcmVEcmFnRHJvcChiZWZvcmVEcmFnRHJvcENvbnRleHQpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmRlbGV0ZVRyZWVOb2RlKHNvdXJjZU5vZGUpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYmVmb3JlJzpcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVJbnNlcnRJbmRleCA9ICh0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcykuaW5kZXhPZih0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGVQYXJlbnQsIGJlZm9yZUluc2VydEluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FmdGVyJzpcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlckluc2VydEluZGV4ID0gKHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuIHx8IHRoaXMudHJlZU5vZGVzKS5pbmRleE9mKHRhcmdldE5vZGUpICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGVQYXJlbnQsIGFmdGVySW5zZXJ0SW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaW4nOlxuICAgICAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUoc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG5cbiAgICAgICAgbGV0IGFmdGVyOiBUaHlUcmVlTm9kZSA9IG51bGw7XG4gICAgICAgIGxldCB0YXJnZTogVGh5VHJlZU5vZGUgPSBudWxsO1xuICAgICAgICBpZiAoYmVmb3JlRHJhZ0Ryb3BDb250ZXh0LnBvc2l0aW9uID09PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29udGFpbmVyTm9kZXMgPSB0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcztcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Q29udGFpbmVyTm9kZXNbdGFyZ2V0Q29udGFpbmVyTm9kZXMuaW5kZXhPZih0YXJnZXROb2RlKSAtIDJdO1xuICAgICAgICAgICAgdGFyZ2UgPSB0YXJnZXROb2RlUGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZURyYWdEcm9wQ29udGV4dC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5hZnRlcikge1xuICAgICAgICAgICAgYWZ0ZXIgPSB0YXJnZXROb2RlO1xuICAgICAgICAgICAgdGFyZ2UgPSB0YXJnZXROb2RlUGFyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWZ0ZXIgPSB0YXJnZXROb2RlLmNoaWxkcmVuPy5sZW5ndGggPiAwID8gdGFyZ2V0Tm9kZS5jaGlsZHJlblt0YXJnZXROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDJdIDogbnVsbDtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGh5T25EcmFnRHJvcC5lbWl0KHtcbiAgICAgICAgICAgIGRyYWdOb2RlOiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKHNvdXJjZU5vZGUua2V5KSxcbiAgICAgICAgICAgIHRhcmdldE5vZGU6IHRhcmdlLFxuICAgICAgICAgICAgYWZ0ZXJOb2RlOiBhZnRlclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYXJnZXRQb3NpdGlvbih0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgYmVmb3JlT3JBZnRlckdhcCA9IHRhcmdldFJlY3QuaGVpZ2h0ICogMC4zO1xuICAgICAgICAvLyDlsIYgTm9kZSDpq5jluqbliIbkuLrkuIrkuK3kuIvkuInmrrXvvIzlhbbkuK3kuIrkuIvnmoQgR2FwIOS4uiBoZWlnaHQg55qEIDMwJe+8jOmAmui/h+WIpOaWrem8oOagh+S9jee9ruWcqOWTquS4gOautSBnYXAg5p2l6K6h566X5a+55bqU55qE5L2N572uXG4gICAgICAgIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSAtIHRhcmdldFJlY3QudG9wIDwgYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uYmVmb3JlO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55ID49IHRhcmdldFJlY3QuYm90dG9tIC0gYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uYWZ0ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gVGh5VHJlZURyb3BQb3NpdGlvbi5pbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYW51cERyb3BQb3NpdGlvblBsYWNlaG9sZGVyKCk7XG4gICAgICAgIGlmICh0aGlzLm5vZGVEcm9wVGFyZ2V0ICYmIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZChgZHJvcC1wb3NpdGlvbi0ke3RoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb259YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1iZWZvcmUnKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWJlZm9yZScpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1hZnRlcicpLmZvckVhY2goZWxlbWVudCA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtcG9zaXRpb24tYWZ0ZXInKSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24taW4nKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWluJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW51cERyYWdBcnRpZmFjdHMoKSB7XG4gICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpO1xuICAgIH1cblxuICAgIC8vIHJlZ2lvbiBQdWJsaWMgRnVuY3Rpb25zXG5cbiAgICBzZWxlY3RUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiAhbm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb290Tm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlcztcbiAgICB9XG5cbiAgICBnZXRUcmVlTm9kZShrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShrZXkpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkTm9kZSgpOiBUaHlUcmVlTm9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA/IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCA6IFtdO1xuICAgIH1cblxuICAgIGdldEV4cGFuZGVkTm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldEV4cGFuZGVkTm9kZXMoKTtcbiAgICB9XG5cbiAgICBnZXRDaGVja2VkTm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldENoZWNrZWROb2RlcygpO1xuICAgIH1cblxuICAgIGFkZFRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlRGF0YSwgcGFyZW50PzogVGh5VHJlZU5vZGUsIGluZGV4ID0gLTEpIHtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShuZXcgVGh5VHJlZU5vZGUobm9kZSwgbnVsbCwgdGhpcy50aHlUcmVlU2VydmljZSksIHBhcmVudCwgaW5kZXgpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlVHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuZGVsZXRlVHJlZU5vZGUobm9kZSk7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICB9XG5cbiAgICBleHBhbmRBbGxOb2RlcygpIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldFJvb3ROb2RlcygpO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG4gPT4gbi5zZXRFeHBhbmRlZCh0cnVlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VkQWxsTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRSb290Tm9kZXMoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChuID0+IG4uc2V0RXhwYW5kZWQoZmFsc2UsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBlbmRyZWdpb25cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgI3ZpZXdwb3J0XG4gICpuZ0lmPVwidGh5VmlydHVhbFNjcm9sbFwiXG4gIFtpdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gIFtzdHlsZS5oZWlnaHRdPVwiJzEwMCUnXCJcbiAgY2RrRHJvcExpc3RcbiAgW2Nka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXBdPVwiNlwiXG4gIFtjZGtEcm9wTGlzdERhdGFdPVwiZmxhdHRlblRyZWVOb2Rlc1wiXG4gIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkxpc3REcm9wcGVkKCRldmVudClcIlxuICA+XG4gIDxkaXYgY2xhc3M9XCJ2aXJ0dWFsLXRyZWVzLWNvbnRhaW5lclwiPlxuICAgIDx0aHktdHJlZS1ub2RlXG4gICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBub2RlIG9mIGZsYXR0ZW5UcmVlTm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBjZGtEcmFnXG4gICAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiF0aHlEcmFnZ2FibGUgfHwgIShub2RlIHwgdHJlZU5vZGVEcmFnZ2FibGUgOiB0aHlCZWZvcmVEcmFnU3RhcnQpXCJcbiAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcbiAgICAgIChjZGtEcmFnTW92ZWQpPVwiZW1pdERyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcbiAgICAgIFtlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWZdPVwiZW1wdHlDaGlsZHJlblRlbXBsYXRlXCJcbiAgICAgIFt0aHlBc3luY109XCJ0aHlBc3luY1wiXG4gICAgICBbdGh5RHJhZ2dhYmxlXT1cInRoeURyYWdnYWJsZVwiXG4gICAgICBbdGh5Q2hlY2thYmxlXT1cInRoeUNoZWNrYWJsZVwiXG4gICAgICBbdGh5TXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgW3RoeUNsaWNrQmVoYXZpb3JdPVwidGh5Q2xpY2tCZWhhdmlvclwiXG4gICAgICBbdGh5VGl0bGVUcnVuY2F0ZV09XCJ0aHlUaXRsZVRydW5jYXRlXCJcbiAgICAgIFt0aHlJdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gICAgICBbdGh5SW5kZW50XT1cInRoeUluZGVudFwiXG4gICAgICAodGh5T25DbGljayk9XCJ0aHlPbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAodGh5RGJsQ2xpY2spPVwidGh5RGJsQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICh0aHlPbkV4cGFuZENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKHRoeU9uQ2hlY2tib3hDaGFuZ2UpPVwiZXZlbnRUcmlnZ2VyQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgPC90aHktdHJlZS1ub2RlPlxuICA8L2Rpdj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG48ZGl2XG4gICpuZ0lmPVwiIXRoeVZpcnR1YWxTY3JvbGxcIlxuICBjZGtEcm9wTGlzdFxuICBbY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcF09XCI2XCJcbiAgW2Nka0Ryb3BMaXN0RGF0YV09XCJmbGF0dGVuVHJlZU5vZGVzXCJcbiAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cInRydWVcIlxuICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uTGlzdERyb3BwZWQoJGV2ZW50KVwiPlxuICA8dGh5LXRyZWUtbm9kZVxuICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIGZsYXR0ZW5UcmVlTm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgY2RrRHJhZ1xuICAgIFtjZGtEcmFnRGF0YV09XCJub2RlXCJcbiAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiF0aHlEcmFnZ2FibGUgfHwgIShub2RlIHwgdHJlZU5vZGVEcmFnZ2FibGUgOiB0aHlCZWZvcmVEcmFnU3RhcnQpXCJcbiAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIlxuICAgIChjZGtEcmFnTW92ZWQpPVwiZW1pdERyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgICBbbm9kZV09XCJub2RlXCJcbiAgICBbdGVtcGxhdGVSZWZdPVwidGVtcGxhdGVSZWZcIlxuICAgIFtlbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWZdPVwiZW1wdHlDaGlsZHJlblRlbXBsYXRlXCJcbiAgICBbdGh5QXN5bmNdPVwidGh5QXN5bmNcIlxuICAgIFt0aHlEcmFnZ2FibGVdPVwidGh5RHJhZ2dhYmxlXCJcbiAgICBbdGh5Q2hlY2thYmxlXT1cInRoeUNoZWNrYWJsZVwiXG4gICAgW3RoeU11bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICBbdGh5VGl0bGVUcnVuY2F0ZV09XCJ0aHlUaXRsZVRydW5jYXRlXCJcbiAgICBbdGh5SXRlbVNpemVdPVwidGh5SXRlbVNpemVcIlxuICAgIFt0aHlDbGlja0JlaGF2aW9yXT1cInRoeUNsaWNrQmVoYXZpb3JcIlxuICAgIFt0aHlJbmRlbnRdPVwidGh5SW5kZW50XCJcbiAgICAodGh5T25DbGljayk9XCJ0aHlPbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgKHRoeURibENsaWNrKT1cInRoeURibENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgKHRoeU9uRXhwYW5kQ2hhbmdlKT1cImV2ZW50VHJpZ2dlckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgKHRoeU9uQ2hlY2tib3hDaGFuZ2UpPVwidGh5T25DaGVja2JveENoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgPC90aHktdHJlZS1ub2RlPlxuPC9kaXY+XG4iXX0=
|