@fundamental-ngx/core 0.49.1 → 0.49.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/avatar-group-legacy/avatar-group-legacy.component.d.ts +6 -6
- package/avatar-group-legacy/directives/avatar-group-legacy-overflow-body.directive.d.ts +2 -2
- package/avatar-group-legacy/directives/avatar-group-legacy-overflow-button.directive.d.ts +2 -2
- package/bar/bar.component.d.ts +6 -6
- package/bar/button-bar/button-bar.component.d.ts +4 -4
- package/calendar/calendar-header/calendar-header.component.d.ts +2 -2
- package/card/card-content.component.d.ts +2 -2
- package/card/card-counter.directive.d.ts +2 -2
- package/card/card-header.component.d.ts +6 -6
- package/card/card-loader.component.d.ts +2 -2
- package/card/card-second-subtitle.directive.d.ts +2 -2
- package/card/card-subtitle.directive.d.ts +2 -2
- package/card/card-title.directive.d.ts +2 -2
- package/card/card.component.d.ts +3 -3
- package/card/kpi/card-kpi-analytics-content.directive.d.ts +2 -2
- package/card/kpi/card-kpi-analytics-label.directive.d.ts +2 -2
- package/card/kpi/card-kpi-analytics.directive.d.ts +2 -2
- package/card/kpi/card-kpi-header.component.d.ts +2 -2
- package/card/kpi/card-kpi-scale-icon.directive.d.ts +2 -2
- package/card/kpi/card-kpi-scale-text.directive.d.ts +2 -2
- package/card/kpi/card-kpi-value.directive.d.ts +4 -4
- package/checkbox/checkbox/checkbox.component.d.ts +3 -5
- package/content-density/providers/url-content-density-storage.d.ts +4 -4
- package/content-density/services/content-density-observer.service.d.ts +15 -15
- package/datetime/datetime-adapter.d.ts +9 -2
- package/datetime/fd-date.d.ts +10 -14
- package/datetime/fd-datetime-adapter.d.ts +2 -2
- package/dialog/base/dialog-base.class.d.ts +2 -2
- package/dialog/base/dialog-header-base.class.d.ts +4 -4
- package/dialog/base/dialog-ref-base.class.d.ts +6 -4
- package/dynamic-side-content/dynamic-side-content.component.d.ts +4 -4
- package/esm2022/avatar-group-legacy/avatar-group-legacy.component.mjs +15 -15
- package/esm2022/avatar-group-legacy/directives/avatar-group-legacy-overflow-body.directive.mjs +12 -12
- package/esm2022/avatar-group-legacy/directives/avatar-group-legacy-overflow-button.directive.mjs +9 -9
- package/esm2022/bar/bar.component.mjs +13 -13
- package/esm2022/bar/button-bar/button-bar.component.mjs +3 -3
- package/esm2022/calendar/calendar-header/calendar-header.component.mjs +1 -1
- package/esm2022/card/card-content.component.mjs +5 -5
- package/esm2022/card/card-counter.directive.mjs +6 -6
- package/esm2022/card/card-header.component.mjs +5 -5
- package/esm2022/card/card-loader.component.mjs +5 -5
- package/esm2022/card/card-second-subtitle.directive.mjs +5 -5
- package/esm2022/card/card-subtitle.directive.mjs +5 -5
- package/esm2022/card/card-title.directive.mjs +5 -5
- package/esm2022/card/card.component.mjs +5 -5
- package/esm2022/card/kpi/card-kpi-analytics-content.directive.mjs +5 -5
- package/esm2022/card/kpi/card-kpi-analytics-label.directive.mjs +5 -5
- package/esm2022/card/kpi/card-kpi-analytics.directive.mjs +5 -5
- package/esm2022/card/kpi/card-kpi-header.component.mjs +5 -5
- package/esm2022/card/kpi/card-kpi-scale-icon.directive.mjs +5 -5
- package/esm2022/card/kpi/card-kpi-scale-text.directive.mjs +5 -5
- package/esm2022/card/kpi/card-kpi-value.directive.mjs +5 -5
- package/esm2022/checkbox/checkbox/checkbox.component.mjs +1 -1
- package/esm2022/combobox/combobox.component.mjs +2 -2
- package/esm2022/content-density/providers/url-content-density-storage.mjs +11 -11
- package/esm2022/content-density/services/content-density-observer.service.mjs +7 -16
- package/esm2022/datetime/datetime-adapter.mjs +4 -2
- package/esm2022/datetime/fd-date.mjs +34 -27
- package/esm2022/datetime/fd-datetime-adapter.mjs +1 -1
- package/esm2022/dialog/base/dialog-base.class.mjs +1 -1
- package/esm2022/dialog/base/dialog-header-base.class.mjs +1 -1
- package/esm2022/dialog/base/dialog-ref-base.class.mjs +4 -8
- package/esm2022/dynamic-side-content/dynamic-side-content.component.mjs +9 -9
- package/esm2022/feed-input/directives/feed-input-avatar.directive.mjs +5 -5
- package/esm2022/feed-list-item/components/list/feed-list.component.mjs +15 -15
- package/esm2022/file-uploader/directives/file-uploader-select.directive.mjs +1 -1
- package/esm2022/file-uploader/file-uploader.component.mjs +5 -5
- package/esm2022/fixed-card-layout/fixed-card-layout-item/fixed-card-layout-item.component.mjs +3 -3
- package/esm2022/form/form-group/form-group.component.mjs +8 -8
- package/esm2022/form/form-message/form-message.component.mjs +9 -9
- package/esm2022/grid-list/components/grid-list/grid-list.component.mjs +2 -3
- package/esm2022/grid-list/components/grid-list-item/grid-list-item.component.mjs +3 -3
- package/esm2022/illustrated-message/illustrated-message.component.mjs +10 -10
- package/esm2022/input-group/input-group-directives.mjs +22 -22
- package/esm2022/layout-grid/directives/layout-grid-col.directive.mjs +9 -9
- package/esm2022/layout-grid/layout-grid.component.mjs +9 -9
- package/esm2022/layout-panel/layout-panel-footer/layout-panel-footer.component.mjs +9 -9
- package/esm2022/list/list-item/list-item.component.mjs +20 -17
- package/esm2022/list/list-message.directive.mjs +9 -9
- package/esm2022/menu/directives/segmented-button/segmented-button-header.directive.mjs +1 -2
- package/esm2022/menu/directives/toggle-button.directive.mjs +1 -2
- package/esm2022/message-box/message-box.component.mjs +17 -17
- package/esm2022/message-page/message-page.component.mjs +5 -5
- package/esm2022/message-strip/alert/message-strip-alert/message-strip-alert.component.mjs +5 -5
- package/esm2022/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.mjs +1 -1
- package/esm2022/message-strip/alert/message-strip-alert.service.mjs +2 -3
- package/esm2022/message-strip/message-strip.component.mjs +16 -16
- package/esm2022/micro-process-flow/components/micro-process-flow/micro-process-flow.component.mjs +43 -45
- package/esm2022/micro-process-flow/components/micro-process-flow-item/micro-process-flow-item.component.mjs +1 -1
- package/esm2022/micro-process-flow/micro-process-flow-focusable-item.directive.mjs +13 -13
- package/esm2022/multi-combobox/multi-combobox.component.mjs +2 -5
- package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
- package/esm2022/multi-input/multi-input.component.mjs +2 -2
- package/esm2022/nested-list/nested-content/nested-list-content.directive.mjs +6 -6
- package/esm2022/nested-list/nested-item/nested-item.directive.mjs +3 -3
- package/esm2022/nested-list/nested-list/nested-list.directive.mjs +3 -3
- package/esm2022/notification/directives/notification-indicator.directive.mjs +9 -9
- package/esm2022/notification/notification/notification.component.mjs +9 -9
- package/esm2022/notification/notification-group/notification-group.component.mjs +5 -5
- package/esm2022/notification/notification-service/notification.service.mjs +5 -2
- package/esm2022/notification/notification-utils/notification-ref.mjs +2 -5
- package/esm2022/object-number/object-number.component.mjs +9 -9
- package/esm2022/object-status/object-status.component.mjs +13 -12
- package/esm2022/overflow-layout/directives/overflow-expand.directive.mjs +5 -5
- package/esm2022/overflow-layout/directives/overflow-item-ref.directive.mjs +1 -1
- package/esm2022/overflow-layout/directives/overflow-layout-focusable-item.directive.mjs +5 -5
- package/esm2022/overflow-layout/directives/overflow-layout-item-container.directive.mjs +8 -8
- package/esm2022/overflow-layout/interfaces/overflow-focusable-item.interface.mjs +1 -1
- package/esm2022/overflow-layout/overflow-layout.component.mjs +18 -18
- package/esm2022/radio/radio-button/radio-button.component.mjs +8 -9
- package/esm2022/rating-indicator/components/rating-indicator.component.mjs +28 -28
- package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +23 -23
- package/esm2022/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +7 -8
- package/esm2022/select/select.component.mjs +18 -18
- package/esm2022/shared/interfaces/search-component.interface.mjs +1 -1
- package/esm2022/shellbar/shellbar.component.mjs +7 -7
- package/esm2022/side-navigation/side-navigation.component.mjs +7 -7
- package/esm2022/skeleton/components/skeleton.component.mjs +3 -3
- package/esm2022/status-indicator/status-indicator.component.mjs +15 -15
- package/esm2022/table/directives/table-responsive-wrapper.directive.mjs +3 -3
- package/esm2022/tabs/tab-item/tab-item.directive.mjs +9 -9
- package/esm2022/tabs/tab-link/tab-link.directive.mjs +8 -8
- package/esm2022/tabs/tab-nav/tab-nav.component.mjs +15 -15
- package/esm2022/tabs/tab-panel/tab-panel.component.mjs +3 -3
- package/esm2022/tabs/tab-utils/tab-directives.mjs +8 -8
- package/esm2022/tile/directives/tile.directives.mjs +25 -25
- package/esm2022/tile/tile.component.mjs +9 -11
- package/esm2022/time/time-column/time-column.component.mjs +23 -23
- package/esm2022/timeline/services/position-strategies/base-strategy.mjs +1 -1
- package/esm2022/timeline/timeline.component.mjs +5 -5
- package/esm2022/title/title.component.mjs +4 -4
- package/esm2022/token/tokenizer.component.mjs +71 -71
- package/esm2022/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/tree/components/tree-item/tree-item.component.mjs +4 -6
- package/esm2022/tree/tree.component.mjs +1 -4
- package/esm2022/upload-collection/upload-collection-item.directive.mjs +3 -3
- package/esm2022/vertical-navigation/vertical-navigation.component.mjs +6 -6
- package/esm2022/wizard/wizard-step/wizard-step.component.mjs +3 -3
- package/feed-input/directives/feed-input-avatar.directive.d.ts +2 -2
- package/feed-list-item/components/list/feed-list.component.d.ts +6 -6
- package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs +33 -33
- package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs +14 -14
- package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-card.mjs +61 -61
- package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-content-density.mjs +17 -26
- package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime.mjs +36 -27
- package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +3 -7
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +8 -8
- package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-input.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +14 -14
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-file-uploader.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +15 -15
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-grid-list.mjs +3 -4
- package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +9 -9
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs +21 -21
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-layout-grid.mjs +16 -16
- package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-layout-panel.mjs +8 -8
- package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +27 -24
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-menu.mjs +0 -2
- package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +16 -16
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-page.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-message-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-strip.mjs +20 -21
- package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +55 -57
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +1 -4
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs +9 -9
- package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-notification.mjs +25 -25
- package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-number.mjs +8 -8
- package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-status.mjs +12 -11
- package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +32 -32
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-radio.mjs +7 -8
- package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +27 -27
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +28 -29
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-select.mjs +17 -17
- package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +6 -6
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-side-navigation.mjs +6 -6
- package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-skeleton.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-status-indicator.mjs +14 -14
- package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +38 -38
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tile.mjs +32 -34
- package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs +23 -23
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-timeline.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-timeline.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-title.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +70 -70
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs +3 -8
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +5 -5
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-wizard.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/file-uploader/directives/file-uploader-select.directive.d.ts +1 -1
- package/file-uploader/file-uploader.component.d.ts +4 -4
- package/form/form-group/form-group.component.d.ts +4 -4
- package/form/form-message/form-message.component.d.ts +2 -2
- package/grid-list/components/grid-list/grid-list.component.d.ts +3 -2
- package/grid-list/components/grid-list-item/grid-list-item.component.d.ts +8 -8
- package/illustrated-message/illustrated-message.component.d.ts +7 -7
- package/input-group/input-group-directives.d.ts +12 -12
- package/layout-grid/directives/layout-grid-col.directive.d.ts +2 -2
- package/layout-grid/layout-grid.component.d.ts +2 -2
- package/layout-panel/layout-panel-footer/layout-panel-footer.component.d.ts +2 -2
- package/list/list-item/list-item.component.d.ts +13 -13
- package/list/list-message.directive.d.ts +4 -4
- package/message-box/message-box.component.d.ts +5 -5
- package/message-page/message-page.component.d.ts +2 -2
- package/message-strip/alert/message-strip-alert/message-strip-alert.component.d.ts +4 -4
- package/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.d.ts +4 -4
- package/message-strip/alert/message-strip-alert.service.d.ts +3 -2
- package/message-strip/message-strip.component.d.ts +6 -6
- package/micro-process-flow/components/micro-process-flow/micro-process-flow.component.d.ts +15 -17
- package/micro-process-flow/components/micro-process-flow-item/micro-process-flow-item.component.d.ts +2 -2
- package/micro-process-flow/micro-process-flow-focusable-item.directive.d.ts +6 -6
- package/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -2
- package/nested-list/nested-content/nested-list-content.directive.d.ts +2 -2
- package/nested-list/nested-item/nested-item.directive.d.ts +2 -2
- package/nested-list/nested-list/nested-list.directive.d.ts +2 -2
- package/notification/directives/notification-indicator.directive.d.ts +4 -4
- package/notification/notification/notification.component.d.ts +2 -2
- package/notification/notification-group/notification-group.component.d.ts +2 -2
- package/notification/notification-utils/notification-ref.d.ts +5 -3
- package/object-number/object-number.component.d.ts +4 -4
- package/object-status/object-status.component.d.ts +5 -4
- package/overflow-layout/directives/overflow-expand.directive.d.ts +2 -2
- package/overflow-layout/directives/overflow-item-ref.directive.d.ts +2 -2
- package/overflow-layout/directives/overflow-layout-focusable-item.directive.d.ts +2 -2
- package/overflow-layout/directives/overflow-layout-item-container.directive.d.ts +2 -2
- package/overflow-layout/interfaces/overflow-focusable-item.interface.d.ts +1 -1
- package/overflow-layout/overflow-layout.component.d.ts +4 -4
- package/package.json +3 -3
- package/radio/radio-button/radio-button.component.d.ts +7 -7
- package/rating-indicator/components/rating-indicator.component.d.ts +12 -12
- package/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.d.ts +8 -8
- package/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.d.ts +2 -2
- package/select/select.component.d.ts +19 -19
- package/shared/interfaces/search-component.interface.d.ts +1 -1
- package/shellbar/shellbar.component.d.ts +12 -12
- package/side-navigation/side-navigation.component.d.ts +2 -2
- package/skeleton/components/skeleton.component.d.ts +2 -2
- package/status-indicator/status-indicator.component.d.ts +7 -7
- package/tabs/tab-item/tab-item.directive.d.ts +2 -2
- package/tabs/tab-link/tab-link.directive.d.ts +2 -2
- package/tabs/tab-nav/tab-nav.component.d.ts +8 -8
- package/tabs/tab-panel/tab-panel.component.d.ts +2 -2
- package/tabs/tab-utils/tab-directives.d.ts +5 -5
- package/tile/directives/tile.directives.d.ts +12 -12
- package/tile/tile.component.d.ts +4 -6
- package/time/time-column/time-column.component.d.ts +6 -6
- package/timeline/services/position-strategies/base-strategy.d.ts +2 -2
- package/timeline/timeline.component.d.ts +2 -2
- package/title/title.component.d.ts +2 -2
- package/token/tokenizer.component.d.ts +16 -16
- package/toolbar/toolbar.component.d.ts +2 -2
- package/tree/components/tree-item/tree-item.component.d.ts +10 -9
- package/upload-collection/upload-collection-item.directive.d.ts +2 -2
- package/vertical-navigation/vertical-navigation.component.d.ts +2 -2
- package/wizard/wizard-step/wizard-step.component.d.ts +4 -4
|
@@ -140,28 +140,6 @@ export class ResizableCardItemComponent {
|
|
|
140
140
|
/** @hidden */
|
|
141
141
|
this._subscriptions = new Subscription();
|
|
142
142
|
}
|
|
143
|
-
/** @hidden */
|
|
144
|
-
ngOnDestroy() {
|
|
145
|
-
this._subscriptions.unsubscribe();
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* When resize handler is pressed and resizing may start.
|
|
149
|
-
* @param event {MouseEvent}
|
|
150
|
-
* @param resizeDirection which handler is pressed to resize
|
|
151
|
-
*/
|
|
152
|
-
onMouseDown(event, resizeDirection) {
|
|
153
|
-
event.preventDefault();
|
|
154
|
-
if (!this.resizable) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
this.showingResizeIcon = true;
|
|
158
|
-
this._resize = true;
|
|
159
|
-
this._prevX = event.clientX;
|
|
160
|
-
this._prevY = event.clientY;
|
|
161
|
-
this._prevCardWidth = this.cardWidth;
|
|
162
|
-
this._prevCardHeight = this.cardHeight;
|
|
163
|
-
this._resizeDirection = resizeDirection;
|
|
164
|
-
}
|
|
165
143
|
/**
|
|
166
144
|
* @hidden When mouse moves to resize the card.
|
|
167
145
|
* using window:mousemove so, resize will happen smoothly
|
|
@@ -250,6 +228,28 @@ export class ResizableCardItemComponent {
|
|
|
250
228
|
this._stopResizing();
|
|
251
229
|
this._cd.markForCheck();
|
|
252
230
|
}
|
|
231
|
+
/** @hidden */
|
|
232
|
+
ngOnDestroy() {
|
|
233
|
+
this._subscriptions.unsubscribe();
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* When resize handler is pressed and resizing may start.
|
|
237
|
+
* @param event {MouseEvent}
|
|
238
|
+
* @param resizeDirection which handler is pressed to resize
|
|
239
|
+
*/
|
|
240
|
+
onMouseDown(event, resizeDirection) {
|
|
241
|
+
event.preventDefault();
|
|
242
|
+
if (!this.resizable) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
this.showingResizeIcon = true;
|
|
246
|
+
this._resize = true;
|
|
247
|
+
this._prevX = event.clientX;
|
|
248
|
+
this._prevY = event.clientY;
|
|
249
|
+
this._prevCardWidth = this.cardWidth;
|
|
250
|
+
this._prevCardHeight = this.cardHeight;
|
|
251
|
+
this._resizeDirection = resizeDirection;
|
|
252
|
+
}
|
|
253
253
|
/** Sets focus on the element */
|
|
254
254
|
focus() {
|
|
255
255
|
const header = this.elementRef.nativeElement.querySelector('.fd-card__header');
|
|
@@ -608,4 +608,4 @@ export class ResizedEvent {
|
|
|
608
608
|
this.newCardHeightRowSpan = newCardHeightRowSpan;
|
|
609
609
|
}
|
|
610
610
|
}
|
|
611
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1pdGVtL3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtaXRlbS9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFJcEMsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUV4Qyx1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBRXJDLGdDQUFnQztBQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRXRCLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFMUMsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxN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bnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE51bGxhYmxlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIFJlc2l6ZURpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCAnYm90aCc7XG5cbi8vIENhcmQgcmVzaXplcyBpbiBzdGVwIG9mIGZpeGVkIHZhbHVlcy4gdmFsdWVzIGFyZSBpbiBwaXhlbFxuZXhwb3J0IGNvbnN0IGhvcml6b250YWxSZXNpemVTdGVwID0gMzIwO1xuXG4vLyB2ZXJ0aWNhbCByZXNpemUgc3RlcFxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsUmVzaXplU3RlcCA9IDE2O1xuXG4vLyBnYXAgb2YgMXJlbSBiZXR3ZWVuIHRoZSBjYXJkc1xuZXhwb3J0IGNvbnN0IGdhcCA9IDE2O1xuXG4vLyB0aHJlc2hvbGQgb2Zmc2V0IGZvciBob3Jpem9udGFsIHJlc2l6aW5nLlxuZXhwb3J0IGNvbnN0IGhvcml6b250YWxSZXNpemVPZmZzZXQgPSAxNjA7XG5cbi8vIHRocmVzaG9sZCBvZmZzZXQgZm9yIHZlcnRpY2FsIHJlc2l6aW5nLlxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsUmVzaXplT2Zmc2V0ID0gODtcblxuLy8gc3RhdGUgb2YgY2FyZC4gSW5jcmVhc2luZyB3aWR0aCwgbm8gY2hhbmdlIG9yIGRlY3JlYXNpbmcgd2lkdGguXG5leHBvcnQgdHlwZSBDYXJkU3RhdGUgPSAxIHwgMCB8IC0xO1xuXG4vLyBjYXJkIGlzIGdpdmVuIG51bWVyaWMgdmFsdWUsIG9uIHdoaWNoIHNvcnRpbmcgb2YgY2FyZHMgaXMgZG9uZVxubGV0IGNhcmRSYW5rID0gMTtcbmxldCBjYXJkVW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXJlc2l6YWJsZS1jYXJkLWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAncmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldF1cbn0pXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBGb2N1c2FibGVPcHRpb24sIE9uRGVzdHJveSB7XG4gICAgLyoqIENhcmQgcHJvcGVydGllcyBmcm9tIHRoZSBjb25maWcgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb25maWcoY29uZmlnOiBSZXNpemFibGVDYXJkSXRlbUNvbmZpZykge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuX2luaXRpYWxTZXR1cCgpO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGdldCBjb25maWcoKTogUmVzaXphYmxlQ2FyZEl0ZW1Db25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICAgIH1cblxuICAgIC8qKiBzZXQgdWlucXVlIGlkIGZvciB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbUlkID0gYGZkLWNhcmQtaXRlbS0ke2NhcmRVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogc2V0IHRpdGxlIG9mIHRoZSBjYXJkICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2VyaWFsIG9yZGVyIG9mIGNhcmQuXG4gICAgICogY2FyZHMgYXJlIHNvcnRlZCBiYXNlZCBvbiByYW5rcyBiZWZvcmUgZGlzcGxheWluZyBsYXlvdXQuXG4gICAgICogY2FyZCB3aXRoIGxvd2VyIHJhbmsgd2lsbCBiZSBkaXNwbGF5ZWQgZmlyc3QgaW4gbGF5b3V0IHRoYW4gdGhlIGNhcmQgd2l0aCBoaWdoZXIgcmFuay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByYW5rKHJhbmtWYWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIGRldGVybWluZSBtYXggdmFsdWUgYmV0d2VlbiB1c2VyIGdpdmVuIHZhbHVlIGFuZCBkZWZhdWx0IHZhbHVlXG4gICAgICAgIHRoaXMuX3JhbmsgPSByYW5rVmFsdWUgPyByYW5rVmFsdWUgOiBjYXJkUmFuaysrO1xuICAgICAgICBpZiAocmFua1ZhbHVlID4gY2FyZFJhbmspIHtcbiAgICAgICAgICAgIGNhcmRSYW5rID0gcmFua1ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCByYW5rKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5rO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBjb2x1bW4gc3BhbiBjYXJkIHdpZHRoIHRha2VzLlxuICAgICAqIEl0IHdpbGwgYmUgaW4gc3RlcCBvZiAyMHJlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkV2lkdGhDb2xTcGFuKGNvbFNwYW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuID0gY29sU3BhbjtcbiAgICAgICAgdGhpcy5fc2V0Q2FyZFdpZHRoKCk7XG4gICAgfVxuICAgIGdldCBjYXJkV2lkdGhDb2xTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiByb3cgc3BhbiwgY2FyZCBoZWlnaHQgdGFrZXMuXG4gICAgICogSXQgd2lsbCBiZSBpbiB0aGUgc3RlcCBvZiAxcmVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhcmRIZWlnaHRSb3dTcGFuKHJvd1NwYW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IHJvd1NwYW47XG4gICAgICAgIHRoaXMuX3NldENhcmRIZWlnaHQoKTtcbiAgICB9XG4gICAgZ2V0IGNhcmRIZWlnaHRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygcm93IHNwYW4gY2FyZCBtaW5pIGhlYWRlciBoZWlnaHQgdGFrZXMuXG4gICAgICogTWluaSBIZWFkZXI6IFRoZSBzbWFsbGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2FyZCBpcyB0aGUgaGVhZGVyLlxuICAgICAqIFRoZSBjYXJkIGNhbiBiZSBjb2xsYXBzZWQgdG8gb25seSBpdHMgaGVhZGVyIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkTWluaUhlYWRlclJvd1NwYW4ocm93U3BhbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NhcmRNaW5pSGVhZGVyUm93U3BhbiA9IHJvd1NwYW47XG4gICAgICAgIHRoaXMuX3NldENhcmRNaW5pSGVhZGVySGVpZ2h0KCk7XG4gICAgfVxuICAgIGdldCBjYXJkTWluaUhlYWRlclJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRNaW5pSGVhZGVyUm93U3BhbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygcm93IHNwYW4gY2FyZCBtaW5pIGNvbnRlbnQgaGVpZ2h0IHRha2VzLlxuICAgICAqIE1pbmkgQ29udGVudDogVGhlIG1pbmltdW0gaGVpZ2h0IGZvciB0aGUgY2FyZCBjb250ZW50IGRlcGVuZHMgb24gdGhlIGNhcmQgdHlwZSxcbiAgICAgKiBhbmQgbXVzdCBiZSBhcyBoaWdoIGFzIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkTWluaUNvbnRlbnRSb3dTcGFuKHJvd1NwYW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYXJkTWluaUNvbnRlbnRSb3dTcGFuID0gcm93U3BhbjtcbiAgICAgICAgdGhpcy5fc2V0Q2FyZE1pbmlDb250ZW50SGVpZ2h0KCk7XG4gICAgfVxuICAgIGdldCBjYXJkTWluaUNvbnRlbnRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkTWluaUNvbnRlbnRSb3dTcGFuID8/IDA7XG4gICAgfVxuXG4gICAgLyoqIENhcmQgY2FuIGJlIHNldCB0byByZXNpemFibGU9ZmFsc2UsIHRvIHJlc3RyaWN0IGNhcmQgcmVzaXplICovXG4gICAgQElucHV0KClcbiAgICByZXNpemFibGUgPSB0cnVlO1xuXG4gICAgLyoqIFNldCBsZWZ0IHBvc2l0aW9uIGZvciB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5sZWZ0LnB4JylcbiAgICBsZWZ0OiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgLyoqIFNldCByaWdodCBwb3NpdGlvbiBmb3IgdGhlIGNhcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUucmlnaHQucHgnKVxuICAgIHJpZ2h0OiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgLyoqIFNldCB0b3AgcG9zaXRpb24gZm9yIHRoZSBjYXJkKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUudG9wLnB4JylcbiAgICB0b3AgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hpbGUgcmVzaXppbmcgdGhpcyB2YWx1ZSB3aWxsIGNoYW5nZSB0byBhIGdyZWF0ZXIgdmFsdWUgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxuICAgIHpJbmRleCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUucG9zaXRpb24nKVxuICAgIHBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAgIC8qKiBAaGlkZGVuIHRyYW5zaXRpb24gYW5pbWF0aW9uIHdoZW4gbGF5b3V0IHJlLWRyYXdzICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2RyYXctdHJhbnNpdGlvbicpXG4gICAgcmVEcmF3QW5pbWF0aW9uID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgaXMgc3RpbGwgcmVzaXppbmcgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZXNpemluZzogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIGNvbXBsZXRlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc2l6ZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBjYXJkIGhlaWdodCBpcyByZWR1Y2VkIHRvIHNob3cgb25seSBoZWFkZXIgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pSGVhZGVyUmVhY2hlZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIG1pbmltdW0gaGVpZ2h0IG9mIGNhcmQgY29udGVudCBhcmVhIGlzIHJlYWNoZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pQ29udGVudFJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogc2hvdyBjb3JuZXIgcmVzaXplIGljb24gb24gaG92ZXIgb3ZlciBjYXJkICovXG4gICAgc2hvd2luZ1Jlc2l6ZUljb24gPSBmYWxzZTtcblxuICAgIC8qKiBzaG93IGJvcmRlciB3aGVuIGNhcmQgaXMgcmVzaXppbmcgKi9cbiAgICBzaG93Qm9yZGVyID0gZmFsc2U7XG5cbiAgICAvKiogc3RhcnRpbmcgY29sdW1uIHBvc2l0aW9uIG9mIGNhcmQuIHN0YXJ0cyB3aXRoIDAgKi9cbiAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uOiBudW1iZXI7XG5cbiAgICAvKiogY2FyZCB3aWR0aCBpbiBweC4gRGVmYXVsdCB2YWx1ZSB0byAyMHJlbSAqL1xuICAgIGNhcmRXaWR0aDogbnVtYmVyID0gaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG5cbiAgICAvKiogY2FyZCBoZWlnaHQgaW4gcHggKi9cbiAgICBjYXJkSGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKiogTWluaS1oZWFkZXIgaGVpZ2h0IG9mIGNhcmQgKi9cbiAgICBjYXJkTWluaUhlYWRlckhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIE1pbmktY29udGVudCBoZWlnaHQgb2YgY2FyZCB0byBkaXNwbGF5IG1pbmltdW0gdmFsaWQgY29udGVudCAqL1xuICAgIGNhcmRNaW5pQ29udGVudEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIE91dGVyIHJlc2l6ZSBpbmRpY2F0aW9uIGJvcmRlciB3aWR0aCBmb3IgdGhlIGNhcmQgKi9cbiAgICByZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogRGVub3RlcyBpZiBjYXJkIGlzIGN1cnJlbnRseSBleHBhbmRpbmcgb3IgY29udHJhY3RpbmcgaG9yaXpvbnRhbGx5LlxuICAgICAqICsxIGRlbm90ZXMgaW5jcmVhc2luZywgLTEgZGVub3RlcyBkZWNyZWFzaW5nIGFuZCAwIGRlbm90ZXMgY2FyZC1zdGF0ZSBoYXMgbm90IGNoYW5nZWQgaG9yaXpvbnRhbGx5LlxuICAgICAqL1xuICAgIGNhcmRTdGF0ZTogQ2FyZFN0YXRlID0gMDtcblxuICAgIC8qKiBDaGFuZ2UgaW4gcmFuayBmcm9tIHByZXZpb3VzIHZhbHVlKi9cbiAgICBwcmV2UmFuayA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiBEZWZhdWx0IHdpZHRoIG9mIGNhcmQgaXMgMjByZW0gaWUuIDEgY29sdW1uICovXG4gICAgcHJpdmF0ZSBfY2FyZFdpZHRoQ29sU3BhbiA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhcmRIZWlnaHRSb3dTcGFuOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBoZWxwcyBpbiB2ZXJ0aWNhbCBzdGVwIGNoYW5nZSBldmVudCBlbWl0ICovXG4gICAgcHJpdmF0ZSBfcHJldkNhcmRIZWlnaHRSb3dTcGFuOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhcmRNaW5pSGVhZGVyUm93U3BhbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYXJkTWluaUNvbnRlbnRSb3dTcGFuPzogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gY29uZmlnIHZhbHVlcyBmb3IgY2FyZCAqL1xuICAgIHByaXZhdGUgX2NvbmZpZzogUmVzaXphYmxlQ2FyZEl0ZW1Db25maWc7XG5cbiAgICAvKiogQGhpZGRlbiBwcmV2aW91cyBjdXJzb3IgeCBwb3NpdGlvbiAqL1xuICAgIHByaXZhdGUgX3ByZXZYOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBwcmV2aW91cyBjdXJzb3IgeSBwb3NpdGlvbiAqL1xuICAgIHByaXZhdGUgX3ByZXZZOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZDYXJkV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldkNhcmRIZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIGZsYWcgdG8gY29udHJvbCByZXNpemUgKi9cbiAgICBwcml2YXRlIF9yZXNpemUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzaXplRGlyZWN0aW9uOiBSZXNpemVEaXJlY3Rpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21heENvbHVtbjogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBzdG9yZXMgb3JpZ2luYWwgd2lkdGggc3BhbiBvZiBjYXJkLlxuICAgICAqIEl0IG1heSByZWR1Y2Ugb24gc21hbGwgc2NyZWVuLCBzbyBoYXZlIHRvIHJlc3RvcmUgdXNpbmcgdGhpcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vcmlnaW5hbENhcmRXaWR0aFNwYW4gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yYW5rOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gcmVzaXplIGhhbmRsZXIgaXMgcHJlc3NlZCBhbmQgcmVzaXppbmcgbWF5IHN0YXJ0LlxuICAgICAqIEBwYXJhbSBldmVudCB7TW91c2VFdmVudH1cbiAgICAgKiBAcGFyYW0gcmVzaXplRGlyZWN0aW9uIHdoaWNoIGhhbmRsZXIgaXMgcHJlc3NlZCB0byByZXNpemVcbiAgICAgKi9cbiAgICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgcmVzaXplRGlyZWN0aW9uOiBSZXNpemVEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93aW5nUmVzaXplSWNvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3ByZXZYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgdGhpcy5fcHJldlkgPSBldmVudC5jbGllbnRZO1xuICAgICAgICB0aGlzLl9wcmV2Q2FyZFdpZHRoID0gdGhpcy5jYXJkV2lkdGg7XG4gICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0ID0gdGhpcy5jYXJkSGVpZ2h0O1xuICAgICAgICB0aGlzLl9yZXNpemVEaXJlY3Rpb24gPSByZXNpemVEaXJlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBXaGVuIG1vdXNlIG1vdmVzIHRvIHJlc2l6ZSB0aGUgY2FyZC5cbiAgICAgKiB1c2luZyB3aW5kb3c6bW91c2Vtb3ZlIHNvLCByZXNpemUgd2lsbCBoYXBwZW4gc21vb3RobHlcbiAgICAgKiBAcGFyYW0gZXZlbnQge01vdXNlRXZlbnR9XG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXG4gICAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2F2ZXMgZnJvbSB1bi1uZWNlc3NhcnkgcmVzaXplXG4gICAgICAgIGlmICghdGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2hvd0JvcmRlcikge1xuICAgICAgICAgICAgdGhpcy5zaG93Qm9yZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc2l6aW5nIGNhcmQgd2lsbCBnbyBvdmVyIG90aGVyIGNhcmRzXG4gICAgICAgIHRoaXMuekluZGV4ID0gMTtcblxuICAgICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGV2ZW50O1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3Jlc2l6ZURpcmVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFJlc2l6aW5nKGNsaWVudFgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2FsUmVzaXppbmcoY2xpZW50WSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsUmVzaXppbmcoY2xpZW50WCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fdmVydGljYWxSZXNpemluZyhjbGllbnRZKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFJlc2l6aW5nKGNsaWVudFgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2FsUmVzaXppbmcoY2xpZW50WSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYXJkV2lkdGhDb2xTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZFdpZHRoV2l0aENvbHVtbiA9IGNhcmRXaWR0aENvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCArIGNhcmRXaWR0aENvbFNwYW4gKiBnYXA7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFJlc2l6ZVRocmVzaG9sZFJlYWNoZWQgPSB0aGlzLmNhcmRXaWR0aCAtIGNhcmRXaWR0aFdpdGhDb2x1bW4gPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0O1xuXG4gICAgICAgIGlmIChjbGllbnRYID4gdGhpcy5fcHJldlgpIHtcbiAgICAgICAgICAgIC8vIGluY3JlYXNpbmcgd2lkdGhcbiAgICAgICAgICAgIHRoaXMuY2FyZFN0YXRlID0gMTtcblxuICAgICAgICAgICAgaWYgKGhvcml6b250YWxSZXNpemVUaHJlc2hvbGRSZWFjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlQ2FyZFdpZHRoID0gKGNhcmRXaWR0aENvbFNwYW4gKyAxKSAqIGhvcml6b250YWxSZXNpemVTdGVwICsgY2FyZFdpZHRoQ29sU3BhbiAqIGdhcDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IGZ1dHVyZUNhcmRXaWR0aCAtIHRoaXMuY2FyZFdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2xpZW50WCA8IHRoaXMuX3ByZXZYKSB7XG4gICAgICAgICAgICAvLyBkZWNyZWFzaW5nIHdpZHRoXG4gICAgICAgICAgICB0aGlzLmNhcmRTdGF0ZSA9IC0xO1xuICAgICAgICAgICAgaWYgKGhvcml6b250YWxSZXNpemVUaHJlc2hvbGRSZWFjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlQ2FyZFdpZHRoID0gKGNhcmRXaWR0aENvbFNwYW4gKyAxKSAqIGhvcml6b250YWxSZXNpemVTdGVwICsgY2FyZFdpZHRoQ29sU3BhbiAqIGdhcDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IGZ1dHVyZUNhcmRXaWR0aCAtIHRoaXMuY2FyZFdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2WCA9IGNsaWVudFg7XG4gICAgICAgIHRoaXMuX3ByZXZZID0gY2xpZW50WTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIC8vIEVtaXRzIHJlc2l6aW5nIGV2ZW50LlxuICAgICAgICB0aGlzLnJlc2l6aW5nLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogd2hlbiByZXNpemluZyBvZiBjYXJkIHN0b3BzXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgb25Nb3VzZVVwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucmVzaXphYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgY2FyZCB3YXMgbm90IHJlc2l6aW5nXG4gICAgICAgIGlmICghdGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbmNyZWFzZS9kZWNyZWFzZSB3aWR0aCBvZiBjYXJkIGluIG9yZGVyIG9mIDIwcmVtXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhcmRXaWR0aCAtIHRoaXMuX3ByZXZDYXJkV2lkdGgpID4gMCkge1xuICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFN0ZXBSZXNpemluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW5jcmVhc2UvZGVjcmVhc2UgaGVpZ2h0IG9mIGNhcmQgaW4gb3JkZXIgb2YgMXJlbVxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYXJkSGVpZ2h0IC0gdGhpcy5fcHJldkNhcmRIZWlnaHQpID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fdmVydGljYWxTdGVwUmVzaXppbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0b3BSZXNpemluZygpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBmb2N1cyBvbiB0aGUgZWxlbWVudCAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZmQtY2FyZF9faGVhZGVyJyk7XG4gICAgICAgIGhlYWRlcj8uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogU2hvd3MgcmVzaXplIGljb24gKi9cbiAgICBzaG93UmVzaXplSWNvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd2luZ1Jlc2l6ZUljb24gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBIaWRlcyByZXNpemUgaWNvbiAqL1xuICAgIGhpZGVSZXNpemVJY29uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaG93aW5nUmVzaXplSWNvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgbWF4IHdpZHRoIGZvciBjYXJkLCBiYXNlZCBvbiBsYXlvdXQgc2l6ZSBwYXNzZWQgKi9cbiAgICBnZXRNYXhDb2xTcGFuKGxheW91dFNpemU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHN3aXRjaCAobGF5b3V0U2l6ZSkge1xuICAgICAgICAgICAgY2FzZSAnc20nOlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4Q29sdW1uID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX21heENvbHVtbjtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlIGNhcmQgd2lkdGggaWYgaXQgZXhjZWVkcyBjb2x1bW4gc3BhbiBiYXNlZCBvbiBsYXlvdXQgKi9cbiAgICB2ZXJpZnlVcGRhdGVDYXJkV2lkdGgobGF5b3V0U2l6ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdpZHRoQ29sU3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZFdpZHRoQ29sU3BhbiB8fCB0aGlzLmNhcmRXaWR0aENvbFNwYW47XG4gICAgICAgIC8vIHN0b3Jpbmcgb3JpZ2luYWwgd2lkdGggb2YgY2FyZC5cbiAgICAgICAgLy8gdXNlZCB0byByZXN0b3JlIHdpZHRoIG9uIHdpbmRvdyByZXNpemUgZnJvbSBzbWFsbCB0byBsYXJnZVxuICAgICAgICB0aGlzLl9vcmlnaW5hbENhcmRXaWR0aFNwYW4gPSAhdGhpcy5fb3JpZ2luYWxDYXJkV2lkdGhTcGFuID8gd2lkdGhDb2xTcGFuIDogdGhpcy5fb3JpZ2luYWxDYXJkV2lkdGhTcGFuO1xuICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSB0aGlzLmdldE1heENvbFNwYW4obGF5b3V0U2l6ZSk7XG4gICAgICAgIGlmICh3aWR0aENvbFNwYW4gPiB0aGlzLl9tYXhDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoQ29sU3BhbiA9IHRoaXMuX21heENvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuX3NldENhcmRXaWR0aCgpO1xuICAgICAgICAgICAgLy8gRW1pdHMgcmVzaXplZCBldmVudC5cbiAgICAgICAgICAgIHRoaXMucmVzaXplZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8ga2VlcCBjYXJkIHdpZHRoIG1pbmltdW0sIHNvIGl0IGNhbiBmaXQgaW4gc2NyZWVuLlxuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGhDb2xTcGFuID0gTWF0aC5taW4odGhpcy5fbWF4Q29sdW1uLCB0aGlzLl9vcmlnaW5hbENhcmRXaWR0aFNwYW4pO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZFdpZHRoKCk7XG4gICAgICAgICAgICAvLyBFbWl0cyByZXNpemVkIGV2ZW50LlxuICAgICAgICAgICAgdGhpcy5yZXNpemVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBSZXNpemVkRXZlbnQgb2JqZWN0IHRvIGVtaXQuICovXG4gICAgZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCk6IFJlc2l6ZWRFdmVudCB7XG4gICAgICAgIGNvbnN0IG5ld0NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICBjb25zdCBuZXdDYXJkV2lkdGhDb2xTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgbmV3Q2FyZFdpZHRoID0gbmV3Q2FyZFdpZHRoQ29sU3BhbiAqIGhvcml6b250YWxSZXNpemVTdGVwICsgbmV3Q2FyZFdpZHRoQ29sU3BhbiAqIGdhcDtcblxuICAgICAgICBjb25zdCBob3Jpem9udGFsUmVzaXplVGhyZXNob2xkUmVhY2hlZCA9IHRoaXMuY2FyZFdpZHRoIC0gbmV3Q2FyZFdpZHRoID4gaG9yaXpvbnRhbFJlc2l6ZU9mZnNldDtcbiAgICAgICAgY29uc3QgbmV3Q2FyZENvbFNwYW4gPSBob3Jpem9udGFsUmVzaXplVGhyZXNob2xkUmVhY2hlZCA/IG5ld0NhcmRXaWR0aENvbFNwYW4gKyAxIDogbmV3Q2FyZFdpZHRoQ29sU3BhbjtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNpemVkRXZlbnQoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRXaWR0aCxcbiAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0LFxuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGgsXG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQsXG4gICAgICAgICAgICB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuLFxuICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4sXG4gICAgICAgICAgICBuZXdDYXJkQ29sU3BhbixcbiAgICAgICAgICAgIG5ld0NhcmRIZWlnaHRSb3dTcGFuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJuIHByZXZpb3VzIGhlaWdodCByb3cgc3BhbiBvZiB0aGUgY2FyZCAqL1xuICAgIGdldCBwcmV2aW91c0NhcmRIZWlnaHRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2V0IGNhcmQgcHJvcGVydGllcyB1c2luZyBjb25maWcgcmVjZWl2ZWQgKi9cbiAgICBwcml2YXRlIF9pbml0aWFsU2V0dXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZFdpZHRoQ29sU3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZFdpZHRoQ29sU3BhbiB8fCB0aGlzLmNhcmRXaWR0aENvbFNwYW47XG4gICAgICAgIHRoaXMuY2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jb25maWc/LmNhcmRIZWlnaHRSb3dTcGFuIHx8IHRoaXMuY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLl9jb25maWc/LnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgIHRoaXMucmFuayA9IHRoaXMuX2NvbmZpZz8ucmFuayB8fCB0aGlzLnJhbms7XG4gICAgICAgIHRoaXMuY2FyZE1pbmlIZWFkZXJSb3dTcGFuID0gdGhpcy5fY29uZmlnPy5jYXJkTWluaUhlYWRlclJvd1NwYW4gfHwgdGhpcy5jYXJkTWluaUhlYWRlclJvd1NwYW47XG4gICAgICAgIHRoaXMuY2FyZE1pbmlDb250ZW50Um93U3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZE1pbmlDb250ZW50Um93U3BhbiB8fCB0aGlzLmNhcmRNaW5pQ29udGVudFJvd1NwYW47XG4gICAgICAgIHRoaXMucmVzaXphYmxlID0gdGhpcy5fY29uZmlnLnJlc2l6YWJsZSB8fCB0aGlzLnJlc2l6YWJsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIHRydWUgd2hlbiByZXNpemUgb2Zmc2V0IGlzIGNyb3NzZWQgKi9cbiAgICBwcml2YXRlIF9ob3Jpem9udGFsUmVzaXplV2l0aE9mZnNldCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgd2lkdGggaGFzIGluY3JlYXNlZFxuICAgICAgICBjb25zdCB3aWR0aEluY3JlbWVudCA9IHRoaXMuY2FyZFdpZHRoIC0gdGhpcy5fcHJldkNhcmRXaWR0aDtcbiAgICAgICAgY29uc3QgY2FyZFNwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuICAgICAgICBjb25zdCBjYXJkU3BhbkZyYWN0aW9uID0gdGhpcy5jYXJkV2lkdGggJSBob3Jpem9udGFsUmVzaXplU3RlcDtcblxuICAgICAgICAvLyB3aGVuIHdpZHRoIGluY3JlYXNlc1xuICAgICAgICBpZiAod2lkdGhJbmNyZW1lbnQgPiAwKSB7XG4gICAgICAgICAgICBpZiAod2lkdGhJbmNyZW1lbnQgPCBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwKSB7XG4gICAgICAgICAgICAgICAgLy8gd2lkdGhJbmNyZW1lbnQgaXMgbGVzcyB0aGFuIG9mZnNldCwgZG8gbm90IGluY3JlYXNlIHdpZHRoXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLl9wcmV2Q2FyZFdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayB2YWx1ZSBvZiBjYXJkU3BhbkZyYWN0aW9uLCBpbmNsdWRpbmcgZ2FwcyBpbiBjYXJkc1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2FyZFNwYW5GcmFjdGlvbkNyb3NzaW5nT2Zmc2V0ID1cbiAgICAgICAgICAgICAgICAgICAgY2FyZFNwYW5GcmFjdGlvbiAtIChjYXJkU3BhbiAtIDEpICogZ2FwID4gaG9yaXpvbnRhbFJlc2l6ZU9mZnNldDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IGlzQ2FyZFNwYW5GcmFjdGlvbkNyb3NzaW5nT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8gKGNhcmRTcGFuICsgMSkgKiBob3Jpem9udGFsUmVzaXplU3RlcFxuICAgICAgICAgICAgICAgICAgICA6IGNhcmRTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB3aGVuIHdpZHRoIGRlY3JlYXNlc1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHdpZHRoSW5jcmVtZW50KSA8IGhvcml6b250YWxSZXNpemVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAvLyB3aWR0aEluY3JlbWVudCBpcyBsZXNzIHRoYW4gb2Zmc2V0LCBkbyBub3QgZGVjcmVhc2Ugd2lkdGhcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IHRoaXMuX3ByZXZDYXJkV2lkdGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHZhbHVlIG9mIGNhcmRTcGFuRnJhY3Rpb24sIGluY2x1ZGluZyBnYXBzIGluIGNhcmRzXG4gICAgICAgICAgICAgICAgY29uc3QgaXNDYXJkU3BhbkZyYWN0aW9uQ3Jvc3NpbmdPZmZzZXQgPSBjYXJkU3BhbkZyYWN0aW9uIC0gY2FyZFNwYW4gKiBnYXAgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gaXNDYXJkU3BhbkZyYWN0aW9uQ3Jvc3NpbmdPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgPyAoY2FyZFNwYW4gKyAxKSAqIGhvcml6b250YWxSZXNpemVTdGVwXG4gICAgICAgICAgICAgICAgICAgIDogY2FyZFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gbWFrZSBob3Jpem9udGFsIHJlc2l6ZSBvbmx5IG9uIHN0ZXAgb2YgMjByZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9ob3Jpem9udGFsU3RlcFJlc2l6aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ob3Jpem9udGFsUmVzaXplV2l0aE9mZnNldCgpO1xuXG4gICAgICAgIC8vIEFkZCBpbm5lciBnYXAgaW4gIGNhcmRXaWR0aCBpZiB3aWR0aCBpcyBtb3JlIHRoYW4gMSBjb2x1bW5cbiAgICAgICAgaWYgKHRoaXMuY2FyZFdpZHRoID4gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gdGhpcy5jYXJkV2lkdGggKyAodGhpcy5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCAtIDEpICogZ2FwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FyZFdpZHRoQ29sU3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBtYWtlIHZlcnRpY2FsIHJlc2l6ZSBvbmx5IG9uIHN0ZXAgb2YgMXJlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX3ZlcnRpY2FsU3RlcFJlc2l6aW5nKCk6IHZvaWQge1xuICAgICAgICAvLyBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBoZWlnaHQgaGFzIGluY3JlYXNlZFxuICAgICAgICBjb25zdCBjYXJkSGVpZ2h0U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZFNwYW5GcmFjdGlvbiA9IHRoaXMuY2FyZEhlaWdodCAlIHZlcnRpY2FsUmVzaXplU3RlcDtcbiAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID1cbiAgICAgICAgICAgIGNhcmRTcGFuRnJhY3Rpb24gPiB2ZXJ0aWNhbFJlc2l6ZU9mZnNldFxuICAgICAgICAgICAgICAgID8gKGNhcmRIZWlnaHRTcGFuICsgMSkgKiB2ZXJ0aWNhbFJlc2l6ZVN0ZXBcbiAgICAgICAgICAgICAgICA6IGNhcmRIZWlnaHRTcGFuICogdmVydGljYWxSZXNpemVTdGVwO1xuXG4gICAgICAgIHRoaXMuY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXNpemUgY2FyZCBob3Jpem9udGFsbHkgYnkgY2hlY2tpbmcgYm91bmRhcnkgY29uZGl0aW9uXG4gICAgICogQHBhcmFtIHhQb3NpdGlvbiBjdXJyZW50IHgtcG9zaXRpb24gb2YgY3Vyc29yXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaG9yaXpvbnRhbFJlc2l6aW5nKHhQb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLl9wcmV2WCAtIHhQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLl9ydGxTZXJ2aWNlPy5ydGxTaWduYWwoKSA/IHRoaXMuY2FyZFdpZHRoICsgZGlmZmVyZW5jZSA6IHRoaXMuY2FyZFdpZHRoIC0gZGlmZmVyZW5jZTtcblxuICAgICAgICBjb25zdCB0b3RhbEluZGVudGF0aW9uID0gKHRoaXMuX21heENvbHVtbiAtIDEpICogZ2FwO1xuICAgICAgICBjb25zdCBtYXhDYXJkV2lkdFdpdGhvdXRJbmRlbnRhdGlvbiA9IHRoaXMuX21heENvbHVtbiAqIGhvcml6b250YWxSZXNpemVTdGVwO1xuXG4gICAgICAgIGNvbnN0IG1heENhcmRXaWR0aCA9IHRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpXG4gICAgICAgICAgICA/IG1heENhcmRXaWR0V2l0aG91dEluZGVudGF0aW9uIC0gdG90YWxJbmRlbnRhdGlvblxuICAgICAgICAgICAgOiBtYXhDYXJkV2lkdFdpdGhvdXRJbmRlbnRhdGlvbiArIHRvdGFsSW5kZW50YXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMuY2FyZFdpZHRoID4gbWF4Q2FyZFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IG1heENhcmRXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcmRXaWR0aCA8IGhvcml6b250YWxSZXNpemVTdGVwKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IGhvcml6b250YWxSZXNpemVTdGVwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXNpemUgY2FyZCB2ZXJ0aWNhbGx5LlxuICAgICAqIHRha2VzIGNhcmUgb2YgbWluaS1oZWFkZXIgaGVpZ2h0IGFuZCBtaW5pLWNvbnRlbnQgaGVpZ2h0XG4gICAgICogQHBhcmFtIHlQb3NpdGlvbiBjdXJyZW50IHktcG9zaXRpb24gb2YgY3Vyc29yXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmVydGljYWxSZXNpemluZyh5UG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgcmVhY2hpbmdNaW5pSGVhZGVyID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuY2FyZEhlaWdodCA9PT0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCkge1xuICAgICAgICAgICAgLy8gaWYgY2FyZCBoZWlnaHQgaXMgYWxyZWFkeSBhdCBtaW5pLWhlYWRlciBoZWlnaHRcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2WSAtIHlQb3NpdGlvbiA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBkZWNyZWFzaW5nIGhlaWdodFxuICAgICAgICAgICAgICAgIC8vIGlmIG1pbmlIZWFkZXIgaGVpZ2h0IHJlYWNoZWQsIHN0b3AgcmVzaXppbmdcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpbmNyZWFzaW5nIGhlaWdodFxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQgKyB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmlDb250ZW50UmVhY2hlZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZEhlaWdodCA8IHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ICsgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCkge1xuICAgICAgICAgICAgLy8gaWYgY2FyZCBoZWlnaHQgaXMgYmV0d2VlbiBtaW5pLWhlYWRlciBhbmQgbWluaS1jb250ZW50XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJldlkgLSB5UG9zaXRpb24gPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCArIHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BSZXNpemluZygpO1xuICAgICAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPT09IHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ICsgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCAmJlxuICAgICAgICAgICAgdGhpcy5fcHJldlkgLSB5UG9zaXRpb24gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gZGVjcmVhc2luZyBoZWlnaHRcbiAgICAgICAgICAgIC8vIGhlaWdodCBkZWNyZWFzaW5nIGFmdGVyIHJlYWNoaW5nIG1pbmktY29udGVudC4gdGhpcyBuZWVkcyB0byBkaWZmZXJlbnRpYXRlXG4gICAgICAgICAgICAvLyBmcm9tIGhlaWdodCBkZWNyZWFzaW5nIGFuZCByZWFjaGluZyB0byBtaW5pLWNvbnRlbnQuXG4gICAgICAgICAgICByZWFjaGluZ01pbmlIZWFkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgICAgICAvLyBtaW5pSGVhZGVyIGhlaWdodCByZWFjaGVkLCBzdG9wIHJlc2l6aW5nXG4gICAgICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgICAgIHRoaXMubWluaUhlYWRlclJlYWNoZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZEhlaWdodCAtICh0aGlzLl9wcmV2WSAtIHlQb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RvcCByZXNpemluZyBvbiBtaW5pQ29udGVudCBoZWlnaHRcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0IDw9IHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ICsgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCAmJlxuICAgICAgICAgICAgdGhpcy5fcHJldlkgLSB5UG9zaXRpb24gPiAwICYmXG4gICAgICAgICAgICAhcmVhY2hpbmdNaW5pSGVhZGVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQgKyB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoaWxlIGNvcm5lciByZXNpemUsIHdpZHRoIG1pZ2h0IGhhdmUgaW5jcmVhc2VkIGFuZCByZWFjaGVkIHRvIG1pbmktY29udGVudCBoZWlnaHQuXG4gICAgICAgIC8vIHNvLCBvbiBtaW5pLWNvbnRlbnQgcmVzaXplIHdpbGwgc3RvcCwgYnV0IGhhdmUgdG8gZG8gc3RlcCByZXNpemluZyBmb3IgdmVydGljYWwgYW5kIGhvcml6b250YWwuXG4gICAgICAgIGlmICghdGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICAvLyBpbmNyZWFzZS9kZWNyZWFzZSB3aWR0aCBvZiBjYXJkIGluIG9yZGVyIG9mIDIwcmVtXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYXJkV2lkdGggLSB0aGlzLl9wcmV2Q2FyZFdpZHRoKSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsU3RlcFJlc2l6aW5nKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGluY3JlYXNlL2RlY3JlYXNlIGhlaWdodCBvZiBjYXJkIGluIG9yZGVyIG9mIDFyZW1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhcmRIZWlnaHQgLSB0aGlzLl9wcmV2Q2FyZEhlaWdodCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmVydGljYWxTdGVwUmVzaXppbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIHJlc2V0IGludm9sdmVkIHZhcmlhYmxlcyB3aGlsZSByZXNpemluZyAqL1xuICAgIHByaXZhdGUgX3N0b3BSZXNpemluZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Jlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jYXJkU3RhdGUgPSAwO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSAwO1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnpJbmRleCA9IDA7XG4gICAgICAgICAgICB0aGlzLnNob3dCb3JkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJucyBjYXJkV2lkdGggYmFzZWQgb24gY2FyZCBjb2x1bW4gc3BhbiAqL1xuICAgIHByaXZhdGUgX3NldENhcmRXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAodGhpcy5fY2FyZFdpZHRoQ29sU3BhbiAtIDEpICogZ2FwO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIGNhcmRIZWlnaHQgYmFzZWQgb24gY2FyZCByb3cgc3BhbiAqL1xuICAgIHByaXZhdGUgX3NldENhcmRIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuICogdmVydGljYWxSZXNpemVTdGVwO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIGNhcmQgbWluaSBoZWFkZXIgaGVpZ2h0ICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZE1pbmlIZWFkZXJIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQgPSB0aGlzLl9jYXJkTWluaUhlYWRlclJvd1NwYW4gKiB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgY2FyZCBtaW5pIGNvbnRlbnQgaGVpZ2h0ICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZE1pbmlDb250ZW50SGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodCA9IHRoaXMuY2FyZE1pbmlDb250ZW50Um93U3BhbiAqIHZlcnRpY2FsUmVzaXplU3RlcDtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuXG4vKiogQ29uZmlnIGludGVyZmFjZSBmb3IgY2FyZCBwcm9wZXJ0aWVzICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6YWJsZUNhcmRJdGVtQ29uZmlnIHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICByYW5rPzogbnVtYmVyO1xuICAgIGNhcmRXaWR0aENvbFNwYW4/OiBudW1iZXI7XG4gICAgY2FyZEhlaWdodFJvd1NwYW4/OiBudW1iZXI7XG4gICAgY2FyZE1pbmlIZWFkZXJSb3dTcGFuPzogbnVtYmVyO1xuICAgIGNhcmRNaW5pQ29udGVudFJvd1NwYW4/OiBudW1iZXI7XG4gICAgcmVzaXphYmxlPzogYm9vbGVhbjtcbn1cblxuLyoqIE9iamVjdCB0byBlbWl0IG9uIHJlc2l6ZSBjb21wbGV0ZSAqL1xuZXhwb3J0IGNsYXNzIFJlc2l6ZWRFdmVudCB7XG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGVtaXQgb24gcmVzaXplIGNvbXBsZXRlXG4gICAgICogQHBhcmFtIGNhcmRcbiAgICAgKiBAcGFyYW0gcHJldkNhcmRXaWR0aCBQcmV2aW91cyBjYXJkIHdpZHRoXG4gICAgICogQHBhcmFtIHByZXZDYXJkSGVpZ2h0IFByZXZpb3VzIGNhcmQgaGVpZ2h0XG4gICAgICogQHBhcmFtIGNhcmRXaWR0aCBDdXJyZW50IGNhcmQgd2lkdGhcbiAgICAgKiBAcGFyYW0gY2FyZEhlaWdodCBDdXJyZW50IGNhcmQgaGVpZ2h0XG4gICAgICogQHBhcmFtIGNhcmRXaWR0aENvbFNwYW4gQ3VycmVudCBjYXJkIHdpZHRoIGNvbHVtbiBzcGFuXG4gICAgICogQHBhcmFtIGNhcmRIZWlnaHRSb3dTcGFuIEN1cnJlbnQgY2FyZCBoZWlnaHQgcm93IHNwYW5cbiAgICAgKiBAcGFyYW0gbmV3Q2FyZFdpZHRoQ29sU3BhbiBOZXcgY2FyZCB3aWR0aCBjb2x1bW4gc3BhblxuICAgICAqIEBwYXJhbSBuZXdDYXJkSGVpZ2h0Um93U3BhbiBOZXcgY2FyZCBoZWlnaHQgcm93IHNwYW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50LFxuICAgICAgICBwdWJsaWMgcHJldkNhcmRXaWR0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcHJldkNhcmRIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNhcmRXaWR0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY2FyZEhlaWdodDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY2FyZFdpZHRoQ29sU3BhbjogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY2FyZEhlaWdodFJvd1NwYW46IG51bWJlcixcbiAgICAgICAgcHVibGljIG5ld0NhcmRXaWR0aENvbFNwYW46IG51bWJlcixcbiAgICAgICAgcHVibGljIG5ld0NhcmRIZWlnaHRSb3dTcGFuOiBudW1iZXJcbiAgICApIHt9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2l0ZW1cIlxuICAgIFtjbGFzcy5mZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2luZGljYXRpb24tYm9yZGVyXT1cInNob3dCb3JkZXJcIlxuICAgICNyZXNpemVDYXJkXG4+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faXRlbS0tYm9yZGVyLWRpc3BsYXkgZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pdGVtLS1yZXNpemUtdHJhbnNpdGlvblwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjYXJkV2lkdGhcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhcmRIZWlnaHRcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UmVzaXplSWNvbigpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGlkZVJlc2l6ZUljb24oKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19jYXJkXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICBAaWYgKHNob3dpbmdSZXNpemVJY29uKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faWNvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNjb3JuZXJIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnYm90aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChyZXNpemFibGUpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ2ZXJ0aWNhbEhhbmRsZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJob3Jpem9udGFsSGFuZGxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faXRlbS0tcmVzaXplLXRyYW5zaXRpb25cIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjYXJkSGVpZ2h0XCJcbiAgICA+PC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjdmVydGljYWxIYW5kbGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgICN2ZXJ0aWNhbEhhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fcmVzaXplLS12ZXJ0aWNhbFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnaG9yaXpvbnRhbCcpXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNob3Jpem9udGFsSGFuZGxlVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgICAjaG9yaXpvbnRhbEhhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fcmVzaXplLS1ob3Jpem9udGFsXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsICd2ZXJ0aWNhbCcpXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1pdGVtL3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtaXRlbS9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFJcEMsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUV4Qyx1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBRXJDLGdDQUFnQztBQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRXRCLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFMUMsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxN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bnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE51bGxhYmxlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIFJlc2l6ZURpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCAnYm90aCc7XG5cbi8vIENhcmQgcmVzaXplcyBpbiBzdGVwIG9mIGZpeGVkIHZhbHVlcy4gdmFsdWVzIGFyZSBpbiBwaXhlbFxuZXhwb3J0IGNvbnN0IGhvcml6b250YWxSZXNpemVTdGVwID0gMzIwO1xuXG4vLyB2ZXJ0aWNhbCByZXNpemUgc3RlcFxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsUmVzaXplU3RlcCA9IDE2O1xuXG4vLyBnYXAgb2YgMXJlbSBiZXR3ZWVuIHRoZSBjYXJkc1xuZXhwb3J0IGNvbnN0IGdhcCA9IDE2O1xuXG4vLyB0aHJlc2hvbGQgb2Zmc2V0IGZvciBob3Jpem9udGFsIHJlc2l6aW5nLlxuZXhwb3J0IGNvbnN0IGhvcml6b250YWxSZXNpemVPZmZzZXQgPSAxNjA7XG5cbi8vIHRocmVzaG9sZCBvZmZzZXQgZm9yIHZlcnRpY2FsIHJlc2l6aW5nLlxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsUmVzaXplT2Zmc2V0ID0gODtcblxuLy8gc3RhdGUgb2YgY2FyZC4gSW5jcmVhc2luZyB3aWR0aCwgbm8gY2hhbmdlIG9yIGRlY3JlYXNpbmcgd2lkdGguXG5leHBvcnQgdHlwZSBDYXJkU3RhdGUgPSAxIHwgMCB8IC0xO1xuXG4vLyBjYXJkIGlzIGdpdmVuIG51bWVyaWMgdmFsdWUsIG9uIHdoaWNoIHNvcnRpbmcgb2YgY2FyZHMgaXMgZG9uZVxubGV0IGNhcmRSYW5rID0gMTtcbmxldCBjYXJkVW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXJlc2l6YWJsZS1jYXJkLWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAncmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldF1cbn0pXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBGb2N1c2FibGVPcHRpb24sIE9uRGVzdHJveSB7XG4gICAgLyoqIENhcmQgcHJvcGVydGllcyBmcm9tIHRoZSBjb25maWcgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb25maWcoY29uZmlnOiBSZXNpemFibGVDYXJkSXRlbUNvbmZpZykge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuX2luaXRpYWxTZXR1cCgpO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGdldCBjb25maWcoKTogUmVzaXphYmxlQ2FyZEl0ZW1Db25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICAgIH1cblxuICAgIC8qKiBzZXQgdWlucXVlIGlkIGZvciB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbUlkID0gYGZkLWNhcmQtaXRlbS0ke2NhcmRVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogc2V0IHRpdGxlIG9mIHRoZSBjYXJkICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2VyaWFsIG9yZGVyIG9mIGNhcmQuXG4gICAgICogY2FyZHMgYXJlIHNvcnRlZCBiYXNlZCBvbiByYW5rcyBiZWZvcmUgZGlzcGxheWluZyBsYXlvdXQuXG4gICAgICogY2FyZCB3aXRoIGxvd2VyIHJhbmsgd2lsbCBiZSBkaXNwbGF5ZWQgZmlyc3QgaW4gbGF5b3V0IHRoYW4gdGhlIGNhcmQgd2l0aCBoaWdoZXIgcmFuay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByYW5rKHJhbmtWYWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIGRldGVybWluZSBtYXggdmFsdWUgYmV0d2VlbiB1c2VyIGdpdmVuIHZhbHVlIGFuZCBkZWZhdWx0IHZhbHVlXG4gICAgICAgIHRoaXMuX3JhbmsgPSByYW5rVmFsdWUgPyByYW5rVmFsdWUgOiBjYXJkUmFuaysrO1xuICAgICAgICBpZiAocmFua1ZhbHVlID4gY2FyZFJhbmspIHtcbiAgICAgICAgICAgIGNhcmRSYW5rID0gcmFua1ZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCByYW5rKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5rO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBjb2x1bW4gc3BhbiBjYXJkIHdpZHRoIHRha2VzLlxuICAgICAqIEl0IHdpbGwgYmUgaW4gc3RlcCBvZiAyMHJlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkV2lkdGhDb2xTcGFuKGNvbFNwYW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuID0gY29sU3BhbjtcbiAgICAgICAgdGhpcy5fc2V0Q2FyZFdpZHRoKCk7XG4gICAgfVxuICAgIGdldCBjYXJkV2lkdGhDb2xTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiByb3cgc3BhbiwgY2FyZCBoZWlnaHQgdGFrZXMuXG4gICAgICogSXQgd2lsbCBiZSBpbiB0aGUgc3RlcCBvZiAxcmVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhcmRIZWlnaHRSb3dTcGFuKHJvd1NwYW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IHJvd1NwYW47XG4gICAgICAgIHRoaXMuX3NldENhcmRIZWlnaHQoKTtcbiAgICB9XG4gICAgZ2V0IGNhcmRIZWlnaHRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygcm93IHNwYW4gY2FyZCBtaW5pIGhlYWRlciBoZWlnaHQgdGFrZXMuXG4gICAgICogTWluaSBIZWFkZXI6IFRoZSBzbWFsbGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2FyZCBpcyB0aGUgaGVhZGVyLlxuICAgICAqIFRoZSBjYXJkIGNhbiBiZSBjb2xsYXBzZWQgdG8gb25seSBpdHMgaGVhZGVyIGhlaWdodC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkTWluaUhlYWRlclJvd1NwYW4ocm93U3BhbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NhcmRNaW5pSGVhZGVyUm93U3BhbiA9IHJvd1NwYW47XG4gICAgICAgIHRoaXMuX3NldENhcmRNaW5pSGVhZGVySGVpZ2h0KCk7XG4gICAgfVxuICAgIGdldCBjYXJkTWluaUhlYWRlclJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRNaW5pSGVhZGVyUm93U3BhbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygcm93IHNwYW4gY2FyZCBtaW5pIGNvbnRlbnQgaGVpZ2h0IHRha2VzLlxuICAgICAqIE1pbmkgQ29udGVudDogVGhlIG1pbmltdW0gaGVpZ2h0IGZvciB0aGUgY2FyZCBjb250ZW50IGRlcGVuZHMgb24gdGhlIGNhcmQgdHlwZSxcbiAgICAgKiBhbmQgbXVzdCBiZSBhcyBoaWdoIGFzIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkTWluaUNvbnRlbnRSb3dTcGFuKHJvd1NwYW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYXJkTWluaUNvbnRlbnRSb3dTcGFuID0gcm93U3BhbjtcbiAgICAgICAgdGhpcy5fc2V0Q2FyZE1pbmlDb250ZW50SGVpZ2h0KCk7XG4gICAgfVxuICAgIGdldCBjYXJkTWluaUNvbnRlbnRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkTWluaUNvbnRlbnRSb3dTcGFuID8/IDA7XG4gICAgfVxuXG4gICAgLyoqIENhcmQgY2FuIGJlIHNldCB0byByZXNpemFibGU9ZmFsc2UsIHRvIHJlc3RyaWN0IGNhcmQgcmVzaXplICovXG4gICAgQElucHV0KClcbiAgICByZXNpemFibGUgPSB0cnVlO1xuXG4gICAgLyoqIFNldCBsZWZ0IHBvc2l0aW9uIGZvciB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5sZWZ0LnB4JylcbiAgICBsZWZ0OiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgLyoqIFNldCByaWdodCBwb3NpdGlvbiBmb3IgdGhlIGNhcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUucmlnaHQucHgnKVxuICAgIHJpZ2h0OiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgLyoqIFNldCB0b3AgcG9zaXRpb24gZm9yIHRoZSBjYXJkKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUudG9wLnB4JylcbiAgICB0b3AgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hpbGUgcmVzaXppbmcgdGhpcyB2YWx1ZSB3aWxsIGNoYW5nZSB0byBhIGdyZWF0ZXIgdmFsdWUgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxuICAgIHpJbmRleCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUucG9zaXRpb24nKVxuICAgIHBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAgIC8qKiBAaGlkZGVuIHRyYW5zaXRpb24gYW5pbWF0aW9uIHdoZW4gbGF5b3V0IHJlLWRyYXdzICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2RyYXctdHJhbnNpdGlvbicpXG4gICAgcmVEcmF3QW5pbWF0aW9uID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgaXMgc3RpbGwgcmVzaXppbmcgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZXNpemluZzogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIGNvbXBsZXRlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc2l6ZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBjYXJkIGhlaWdodCBpcyByZWR1Y2VkIHRvIHNob3cgb25seSBoZWFkZXIgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pSGVhZGVyUmVhY2hlZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIG1pbmltdW0gaGVpZ2h0IG9mIGNhcmQgY29udGVudCBhcmVhIGlzIHJlYWNoZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pQ29udGVudFJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogc2hvdyBjb3JuZXIgcmVzaXplIGljb24gb24gaG92ZXIgb3ZlciBjYXJkICovXG4gICAgc2hvd2luZ1Jlc2l6ZUljb24gPSBmYWxzZTtcblxuICAgIC8qKiBzaG93IGJvcmRlciB3aGVuIGNhcmQgaXMgcmVzaXppbmcgKi9cbiAgICBzaG93Qm9yZGVyID0gZmFsc2U7XG5cbiAgICAvKiogc3RhcnRpbmcgY29sdW1uIHBvc2l0aW9uIG9mIGNhcmQuIHN0YXJ0cyB3aXRoIDAgKi9cbiAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uOiBudW1iZXI7XG5cbiAgICAvKiogY2FyZCB3aWR0aCBpbiBweC4gRGVmYXVsdCB2YWx1ZSB0byAyMHJlbSAqL1xuICAgIGNhcmRXaWR0aDogbnVtYmVyID0gaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG5cbiAgICAvKiogY2FyZCBoZWlnaHQgaW4gcHggKi9cbiAgICBjYXJkSGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKiogTWluaS1oZWFkZXIgaGVpZ2h0IG9mIGNhcmQgKi9cbiAgICBjYXJkTWluaUhlYWRlckhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIE1pbmktY29udGVudCBoZWlnaHQgb2YgY2FyZCB0byBkaXNwbGF5IG1pbmltdW0gdmFsaWQgY29udGVudCAqL1xuICAgIGNhcmRNaW5pQ29udGVudEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIE91dGVyIHJlc2l6ZSBpbmRpY2F0aW9uIGJvcmRlciB3aWR0aCBmb3IgdGhlIGNhcmQgKi9cbiAgICByZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSAwO1xuXG4gICAgLyoqXG4gICAgICogRGVub3RlcyBpZiBjYXJkIGlzIGN1cnJlbnRseSBleHBhbmRpbmcgb3IgY29udHJhY3RpbmcgaG9yaXpvbnRhbGx5LlxuICAgICAqICsxIGRlbm90ZXMgaW5jcmVhc2luZywgLTEgZGVub3RlcyBkZWNyZWFzaW5nIGFuZCAwIGRlbm90ZXMgY2FyZC1zdGF0ZSBoYXMgbm90IGNoYW5nZWQgaG9yaXpvbnRhbGx5LlxuICAgICAqL1xuICAgIGNhcmRTdGF0ZTogQ2FyZFN0YXRlID0gMDtcblxuICAgIC8qKiBDaGFuZ2UgaW4gcmFuayBmcm9tIHByZXZpb3VzIHZhbHVlKi9cbiAgICBwcmV2UmFuayA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiBEZWZhdWx0IHdpZHRoIG9mIGNhcmQgaXMgMjByZW0gaWUuIDEgY29sdW1uICovXG4gICAgcHJpdmF0ZSBfY2FyZFdpZHRoQ29sU3BhbiA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhcmRIZWlnaHRSb3dTcGFuOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBoZWxwcyBpbiB2ZXJ0aWNhbCBzdGVwIGNoYW5nZSBldmVudCBlbWl0ICovXG4gICAgcHJpdmF0ZSBfcHJldkNhcmRIZWlnaHRSb3dTcGFuOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhcmRNaW5pSGVhZGVyUm93U3BhbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYXJkTWluaUNvbnRlbnRSb3dTcGFuPzogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gY29uZmlnIHZhbHVlcyBmb3IgY2FyZCAqL1xuICAgIHByaXZhdGUgX2NvbmZpZzogUmVzaXphYmxlQ2FyZEl0ZW1Db25maWc7XG5cbiAgICAvKiogQGhpZGRlbiBwcmV2aW91cyBjdXJzb3IgeCBwb3NpdGlvbiAqL1xuICAgIHByaXZhdGUgX3ByZXZYOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBwcmV2aW91cyBjdXJzb3IgeSBwb3NpdGlvbiAqL1xuICAgIHByaXZhdGUgX3ByZXZZOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZDYXJkV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldkNhcmRIZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIGZsYWcgdG8gY29udHJvbCByZXNpemUgKi9cbiAgICBwcml2YXRlIF9yZXNpemUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzaXplRGlyZWN0aW9uOiBSZXNpemVEaXJlY3Rpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21heENvbHVtbjogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBzdG9yZXMgb3JpZ2luYWwgd2lkdGggc3BhbiBvZiBjYXJkLlxuICAgICAqIEl0IG1heSByZWR1Y2Ugb24gc21hbGwgc2NyZWVuLCBzbyBoYXZlIHRvIHJlc3RvcmUgdXNpbmcgdGhpcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vcmlnaW5hbENhcmRXaWR0aFNwYW4gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yYW5rOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBXaGVuIG1vdXNlIG1vdmVzIHRvIHJlc2l6ZSB0aGUgY2FyZC5cbiAgICAgKiB1c2luZyB3aW5kb3c6bW91c2Vtb3ZlIHNvLCByZXNpemUgd2lsbCBoYXBwZW4gc21vb3RobHlcbiAgICAgKiBAcGFyYW0gZXZlbnQge01vdXNlRXZlbnR9XG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXG4gICAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2F2ZXMgZnJvbSB1bi1uZWNlc3NhcnkgcmVzaXplXG4gICAgICAgIGlmICghdGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2hvd0JvcmRlcikge1xuICAgICAgICAgICAgdGhpcy5zaG93Qm9yZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc2l6aW5nIGNhcmQgd2lsbCBnbyBvdmVyIG90aGVyIGNhcmRzXG4gICAgICAgIHRoaXMuekluZGV4ID0gMTtcblxuICAgICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGV2ZW50O1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3Jlc2l6ZURpcmVjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFJlc2l6aW5nKGNsaWVudFgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2FsUmVzaXppbmcoY2xpZW50WSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsUmVzaXppbmcoY2xpZW50WCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fdmVydGljYWxSZXNpemluZyhjbGllbnRZKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFJlc2l6aW5nKGNsaWVudFgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2FsUmVzaXppbmcoY2xpZW50WSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYXJkV2lkdGhDb2xTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZFdpZHRoV2l0aENvbHVtbiA9IGNhcmRXaWR0aENvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCArIGNhcmRXaWR0aENvbFNwYW4gKiBnYXA7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFJlc2l6ZVRocmVzaG9sZFJlYWNoZWQgPSB0aGlzLmNhcmRXaWR0aCAtIGNhcmRXaWR0aFdpdGhDb2x1bW4gPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0O1xuXG4gICAgICAgIGlmIChjbGllbnRYID4gdGhpcy5fcHJldlgpIHtcbiAgICAgICAgICAgIC8vIGluY3JlYXNpbmcgd2lkdGhcbiAgICAgICAgICAgIHRoaXMuY2FyZFN0YXRlID0gMTtcblxuICAgICAgICAgICAgaWYgKGhvcml6b250YWxSZXNpemVUaHJlc2hvbGRSZWFjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlQ2FyZFdpZHRoID0gKGNhcmRXaWR0aENvbFNwYW4gKyAxKSAqIGhvcml6b250YWxSZXNpemVTdGVwICsgY2FyZFdpZHRoQ29sU3BhbiAqIGdhcDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IGZ1dHVyZUNhcmRXaWR0aCAtIHRoaXMuY2FyZFdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2xpZW50WCA8IHRoaXMuX3ByZXZYKSB7XG4gICAgICAgICAgICAvLyBkZWNyZWFzaW5nIHdpZHRoXG4gICAgICAgICAgICB0aGlzLmNhcmRTdGF0ZSA9IC0xO1xuICAgICAgICAgICAgaWYgKGhvcml6b250YWxSZXNpemVUaHJlc2hvbGRSZWFjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlQ2FyZFdpZHRoID0gKGNhcmRXaWR0aENvbFNwYW4gKyAxKSAqIGhvcml6b250YWxSZXNpemVTdGVwICsgY2FyZFdpZHRoQ29sU3BhbiAqIGdhcDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IGZ1dHVyZUNhcmRXaWR0aCAtIHRoaXMuY2FyZFdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2WCA9IGNsaWVudFg7XG4gICAgICAgIHRoaXMuX3ByZXZZID0gY2xpZW50WTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIC8vIEVtaXRzIHJlc2l6aW5nIGV2ZW50LlxuICAgICAgICB0aGlzLnJlc2l6aW5nLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogd2hlbiByZXNpemluZyBvZiBjYXJkIHN0b3BzXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gICAgb25Nb3VzZVVwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucmVzaXphYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgY2FyZCB3YXMgbm90IHJlc2l6aW5nXG4gICAgICAgIGlmICghdGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbmNyZWFzZS9kZWNyZWFzZSB3aWR0aCBvZiBjYXJkIGluIG9yZGVyIG9mIDIwcmVtXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhcmRXaWR0aCAtIHRoaXMuX3ByZXZDYXJkV2lkdGgpID4gMCkge1xuICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFN0ZXBSZXNpemluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW5jcmVhc2UvZGVjcmVhc2UgaGVpZ2h0IG9mIGNhcmQgaW4gb3JkZXIgb2YgMXJlbVxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYXJkSGVpZ2h0IC0gdGhpcy5fcHJldkNhcmRIZWlnaHQpID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fdmVydGljYWxTdGVwUmVzaXppbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0b3BSZXNpemluZygpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiByZXNpemUgaGFuZGxlciBpcyBwcmVzc2VkIGFuZCByZXNpemluZyBtYXkgc3RhcnQuXG4gICAgICogQHBhcmFtIGV2ZW50IHtNb3VzZUV2ZW50fVxuICAgICAqIEBwYXJhbSByZXNpemVEaXJlY3Rpb24gd2hpY2ggaGFuZGxlciBpcyBwcmVzc2VkIHRvIHJlc2l6ZVxuICAgICAqL1xuICAgIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50LCByZXNpemVEaXJlY3Rpb246IFJlc2l6ZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoIXRoaXMucmVzaXphYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dpbmdSZXNpemVJY29uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVzaXplID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcHJldlggPSBldmVudC5jbGllbnRYO1xuICAgICAgICB0aGlzLl9wcmV2WSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICAgIHRoaXMuX3ByZXZDYXJkV2lkdGggPSB0aGlzLmNhcmRXaWR0aDtcbiAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHQgPSB0aGlzLmNhcmRIZWlnaHQ7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZURpcmVjdGlvbiA9IHJlc2l6ZURpcmVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBmb2N1cyBvbiB0aGUgZWxlbWVudCAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZmQtY2FyZF9faGVhZGVyJyk7XG4gICAgICAgIGhlYWRlcj8uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogU2hvd3MgcmVzaXplIGljb24gKi9cbiAgICBzaG93UmVzaXplSWNvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd2luZ1Jlc2l6ZUljb24gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBIaWRlcyByZXNpemUgaWNvbiAqL1xuICAgIGhpZGVSZXNpemVJY29uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaG93aW5nUmVzaXplSWNvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgbWF4IHdpZHRoIGZvciBjYXJkLCBiYXNlZCBvbiBsYXlvdXQgc2l6ZSBwYXNzZWQgKi9cbiAgICBnZXRNYXhDb2xTcGFuKGxheW91dFNpemU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHN3aXRjaCAobGF5b3V0U2l6ZSkge1xuICAgICAgICAgICAgY2FzZSAnc20nOlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4Q29sdW1uID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX21heENvbHVtbjtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlIGNhcmQgd2lkdGggaWYgaXQgZXhjZWVkcyBjb2x1bW4gc3BhbiBiYXNlZCBvbiBsYXlvdXQgKi9cbiAgICB2ZXJpZnlVcGRhdGVDYXJkV2lkdGgobGF5b3V0U2l6ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdpZHRoQ29sU3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZFdpZHRoQ29sU3BhbiB8fCB0aGlzLmNhcmRXaWR0aENvbFNwYW47XG4gICAgICAgIC8vIHN0b3Jpbmcgb3JpZ2luYWwgd2lkdGggb2YgY2FyZC5cbiAgICAgICAgLy8gdXNlZCB0byByZXN0b3JlIHdpZHRoIG9uIHdpbmRvdyByZXNpemUgZnJvbSBzbWFsbCB0byBsYXJnZVxuICAgICAgICB0aGlzLl9vcmlnaW5hbENhcmRXaWR0aFNwYW4gPSAhdGhpcy5fb3JpZ2luYWxDYXJkV2lkdGhTcGFuID8gd2lkdGhDb2xTcGFuIDogdGhpcy5fb3JpZ2luYWxDYXJkV2lkdGhTcGFuO1xuICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSB0aGlzLmdldE1heENvbFNwYW4obGF5b3V0U2l6ZSk7XG4gICAgICAgIGlmICh3aWR0aENvbFNwYW4gPiB0aGlzLl9tYXhDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoQ29sU3BhbiA9IHRoaXMuX21heENvbHVtbjtcbiAgICAgICAgICAgIHRoaXMuX3NldENhcmRXaWR0aCgpO1xuICAgICAgICAgICAgLy8gRW1pdHMgcmVzaXplZCBldmVudC5cbiAgICAgICAgICAgIHRoaXMucmVzaXplZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8ga2VlcCBjYXJkIHdpZHRoIG1pbmltdW0sIHNvIGl0IGNhbiBmaXQgaW4gc2NyZWVuLlxuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGhDb2xTcGFuID0gTWF0aC5taW4odGhpcy5fbWF4Q29sdW1uLCB0aGlzLl9vcmlnaW5hbENhcmRXaWR0aFNwYW4pO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZFdpZHRoKCk7XG4gICAgICAgICAgICAvLyBFbWl0cyByZXNpemVkIGV2ZW50LlxuICAgICAgICAgICAgdGhpcy5yZXNpemVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBSZXNpemVkRXZlbnQgb2JqZWN0IHRvIGVtaXQuICovXG4gICAgZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCk6IFJlc2l6ZWRFdmVudCB7XG4gICAgICAgIGNvbnN0IG5ld0NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICBjb25zdCBuZXdDYXJkV2lkdGhDb2xTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgbmV3Q2FyZFdpZHRoID0gbmV3Q2FyZFdpZHRoQ29sU3BhbiAqIGhvcml6b250YWxSZXNpemVTdGVwICsgbmV3Q2FyZFdpZHRoQ29sU3BhbiAqIGdhcDtcblxuICAgICAgICBjb25zdCBob3Jpem9udGFsUmVzaXplVGhyZXNob2xkUmVhY2hlZCA9IHRoaXMuY2FyZFdpZHRoIC0gbmV3Q2FyZFdpZHRoID4gaG9yaXpvbnRhbFJlc2l6ZU9mZnNldDtcbiAgICAgICAgY29uc3QgbmV3Q2FyZENvbFNwYW4gPSBob3Jpem9udGFsUmVzaXplVGhyZXNob2xkUmVhY2hlZCA/IG5ld0NhcmRXaWR0aENvbFNwYW4gKyAxIDogbmV3Q2FyZFdpZHRoQ29sU3BhbjtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNpemVkRXZlbnQoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRXaWR0aCxcbiAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0LFxuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGgsXG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQsXG4gICAgICAgICAgICB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuLFxuICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4sXG4gICAgICAgICAgICBuZXdDYXJkQ29sU3BhbixcbiAgICAgICAgICAgIG5ld0NhcmRIZWlnaHRSb3dTcGFuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJuIHByZXZpb3VzIGhlaWdodCByb3cgc3BhbiBvZiB0aGUgY2FyZCAqL1xuICAgIGdldCBwcmV2aW91c0NhcmRIZWlnaHRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2V0IGNhcmQgcHJvcGVydGllcyB1c2luZyBjb25maWcgcmVjZWl2ZWQgKi9cbiAgICBwcml2YXRlIF9pbml0aWFsU2V0dXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZFdpZHRoQ29sU3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZFdpZHRoQ29sU3BhbiB8fCB0aGlzLmNhcmRXaWR0aENvbFNwYW47XG4gICAgICAgIHRoaXMuY2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jb25maWc/LmNhcmRIZWlnaHRSb3dTcGFuIHx8IHRoaXMuY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLl9jb25maWc/LnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgIHRoaXMucmFuayA9IHRoaXMuX2NvbmZpZz8ucmFuayB8fCB0aGlzLnJhbms7XG4gICAgICAgIHRoaXMuY2FyZE1pbmlIZWFkZXJSb3dTcGFuID0gdGhpcy5fY29uZmlnPy5jYXJkTWluaUhlYWRlclJvd1NwYW4gfHwgdGhpcy5jYXJkTWluaUhlYWRlclJvd1NwYW47XG4gICAgICAgIHRoaXMuY2FyZE1pbmlDb250ZW50Um93U3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZE1pbmlDb250ZW50Um93U3BhbiB8fCB0aGlzLmNhcmRNaW5pQ29udGVudFJvd1NwYW47XG4gICAgICAgIHRoaXMucmVzaXphYmxlID0gdGhpcy5fY29uZmlnLnJlc2l6YWJsZSB8fCB0aGlzLnJlc2l6YWJsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIHRydWUgd2hlbiByZXNpemUgb2Zmc2V0IGlzIGNyb3NzZWQgKi9cbiAgICBwcml2YXRlIF9ob3Jpem9udGFsUmVzaXplV2l0aE9mZnNldCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgd2lkdGggaGFzIGluY3JlYXNlZFxuICAgICAgICBjb25zdCB3aWR0aEluY3JlbWVudCA9IHRoaXMuY2FyZFdpZHRoIC0gdGhpcy5fcHJldkNhcmRXaWR0aDtcbiAgICAgICAgY29uc3QgY2FyZFNwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuICAgICAgICBjb25zdCBjYXJkU3BhbkZyYWN0aW9uID0gdGhpcy5jYXJkV2lkdGggJSBob3Jpem9udGFsUmVzaXplU3RlcDtcblxuICAgICAgICAvLyB3aGVuIHdpZHRoIGluY3JlYXNlc1xuICAgICAgICBpZiAod2lkdGhJbmNyZW1lbnQgPiAwKSB7XG4gICAgICAgICAgICBpZiAod2lkdGhJbmNyZW1lbnQgPCBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwKSB7XG4gICAgICAgICAgICAgICAgLy8gd2lkdGhJbmNyZW1lbnQgaXMgbGVzcyB0aGFuIG9mZnNldCwgZG8gbm90IGluY3JlYXNlIHdpZHRoXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLl9wcmV2Q2FyZFdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayB2YWx1ZSBvZiBjYXJkU3BhbkZyYWN0aW9uLCBpbmNsdWRpbmcgZ2FwcyBpbiBjYXJkc1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2FyZFNwYW5GcmFjdGlvbkNyb3NzaW5nT2Zmc2V0ID1cbiAgICAgICAgICAgICAgICAgICAgY2FyZFNwYW5GcmFjdGlvbiAtIChjYXJkU3BhbiAtIDEpICogZ2FwID4gaG9yaXpvbnRhbFJlc2l6ZU9mZnNldDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IGlzQ2FyZFNwYW5GcmFjdGlvbkNyb3NzaW5nT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8gKGNhcmRTcGFuICsgMSkgKiBob3Jpem9udGFsUmVzaXplU3RlcFxuICAgICAgICAgICAgICAgICAgICA6IGNhcmRTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB3aGVuIHdpZHRoIGRlY3JlYXNlc1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHdpZHRoSW5jcmVtZW50KSA8IGhvcml6b250YWxSZXNpemVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAvLyB3aWR0aEluY3JlbWVudCBpcyBsZXNzIHRoYW4gb2Zmc2V0LCBkbyBub3QgZGVjcmVhc2Ugd2lkdGhcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IHRoaXMuX3ByZXZDYXJkV2lkdGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHZhbHVlIG9mIGNhcmRTcGFuRnJhY3Rpb24sIGluY2x1ZGluZyBnYXBzIGluIGNhcmRzXG4gICAgICAgICAgICAgICAgY29uc3QgaXNDYXJkU3BhbkZyYWN0aW9uQ3Jvc3NpbmdPZmZzZXQgPSBjYXJkU3BhbkZyYWN0aW9uIC0gY2FyZFNwYW4gKiBnYXAgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gaXNDYXJkU3BhbkZyYWN0aW9uQ3Jvc3NpbmdPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgPyAoY2FyZFNwYW4gKyAxKSAqIGhvcml6b250YWxSZXNpemVTdGVwXG4gICAgICAgICAgICAgICAgICAgIDogY2FyZFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gbWFrZSBob3Jpem9udGFsIHJlc2l6ZSBvbmx5IG9uIHN0ZXAgb2YgMjByZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9ob3Jpem9udGFsU3RlcFJlc2l6aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ob3Jpem9udGFsUmVzaXplV2l0aE9mZnNldCgpO1xuXG4gICAgICAgIC8vIEFkZCBpbm5lciBnYXAgaW4gIGNhcmRXaWR0aCBpZiB3aWR0aCBpcyBtb3JlIHRoYW4gMSBjb2x1bW5cbiAgICAgICAgaWYgKHRoaXMuY2FyZFdpZHRoID4gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gdGhpcy5jYXJkV2lkdGggKyAodGhpcy5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCAtIDEpICogZ2FwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FyZFdpZHRoQ29sU3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBtYWtlIHZlcnRpY2FsIHJlc2l6ZSBvbmx5IG9uIHN0ZXAgb2YgMXJlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX3ZlcnRpY2FsU3RlcFJlc2l6aW5nKCk6IHZvaWQge1xuICAgICAgICAvLyBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBoZWlnaHQgaGFzIGluY3JlYXNlZFxuICAgICAgICBjb25zdCBjYXJkSGVpZ2h0U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZFNwYW5GcmFjdGlvbiA9IHRoaXMuY2FyZEhlaWdodCAlIHZlcnRpY2FsUmVzaXplU3RlcDtcbiAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID1cbiAgICAgICAgICAgIGNhcmRTcGFuRnJhY3Rpb24gPiB2ZXJ0aWNhbFJlc2l6ZU9mZnNldFxuICAgICAgICAgICAgICAgID8gKGNhcmRIZWlnaHRTcGFuICsgMSkgKiB2ZXJ0aWNhbFJlc2l6ZVN0ZXBcbiAgICAgICAgICAgICAgICA6IGNhcmRIZWlnaHRTcGFuICogdmVydGljYWxSZXNpemVTdGVwO1xuXG4gICAgICAgIHRoaXMuY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXNpemUgY2FyZCBob3Jpem9udGFsbHkgYnkgY2hlY2tpbmcgYm91bmRhcnkgY29uZGl0aW9uXG4gICAgICogQHBhcmFtIHhQb3NpdGlvbiBjdXJyZW50IHgtcG9zaXRpb24gb2YgY3Vyc29yXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaG9yaXpvbnRhbFJlc2l6aW5nKHhQb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLl9wcmV2WCAtIHhQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLl9ydGxTZXJ2aWNlPy5ydGxTaWduYWwoKSA/IHRoaXMuY2FyZFdpZHRoICsgZGlmZmVyZW5jZSA6IHRoaXMuY2FyZFdpZHRoIC0gZGlmZmVyZW5jZTtcblxuICAgICAgICBjb25zdCB0b3RhbEluZGVudGF0aW9uID0gKHRoaXMuX21heENvbHVtbiAtIDEpICogZ2FwO1xuICAgICAgICBjb25zdCBtYXhDYXJkV2lkdFdpdGhvdXRJbmRlbnRhdGlvbiA9IHRoaXMuX21heENvbHVtbiAqIGhvcml6b250YWxSZXNpemVTdGVwO1xuXG4gICAgICAgIGNvbnN0IG1heENhcmRXaWR0aCA9IHRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpXG4gICAgICAgICAgICA/IG1heENhcmRXaWR0V2l0aG91dEluZGVudGF0aW9uIC0gdG90YWxJbmRlbnRhdGlvblxuICAgICAgICAgICAgOiBtYXhDYXJkV2lkdFdpdGhvdXRJbmRlbnRhdGlvbiArIHRvdGFsSW5kZW50YXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMuY2FyZFdpZHRoID4gbWF4Q2FyZFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IG1heENhcmRXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcmRXaWR0aCA8IGhvcml6b250YWxSZXNpemVTdGVwKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IGhvcml6b250YWxSZXNpemVTdGVwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXNpemUgY2FyZCB2ZXJ0aWNhbGx5LlxuICAgICAqIHRha2VzIGNhcmUgb2YgbWluaS1oZWFkZXIgaGVpZ2h0IGFuZCBtaW5pLWNvbnRlbnQgaGVpZ2h0XG4gICAgICogQHBhcmFtIHlQb3NpdGlvbiBjdXJyZW50IHktcG9zaXRpb24gb2YgY3Vyc29yXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmVydGljYWxSZXNpemluZyh5UG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgcmVhY2hpbmdNaW5pSGVhZGVyID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuY2FyZEhlaWdodCA9PT0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCkge1xuICAgICAgICAgICAgLy8gaWYgY2FyZCBoZWlnaHQgaXMgYWxyZWFkeSBhdCBtaW5pLWhlYWRlciBoZWlnaHRcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2WSAtIHlQb3NpdGlvbiA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBkZWNyZWFzaW5nIGhlaWdodFxuICAgICAgICAgICAgICAgIC8vIGlmIG1pbmlIZWFkZXIgaGVpZ2h0IHJlYWNoZWQsIHN0b3AgcmVzaXppbmdcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpbmNyZWFzaW5nIGhlaWdodFxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQgKyB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmlDb250ZW50UmVhY2hlZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZEhlaWdodCA8IHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ICsgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCkge1xuICAgICAgICAgICAgLy8gaWYgY2FyZCBoZWlnaHQgaXMgYmV0d2VlbiBtaW5pLWhlYWRlciBhbmQgbWluaS1jb250ZW50XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJldlkgLSB5UG9zaXRpb24gPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCArIHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BSZXNpemluZygpO1xuICAgICAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPT09IHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ICsgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCAmJlxuICAgICAgICAgICAgdGhpcy5fcHJldlkgLSB5UG9zaXRpb24gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gZGVjcmVhc2luZyBoZWlnaHRcbiAgICAgICAgICAgIC8vIGhlaWdodCBkZWNyZWFzaW5nIGFmdGVyIHJlYWNoaW5nIG1pbmktY29udGVudC4gdGhpcyBuZWVkcyB0byBkaWZmZXJlbnRpYXRlXG4gICAgICAgICAgICAvLyBmcm9tIGhlaWdodCBkZWNyZWFzaW5nIGFuZCByZWFjaGluZyB0byBtaW5pLWNvbnRlbnQuXG4gICAgICAgICAgICByZWFjaGluZ01pbmlIZWFkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgICAgICAvLyBtaW5pSGVhZGVyIGhlaWdodCByZWFjaGVkLCBzdG9wIHJlc2l6aW5nXG4gICAgICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgICAgIHRoaXMubWluaUhlYWRlclJlYWNoZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZEhlaWdodCAtICh0aGlzLl9wcmV2WSAtIHlQb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RvcCByZXNpemluZyBvbiBtaW5pQ29udGVudCBoZWlnaHRcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0IDw9IHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ICsgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCAmJlxuICAgICAgICAgICAgdGhpcy5fcHJldlkgLSB5UG9zaXRpb24gPiAwICYmXG4gICAgICAgICAgICAhcmVhY2hpbmdNaW5pSGVhZGVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQgKyB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoaWxlIGNvcm5lciByZXNpemUsIHdpZHRoIG1pZ2h0IGhhdmUgaW5jcmVhc2VkIGFuZCByZWFjaGVkIHRvIG1pbmktY29udGVudCBoZWlnaHQuXG4gICAgICAgIC8vIHNvLCBvbiBtaW5pLWNvbnRlbnQgcmVzaXplIHdpbGwgc3RvcCwgYnV0IGhhdmUgdG8gZG8gc3RlcCByZXNpemluZyBmb3IgdmVydGljYWwgYW5kIGhvcml6b250YWwuXG4gICAgICAgIGlmICghdGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICAvLyBpbmNyZWFzZS9kZWNyZWFzZSB3aWR0aCBvZiBjYXJkIGluIG9yZGVyIG9mIDIwcmVtXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYXJkV2lkdGggLSB0aGlzLl9wcmV2Q2FyZFdpZHRoKSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsU3RlcFJlc2l6aW5nKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGluY3JlYXNlL2RlY3JlYXNlIGhlaWdodCBvZiBjYXJkIGluIG9yZGVyIG9mIDFyZW1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhcmRIZWlnaHQgLSB0aGlzLl9wcmV2Q2FyZEhlaWdodCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmVydGljYWxTdGVwUmVzaXppbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIHJlc2V0IGludm9sdmVkIHZhcmlhYmxlcyB3aGlsZSByZXNpemluZyAqL1xuICAgIHByaXZhdGUgX3N0b3BSZXNpemluZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Jlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jYXJkU3RhdGUgPSAwO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSAwO1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnpJbmRleCA9IDA7XG4gICAgICAgICAgICB0aGlzLnNob3dCb3JkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJucyBjYXJkV2lkdGggYmFzZWQgb24gY2FyZCBjb2x1bW4gc3BhbiAqL1xuICAgIHByaXZhdGUgX3NldENhcmRXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLl9jYXJkV2lkdGhDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAodGhpcy5fY2FyZFdpZHRoQ29sU3BhbiAtIDEpICogZ2FwO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIGNhcmRIZWlnaHQgYmFzZWQgb24gY2FyZCByb3cgc3BhbiAqL1xuICAgIHByaXZhdGUgX3NldENhcmRIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuICogdmVydGljYWxSZXNpemVTdGVwO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIGNhcmQgbWluaSBoZWFkZXIgaGVpZ2h0ICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZE1pbmlIZWFkZXJIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQgPSB0aGlzLl9jYXJkTWluaUhlYWRlclJvd1NwYW4gKiB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgY2FyZCBtaW5pIGNvbnRlbnQgaGVpZ2h0ICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZE1pbmlDb250ZW50SGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodCA9IHRoaXMuY2FyZE1pbmlDb250ZW50Um93U3BhbiAqIHZlcnRpY2FsUmVzaXplU3RlcDtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuXG4vKiogQ29uZmlnIGludGVyZmFjZSBmb3IgY2FyZCBwcm9wZXJ0aWVzICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6YWJsZUNhcmRJdGVtQ29uZmlnIHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICByYW5rPzogbnVtYmVyO1xuICAgIGNhcmRXaWR0aENvbFNwYW4/OiBudW1iZXI7XG4gICAgY2FyZEhlaWdodFJvd1NwYW4/OiBudW1iZXI7XG4gICAgY2FyZE1pbmlIZWFkZXJSb3dTcGFuPzogbnVtYmVyO1xuICAgIGNhcmRNaW5pQ29udGVudFJvd1NwYW4/OiBudW1iZXI7XG4gICAgcmVzaXphYmxlPzogYm9vbGVhbjtcbn1cblxuLyoqIE9iamVjdCB0byBlbWl0IG9uIHJlc2l6ZSBjb21wbGV0ZSAqL1xuZXhwb3J0IGNsYXNzIFJlc2l6ZWRFdmVudCB7XG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGVtaXQgb24gcmVzaXplIGNvbXBsZXRlXG4gICAgICogQHBhcmFtIGNhcmRcbiAgICAgKiBAcGFyYW0gcHJldkNhcmRXaWR0aCBQcmV2aW91cyBjYXJkIHdpZHRoXG4gICAgICogQHBhcmFtIHByZXZDYXJkSGVpZ2h0IFByZXZpb3VzIGNhcmQgaGVpZ2h0XG4gICAgICogQHBhcmFtIGNhcmRXaWR0aCBDdXJyZW50IGNhcmQgd2lkdGhcbiAgICAgKiBAcGFyYW0gY2FyZEhlaWdodCBDdXJyZW50IGNhcmQgaGVpZ2h0XG4gICAgICogQHBhcmFtIGNhcmRXaWR0aENvbFNwYW4gQ3VycmVudCBjYXJkIHdpZHRoIGNvbHVtbiBzcGFuXG4gICAgICogQHBhcmFtIGNhcmRIZWlnaHRSb3dTcGFuIEN1cnJlbnQgY2FyZCBoZWlnaHQgcm93IHNwYW5cbiAgICAgKiBAcGFyYW0gbmV3Q2FyZFdpZHRoQ29sU3BhbiBOZXcgY2FyZCB3aWR0aCBjb2x1bW4gc3BhblxuICAgICAqIEBwYXJhbSBuZXdDYXJkSGVpZ2h0Um93U3BhbiBOZXcgY2FyZCBoZWlnaHQgcm93IHNwYW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50LFxuICAgICAgICBwdWJsaWMgcHJldkNhcmRXaWR0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcHJldkNhcmRIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNhcmRXaWR0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY2FyZEhlaWdodDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY2FyZFdpZHRoQ29sU3BhbjogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY2FyZEhlaWdodFJvd1NwYW46IG51bWJlcixcbiAgICAgICAgcHVibGljIG5ld0NhcmRXaWR0aENvbFNwYW46IG51bWJlcixcbiAgICAgICAgcHVibGljIG5ld0NhcmRIZWlnaHRSb3dTcGFuOiBudW1iZXJcbiAgICApIHt9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2l0ZW1cIlxuICAgIFtjbGFzcy5mZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2luZGljYXRpb24tYm9yZGVyXT1cInNob3dCb3JkZXJcIlxuICAgICNyZXNpemVDYXJkXG4+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faXRlbS0tYm9yZGVyLWRpc3BsYXkgZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pdGVtLS1yZXNpemUtdHJhbnNpdGlvblwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjYXJkV2lkdGhcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhcmRIZWlnaHRcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UmVzaXplSWNvbigpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGlkZVJlc2l6ZUljb24oKVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19jYXJkXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICBAaWYgKHNob3dpbmdSZXNpemVJY29uKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faWNvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNjb3JuZXJIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnYm90aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChyZXNpemFibGUpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ2ZXJ0aWNhbEhhbmRsZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJob3Jpem9udGFsSGFuZGxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faXRlbS0tcmVzaXplLXRyYW5zaXRpb25cIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjYXJkSGVpZ2h0XCJcbiAgICA+PC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjdmVydGljYWxIYW5kbGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgICN2ZXJ0aWNhbEhhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fcmVzaXplLS12ZXJ0aWNhbFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnaG9yaXpvbnRhbCcpXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNob3Jpem9udGFsSGFuZGxlVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgICAjaG9yaXpvbnRhbEhhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fcmVzaXplLS1ob3Jpem9udGFsXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsICd2ZXJ0aWNhbCcpXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|