@fundamental-ngx/platform 0.48.0-rc.2 → 0.48.0-rc.21
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/approval-flow/helpers/index.d.ts +1 -1
- package/approval-flow/index.d.ts +2 -2
- package/approval-flow/interfaces/approval-process.d.ts +1 -1
- package/approval-flow/interfaces/index.d.ts +1 -1
- package/approval-flow/interfaces/send-reminders-data.d.ts +1 -1
- package/button/button.component.d.ts +4 -1
- package/button/index.d.ts +1 -1
- package/dynamic-page/index.d.ts +5 -5
- package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-graph.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-messages/approval-flow-messages.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-select-type/approval-flow-select-type.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-user-details/approval-flow-user-details.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow.module.mjs +1 -1
- package/esm2022/approval-flow/fundamental-ngx-platform-approval-flow.mjs +1 -1
- package/esm2022/approval-flow/helpers/index.mjs +1 -1
- package/esm2022/approval-flow/index.mjs +3 -3
- package/esm2022/approval-flow/interfaces/approval-node.mjs +1 -1
- package/esm2022/approval-flow/interfaces/approval-process.mjs +1 -1
- package/esm2022/approval-flow/interfaces/approval-status.mjs +1 -1
- package/esm2022/approval-flow/interfaces/approval-team.mjs +1 -1
- package/esm2022/approval-flow/interfaces/approval-user.mjs +1 -1
- package/esm2022/approval-flow/interfaces/index.mjs +2 -2
- package/esm2022/approval-flow/interfaces/send-reminders-data.mjs +1 -1
- package/esm2022/approval-flow/services/approval-flow-add-node-view.service.mjs +1 -1
- package/esm2022/button/button.component.mjs +8 -3
- package/esm2022/button/button.module.mjs +1 -1
- package/esm2022/button/fundamental-ngx-platform-button.mjs +1 -1
- package/esm2022/button/index.mjs +2 -2
- package/esm2022/dynamic-page/constants.mjs +1 -1
- package/esm2022/dynamic-page/directives/dynamic-page-header-subtitle.directive.mjs +1 -1
- package/esm2022/dynamic-page/directives/dynamic-page-header-title.directive.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content-host.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-footer/dynamic-page-footer.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-header/actions/global-actions/dynamic-page-global-actions.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-header/actions/layout-actions/dynamic-page-layout-actions.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-header/key-info/dynamic-page-key-info.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title-image.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page.component.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page.config.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page.module.mjs +1 -1
- package/esm2022/dynamic-page/dynamic-page.service.mjs +1 -1
- package/esm2022/dynamic-page/fundamental-ngx-platform-dynamic-page.mjs +1 -1
- package/esm2022/dynamic-page/index.mjs +6 -6
- package/esm2022/dynamic-page/utils.mjs +1 -1
- package/esm2022/feed-input/feed-input.component.mjs +2 -2
- package/esm2022/feed-input/feed-input.module.mjs +1 -1
- package/esm2022/feed-input/fundamental-ngx-platform-feed-input.mjs +1 -1
- package/esm2022/feed-input/index.mjs +2 -2
- package/esm2022/form/auto-complete/auto-complete.directive.mjs +2 -2
- package/esm2022/form/auto-complete/auto-complete.module.mjs +1 -1
- package/esm2022/form/checkbox/checkbox.component.mjs +1 -1
- package/esm2022/form/checkbox/checkbox.module.mjs +1 -1
- package/esm2022/form/checkbox-group/checkbox-group.component.mjs +1 -1
- package/esm2022/form/checkbox-group/checkbox-group.module.mjs +1 -1
- package/esm2022/form/combobox/combobox/combobox.component.mjs +13 -4
- package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +1 -1
- package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +1 -1
- package/esm2022/form/combobox/combobox.config.mjs +2 -2
- package/esm2022/form/combobox/combobox.interface.mjs +1 -1
- package/esm2022/form/combobox/combobox.module.mjs +1 -1
- package/esm2022/form/combobox/commons/base-combobox.mjs +1 -1
- package/esm2022/form/combobox/directives/combobox-item.directive.mjs +1 -1
- package/esm2022/form/combobox/index.mjs +1 -1
- package/esm2022/form/date-picker/date-picker.component.mjs +4 -5
- package/esm2022/form/date-picker/date-picker.module.mjs +1 -1
- package/esm2022/form/datetime-picker/datetime-picker.component.mjs +3 -3
- package/esm2022/form/datetime-picker/datetime-picker.module.mjs +1 -1
- package/esm2022/form/datetime-picker/errors.mjs +1 -1
- package/esm2022/form/form-generator/base-dynamic-form-generator-control.mjs +1 -1
- package/esm2022/form/form-generator/config/default-components-list.mjs +6 -6
- package/esm2022/form/form-generator/config/default-form-generator-hint-options.mjs +1 -1
- package/esm2022/form/form-generator/config/default-validation-errors.mjs +1 -1
- package/esm2022/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.mjs +3 -3
- package/esm2022/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.mjs +1 -1
- package/esm2022/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.mjs +1 -1
- package/esm2022/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.mjs +1 -1
- package/esm2022/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +1 -1
- package/esm2022/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.mjs +2 -2
- package/esm2022/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.mjs +3 -3
- package/esm2022/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.mjs +1 -1
- package/esm2022/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.mjs +1 -1
- package/esm2022/form/form-generator/dynamic-form-control-field.directive.mjs +1 -1
- package/esm2022/form/form-generator/dynamic-form-control.directive.mjs +3 -3
- package/esm2022/form/form-generator/dynamic-form-control.mjs +1 -1
- package/esm2022/form/form-generator/fdp-form-generator.module.mjs +14 -14
- package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +1 -1
- package/esm2022/form/form-generator/form-generator-components-accessor.service.mjs +1 -1
- package/esm2022/form/form-generator/form-generator-field/form-generator-field.component.mjs +1 -1
- package/esm2022/form/form-generator/form-generator.service.mjs +3 -3
- package/esm2022/form/form-generator/form-generator.tokens.mjs +1 -1
- package/esm2022/form/form-generator/helpers.mjs +1 -1
- package/esm2022/form/form-generator/interfaces/dynamic-abstract-control.mjs +1 -1
- package/esm2022/form/form-generator/interfaces/dynamic-form-group.mjs +1 -1
- package/esm2022/form/form-generator/interfaces/dynamic-form-item.mjs +1 -1
- package/esm2022/form/form-generator/interfaces/form-component-definition.mjs +1 -1
- package/esm2022/form/form-generator/interfaces/form-generator-module-config.mjs +1 -1
- package/esm2022/form/form-generator/pipes/get-hint-options.pipe.mjs +2 -2
- package/esm2022/form/form-generator/pipes/get-ordered-form-controls.pipe.mjs +1 -1
- package/esm2022/form/form-generator/providers/providers.mjs +1 -1
- package/esm2022/form/form-group/config/default-form-field-hint-options.mjs +1 -1
- package/esm2022/form/form-group/constants.mjs +1 -1
- package/esm2022/form/form-group/fdp-form.module.mjs +7 -7
- package/esm2022/form/form-group/fdp-form.tokens.mjs +1 -1
- package/esm2022/form/form-group/form-field/form-field.component.mjs +1 -1
- package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +1 -1
- package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +1 -1
- package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +1 -1
- package/esm2022/form/form-group/form-field-error/tokens.mjs +1 -1
- package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +1 -1
- package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +1 -1
- package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +1 -1
- package/esm2022/form/form-group/form-group.component.mjs +1 -1
- package/esm2022/form/form-group/helpers.mjs +1 -1
- package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +1 -1
- package/esm2022/form/form-group/services/form-field-layout.service.mjs +3 -3
- package/esm2022/form/form-helpers.mjs +3 -3
- package/esm2022/form/fundamental-ngx-platform-form.mjs +1 -1
- package/esm2022/form/helpers.mjs +1 -1
- package/esm2022/form/index.mjs +1 -1
- package/esm2022/form/input/fdp-input.module.mjs +1 -1
- package/esm2022/form/input/input.component.mjs +1 -1
- package/esm2022/form/input-group/addon-body.component.mjs +2 -2
- package/esm2022/form/input-group/addon.component.mjs +2 -2
- package/esm2022/form/input-group/constants.mjs +1 -1
- package/esm2022/form/input-group/input-group.component.mjs +1 -1
- package/esm2022/form/input-group/input-group.config.mjs +1 -1
- package/esm2022/form/input-group/input-group.module.mjs +3 -3
- package/esm2022/form/input-group/input.component.mjs +2 -2
- package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +1 -1
- package/esm2022/form/models/field.model.mjs +1 -1
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +1 -1
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +2 -2
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +1 -1
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +1 -1
- package/esm2022/form/multi-combobox/multi-combobox.config.mjs +2 -2
- package/esm2022/form/multi-combobox/multi-combobox.interface.mjs +1 -1
- package/esm2022/form/multi-combobox/multi-combobox.module.mjs +1 -1
- package/esm2022/form/multi-input/base-multi-input.mjs +1 -1
- package/esm2022/form/multi-input/index.mjs +2 -2
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +1 -1
- package/esm2022/form/multi-input/multi-input.component.mjs +2 -2
- package/esm2022/form/multi-input/multi-input.config.mjs +2 -2
- package/esm2022/form/multi-input/multi-input.interface.mjs +1 -1
- package/esm2022/form/multi-input/multi-input.module.mjs +1 -1
- package/esm2022/form/radio-group/radio/radio.component.mjs +1 -1
- package/esm2022/form/radio-group/radio-group.component.mjs +1 -1
- package/esm2022/form/radio-group/radio-group.module.mjs +1 -1
- package/esm2022/form/select/commons/base-select.mjs +7 -2
- package/esm2022/form/select/models/select.models.mjs +1 -1
- package/esm2022/form/select/select/select.component.mjs +3 -3
- package/esm2022/form/select/select.config.mjs +1 -1
- package/esm2022/form/select/select.module.mjs +1 -1
- package/esm2022/form/step-input/base.step-input.mjs +5 -5
- package/esm2022/form/step-input/number/number-step-input.component.mjs +1 -1
- package/esm2022/form/step-input/step-input-action-button.mjs +2 -2
- package/esm2022/form/step-input/step-input-control.directive.mjs +2 -2
- package/esm2022/form/step-input/step-input-decrement.directive.mjs +1 -1
- package/esm2022/form/step-input/step-input-increment.directive.mjs +1 -1
- package/esm2022/form/step-input/step-input.config.mjs +1 -1
- package/esm2022/form/step-input/step-input.module.mjs +3 -3
- package/esm2022/form/step-input/step-input.util.mjs +1 -1
- package/esm2022/form/switch/switch/index.mjs +1 -1
- package/esm2022/form/switch/switch/switch.component.mjs +1 -1
- package/esm2022/form/switch/switch/switch.config.mjs +1 -1
- package/esm2022/form/switch/switch.module.mjs +1 -1
- package/esm2022/form/text-area/text-area.component.mjs +1 -1
- package/esm2022/form/text-area/text-area.config.mjs +1 -1
- package/esm2022/form/text-area/text-area.module.mjs +1 -1
- package/esm2022/form/time-picker/time-picker.component.mjs +1 -1
- package/esm2022/form/time-picker/time-picker.module.mjs +1 -1
- package/esm2022/icon-tab-bar/components/closable-icon-tab-bar.class.mjs +1 -1
- package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +1 -1
- package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +1 -1
- package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +1 -1
- package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +1 -1
- package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +1 -1
- package/esm2022/icon-tab-bar/components/index.mjs +1 -1
- package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +3 -3
- package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.mjs +1 -1
- package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +3 -3
- package/esm2022/icon-tab-bar/constants.mjs +1 -1
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +1 -1
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +1 -1
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +1 -1
- package/esm2022/icon-tab-bar/fundamental-ngx-platform-icon-tab-bar.mjs +1 -1
- package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +1 -1
- package/esm2022/icon-tab-bar/icon-tab-bar.module.mjs +1 -1
- package/esm2022/icon-tab-bar/index.mjs +8 -8
- package/esm2022/icon-tab-bar/interfaces/icon-tab-bar-item.interface.mjs +1 -1
- package/esm2022/icon-tab-bar/interfaces/tab-color-associations.interface.mjs +1 -1
- package/esm2022/icon-tab-bar/interfaces/tab-config.interface.mjs +1 -1
- package/esm2022/icon-tab-bar/types.mjs +1 -1
- package/esm2022/info-label/fundamental-ngx-platform-info-label.mjs +1 -1
- package/esm2022/info-label/index.mjs +1 -1
- package/esm2022/info-label/info-label.component.mjs +1 -1
- package/esm2022/info-label/info-label.module.mjs +1 -1
- package/esm2022/link/fundamental-ngx-platform-link.mjs +1 -1
- package/esm2022/link/index.mjs +1 -1
- package/esm2022/link/link.component.mjs +3 -3
- package/esm2022/link/link.module.mjs +1 -1
- package/esm2022/list/action-list-item/action-list-item.component.mjs +3 -3
- package/esm2022/list/action-list-item/action-list-item.module.mjs +1 -1
- package/esm2022/list/base-list-item.mjs +2 -2
- package/esm2022/list/display-list-item/display-list-item.component.mjs +3 -3
- package/esm2022/list/display-list-item/display-list-item.module.mjs +1 -1
- package/esm2022/list/fdpListComponent.token.mjs +1 -1
- package/esm2022/list/free-content-list-item/free-content-list-item.component.mjs +3 -3
- package/esm2022/list/fundamental-ngx-platform-list.mjs +1 -1
- package/esm2022/list/index.mjs +13 -13
- package/esm2022/list/list-group-footer.component.mjs +3 -3
- package/esm2022/list/list-group-header.component.mjs +5 -5
- package/esm2022/list/list.component.mjs +5 -5
- package/esm2022/list/list.config.mjs +1 -1
- package/esm2022/list/list.module.mjs +1 -1
- package/esm2022/list/load-more-content.directive.mjs +1 -1
- package/esm2022/list/models/list.mjs +1 -1
- package/esm2022/list/object-list-item/object-list-item-row.component.mjs +1 -1
- package/esm2022/list/object-list-item/object-list-item.component.mjs +3 -3
- package/esm2022/list/object-list-item/object-list-item.module.mjs +1 -1
- package/esm2022/list/standard-list-item/standard-list-item.component.mjs +3 -3
- package/esm2022/list/standard-list-item/standard-list-item.module.mjs +1 -1
- package/esm2022/menu/fundamental-ngx-platform-menu.mjs +1 -1
- package/esm2022/menu/index.mjs +3 -3
- package/esm2022/menu/menu-item.component.mjs +1 -1
- package/esm2022/menu/menu-trigger.directive.mjs +1 -1
- package/esm2022/menu/menu.component.mjs +1 -1
- package/esm2022/menu/menu.module.mjs +1 -1
- package/esm2022/menu-button/fundamental-ngx-platform-menu-button.mjs +1 -1
- package/esm2022/menu-button/index.mjs +2 -2
- package/esm2022/menu-button/menu-button.component.mjs +8 -3
- package/esm2022/menu-button/menu-button.module.mjs +1 -1
- package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +1 -1
- package/esm2022/message-popover/components/message-view/message-view.component.mjs +2 -2
- package/esm2022/message-popover/default-config.mjs +1 -1
- package/esm2022/message-popover/directives/message-popover-form-item.directive.mjs +1 -1
- package/esm2022/message-popover/fundamental-ngx-platform-message-popover.mjs +1 -1
- package/esm2022/message-popover/index.mjs +5 -5
- package/esm2022/message-popover/message-popover.component.mjs +2 -2
- package/esm2022/message-popover/models/message-popover-entry.interface.mjs +1 -1
- package/esm2022/message-popover/models/message-popover-wrapper.interface.mjs +1 -1
- package/esm2022/message-popover/models/message-popover.interface.mjs +1 -1
- package/esm2022/message-popover/platform-message-popover.module.mjs +3 -3
- package/esm2022/message-popover/utils.mjs +1 -1
- package/esm2022/object-attribute/fundamental-ngx-platform-object-attribute.mjs +1 -1
- package/esm2022/object-attribute/index.mjs +1 -1
- package/esm2022/object-marker/fundamental-ngx-platform-object-marker.mjs +1 -1
- package/esm2022/object-marker/index.mjs +1 -1
- package/esm2022/object-marker/object-marker.component.mjs +8 -3
- package/esm2022/object-marker/object-marker.module.mjs +1 -1
- package/esm2022/object-status/fundamental-ngx-platform-object-status.mjs +1 -1
- package/esm2022/object-status/index.mjs +1 -1
- package/esm2022/object-status/object-status.component.mjs +8 -3
- package/esm2022/object-status/object-status.module.mjs +1 -1
- package/esm2022/page-footer/fundamental-ngx-platform-page-footer.mjs +1 -1
- package/esm2022/page-footer/index.mjs +1 -1
- package/esm2022/page-footer/page-footer.component.mjs +1 -1
- package/esm2022/page-footer/page-footer.module.mjs +1 -1
- package/esm2022/panel/fundamental-ngx-platform-panel.mjs +1 -1
- package/esm2022/panel/index.mjs +3 -3
- package/esm2022/panel/panel-actions.component.mjs +1 -1
- package/esm2022/panel/panel-content/panel-content.component.mjs +1 -1
- package/esm2022/panel/panel.component.mjs +1 -1
- package/esm2022/panel/panel.config.mjs +1 -1
- package/esm2022/panel/panel.module.mjs +1 -1
- package/esm2022/search-field/fundamental-ngx-platform-search-field.mjs +1 -1
- package/esm2022/search-field/index.mjs +2 -2
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +1 -1
- package/esm2022/search-field/search-field-mobile/search-field-mobile.interface.mjs +1 -1
- package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +1 -1
- package/esm2022/search-field/search-field.component.mjs +2 -2
- package/esm2022/search-field/search-field.module.mjs +1 -1
- package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +1 -1
- package/esm2022/settings-generator/default-config.mjs +1 -1
- package/esm2022/settings-generator/fundamental-ngx-platform-settings-generator.mjs +1 -1
- package/esm2022/settings-generator/index.mjs +5 -5
- package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +2 -2
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +1 -1
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +1 -1
- package/esm2022/settings-generator/models/settings-config.model.mjs +1 -1
- package/esm2022/settings-generator/models/settings-generator.model.mjs +1 -1
- package/esm2022/settings-generator/models/settings.model.mjs +1 -1
- package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +1 -1
- package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +1 -1
- package/esm2022/settings-generator/settings-generator-layout-accessor.service.mjs +1 -1
- package/esm2022/settings-generator/settings-generator.component.mjs +1 -1
- package/esm2022/settings-generator/settings-generator.module.mjs +1 -1
- package/esm2022/settings-generator/settings-generator.service.mjs +2 -2
- package/esm2022/settings-generator/tokens.mjs +1 -1
- package/esm2022/shared/base.mjs +1 -1
- package/esm2022/shared/domain/array-data-source.mjs +2 -2
- package/esm2022/shared/domain/base-data-provider.mjs +3 -3
- package/esm2022/shared/domain/data-model.mjs +1 -1
- package/esm2022/shared/domain/data-source.mjs +1 -1
- package/esm2022/shared/domain/observable-data-source.mjs +2 -2
- package/esm2022/shared/form/base.input.mjs +1 -1
- package/esm2022/shared/form/collection-base.input.mjs +4 -4
- package/esm2022/shared/form/form-error.mjs +1 -1
- package/esm2022/shared/form/form-field.mjs +1 -1
- package/esm2022/shared/form/form-options.mjs +1 -1
- package/esm2022/shared/form/hint-options.mjs +1 -1
- package/esm2022/shared/form/inline-layout-collection-base.input.mjs +3 -3
- package/esm2022/shared/fundamental-ngx-platform-shared.mjs +1 -1
- package/esm2022/shared/index.mjs +4 -4
- package/esm2022/shared/pipes/convert-bytes/convert-bytes.pipe.mjs +1 -1
- package/esm2022/shared/pipes/pipe.module.mjs +1 -1
- package/esm2022/shared/platform.config.mjs +1 -1
- package/esm2022/shared/preset-management/preset-managed-component.interface.mjs +1 -1
- package/esm2022/shared/preset-management/preset-management.token.mjs +1 -1
- package/esm2022/shared/testing/event-objects.mjs +1 -1
- package/esm2022/shared/utils/lang.mjs +1 -1
- package/esm2022/slider/fundamental-ngx-platform-slider.mjs +1 -1
- package/esm2022/slider/index.mjs +1 -1
- package/esm2022/slider/slider.component.mjs +2 -2
- package/esm2022/slider/slider.module.mjs +1 -1
- package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/base-smart-filter-bar-condition-field.mjs +1 -1
- package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.mjs +1 -1
- package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +2 -2
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/data-provider.mjs +1 -1
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
- package/esm2022/smart-filter-bar/constants.mjs +1 -1
- package/esm2022/smart-filter-bar/directives/smart-filter-bar-field-definition.directive.mjs +1 -1
- package/esm2022/smart-filter-bar/directives/smart-filter-bar-subject.directive.mjs +1 -1
- package/esm2022/smart-filter-bar/directives/smart-filter-bar-toolbar-item.directive.mjs +1 -1
- package/esm2022/smart-filter-bar/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/esm2022/smart-filter-bar/helpers.mjs +1 -1
- package/esm2022/smart-filter-bar/index.mjs +8 -8
- package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-change.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-condition.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-custom-filter-config.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-field-definition.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-field-filter-item.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-settings-dialog-config.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-visibility-category.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/smart-filter-dynamic-form-item.mjs +1 -1
- package/esm2022/smart-filter-bar/interfaces/strategy-labels.type.mjs +1 -1
- package/esm2022/smart-filter-bar/providers/smart-filter-bar.provider.mjs +1 -1
- package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +1 -1
- package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +2 -2
- package/esm2022/smart-filter-bar/smart-filter-bar.module.mjs +1 -1
- package/esm2022/smart-filter-bar/smart-filter-bar.service.mjs +2 -2
- package/esm2022/split-menu-button/fundamental-ngx-platform-split-menu-button.mjs +1 -1
- package/esm2022/split-menu-button/index.mjs +1 -1
- package/esm2022/split-menu-button/split-menu-button.component.mjs +8 -3
- package/esm2022/split-menu-button/split-menu-button.module.mjs +1 -1
- package/esm2022/table/components/index.mjs +9 -9
- package/esm2022/table/components/no-data-wrapper/no-data-wrapper.component.mjs +1 -1
- package/esm2022/table/components/reset-button/reset-button.component.mjs +1 -1
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +2 -2
- package/esm2022/table/components/table-column/table-column.component.mjs +1 -1
- package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +1 -1
- package/esm2022/table/components/table-editable-cell/table-editable-cell.component.mjs +1 -1
- package/esm2022/table/components/table-group-row/table-group-row.component.mjs +1 -1
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +2 -2
- package/esm2022/table/components/table-header-row/table-header-row.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +2 -2
- package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/filtering/filtering.model.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +2 -2
- package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
- package/esm2022/table/components/table-p13-dialog/table-p13-columns.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/table-p13-filter.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/table-p13-group.component.mjs +1 -1
- package/esm2022/table/components/table-p13-dialog/table-p13-sort.component.mjs +1 -1
- package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +1 -1
- package/esm2022/table/components/table-row/table-row.component.mjs +6 -4
- package/esm2022/table/components/table-toolbar/table-toolbar-actions.component.mjs +1 -1
- package/esm2022/table/components/table-toolbar/table-toolbar-left-actions.component.mjs +1 -1
- package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +2 -2
- package/esm2022/table/components/table-toolbar/table-toolbar.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/constants.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-custom.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-step.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters-active-step.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/index.mjs +3 -3
- package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/table-view-settings-dialog.component.mjs +1 -1
- package/esm2022/table/components/table-view-settings-dialog/table-view-settings-filter.component.mjs +1 -1
- package/esm2022/table/fundamental-ngx-platform-table.mjs +1 -1
- package/esm2022/table/index.mjs +15 -15
- package/esm2022/table/table.component.mjs +14 -10
- package/esm2022/table/table.module.mjs +1 -1
- package/esm2022/table-helpers/constants/index.mjs +1 -1
- package/esm2022/table-helpers/constants/tokens.mjs +1 -1
- package/esm2022/table-helpers/directives/index.mjs +7 -7
- package/esm2022/table-helpers/directives/platform-table-column-responsive.directive.mjs +3 -3
- package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +3 -3
- package/esm2022/table-helpers/directives/table-cell-selectable.directive.mjs +2 -2
- package/esm2022/table-helpers/directives/table-cell.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-data-source.directive.mjs +3 -2
- package/esm2022/table-helpers/directives/table-draggable.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +2 -2
- package/esm2022/table-helpers/directives/table-header.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-initial-state.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +4 -4
- package/esm2022/table-helpers/directives/table-view-settings-filter-custom.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +2 -2
- package/esm2022/table-helpers/domain/array-data-source.mjs +3 -3
- package/esm2022/table-helpers/domain/data-source-parser.class.mjs +1 -1
- package/esm2022/table-helpers/domain/index.mjs +4 -4
- package/esm2022/table-helpers/domain/observable-data-source.mjs +3 -3
- package/esm2022/table-helpers/domain/table-data-provider.mjs +1 -1
- package/esm2022/table-helpers/domain/table-data-source.mjs +1 -1
- package/esm2022/table-helpers/enums/collection-filter.enum.mjs +1 -1
- package/esm2022/table-helpers/enums/column-align.enum.mjs +1 -1
- package/esm2022/table-helpers/enums/filter-type.enum.mjs +1 -1
- package/esm2022/table-helpers/enums/index.mjs +4 -4
- package/esm2022/table-helpers/enums/row-type.enum.mjs +1 -1
- package/esm2022/table-helpers/enums/selection-mode.enum.mjs +1 -1
- package/esm2022/table-helpers/enums/sort-direction.enum.mjs +1 -1
- package/esm2022/table-helpers/fundamental-ngx-platform-table-helpers.mjs +1 -1
- package/esm2022/table-helpers/helpers.mjs +6 -3
- package/esm2022/table-helpers/index.mjs +9 -9
- package/esm2022/table-helpers/interfaces/collection-filter.interface.mjs +1 -1
- package/esm2022/table-helpers/interfaces/collection-group.interface.mjs +1 -1
- package/esm2022/table-helpers/interfaces/collection-page.interface.mjs +1 -1
- package/esm2022/table-helpers/interfaces/collection-sort.interface.mjs +1 -1
- package/esm2022/table-helpers/interfaces/collection-state.interface.mjs +1 -1
- package/esm2022/table-helpers/interfaces/column-responsive-state.interface.mjs +1 -1
- package/esm2022/table-helpers/interfaces/index.mjs +3 -4
- package/esm2022/table-helpers/interfaces/selection-value.interface.mjs +1 -1
- package/esm2022/table-helpers/interfaces/table-state.interface.mjs +1 -1
- package/esm2022/table-helpers/models/column-freeze-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/columns-change-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/data-source.type.mjs +1 -1
- package/esm2022/table-helpers/models/directives.mjs +1 -1
- package/esm2022/table-helpers/models/dnd.mjs +1 -1
- package/esm2022/table-helpers/models/filter-change-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/group-change-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/index.mjs +15 -15
- package/esm2022/table-helpers/models/page-change-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/row-comparator.model.mjs +1 -1
- package/esm2022/table-helpers/models/save-rows-event.interface.mjs +1 -1
- package/esm2022/table-helpers/models/search-change-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/selection-change-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/sort-change-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/table-dialog-common-data.model.mjs +1 -1
- package/esm2022/table-helpers/models/table-item.model.mjs +1 -1
- package/esm2022/table-helpers/models/table-managed-preset.mjs +1 -1
- package/esm2022/table-helpers/models/table-row-activate-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/table-row-toggle-open-state-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/table-row.model.mjs +1 -1
- package/esm2022/table-helpers/models/table-rows-rearrange-event.model.mjs +1 -1
- package/esm2022/table-helpers/models/tree-table.model.mjs +1 -1
- package/esm2022/table-helpers/pipes/cell-styles.pipe.mjs +1 -1
- package/esm2022/table-helpers/pipes/column-resizable-side.pipe.mjs +1 -1
- package/esm2022/table-helpers/pipes/column-sorting-direction.pipe.mjs +1 -1
- package/esm2022/table-helpers/pipes/index.mjs +1 -1
- package/esm2022/table-helpers/pipes/row-classes.pipe.mjs +1 -1
- package/esm2022/table-helpers/pipes/selection-cell-styles.pipe.mjs +1 -1
- package/esm2022/table-helpers/services/table-column-resize.service.mjs +3 -4
- package/esm2022/table-helpers/services/table-responsive.service.mjs +1 -1
- package/esm2022/table-helpers/services/table-row.service.mjs +1 -1
- package/esm2022/table-helpers/services/table-scroll-dispatcher.service.mjs +1 -1
- package/esm2022/table-helpers/services/table.service.mjs +1 -1
- package/esm2022/table-helpers/table-cell.class.mjs +1 -1
- package/esm2022/table-helpers/table-column.mjs +1 -1
- package/esm2022/table-helpers/table-helpers.module.mjs +2 -2
- package/esm2022/table-helpers/table.mjs +1 -1
- package/esm2022/table-helpers/utils.mjs +1 -1
- package/esm2022/value-help-dialog/components/base-tab/vhd-base-tab.component.mjs +1 -1
- package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +2 -2
- package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +26 -6
- package/esm2022/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.mjs +7 -3
- package/esm2022/value-help-dialog/constans/condition-display.function.mjs +2 -2
- package/esm2022/value-help-dialog/constans/index.mjs +1 -1
- package/esm2022/value-help-dialog/constans/variables.mjs +1 -1
- package/esm2022/value-help-dialog/directives/condition-count-message.directive.mjs +1 -1
- package/esm2022/value-help-dialog/directives/value-help-column-def.directive.mjs +24 -0
- package/esm2022/value-help-dialog/directives/value-help-filter-def.directive.mjs +22 -0
- package/esm2022/value-help-dialog/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/esm2022/value-help-dialog/index.mjs +4 -3
- package/esm2022/value-help-dialog/models/index.mjs +2 -2
- package/esm2022/value-help-dialog/models/vhd-component.model.mjs +3 -0
- package/esm2022/value-help-dialog/models/vhd-data.source.mjs +1 -1
- package/esm2022/value-help-dialog/models/vhd-filter-rule.model.mjs +1 -1
- package/esm2022/value-help-dialog/models/vhd-filter.model.mjs +1 -1
- package/esm2022/value-help-dialog/models/vhd-strategy.enum.mjs +1 -1
- package/esm2022/value-help-dialog/models/vhd-tab-type.enum.mjs +1 -1
- package/esm2022/value-help-dialog/models/vhd-table-selection.type.mjs +1 -1
- package/esm2022/value-help-dialog/models/vhd-type-condition.enum.mjs +1 -1
- package/esm2022/value-help-dialog/models/vhd-value.model.mjs +1 -1
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +26 -6
- package/esm2022/value-help-dialog/value-help-dialog.module.mjs +1 -1
- package/esm2022/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +1 -1
- package/esm2022/variant-management/components/manage-variants-dialog/data-provider.mjs +1 -1
- package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +2 -2
- package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +1 -1
- package/esm2022/variant-management/directives/variant-management-dirty-label.directive.mjs +1 -1
- package/esm2022/variant-management/fundamental-ngx-platform-variant-management.mjs +1 -1
- package/esm2022/variant-management/index.mjs +4 -4
- package/esm2022/variant-management/models/save-dialog.model.mjs +1 -1
- package/esm2022/variant-management/models/variant-management.mjs +1 -1
- package/esm2022/variant-management/models/variant.interface.mjs +1 -1
- package/esm2022/variant-management/tokens.mjs +1 -1
- package/esm2022/variant-management/variant-item.class.mjs +1 -1
- package/esm2022/variant-management/variant-management.component.mjs +2 -2
- package/esm2022/variant-management/variant-management.module.mjs +1 -1
- package/esm2022/wizard-generator/base-wizard-generator.mjs +2 -2
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +2 -2
- package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +2 -2
- package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +1 -1
- package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +1 -1
- package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +1 -1
- package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +1 -1
- package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +1 -1
- package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +1 -1
- package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +1 -1
- package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +1 -1
- package/esm2022/wizard-generator/fundamental-ngx-platform-wizard-generator.mjs +1 -1
- package/esm2022/wizard-generator/index.mjs +10 -10
- package/esm2022/wizard-generator/interfaces/wizard-dialog-data.interface.mjs +1 -1
- package/esm2022/wizard-generator/interfaces/wizard-generator-form-group.interface.mjs +1 -1
- package/esm2022/wizard-generator/interfaces/wizard-generator-forms.interface.mjs +1 -1
- package/esm2022/wizard-generator/interfaces/wizard-generator-item.interface.mjs +1 -1
- package/esm2022/wizard-generator/interfaces/wizard-generator-summary-item.interface.mjs +1 -1
- package/esm2022/wizard-generator/interfaces/wizard-navigation-buttons.interface.mjs +1 -1
- package/esm2022/wizard-generator/interfaces/wizard-step.interface.mjs +1 -1
- package/esm2022/wizard-generator/interfaces/wizard-title.interface.mjs +1 -1
- package/esm2022/wizard-generator/wizard-dialog-generator.service.mjs +1 -1
- package/esm2022/wizard-generator/wizard-generator.module.mjs +8 -8
- package/esm2022/wizard-generator/wizard-generator.service.mjs +4 -4
- package/feed-input/index.d.ts +1 -1
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +889 -889
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-button.mjs +8 -3
- package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs +1 -1
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-form.mjs +2729 -2716
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +9 -9
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-info-label.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +23 -23
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu-button.mjs +8 -3
- package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +353 -353
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-attribute.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-marker.mjs +7 -2
- package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-status.mjs +7 -2
- package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-panel.mjs +10 -10
- package/fesm2022/fundamental-ngx-platform-panel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +13 -13
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +62 -62
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +20 -20
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +7 -2
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +2925 -2922
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +365 -360
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +182 -98
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs +177 -177
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +41 -41
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/combobox/combobox.config.d.ts +1 -1
- package/form/date-picker/date-picker.component.d.ts +5 -5
- package/form/datetime-picker/datetime-picker.component.d.ts +3 -3
- package/form/form-generator/dynamic-form-control.directive.d.ts +3 -3
- package/form/form-generator/form-generator.service.d.ts +2 -2
- package/form/form-group/pipes/field-group-row-value.pipe.d.ts +1 -1
- package/form/form-group/services/form-field-layout.service.d.ts +1 -1
- package/form/form-helpers.d.ts +1 -1
- package/form/input-group/addon.component.d.ts +1 -1
- package/form/multi-combobox/multi-combobox.config.d.ts +1 -1
- package/form/multi-input/index.d.ts +1 -1
- package/form/multi-input/multi-input.config.d.ts +1 -1
- package/form/select/commons/base-select.d.ts +4 -1
- package/form/step-input/base.step-input.d.ts +4 -5
- package/fundamental-ngx-platform-v0.48.0-rc.21.tgz +0 -0
- package/icon-tab-bar/index.d.ts +7 -7
- package/icon-tab-bar/interfaces/icon-tab-bar-item.interface.d.ts +1 -1
- package/list/index.d.ts +12 -12
- package/menu/index.d.ts +2 -2
- package/menu-button/index.d.ts +1 -1
- package/menu-button/menu-button.component.d.ts +5 -2
- package/message-popover/index.d.ts +4 -4
- package/message-popover/models/message-popover-entry.interface.d.ts +1 -1
- package/message-popover/models/message-popover.interface.d.ts +1 -1
- package/message-popover/utils.d.ts +1 -1
- package/object-marker/object-marker.component.d.ts +4 -1
- package/object-status/object-status.component.d.ts +4 -1
- package/package.json +4 -4
- package/panel/index.d.ts +2 -2
- package/schematics/ng-add/index.js +1 -1
- package/search-field/index.d.ts +1 -1
- package/settings-generator/index.d.ts +4 -4
- package/settings-generator/layouts/base-settings-generator-layout.d.ts +1 -1
- package/settings-generator/settings-generator.service.d.ts +2 -2
- package/shared/domain/array-data-source.d.ts +0 -3
- package/shared/form/collection-base.input.d.ts +1 -1
- package/shared/form/form-field.d.ts +2 -2
- package/shared/form/hint-options.d.ts +2 -2
- package/shared/form/inline-layout-collection-base.input.d.ts +1 -1
- package/shared/index.d.ts +3 -3
- package/smart-filter-bar/index.d.ts +7 -7
- package/smart-filter-bar/interfaces/smart-filter-bar-condition.d.ts +2 -2
- package/smart-filter-bar/interfaces/smart-filter-bar-custom-filter-config.d.ts +1 -1
- package/smart-filter-bar/interfaces/smart-filter-bar-field-definition.d.ts +1 -1
- package/smart-filter-bar/interfaces/smart-filter-dynamic-form-item.d.ts +1 -1
- package/smart-filter-bar/smart-filter-bar.service.d.ts +2 -2
- package/split-menu-button/split-menu-button.component.d.ts +5 -2
- package/table/components/index.d.ts +8 -8
- package/table/components/table-view-settings-dialog/index.d.ts +2 -2
- package/table/index.d.ts +14 -14
- package/table/table.component.d.ts +4 -0
- package/table-helpers/constants/index.d.ts +1 -1
- package/table-helpers/directives/index.d.ts +6 -6
- package/table-helpers/directives/platform-table-column-responsive.directive.d.ts +1 -1
- package/table-helpers/directives/table-scrollable.directive.d.ts +1 -1
- package/table-helpers/domain/array-data-source.d.ts +3 -3
- package/table-helpers/domain/index.d.ts +3 -3
- package/table-helpers/domain/observable-data-source.d.ts +3 -3
- package/table-helpers/enums/index.d.ts +3 -3
- package/table-helpers/helpers.d.ts +1 -1
- package/table-helpers/index.d.ts +8 -8
- package/table-helpers/interfaces/collection-filter.interface.d.ts +1 -1
- package/table-helpers/interfaces/collection-state.interface.d.ts +1 -1
- package/table-helpers/interfaces/index.d.ts +2 -3
- package/table-helpers/models/filter-change-event.model.d.ts +1 -1
- package/table-helpers/models/group-change-event.model.d.ts +1 -1
- package/table-helpers/models/index.d.ts +14 -14
- package/table-helpers/models/sort-change-event.model.d.ts +1 -1
- package/table-helpers/pipes/selection-cell-styles.pipe.d.ts +1 -1
- package/table-helpers/table.d.ts +1 -0
- package/value-help-dialog/components/select-tab/select-tab.component.d.ts +9 -2
- package/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.d.ts +5 -1
- package/value-help-dialog/constans/condition-display.function.d.ts +1 -1
- package/value-help-dialog/directives/value-help-column-def.directive.d.ts +17 -0
- package/value-help-dialog/directives/value-help-filter-def.directive.d.ts +15 -0
- package/value-help-dialog/index.d.ts +3 -2
- package/value-help-dialog/models/index.d.ts +1 -1
- package/value-help-dialog/models/vhd-component.model.d.ts +5 -0
- package/value-help-dialog/models/vhd-filter.model.d.ts +3 -0
- package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +8 -6
- package/variant-management/index.d.ts +3 -3
- package/variant-management/models/variant-management.d.ts +1 -1
- package/wizard-generator/base-wizard-generator.d.ts +1 -1
- package/wizard-generator/index.d.ts +9 -9
- package/wizard-generator/interfaces/wizard-generator-form-group.interface.d.ts +1 -1
- package/wizard-generator/interfaces/wizard-generator-item.interface.d.ts +1 -1
- package/wizard-generator/interfaces/wizard-step.interface.d.ts +2 -2
- package/wizard-generator/wizard-generator.service.d.ts +1 -1
- package/fundamental-ngx-platform-v0.48.0-rc.2.tgz +0 -0
- package/schematics/ng-add/index.ts +0 -64
- package/schematics/ng-add/schema.ts +0 -3
- package/schematics/utils/package-utils.ts +0 -104
|
@@ -840,6 +840,18 @@ export class TableComponent extends Table {
|
|
|
840
840
|
const tableEl = this.table.nativeElement;
|
|
841
841
|
tableEl.rows[position.rowIndex].cells[position.colIndex].focus();
|
|
842
842
|
}
|
|
843
|
+
/**
|
|
844
|
+
* Clears the array of table rows. Triggered when new data source is applied.
|
|
845
|
+
*/
|
|
846
|
+
clearTableRows() {
|
|
847
|
+
this._tableRows = [];
|
|
848
|
+
this._tableRowsVisible = [];
|
|
849
|
+
this._tableRowsInViewPortPlaceholder = [];
|
|
850
|
+
this._newTableRows = [];
|
|
851
|
+
this._dataSourceTableRows = [];
|
|
852
|
+
this._setTableRows([]);
|
|
853
|
+
this._tableService.setCurrentPage(1);
|
|
854
|
+
}
|
|
843
855
|
// Private API
|
|
844
856
|
/** @hidden */
|
|
845
857
|
_scrollToOverlappedCell() {
|
|
@@ -1042,14 +1054,6 @@ export class TableComponent extends Table {
|
|
|
1042
1054
|
}
|
|
1043
1055
|
/** @hidden */
|
|
1044
1056
|
_listenToTableRowsPipe() {
|
|
1045
|
-
this._subscriptions.add(
|
|
1046
|
-
/*
|
|
1047
|
-
* Reset table when the data source is changed,
|
|
1048
|
-
* because new data source can have different set of data
|
|
1049
|
-
*/
|
|
1050
|
-
this._dataSourceDirective.dataSourceChanged.subscribe(() => {
|
|
1051
|
-
this._setTableRows([]);
|
|
1052
|
-
}));
|
|
1053
1057
|
this._subscriptions.add(this._dataSourceDirective.items$
|
|
1054
1058
|
.pipe(
|
|
1055
1059
|
// map source items to table rows
|
|
@@ -1199,7 +1203,7 @@ export class TableComponent extends Table {
|
|
|
1199
1203
|
return convertTreeTableRowToFlatList(source, this.rowNavigatable);
|
|
1200
1204
|
}
|
|
1201
1205
|
if (isJsObject(item)) {
|
|
1202
|
-
return convertTreeObjectsToTableRows(source, this.selectionMode, this._tableRows, this.rowComparator, this.relationKey, this.hasChildrenKey, this.selectedKey, this.expandedStateKey, this.rowNavigatable);
|
|
1206
|
+
return convertTreeObjectsToTableRows(source, this.selectionMode, this._tableRows, this.rowComparator, this.relationKey, this.hasChildrenKey, this.selectedKey, this.expandedStateKey, this.rowNavigatable, this.enableTristateMode);
|
|
1203
1207
|
}
|
|
1204
1208
|
return [];
|
|
1205
1209
|
}
|
|
@@ -1692,4 +1696,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
1692
1696
|
}], loading: [{
|
|
1693
1697
|
type: Input
|
|
1694
1698
|
}] } });
|
|
1695
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBSU4sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUNILGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsNEJBQTRCLEVBRTVCLHNCQUFzQixFQUN0QixzQkFBc0IsSUFBSSx3QkFBd0IsRUFDbEQsd0JBQXdCLEVBQ3hCLE9BQU8sRUFFUCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3pCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUNILGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsK0JBQStCLEVBQ2xDLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUNILGNBQWMsSUFBSSxrQkFBa0IsRUFDcEMsWUFBWSxJQUFJLGdCQUFnQixFQUNoQyxjQUFjLElBQUksZ0JBQWdCLEVBQ2xDLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNwQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUYsT0FBTyxFQUNILHdCQUF3QixFQUN4QixtQkFBbUIsRUFJbkIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0Isd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6QixrQ0FBa0MsRUFDbEMsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGtCQUFrQixFQUVsQixVQUFVLEVBQ1YsY0FBYyxFQUVkLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsYUFBYSxFQUViLGtDQUFrQyxFQUNsQyxLQUFLLEVBQ0wsV0FBVyxFQUNYLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBRXZCLHdCQUF3QixFQUV4QixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUUzQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBRXRCLHFCQUFxQixFQUdyQixlQUFlLEVBQ2YsNEJBQTRCLEVBQzVCLFlBQVksRUFFWix3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixvQkFBb0IsRUFHdkIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsYUFBYSxFQUF5QixNQUFNLGNBQWMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUN2SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7QUFVL0UsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQXVFSCxNQUFNLE9BQU8sY0FDVCxTQUFRLEtBQVE7SUE0SWhCLHdFQUF3RTtJQUN4RSxJQUNJLGFBQWEsQ0FBQyxLQUF5QjtRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ3pFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUtEOzs7T0FHRztJQUNILElBQ0ksa0JBQWtCLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3hELENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsSUFDSSxvQkFBb0IsQ0FBQyxLQUFhO1FBQ2xDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQUksb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ25FLE9BQU8sd0JBQXdCLENBQUM7U0FDbkM7UUFFRCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN6QyxDQUFDO0lBMEdELGNBQWM7SUFDZCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztJQUNsRCxDQUFDO0lBRUQsY0FBYztJQUNkLElBQUksbUJBQW1CO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQztJQUMxRCxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksV0FBVztRQUNYLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQztJQUNwRyxDQUFDO0lBRUQsY0FBYztJQUNkLElBQUksZ0NBQWdDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQzlFLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUMzRSxDQUFDO0lBRUQsY0FBYztJQUNkLElBQUksWUFBWTtRQUNaLE9BQU8sQ0FDSCxJQUFJLENBQUMsT0FBTztZQUNaLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQjtnQkFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDZCQUE2QjtnQkFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQzdCLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7UUFJSTtJQUNKLElBQUksc0JBQXNCO1FBQ3RCLE9BQU8sQ0FDSCxJQUFJLENBQUMsdUJBQXVCO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTTtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FDOUMsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsSUFBSSxJQUFJLENBQUM7SUFDMUQsQ0FBQztJQWlKRCxjQUFjO0lBQ2QsWUFDcUIsT0FBZSxFQUNmLElBQXVCLEVBQy9CLGFBQTJCLEVBQ25CLHNCQUFvRCxFQUNyRCx5QkFBbUQsRUFDbEQsTUFBa0IsRUFDTixXQUF1QixFQUMzQyxzQkFBOEMsRUFDOUMsUUFBa0IsRUFDVixnQkFBd0M7UUFFekQsS0FBSyxFQUFFLENBQUM7UUFYUyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDbkIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUE4QjtRQUNyRCw4QkFBeUIsR0FBekIseUJBQXlCLENBQTBCO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQVk7UUFDTixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUMzQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDVixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBdmdCN0QseURBQXlEO1FBRXpELFNBQUksR0FBRyxlQUFlLENBQUM7UUFFdkIsd0JBQXdCO1FBR3hCLE9BQUUsR0FBRyxhQUFhLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFFcEMsZ0ZBQWdGO1FBRWhGLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUV4Qjs7OzthQUlLO1FBRUwsVUFBSyxHQUFHLElBQUksQ0FBQztRQVNiLHlDQUF5QztRQUV6QyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUl0QixzQ0FBc0M7UUFFdEMsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBVTVCLHdDQUF3QztRQUV4Qyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsc0NBQXNDO1FBRXRDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQiw2QkFBNkI7UUFFN0IsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQiwrREFBK0Q7UUFFL0Qsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0NBQWtDO1FBR2xDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLDZDQUE2QztRQUU3QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLDJDQUEyQztRQUUzQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBVWxCOzs7O1dBSUc7UUFFSCxtQkFBYyxHQUFxQixLQUFLLENBQUM7UUFDekM7O1dBRUc7UUFFSCwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsdUNBQXVDO1FBRXZDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBMEJ0QixpRkFBaUY7UUFFakYsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckI7OztXQUdHO1FBRUgsY0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDckQsNEVBQTRFO1FBQzVFOzs7V0FHRztRQUVILG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLGNBQWM7UUFDZCxtQkFBYyxHQUF1QixhQUFhLENBQUMsSUFBSSxDQUFDO1FBY3hELGNBQWM7UUFDTix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUE2QnBDOzs7OztXQUtHO1FBRUgseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBUTdCLGNBQWM7UUFDTix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFcEMsd0VBQXdFO1FBRXhFLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7UUFDL0Qsb0RBQW9EO1FBRTNDLHVCQUFrQixHQUFrRCxJQUFJLFlBQVksRUFFMUYsQ0FBQztRQUNKLHFEQUFxRDtRQUU1QyxlQUFVLEdBQXVDLElBQUksWUFBWSxFQUF3QixDQUFDO1FBQ25HLHFEQUFxRDtRQUU1QyxpQkFBWSxHQUF5QyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUN6RyxtREFBbUQ7UUFFMUMsZ0JBQVcsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFDdEcsOERBQThEO1FBRXJELGtCQUFhLEdBQTBDLElBQUksWUFBWSxFQUEyQixDQUFDO1FBQzVHLDREQUE0RDtRQUVuRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDL0QsK0RBQStEO1FBRXRELGlCQUFZLEdBQXlDLElBQUksWUFBWSxFQUEwQixDQUFDO1FBQ3pHLDBEQUEwRDtRQUVqRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBbUMsQ0FBQztRQUNsRixvQ0FBb0M7UUFFM0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUNwRSxzQ0FBc0M7UUFFN0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUNwRSx3Q0FBd0M7UUFFL0Isa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2xELDRDQUE0QztRQUVuQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDckQsOENBQThDO1FBRXJDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzNDLG9EQUFvRDtRQUUzQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDcEQsNkRBQTZEO1FBRXBELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNqRCxrREFBa0Q7UUFFbEQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzNDLG1EQUFtRDtRQUVuRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLDRDQUE0QztRQUVuQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUE4Ry9DOzs7O1dBSUc7UUFDSCxlQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUMvQjs7OztXQUlHO1FBQ0gseUJBQW9CLEdBQWtCLEVBQUUsQ0FBQztRQUN6Qzs7O1dBR0c7UUFDSCxrQkFBYSxHQUFrQixFQUFFLENBQUM7UUFDbEM7Ozs7O1dBS0c7UUFDSCxzQkFBaUIsR0FBa0IsRUFBRSxDQUFDO1FBQ3RDOzs7V0FHRztRQUNILG9CQUFlLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQ7OztXQUdHO1FBQ0gsc0JBQWlCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbkQ7OztXQUdHO1FBQ0gseUJBQW9CLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsY0FBYztRQUNkLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUN4QixjQUFjO1FBQ2Qsa0JBQWEsR0FBbUIsS0FBSyxDQUFDO1FBQ3RDLGNBQWM7UUFFZCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0Qjs7OztXQUlHO1FBQ0gsb0NBQStCLEdBQWEsRUFBRSxDQUFDO1FBQy9DLGNBQWM7UUFDZCw2QkFBd0IsR0FBZSxFQUFFLENBQUM7UUFDMUMsY0FBYztRQUNkLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUtoQyxjQUFjO1FBQ2QsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBRzFCLGNBQWM7UUFDZCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsY0FBYztRQUNkLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixjQUFjO1FBQ0wseUJBQW9CLEdBQUcsTUFBTSxDQUE4Qix3QkFBd0IsQ0FBQyxDQUFDO1FBQzlGLGNBQWM7UUFDTCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEQsY0FBYztRQUNMLGlCQUFZLEdBQUcsTUFBTSxDQUFvQix5QkFBeUIsRUFBRTtZQUN6RSxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxjQUFjO1FBQ0wsNEJBQXVCLEdBQUcsTUFBTSxDQUFxQixrQ0FBa0MsRUFBRTtZQUM5RixRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFDSCxjQUFjO1FBQ0wsdUJBQWtCLEdBQUcsTUFBTSxDQUFpQiw2QkFBNkIsRUFBRTtZQUNoRixRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFPSCxjQUFjO1FBQ04sK0JBQTBCLEdBQUcsS0FBSyxDQUFDO1FBQzNDLGNBQWM7UUFDRyxtQ0FBOEIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0RixjQUFjO1FBQ0cscUNBQWdDLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDeEYsY0FBYztRQUNHLG9DQUErQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZGLGNBQWM7UUFDRyxxQ0FBZ0MsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN4Rjs7O1dBR0c7UUFDSyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUM1Qjs7O1dBR0c7UUFDSyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUM1QixjQUFjO1FBQ04sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLGNBQWM7UUFDTixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUMvQixjQUFjO1FBQ04sZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDOUIsY0FBYztRQUNOLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNqQyxjQUFjO1FBQ04scUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGNBQWM7UUFDRyxtQkFBYyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDdEQsY0FBYztRQUNOLG1CQUFjLEdBQStCLEVBQUUsQ0FBQztRQUN4RCxjQUFjO1FBQ04scUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGNBQWM7UUFDTiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDdEMsY0FBYztRQUNOLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUN0QyxjQUFjO1FBQ0csd0JBQW1CLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFTM0UsY0FBYztRQUNHLG9CQUFlLEdBQTRCLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFnQmpGLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVztZQUM5QyxRQUFRLEVBQUUsSUFBSSxDQUFDLDhCQUE4QjtZQUM3QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdDQUFnQztZQUNqRCxTQUFTLEVBQUUsSUFBSSxDQUFDLCtCQUErQjtZQUMvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdDQUFnQztTQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTFFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUNMLENBQUM7U0FDTDtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQsNERBQTREO0lBQzVELGlCQUFpQjtRQUNiLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxNQUFjO1FBQzVDLElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLFNBQVMsSUFBSSxPQUFPLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXO2dCQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVO29CQUM5QixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ3JFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ2xDO1FBRUQsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE9BQU87U0FDVjtRQUVELElBQUksZUFBZSxJQUFJLE9BQU8sRUFBRTtZQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQy9CO1FBRUQsSUFDSSxlQUFlLElBQUksT0FBTztZQUMxQixpQkFBaUIsSUFBSSxPQUFPO1lBQzVCLG9CQUFvQixJQUFJLE9BQU87WUFDL0Isc0JBQXNCLElBQUksT0FBTyxFQUNuQztZQUNFLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkcsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7U0FDNUM7UUFFRCxJQUFJLFdBQVcsSUFBSSxPQUFPLEVBQUU7WUFDeEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELGNBQWM7SUFDZCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUVyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVqRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUVsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLENBQUM7UUFFdEQsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFFdkMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFFdEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCO2FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxhQUFhLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN0RixTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGNBQWMsU0FBUyxLQUFLLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQ1QsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7U0FDL0M7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGtCQUFrQjtRQUNkLDRGQUE0RjtRQUM1RixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzdCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNsQixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsYUFBYTtRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGFBQWEsQ0FBQyxLQUFpQjtRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsZUFBZTtRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxzQkFBc0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQUksQ0FBQyxTQUEyQjtRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsT0FBTyxDQUFDLFNBQTJCO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixNQUFNLENBQUMsV0FBK0I7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLFNBQVMsQ0FBQyxXQUErQjtRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsWUFBWSxDQUFDLE1BQWdCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixLQUFLLENBQUMsTUFBeUI7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLFFBQVEsQ0FBQyxNQUF5QjtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE9BQWlCO1FBQ3hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QyxNQUFNLGFBQWEsR0FBNkI7WUFDNUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFDRixZQUFZO2FBQ1AsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCx5REFBeUQ7YUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLGNBQWMsQ0FBQyxVQUFrQixFQUFFLEdBQWE7UUFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLFFBQVEsQ0FBQyxVQUFrQixFQUFFLEdBQWE7UUFDdEMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RSxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSwwQkFBMEIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFcEUsR0FBRztZQUNDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLDBCQUEwQixDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixTQUFTO1FBQ0wsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsRUFBRTtZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxjQUFjO0lBQ04sZUFBZSxDQUFDLElBQW1CO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNmLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixXQUFXO1FBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMxQixDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ1YsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDbkI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLE1BQU0sQ0FBQyxXQUF3QjtRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsY0FBYyxDQUFDLFdBQW1CO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELDhDQUE4QztJQUM5Qyx5QkFBeUIsQ0FBQyxnQkFBeUI7UUFDL0MsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsMkJBQTJCLENBQUMsa0JBQTJCO1FBQ25ELElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLDBCQUEwQixDQUFDLGlCQUEwQjtRQUNqRCxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGlEQUFpRDtJQUNqRCwyQkFBMkIsQ0FBQyxrQkFBMkI7UUFDbkQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsZ0NBQWdDLENBQUMsUUFBaUI7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLGNBQWdDO1FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU87U0FDVjtRQUVELEdBQUcsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUV6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxRQUFnQjtRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ2pELE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQzdDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN4QzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFO1lBQ3RELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxLQUFjO1FBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU87U0FDVjtRQUVELElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxtQkFBbUIsQ0FBQyxRQUFnQjtRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPO1NBQ1Y7UUFFRCxHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUV6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsMkJBQTJCO1FBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCwyREFBMkQ7SUFDM0Qsa0NBQWtDO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFO1lBQzlCLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFFRCxtREFBbUQ7UUFDbkQsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNGLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNyRixNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsMkJBQTJCLENBQUM7UUFFaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxhQUFhO1FBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLE1BQU0sS0FBSyxHQUFHLElBQUksYUFBYSxDQUFJLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxhQUFhLEdBQXlCLEVBQTBCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDL0UsRUFBRSxFQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUMzRCxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNGLDRCQUE0QjtRQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQVcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsU0FBUyxDQUFDLElBQWdDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFlLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxnQkFBZ0I7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMvQjtRQUNELDhEQUE4RDtRQUM5RCxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDM0MsNkVBQTZFO1lBQzdFLElBQ0ksUUFBUSxLQUFLLFlBQVk7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7b0JBQ3JCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNoRixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDckM7Z0JBQ0UsT0FBTzthQUNWO1lBRUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDVixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQ3RELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILGVBQWUsQ0FBQyxHQUFHLFVBQW9CO1FBQ25DLElBQUksUUFBUSxHQUFvQixJQUFJLENBQUM7UUFDckMsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDL0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU5RSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRTtnQkFDckMsTUFBTTthQUNUO1lBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxRQUErQjtRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWlDLENBQUM7UUFDN0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQsY0FBYztJQUVkLGNBQWM7SUFDZCx1QkFBdUI7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FDdkMsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUNqQyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7SUFDZCxtQkFBbUIsQ0FBQyxTQUFrQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDckMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFdBQXFCLEVBQUUsS0FBYTtRQUN0RCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLFFBQVEsRUFBRTtZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDaEQ7UUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM3QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxLQUFxQyxDQUFDLENBQUM7UUFFaEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUM5QyxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDdEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNyRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsMEJBQTBCLENBQUMsV0FBcUI7UUFDNUMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdELE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUVoQyw2QkFBNkI7UUFDN0IsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkUsSUFBSSxHQUFHLEtBQUssV0FBVyxFQUFFO2dCQUNyQixPQUFPO2FBQ1Y7WUFFRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDckI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBQyxTQUFrQjtRQUN2QyxNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFrQixFQUFFLENBQUM7UUFFaEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkUsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsT0FBTzthQUNWO1lBQ0QsR0FBRyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7WUFDeEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBRXJDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCw0QkFBNEIsQ0FBQyxLQUFpQixFQUFFLE9BQW1CLEVBQUUsTUFBZSxLQUFLO1FBQ3JGLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUNsRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUM7YUFDaEMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUN6QixNQUFNLEVBQUUsSUFBSTtZQUNaLFNBQVMsRUFBRSxRQUFRO1lBQ25CLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN0RCxHQUFHO1NBQ04sQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUFZLENBQUMsTUFBYyxFQUFFLEdBQWdCO1FBQ3pDLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxVQUFVLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxHQUF1QixFQUFFLEtBQVk7UUFDN0MsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDakMsT0FBTztTQUNWO1FBRUQsSUFBSSxLQUFLLElBQUksS0FBSyxZQUFZLGFBQWEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtZQUM1RSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztZQUNoRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRixJQUFJLGVBQWUsRUFBRTtnQkFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUMxRDtTQUNKO1FBRUQsSUFBSSxHQUFHLEVBQUU7WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxnQkFBZ0IsQ0FBQyxHQUFnQjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLFFBQXFCO1FBQ2pDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFO1lBQzdDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUN4QixJQUFJLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FDckYsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO0lBQ2QsZ0JBQWdCLENBQUMsR0FBZ0I7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQztTQUN0QztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUksUUFBUSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsS0FBSztRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGNBQWM7SUFDZCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztJQUNkLHdCQUF3QixDQUFDLFdBQXFCLEVBQUUsVUFBVSxHQUFHLEtBQUs7UUFDOUQsV0FBVyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzFELDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNYLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzthQUN4QjtZQUVELDhGQUE4RjtZQUM5RixJQUFJLFFBQVEsRUFBRTtnQkFDVixHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwRjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7SUFDZCxlQUFlLENBQUMsV0FBb0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLE9BQU87U0FDVjtRQUNELE1BQU0sRUFDRixJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQ2xDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxXQUFXLElBQUksUUFBUSxFQUFFO1lBQ3pCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxRUFBcUU7SUFDN0QsaUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGNBQWM7SUFDTixzQkFBc0I7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHO1FBQ25COzs7V0FHRztRQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTTthQUMzQixJQUFJO1FBQ0QsaUNBQWlDO1FBQ2pDLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLDhCQUE4QjtRQUM5QixTQUFTLENBQUMsQ0FBQyxJQUFnQixFQUFFLEVBQUUsQ0FDM0IsSUFBSSxDQUFDLFdBQVc7WUFDWixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNWLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQy9CLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUM5RSxDQUNKLENBQ1YsQ0FDSjthQUNBLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2hCLElBQUk7Z0JBQ0EsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO29CQUMzRCxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNULENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVzthQUNoQyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDVixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztZQUNyRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLENBQUMsR0FBRyxDQUNOLFNBQVMsRUFDVCxJQUFJLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3pELEdBQUcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO29CQUN2QixHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztvQkFDakMsT0FBTyxHQUFHLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQ0wsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFFcEYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFFakMsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGNBQWM7SUFDTiwwQkFBMEI7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVO2FBQ3hCLElBQUksQ0FDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUM3QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUMxRSxvQkFBb0IsRUFBRSxDQUN6QjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQ1QsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUMxRCxRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLFNBQVM7b0JBQ1YsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO29CQUVuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUMxRixNQUFNO2dCQUNWLEtBQUssUUFBUTtvQkFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN4RixNQUFNO2dCQUNWLEtBQUssUUFBUTtvQkFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN4RixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO29CQUMvRixNQUFNO2dCQUNWLEtBQUssUUFBUTtvQkFDVCxNQUFNO2dCQUNWLEtBQUssT0FBTztvQkFDUixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7b0JBRW5DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ3RGLE1BQU07Z0JBQ1YsS0FBSyxNQUFNO29CQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ3BGLE1BQU07Z0JBQ1YsS0FBSyxNQUFNO29CQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ3BGLE1BQU07YUFDYjtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsY0FBYztJQUNOLDRCQUE0QjtRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsWUFBWTtxQkFDbEQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztxQkFDNUIsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDaEUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1Y7cUJBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDWixNQUFNLFFBQVEsR0FBRzt3QkFDYixHQUFHLEtBQUs7d0JBQ1IsR0FBRzs0QkFDQyxJQUFJLEVBQUU7Z0NBQ0YsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dDQUN0RSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFROzZCQUNoQzt5QkFDSjtxQkFDSixDQUFDO29CQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQy9DLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDZCxLQUFLLFdBQVc7b0JBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1YsS0FBSyxzQkFBc0I7b0JBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0MsTUFBTTtnQkFDVixLQUFLLDJCQUEyQjtvQkFDNUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDekMsTUFBTTthQUNiO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO0lBQ04saUNBQWlDLENBQUMsTUFBVztRQUNqRCxJQUFJLElBQW1CLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksR0FBRyxJQUFJLENBQUMscUNBQXFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNILElBQUksR0FBRyx5QkFBeUIsQ0FDNUIsTUFBTSxFQUNOLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FDckIsQ0FBQztTQUNMO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGNBQWM7SUFDTixxQ0FBcUMsQ0FBQyxNQUFXO1FBQ3JELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQVEsQ0FBQztRQUU5QixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixPQUFPLDZCQUE2QixDQUFDLE1BQW9CLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsT0FBTyw2QkFBNkIsQ0FDaEMsTUFBTSxFQUNOLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsY0FBYyxDQUN0QixDQUFDO1NBQ0w7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjO0lBQ04sYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsb0JBQW9CO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7SUFDTiwwQkFBMEI7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxhQUFhLEVBQUU7WUFDN0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLDBCQUEwQixFQUFFLENBQUM7U0FDN0Q7YUFBTTtZQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTix3QkFBd0I7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxzQkFBc0I7YUFDdEIsSUFBSSxDQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ3RFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUM1QzthQUNBLFNBQVMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBRSxDQUFDO1lBQzVGLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLGFBQWEsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQzthQUM3RDtRQUNMLENBQUMsQ0FBQyxDQUNULENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1RCxNQUFNLFVBQVUsR0FBRyxPQUFPO2lCQUNyQixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDeEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUVsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRS9DLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUU3QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDakMsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFO2lCQUMvRCxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQzthQUNqRztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDakQsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsb0VBQW9FO2FBQzFGLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO2FBQ3ZFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7YUFDbkQsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU5RCxNQUFNLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ3RELENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ1osSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRTtnQkFDckMsT0FBTyxHQUFHLENBQUM7YUFDZDtZQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0QsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQ0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFvQixDQUM5QixDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGNBQWM7SUFDTiw0QkFBNEI7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxjQUFjO0lBQ04saUNBQWlDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRUQsY0FBYztJQUNOLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztRQUMvRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sZ0JBQWdCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxjQUFjO0lBQ04sb0JBQW9CO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyx1QkFBdUIsQ0FBQyxHQUFhLEVBQUUsU0FBd0IsRUFBRSxXQUEwQjtRQUMvRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxjQUFjO0lBQ04sd0JBQXdCLENBQUMsR0FBYSxFQUFFLFNBQXdCLEVBQUUsV0FBMEI7UUFDaEcsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUU1QixPQUFPLFVBQVUsRUFBRTtZQUNmLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQztZQUNyRyxNQUFNLFlBQVksR0FBa0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sa0JBQWtCLEdBQWtCLEVBQUUsQ0FBQztZQUM3QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hCO3FCQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQzNCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUI7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUMzRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUUzQyxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEcsVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxLQUFLLElBQUk7Z0JBQzdDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbkMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLHlCQUF5QixDQUFDLEdBQWEsRUFBRSxTQUF3QixFQUFFLFdBQTBCO1FBQ2pHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsY0FBYztJQUNOLHNCQUFzQjtRQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLHNCQUFzQjthQUN0QixRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN0QyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkMsdUZBQXVGO1lBQ3ZGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO0lBQ04sK0JBQStCO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FDbkcsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FDckcsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO0lBQ04sMEJBQTBCO1FBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQzthQUM5QyxJQUFJLENBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLG1GQUFtRjtZQUNuRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLEVBQ0YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUNwQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRTtnQkFDL0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDN0I7UUFDTCxDQUFDLENBQUMsQ0FDVCxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0RCxpRUFBaUU7WUFDakUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLGlDQUFpQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDdEUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUMvQyxDQUNKLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sbUJBQW1CO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjO0lBQ04sOEJBQThCO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMxRixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2lCQUMvRTtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO0lBQ04sV0FBVyxDQUFDLFFBQW9CO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkQsUUFBUSxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxhQUFhLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxjQUFjO0lBQ04sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCO1lBQ3JELENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxjQUFjO0lBQ04sY0FBYztRQUNsQixJQUFJLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUNoRCxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVTtZQUNyQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FDN0csQ0FBQztJQUNOLENBQUM7OEdBeDNEUSxjQUFjO2tHQUFkLGNBQWMsa3ZFQWhFWjtZQUNQLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2pFLGVBQWU7WUFDZixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLDRCQUE0QjtZQUM1Qix3QkFBd0I7WUFDeEIsc0JBQXNCO1lBQ3RCLCtCQUErQixDQUFDO2dCQUM1Qix1QkFBdUIsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDO2FBQy9HLENBQUM7WUFDRjtnQkFDSSxPQUFPLEVBQUUsNEJBQTRCO2dCQUNyQyxXQUFXLEVBQUUsY0FBYzthQUM5QjtTQUNKLG9FQThVYSxhQUFhLDZEQU5WLFdBQVcsc0RBR1gsaUJBQWlCLCtSQWZ2QixnQkFBZ0IsMkJBQVUsVUFBVSw4REFHcEMsNEJBQTRCLHFIQUdQLFVBQVUsNkRBRy9CLGdCQUFnQixnZ0JDM2dCL0IsbThZQXFPQSxtbTNKRExRLGdCQUFnQixvSkFDaEIsc0JBQXNCLCtJQUN0QixtQ0FBbUMscUVBQ25DLHdCQUF3QixnR0FFeEIsa0JBQWtCLDBNQUNsQixvQkFBb0IsbUhBQ3BCLHVCQUF1Qix1UEFDdkIsa0JBQWtCLDhHQUNsQixpQkFBaUIsNGpCQUNqQixzQkFBc0IsaU1BQ3RCLGlCQUFpQiw0UEFDakIsd0JBQXdCLDZKQUN4QixlQUFlLCtFQUNmLGlCQUFpQiw0S0FDakIsa0JBQWtCLGtNQUNsQixpQkFBaUIsc0hBQ2pCLHdCQUF3Qix5SUFDeEIsU0FBUyx5Q0FDVCxlQUFlLCtDQUNmLGNBQWM7OzJGQUdULGNBQWM7a0JBdEUxQixTQUFTOytCQUNJLFdBQVcsaUJBR04saUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUCxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLEVBQUU7d0JBQ2pFLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLCtCQUErQixDQUFDOzRCQUM1Qix1QkFBdUIsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDO3lCQUMvRyxDQUFDO3dCQUNGOzRCQUNJLE9BQU8sRUFBRSw0QkFBNEI7NEJBQ3JDLFdBQVcsZ0JBQWdCO3lCQUM5QjtxQkFDSixrQkFDZTt3QkFDWjs0QkFDSSxTQUFTLEVBQUUsd0JBQXdCOzRCQUNuQyxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUM7NEJBQ3pDLHdFQUF3RTs0QkFDeEUsT0FBTyxFQUFFO2dDQUNMLHdCQUF3QjtnQ0FDeEIsK0RBQStEO2dDQUMvRCxpQkFBaUI7Z0NBQ2pCLCtEQUErRDtnQ0FDL0QsZ0JBQWdCO2dDQUNoQixtQkFBbUI7Z0NBQ25CLGFBQWE7Z0NBQ2IsV0FBVzs2QkFDZDt5QkFDSjt3QkFDRCwyQkFBMkI7cUJBQzlCLFFBQ0s7d0JBQ0YsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLHlDQUF5QyxFQUFFLGtDQUFrQzt3QkFDN0UsdUNBQXVDLEVBQUUsZ0NBQWdDO3FCQUM1RSxjQUNXLElBQUksV0FDUDt3QkFDTCxnQkFBZ0I7d0JBQ2hCLHNCQUFzQjt3QkFDdEIsbUNBQW1DO3dCQUNuQyx3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLHVCQUF1Qjt3QkFDdkIsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQix3QkFBd0I7d0JBQ3hCLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4QixTQUFTO3dCQUNULGVBQWU7d0JBQ2YsY0FBYztxQkFDakI7OzBCQTBnQkksUUFBUTswSUFsZ0JiLElBQUk7c0JBREgsS0FBSztnQkFNTixFQUFFO3NCQUZELEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsU0FBUztnQkFLdEIsZ0JBQWdCO3NCQURmLEtBQUs7Z0JBU04sS0FBSztzQkFESixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFJTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBSU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQUlOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUtOLGNBQWM7c0JBRmIsV0FBVzt1QkFBQyxrQ0FBa0M7O3NCQUM5QyxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFRTixjQUFjO3NCQURiLEtBQUs7Z0JBTU4scUJBQXFCO3NCQURwQixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQVFOLE9BQU87c0JBRE4sS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sU0FBUztzQkFEUixLQUFLO2dCQVFOLGVBQWU7c0JBRGQsS0FBSztnQkFRRixhQUFhO3NCQURoQixLQUFLO2dCQW1CRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBV0Ysb0JBQW9CO3NCQUR2QixLQUFLO2dCQW9CTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQVFOLGFBQWE7c0JBRFosTUFBTTtnQkFJRSxrQkFBa0I7c0JBRDFCLE1BQU07Z0JBTUUsVUFBVTtzQkFEbEIsTUFBTTtnQkFJRSxZQUFZO3NCQURwQixNQUFNO2dCQUlFLFdBQVc7c0JBRG5CLE1BQU07Z0JBSUUsYUFBYTtzQkFEckIsTUFBTTtnQkFJRSxVQUFVO3NCQURsQixNQUFNO2dCQUlFLFlBQVk7c0JBRHBCLE1BQU07Z0JBSUUsa0JBQWtCO3NCQUQxQixNQUFNO2dCQUlFLFdBQVc7c0JBRG5CLE1BQU07Z0JBSUUsV0FBVztzQkFEbkIsTUFBTTtnQkFJRSxhQUFhO3NCQURyQixNQUFNO2dCQUlFLElBQUk7c0JBRFosTUFBTTtnQkFJRSxNQUFNO3NCQURkLE1BQU07Z0JBSUUsYUFBYTtzQkFEckIsTUFBTTtnQkFJRSxZQUFZO3NCQURwQixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFJRSxXQUFXO3NCQURuQixNQUFNO2dCQUlFLGVBQWU7c0JBRHZCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUluQixjQUFjO3NCQUR0QixTQUFTO3VCQUFDLGdCQUFnQjtnQkFJbEIsS0FBSztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsY0FBYztzQkFEdEIsU0FBUzt1QkFBQyw0QkFBNEI7Z0JBSXRCLFVBQVU7c0JBRDFCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJM0IsYUFBYTtzQkFEN0IsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSWxCLE9BQU87c0JBRGYsZUFBZTt1QkFBQyxXQUFXO2dCQUluQixtQkFBbUI7c0JBRDNCLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUloRCxZQUFZO3NCQURwQixZQUFZO3VCQUFDLGFBQWE7Z0JBaUkzQixhQUFhO3NCQURaLFdBQVc7dUJBQUMsdUJBQXVCO2dCQTJDNUIsT0FBTztzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUcmFja0J5RnVuY3Rpb24sXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEbmRMaXN0RGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wTW9kdWxlLFxuICAgIEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUsXG4gICAgRm9jdXNhYmxlQ2VsbFBvc2l0aW9uLFxuICAgIEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsXG4gICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZSBhcyBGb2N1c2FibGVHcmlkRGlyZWN0aXZlXzEsXG4gICAgSW50ZXJzZWN0aW9uU3B5RGlyZWN0aXZlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUmFuZ2VTZWxlY3RvcixcbiAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgcmVzaXplT2JzZXJ2YWJsZSxcbiAgICBSdGxTZXJ2aWNlLFxuICAgIFRhYmJhYmxlRWxlbWVudFNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnVzeUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXN5LWluZGljYXRvcic7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQge1xuICAgIFRhYmxlQ29tcG9uZW50IGFzIENvcmVUYWJsZUNvbXBvbmVudCxcbiAgICBUYWJsZVNlcnZpY2UgYXMgQ29yZVRhYmxlU2VydmljZSxcbiAgICBUYWJsZUNvbXBvbmVudCBhcyBGZFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlQm9keURpcmVjdGl2ZSxcbiAgICBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gICAgVGFibGVSb3dEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RhYmxlJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsIGlzSnNPYmplY3QgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbixcbiAgICBidWlsZE5ld1Jvd1NrZWxldG9uLFxuICAgIENvbGxlY3Rpb25GaWx0ZXIsXG4gICAgQ29sbGVjdGlvbkdyb3VwLFxuICAgIENvbGxlY3Rpb25Tb3J0LFxuICAgIGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3QsXG4gICAgREVGQVVMVF9ISUdITElHSFRJTkdfS0VZLFxuICAgIEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURSxcbiAgICBFZGl0YWJsZVRhYmxlQ2VsbCxcbiAgICBGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSxcbiAgICBGRFBfVEFCTEVfU1RBVEVfRElSRUNUSVZFLFxuICAgIEZEUF9UQUJMRV9WSVJUVUFMX1NDUk9MTF9ESVJFQ1RJVkUsXG4gICAgZmluZFJvd0NoaWxkcmVuLFxuICAgIGdldEZyZWV6YWJsZUNvbHVtbnMsXG4gICAgZ2V0RnJlZXphYmxlRW5kQ29sdW1ucyxcbiAgICBnZXRSb3dQYXJlbnRzLFxuICAgIGdldFNlbGVjdGFibGVSb3dzLFxuICAgIGlzUm93TmF2aWdhdGFibGUsXG4gICAgaXNUYWJsZVJvdyxcbiAgICBpc1RyZWVSb3dGaXJzdENlbGwsXG4gICAgUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQsXG4gICAgUk9XX0hFSUdIVCxcbiAgICBSb3dDbGFzc2VzUGlwZSxcbiAgICBSb3dDb21wYXJhdG9yLFxuICAgIFNhdmVSb3dzRXZlbnQsXG4gICAgU0VMRUNUSU9OX0NPTFVNTl9XSURUSCxcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRILFxuICAgIFRhYmxlLFxuICAgIFRhYmxlQ29sdW1uLFxuICAgIFRhYmxlQ29sdW1uRnJlZXplRXZlbnQsXG4gICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgIFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50LFxuICAgIFRhYmxlRGF0YVNvdXJjZSxcbiAgICBUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUsXG4gICAgVGFibGVEcmFnZ2FibGUsXG4gICAgVGFibGVGaWx0ZXJDaGFuZ2VFdmVudCxcbiAgICBUYWJsZUdyb3VwQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgIFRhYmxlSW5pdGlhbFN0YXRlLFxuICAgIFRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICAgIFRhYmxlUmVzcG9uc2l2ZVNlcnZpY2UsXG4gICAgVGFibGVSb3csXG4gICAgVGFibGVSb3dBY3RpdmF0ZUV2ZW50LFxuICAgIFRhYmxlUm93Q2xhc3MsXG4gICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudCxcbiAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgVGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudCxcbiAgICBUYWJsZVJvd1R5cGUsXG4gICAgVGFibGVTY3JvbGxhYmxlLFxuICAgIFRhYmxlU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIFRhYmxlU2VydmljZSxcbiAgICBUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgICBUYWJsZVN0YXRlLFxuICAgIFRhYmxlVmlydHVhbFNjcm9sbFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUQUJMRV9UT09MQkFSLCBUYWJsZVRvb2xiYXJJbnRlcmZhY2UgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1UYWJsZUNvbHVtblJlc2l6ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtY29sdW1uLXJlc2l6ZXIvdGFibGUtY29sdW1uLXJlc2l6ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlR3JvdXBSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZ3JvdXAtcm93L3RhYmxlLWdyb3VwLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtaGVhZGVyLXJvdy90YWJsZS1oZWFkZXItcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVBvcHBpbmdSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtcG9wcGluZy1yb3cvdGFibGUtcG9wcGluZy1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIFRvb2xiYXJDb250ZXh0IHtcbiAgICBjb3VudGVyOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgc29ydGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZmlsdGVyYWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBncm91cGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgY29sdW1uczogT2JzZXJ2YWJsZTxib29sZWFuPjtcbn1cblxubGV0IHRhYmxlVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCByZXByZXNlbnRzIGEgdGFibGUuXG4gKiBBIHRhYmxlIGlzIGEgc2V0IG9mIHRhYnVsYXIgZGF0YS4gTGluZSBpdGVtcyBjYW4gc3VwcG9ydCBkYXRhLCBpbWFnZXMgYW5kIGFjdGlvbnMuXG4gKiBgYGBodG1sXG4gKiA8ZmRwLXRhYmxlXG4gKiAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAqICBmZENvbXBhY3RcbiAqICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICogIGVtcHR5VGFibGVNZXNzYWdlPVwiTm8gZGF0YSBmb3VuZFwiPlxuICpcbiAqICA8ZmRwLXRhYmxlLXRvb2xiYXJcbiAqICAgdGl0bGU9XCJPcmRlciBMaW5lIEl0ZW1zXCJcbiAqICAgW2hpZGVJdGVtQ291bnRdPVwiZmFsc2VcIj5cbiAqICA8L2ZkcC10YWJsZS10b29sYmFyPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwibmFtZVwiXG4gKiAgIGtleT1cIm5hbWVcIlxuICogICBsYWJlbD1cIk5hbWVcIlxuICogICBhbGlnbj1cInN0YXJ0XCI+XG4gKiAgPC9mZHAtY29sdW1uPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICogICBrZXk9XCJkZXNjcmlwdGlvblwiXG4gKiAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAqICA8L2ZkcC1jb2x1bW4+XG4gKiA8L2ZkcC10YWJsZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogVGFibGUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhYmxlQ29tcG9uZW50KSB9LFxuICAgICAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgICAgIFRhYmxlU2VydmljZSxcbiAgICAgICAgQ29yZVRhYmxlU2VydmljZSxcbiAgICAgICAgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICAgICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIHN1cHBvcnRlZENvbnRlbnREZW5zaXR5OiBbQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QsIENvbnRlbnREZW5zaXR5TW9kZS5DT1pZLCBDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEXVxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUYWJsZUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJywgJ2NoaWxkRGF0YVNvdXJjZSddLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2NoaWxkRGF0YVNvdXJjZUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZXF1ZXN0ZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZWNlaXZlZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGFTb3VyY2VDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAnZGF0YUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgICdpc0xvYWRpbmcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC10YWJsZScsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLW5vLWhvcml6b250YWwtYm9yZGVyc10nOiAnbm9Ib3Jpem9udGFsQm9yZGVycyB8fCBub0JvcmRlcnMnLFxuICAgICAgICAnW2NsYXNzLmZkLXRhYmxlLS1uby12ZXJ0aWNhbC1ib3JkZXJzXSc6ICdub1ZlcnRpY2FsQm9yZGVycyB8fCBub0JvcmRlcnMnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgUGxhdGZvcm1UYWJsZUNvbHVtblJlc2l6ZXJDb21wb25lbnQsXG4gICAgICAgIFRhYmxlU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICAgICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZV8xLFxuICAgICAgICBDb3JlVGFibGVDb21wb25lbnQsXG4gICAgICAgIFRhYmxlSGVhZGVyRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUhlYWRlclJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVCb2R5RGlyZWN0aXZlLFxuICAgICAgICBEcmFnQW5kRHJvcE1vZHVsZSxcbiAgICAgICAgVGFibGVHcm91cFJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVSb3dDb21wb25lbnQsXG4gICAgICAgIFRhYmxlUG9wcGluZ1Jvd0NvbXBvbmVudCxcbiAgICAgICAgUmVwZWF0RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZVJvd0RpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVDZWxsRGlyZWN0aXZlLFxuICAgICAgICBTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgSW50ZXJzZWN0aW9uU3B5RGlyZWN0aXZlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgUm93Q2xhc3Nlc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgPSBhbnk+XG4gICAgZXh0ZW5kcyBUYWJsZTxUPlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICAgIC8qKiBDb21wb25lbnQgbmFtZSB1c2VkIGluIGEgUHJlc2V0LW1hbmFnZWQgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZSA9ICdwbGF0Zm9ybVRhYmxlJztcblxuICAgIC8qKiBJRCBmb3IgdGhlIFRhYmxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBpZCA9IGBmZHAtdGFibGUtJHt0YWJsZVVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IHJlc2l6aW5nIGNvbHVtbnMgYnkgZHJhZ2dpbmcgdGhlIGNvbHVtbiBlZGdlIHdpdGggbW91c2UuICovXG4gICAgQElucHV0KClcbiAgICBlbmFibGVEcmFnUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZml4IHRoZSB0YWJsZSBoZWFkZXIgYW5kIGZvb3Rlci4gRGVmYXVsdCBpcyB0cnVlLlxuICAgICAqIE5vdGUgdGhhdCBpZiB0aGUgdGFibGUgY29udGFpbnMgZnJlZXphYmxlIGNvbHVtbnMsIHRoZSBoZWFkZXIgYW5kXG4gICAgICogZm9vdGVyIHdpbGwgYmUgZml4ZWQgYXV0b21hdGljYWxseSwgcmVnYXJkbGVzcyBvZiB0aGlzIGlucHV0IHZhbHVlLlxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBmaXhlZCA9IHRydWU7XG5cbiAgICAvKiogVGhlIGNvbHVtbiBgbmFtZWAgdG8gZnJlZXplIGNvbHVtbnMgdXAgdG8gYW5kIGluY2x1ZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZyZWV6ZUNvbHVtbnNUbzogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIGFmdGVyIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVFbmRDb2x1bW5zVG86IHN0cmluZztcbiAgICAvKiogVG9nZ2xlIGZvciBwYWdlIHNjcm9sbGluZyBmZWF0dXJlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNjcm9sbGluZyA9IGZhbHNlO1xuICAgIC8qKiBOdW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2l6ZTogTnVsbGFibGU8bnVtYmVyPjtcbiAgICAvKiogUGFnZSBzY3JvbGxpbmcgdGhyZXNob2xkIGluIHB4LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNjcm9sbGluZ1RocmVzaG9sZCA9IDgwO1xuICAgIC8qKiBUYWJsZSBib2R5IGhlaWdodC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGJvZHlIZWlnaHQ6IHN0cmluZztcbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgd2hlbiB0YWJsZSBoYXMgbm8gaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBlbXB0eVRhYmxlTWVzc2FnZTogc3RyaW5nO1xuICAgIC8qKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyB2aXNpYmxlIGNvbHVtbnMuICovXG4gICAgQElucHV0KClcbiAgICBub1Zpc2libGVDb2x1bW5zTWVzc2FnZTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vSG9yaXpvbnRhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCB2ZXJ0aWNhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9WZXJ0aWNhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCBhbnkgYm9yZGVycywgYnV0IGhlYWRlciB3aXRoIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvZHlCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgb3V0ZXIgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLXRhYmxlLS1uby1vdXRlci1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9PdXRlckJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWCA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgdmVydGljYWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWSA9IGZhbHNlO1xuICAgIC8qKiBBY2Nlc3NvciB0byBhIGNoaWxkcmVuIG5vZGVzIG9mIHRyZWUuICovXG4gICAgQElucHV0KClcbiAgICByZWxhdGlvbktleTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSByb3cgZXhwYW5kZWQgc3RhdGUga2V5LiBVc2VkIHRvIHNldCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0cmVlIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGV4cGFuZGVkU3RhdGVLZXk6IHN0cmluZztcbiAgICAvKiogUHJvcGVydHkga2V5IGluZGljYXRpbmcgdGhhdCB0aGUgcm93IGhhcyBjaGlsZHJlbiBhY2Nlc3NpYmxlIHZpYSBbY2hpbGREYXRhU291cmNlXS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhhc0NoaWxkcmVuS2V5OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciByb3cgaXMgbmF2aWdhdGFibGUuXG4gICAgICogUGFzcyBib29sZWFuIHZhbHVlIHRvIHNldCBzdGF0ZSBmb3IgdGhlIGFsbCByb3dzLlxuICAgICAqIFBhc3Mgc3RyaW5nIHZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHN0YXRlIGZvciBldmVyeSBzaW5nbGUgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZ2hsaWdodCBuYXZpZ2F0ZWQgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlnaGxpZ2h0TmF2aWdhdGVkUm93ID0gZmFsc2U7XG4gICAgLyoqIFdoZXRoZXIgdGFibGUgcm93IGNhbiBiZSBjbGlja2VkICovXG4gICAgQElucHV0KClcbiAgICByb3dzQWN0aXZhYmxlID0gZmFsc2U7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkS2V5OiBzdHJpbmc7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGFibGVLZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUcmFja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjaGVjayB0aGUgZGlmZmVyZW5jZXMgaW4gZGF0YSBjaGFuZ2VzLlxuICAgICAqIFVzZWQgc2ltaWxhcmx5IHRvIGBuZ0ZvcmAgYHRyYWNrQnlgIGZ1bmN0aW9uLlxuICAgICAqIEFjY2VwdHMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBwYXJhbWV0ZXJzLCBpbmRleCBhbmQgaXRlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxUPjtcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgdW5pcXVlbmVzcyBvZiBhIHBhcnRpY3VsYXIgcm93LlxuICAgICAqIFRhYmxlIGNvbXBvbmVudCB1c2VzIGl0IHRvIGJlIGFibGUgdG8gcHJlc2VydmUgc2VsZWN0aW9uIHdoZW4gYSBkYXRhIGxpc3QgaXMgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0NvbXBhcmF0b3I6IFJvd0NvbXBhcmF0b3I8VD47XG4gICAgLyoqIFN0cmluZyBvciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYWRkaXRpb25hbCByb3dzJyBDU1MgY2xhc3Nlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3NDbGFzczogVGFibGVSb3dDbGFzczxUPjtcbiAgICAvKiogVXNlZCB0byBjb25zdHJ1Y3QgZW1wdHkgcm93IG9iamVjdCBmb3IgZWRpdGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRhYmxlUm93U2tlbGV0b246IFQ7XG4gICAgLyoqIFdoZXRoZXIgYWxsIHJvd3Mgc2hvdWxkIGJlIGNvbGxhcHNlZCBieSBkZWZhdWx0IGFmdGVyIHRoZSB0YWJsZSBpcyBsb2FkZWQuICovXG4gICAgQElucHV0KClcbiAgICBleHBhbmRPbkluaXQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHJvdywgcmVxdWlyZWQgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLFxuICAgICAqIGRlZmF1bHQgaXMgNDRweCBpbiBjb3p5LCAzMnB4IGluIGNvbXBhY3QgYW5kIDI0cHggaW4gY29uZGVuc2VkIChzZXQgYXV0b21hdGljYWxseSlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbG9hZCBwcmV2aW91cyBwYWdlcy5cbiAgICAgKiBUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdoZW4gYHBhZ2VTY3JvbGxpbmdgIGlzIHRydWUsIGFuZCB0aGUgaW5pdGlhbCBwYWdlID4gMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFBhZ2VzQmVmb3JlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlVmFsdWUgPSBTZWxlY3Rpb25Nb2RlLk5PTkU7XG5cbiAgICAvKiogU2V0cyBzZWxlY3Rpb24gbW9kZSBmb3IgdGhlIHRhYmxlLiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgfCAnbm9uZScgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlOiBTZWxlY3Rpb25Nb2RlVmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duID0gdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSBTZWxlY3Rpb25Nb2RlLk5PTkU7XG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGlvbk1vZGUoKTogU2VsZWN0aW9uTW9kZVZhbHVlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbmFibGVUcmlzdGF0ZU1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBXaGVuIFRydWUsIHRoZSBjaGVja2VkIHN0YXRlIG9mIGVhY2ggdHJlZSBpdGVtIGRlcGVuZHMgb24gdGhlIGNoZWNrZWRcbiAgICAgKiAgc3RhdGUgb2YgaXRzIHBhcmVudCBvciBkaXJlY3QgY2hpbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZW5hYmxlVHJpc3RhdGVNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZVRyaXN0YXRlTW9kZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBlbmFibGVUcmlzdGF0ZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJlZVRhYmxlICYmIHRoaXMuX2VuYWJsZVRyaXN0YXRlTW9kZTtcbiAgICB9XG5cbiAgICAvKiogVmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGNvbXB1dGUgc2VtYW50aWMgc3RhdGUgb2YgdGhlIHJvdy4gICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VtYW50aWNIaWdobGlnaHRpbmcodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpO1xuICAgIH1cbiAgICBnZXQgc2VtYW50aWNIaWdobGlnaHRpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleSAmJiB0aGlzLl9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gREVGQVVMVF9ISUdITElHSFRJTkdfS0VZO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZm9yY2Ugcm93cyB0byBmb2xsb3cgJ2NoZWNrZWQgYWxsJyBzdGF0ZSBvZiB0aGUgdGFibGUuXG4gICAgICogSWYgdHJ1ZSwgYWxsIG5ldyByb3dzIHRoYXQgYXJlIGNvbWluZyBmcm9tIHRoZSBkYXRhU291cmNlIHdpbGwgZm9sbG93ICdjaGVja2VkIGFsbCcgc3RhdGUuXG4gICAgICogSWYgZmFsc2UsIHJvdyB3aWxsIHJlc3BlY3QgYGNoZWNrZWRLZXlgIHByb3BlcnR5IHRvIGRlZmluZSBjaGVja2VkIHN0YXRlIG9mIGl0c2VsZi5cbiAgICAgKiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9yY2VDaGVja2VkQWxsU3RhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgdmFsdWUgZm9yIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZENoZWNrTmV3Um93cyA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHJlc2V0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd1NlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8VD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAgICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudDxUPlxuICAgID4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0YWJsZSBzb3J0IG9yZGVyIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnRDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU29ydENoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRoZSB0YWJsZSBmaWx0ZXIgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZmlsdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVGaWx0ZXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgZ3JvdXBpbmcgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZ3JvdXBDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZUdyb3VwQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUdyb3VwQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdmlzaWJsZSBjb2x1bW5zIGxpc3QgaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjb2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5zQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHBhZ2luYXRpb24gc3RhdGUgaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgZnJvemVuIGNvbHVtbi4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjb2x1bW5GcmVlemU6IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5GcmVlemVFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBncm91cC90cmVlIHJvdyBjb2xsYXBzZWQvZXhwYW5kZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93VG9nZ2xlT3BlblN0YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1RvZ2dsZU9wZW5TdGF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHJvdyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd0FjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gcm93IG5hdmlnYXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dOYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGVtcHR5IHJvdyBhZGRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBlbXB0eVJvd0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHNhdmUgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZVJvd3NFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBjYW5jZWwgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGFibGUgYm9keSBiZWluZyBzY3JvbGxlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBuZXcgcm93cyBoYXMgYmVlbiBzZXQgYW5kIHJlbmRlcmVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRhYmxlUm93c1NldCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGV4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFsbFJvd3NFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGNvbGxhcHNlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhbGxSb3dzQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBjZWxsIGlzIGZvY3VzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2VsbEZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlU2Nyb2xsYWJsZScpXG4gICAgcmVhZG9ubHkgdGFibGVTY3JvbGxhYmxlOiBUYWJsZVNjcm9sbGFibGU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpXG4gICAgcmVhZG9ubHkgdGFibGVDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGZFRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSB0YWJsZTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzYWJsZUdyaWQ6IEZvY3VzYWJsZUdyaWREaXJlY3RpdmU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUJvZHknLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUJvZHk6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEbmRMaXN0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RuZERpcmVjdGl2ZTogTnVsbGFibGU8RG5kTGlzdERpcmVjdGl2ZTxUYWJsZVJvdz4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcbiAgICByZWFkb25seSBjb2x1bW5zOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihFZGl0YWJsZVRhYmxlQ2VsbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IGN1c3RvbUVkaXRhYmxlQ2VsbHM6IFF1ZXJ5TGlzdDxFZGl0YWJsZVRhYmxlQ2VsbD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFRBQkxFX1RPT0xCQVIpXG4gICAgcmVhZG9ubHkgdGFibGVUb29sYmFyOiBUYWJsZVRvb2xiYXJJbnRlcmZhY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaW5pdGlhbFNvcnRCeSgpOiBDb2xsZWN0aW9uU29ydFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFN0YXRlPy5pbml0aWFsU29ydEJ5ID8/IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb2x1bW5zIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIGdldCBfdmlzaWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnMkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb2x1bW5zIHRvIGJlIHJlbmRlcmVkIGFzIGEgcG9wLWluIGNvbHVtbnMuXG4gICAgICovXG4gICAgZ2V0IF9wb3BwaW5nQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlU2VydmljZS5wb3BwaW5nQ29sdW1ucyQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNUcmVlVGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5pc1RyZWVUYWJsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBlbmFibGVSb3dSZW9yZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZW5hYmxlUm93UmVvcmRlcmluZztcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgdGFibGUgcm93cyBhcmUgZHJhZ2dhYmxlLiAqL1xuICAgIGdldCBpc0RyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmlzVHJlZVRhYmxlICYmICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmVuYWJsZVJvd1Jlb3JkZXJpbmc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VtYW50aWNIaWdobGlnaHRpbmcgPyBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRIIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTdW0gb2Ygd2lkdGhzIG9mIGZpeGVkIGNvbHVtbnMgKHNlbWFudGljIGhpZ2hsaWdodGluZywgc2VsZWN0aW9uKSAqL1xuICAgIGdldCBfZml4ZWRDb2x1bW5zUGFkZGluZygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCArIHRoaXMuX3NlbGVjdGlvbkNvbHVtbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF90YWJsZVdpZHRoUHgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBsb2FkaW5nU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPz9cbiAgICAgICAgICAgICh0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl9pbnRlcm5hbExvYWRpbmdTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ludGVybmFsQ2hpbGRyZW5Mb2FkaW5nU3RhdGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9kbmRMb2FkaW5nU3RhdGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIGJlIHNob3duLFxuICAgICAqICBJZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSByb3dzIG9yIHZpc2libGUgY29sdW1uc1xuICAgICAqICBvciBzZWxlY3Rpb24gbW9kZSBpcyBub25lLCB0aGVuIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIG5vdCBiZSBzaG93bi5cbiAgICAgKiovXG4gICAgZ2V0IGlzU2VsZWN0aW9uQ29sdW1uU2hvd24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duICYmXG4gICAgICAgICAgICAhIXRoaXMuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FyaWFMYWJlbGxlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5hcmlhTGFiZWxsZWRCeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkQnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVUb29sYmFyPy50YWJsZVRvb2xiYXJUaXRsZUlkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlcHJlc2VudGF0aW9uIG9mIGNvbWJpbmVkIHRhYmxlIHJvd3MuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX3RhYmxlUm93czogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiB0YWJsZSByb3dzIHRoYXQgY2FtZSBmcm9tIGRhdGFTb3VyY2UuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX2RhdGFTb3VyY2VUYWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgYWRkZWQgdGFibGUgcm93cy5cbiAgICAgKi9cbiAgICBfbmV3VGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZpc2libGUgdGFibGUgcm93cy5cbiAgICAgKiBSb3dzIGxpc3QgdGhhdCBpcyB1c2VkIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB1aS5cbiAgICAgKiBCYXNlZCBvbiBfdGFibGVSb3dzIGFuZCBleGNsdWRlcyBoaWRkZW4gcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzVmlzaWJsZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUYWJsZSBDb2x1bW4gTWFwLiBXaGVyZSBrZXkgaXMgY29sdW1uIGtleSBhbmQgdmFsdWUgaXMgY29sdW1uXG4gICAgICovXG4gICAgX2tleVRvQ29sdW1uTWFwOiBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtbj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlc1xuICAgICAqL1xuICAgIF9mcmVlemFibGVDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGcmVlemFibGUgY29sdW1uIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGluZGV4ZXMgZm9yIGNvbHVtbnMgdGhhdCB3aWxsIGJlIGZyb3plbiB0byB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIF9mcmVlemFibGVFbmRDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYmxlQ29sdW1uc0xlbmd0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tlZFN0YXRlOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZS0tZ3JvdXAnKVxuICAgIF9pc0dyb3VwVGFibGUgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCB0byBjcmVhdGUgYSByb3cgY29tcG9uZW50IHBsYWNlaG9sZGVyIGFuZCBzZXQgZGF0YSBpbiBpdCByYXRoZXIgdGhhbiByZS1jcmVhdGUgdGhlIHJvdyBjb21wb25lbnQgd2hlbiBkYXRhIGNoYW5nZXMuXG4gICAgICogT3B0aW1pemVzIHBlcmZvcm1hbmNlIGR1ZSB0byBza2lwcGluZyBpbml0aWFsIHNldHVwIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlcjogbnVtYmVyW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlcjogVGFibGVSb3dbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90b29sYmFyQ29udGV4dDogVG9vbGJhckNvbnRleHQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSB0YWJsZUNvbHVtbnNTdHJlYW06IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbG9hZFByZXZpb3VzUGFnZXMgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ydGwgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kYXRhU291cmNlRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZTxUPj4oVGFibGVEYXRhU291cmNlRGlyZWN0aXZlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGluaXRpYWxTdGF0ZSA9IGluamVjdDxUYWJsZUluaXRpYWxTdGF0ZT4oRkRQX1RBQkxFX1NUQVRFX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVWaXJ0dWFsU2Nyb2xsPihGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZG5kVGFibGVEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVEcmFnZ2FibGU+KEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLy8ga2VlcGluZyBcImxvYWRpbmdcIiBmaWVsZCBwcml2YXRlIHRvIG1ha2Ugc3VyZSBcImxvYWRpbmdTdGF0ZVwiIGlzIHVzZWQgaW5zdGVhZFxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25GaWx0ZXJTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBhbGwgaXRlbXMgYXJlIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGF0IGxlYXN0IDEgaXRlbSBpcyBjaGVja2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hlY2tlZEFueSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0aWF0ZWQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc1dpZHRoU2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kbmRMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFByZXNldDogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQgPSB7fTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxTdGF0ZVNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0TWFudWFsbHlTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUhlYWRlclJlc2l6ZXIgPSBpbmplY3QoVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNYXBwaW5nIGZ1bmN0aW9uIGZvciB0aGUgdHJhY2tCeSwgcHJvdmlkZWQgYnkgdGhlIHVzZXIuXG4gICAgICogSXMgbmVlZGVkLCBiZWNhdXNlIHdlIGFyZSB3cmFwcGluZyB1c2VyIHN1cHBsaWVkIGRhdGEgaW50byBhIGBUYWJsZVJvd2AgY2xhc3MuXG4gICAgICovXG4gICAgX3Jvd1RyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxudW1iZXI+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPG51bWJlcj4gPSAoaW5kZXg6IG51bWJlcikgPT4gaW5kZXg7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcmVhZG9ubHkgX3RhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVNjcm9sbERpc3BhdGNoZXI6IFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBfdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlOiBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgICAgICByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmJhYmxlU2VydmljZTogVGFiYmFibGVFbGVtZW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5zZXRUYWJsZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuc2V0VGFibGUodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fcm93VHJhY2tCeSA9IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB0aGlzLl90b29sYmFyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUudG90YWxJdGVtcyQsXG4gICAgICAgICAgICBzb3J0YWJsZTogdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgZ3JvdXBhYmxlOiB0aGlzLl9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50YWJsZUNvbHVtbnNTdHJlYW0gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fcnRsU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ydGwgPSBpc1J0bDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbEZvY3VzZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxGb2N1c2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC4gKi9cbiAgICBnZXRSb3dzSW5WaWV3cG9ydCgpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydCBpbmRleCBvZiBhbGwgcm93cy5cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiB2aWV3cG9ydCByb3dzLlxuICAgICAqL1xuICAgIHNldFJvd3NJblZpZXdwb3J0KHN0YXJ0SW5kZXggPSAwLCBsZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXIgPSBuZXcgQXJyYXkobGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gaSArIHN0YXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlciA9IHRoaXMuX3RhYmxlUm93cy5zbGljZShzdGFydEluZGV4LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoJ2xvYWRpbmcnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZUxvYWRpbmcodGhpcy5sb2FkaW5nU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd0cmFja0J5JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dUcmFja0J5ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy50cmFja0J5ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gKGluZGV4KSA9PiB0aGlzLnRyYWNrQnkoaW5kZXgsIHRoaXMuX3RhYmxlUm93c1Zpc2libGVbaW5kZXhdLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hhbmdlcyBiZWxvdyBzaG91bGQgYmUgY2hlY2tlZCBvbmx5IGFmdGVyIHZpZXcgaXMgaW5pdGlhbGl6ZWRcbiAgICAgICAgaWYgKCF0aGlzLl92aWV3SW5pdGlhdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3NlbGVjdGlvbk1vZGUnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICdzZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplRW5kQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnc2VtYW50aWNIaWdobGlnaHRpbmcnIGluIGNoYW5nZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dOYXZpZ2F0YWJsZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLmZvckVhY2goKHJvdykgPT4gKHJvdy5uYXZpZ2F0YWJsZSA9IGlzUm93TmF2aWdhdGFibGUocm93LnZhbHVlLCB0aGlzLnJvd05hdmlnYXRhYmxlKSkpO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dIZWlnaHQnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0hlaWdodE1hbnVhbGx5U2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRUYWJsZVJlZih0aGlzKTtcblxuICAgICAgICB0aGlzLl9pc0dyb3VwVGFibGUgPSAodGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxHcm91cEJ5Py5sZW5ndGggPz8gMCkgPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3SW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pbml0aWFsaXplRGF0YVNvdXJjZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb25zdHJ1Y3RUYWJsZU1ldGFkYXRhKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk7XG5cbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8ubGlzdGVuT25WaXJ0dWFsU2Nyb2xsKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUNvbnRhaW5lck1vdXNlTGVhdmUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZE9uSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbFRyYW5zZm9ybSRcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gISF0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsICYmICEhdGhpcy5fdGFibGVCb2R5KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh0cmFuc2Zvcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHt0cmFuc2Zvcm19cHgpYDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2FibGVHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkLnNob3J0Um93Rm9jdXMgPSAnZmlyc3QnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIC8vIFdoZW4gdGFibGUgcm93cyBhcmUgc2V0LCBlbWl0IGFuIGV2ZW50IHRvIG1hbmlwdWxhdGUgdGhlIHZpZXcgKGUuZy4sIHNjcm9sbCB0byBzb21lIHJvdykuXG4gICAgICAgIGlmICghdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gdGhpcy50YWJsZVJvd3NTZXQ7XG4gICAgICAgIHRoaXMuX29uWm9uZUZyZWUoKCkgPT4ge1xuICAgICAgICAgICAgZW1pdHRlci5lbWl0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0LiAqL1xuICAgIGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBsaXN0IG9mIHZpc2libGUgdGFibGUgY29sdW1ucy4gKi9cbiAgICBnZXRWaXNpYmxlVGFibGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIFNldCBTb3J0aW5nIHJ1bGVzICovXG4gICAgc29ydChzb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQoc29ydFJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEZpbHRlciBydWxlcyAqL1xuICAgIGZpbHRlcihmaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRGaWx0ZXJzKGZpbHRlclJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgRmlsdGVyIHJ1bGUgKi9cbiAgICBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkRmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBmaWx0ZXJzIGZvciB0aGUgcHJvdmlkZWQgZmllbGRzICovXG4gICAgcmVtb3ZlRmlsdGVyKGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnJlbW92ZUZpbHRlcnMoZmllbGRzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgR3JvdXBzICovXG4gICAgZ3JvdXAoZ3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEdyb3VwcyAqL1xuICAgIGFkZEdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHZpc2libGUgdGFibGUgY29sdW1uc1xuICAgICAqIFRoZSBvcmRlciBpcyBtYXR0ZXJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyB0YWJsZSBjb2x1bW5zIG5hbWVzXG4gICAgICovXG4gICAgc2V0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCBjb2x1bW5zT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRhYmxlQ29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzYW1lIG9yZGVyIG9mIGNvbHVtbnMgYXMgdXNlciBkZWZpbmVkLlxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbHVtbnMuaW5kZXhPZihhLm5hbWUpIC0gY29sdW1ucy5pbmRleE9mKGIubmFtZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGFjYy5jb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgICAgIGFjYy5rZXlzLnB1c2goY29sdW1uLmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGNvbHVtbnNPYmplY3QpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q29sdW1ucyhjb2x1bW5zT2JqZWN0LmNvbHVtbnMsIGNvbHVtbnNPYmplY3Qua2V5cyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRnJlZXplIHRhYmxlIHRvIGNvbHVtbiAqL1xuICAgIGZyZWV6ZVRvQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBlbmQgPyAodGhpcy5mcmVlemVFbmRDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKSA6ICh0aGlzLmZyZWV6ZUNvbHVtbnNUbyA9IGNvbHVtbk5hbWUpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhjb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICB1bmZyZWV6ZShjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVuZCA/IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgOiB0aGlzLl9mcmVlemFibGVDb2x1bW5zO1xuICAgICAgICBjb25zdCBmcmVlemVUb0NvbHVtbkluZGV4ID0gY29sdW1ucy5nZXQoY29sdW1uTmFtZSkgPz8gLTE7XG4gICAgICAgIGNvbnN0IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lID0gY29sdW1uc1tmcmVlemVUb0NvbHVtbkluZGV4IC0gMV07XG5cbiAgICAgICAgZW5kXG4gICAgICAgICAgICA/ICh0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyA9IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lKVxuICAgICAgICAgICAgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmZyZWV6ZVRvKGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBleHBhbmQgYWxsIHJvd3MgKi9cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGFibGVSb3dzID0gdGhpcy5fdGFibGVSb3dzLmZpbHRlcigocm93KSA9PiByb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLlRSRUUpO1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKGV4cGFuZGFibGVSb3dzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXJrQXNFeHBhbmRlZChleHBhbmRhYmxlUm93cyk7XG4gICAgICAgIHRoaXMuYWxsUm93c0V4cGFuZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcmtBc0V4cGFuZGVkKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgcm93cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBjb2xsYXBzZSBhbGwgcm93cyAqL1xuICAgIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGUucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5hbGxSb3dzQ29sbGFwc2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGluIHRhYmxlICovXG4gICAgc2VhcmNoKHNlYXJjaElucHV0OiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2VhcmNoKHNlYXJjaElucHV0KTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZWFyY2ggaW4gdGFibGUgKi9cbiAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBTb3J0IFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd1NvcnRTZXR0aW5nc0luVG9vbGJhcihzaG93U29ydFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Tb3J0U2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd1NvcnRTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgRmlsdGVyIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0ZpbHRlclNldHRpbmdzSW5Ub29sYmFyKHNob3dGaWx0ZXJTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0ZpbHRlclNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBHcm91cCBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dHcm91cFNldHRpbmdzSW5Ub29sYmFyKHNob3dHcm91cFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJC5uZXh0KHNob3dHcm91cFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBDb2x1bW5zIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0NvbHVtblNldHRpbmdzSW5Ub29sYmFyKHNob3dDb2x1bW5TZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0NvbHVtblNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXIgZnJvbSBjb2x1bW4gaGVkZXIgbWVudSAqL1xuICAgIHNldEhlYWRlckNvbHVtbkZpbHRlcmluZ0Rpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNGaWx0ZXJpbmdGcm9tSGVhZGVyRGlzYWJsZWQkLm5leHQoZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgc2V0Um93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyLCByb3dOYXZpZ2F0YWJsZTogc3RyaW5nIHwgYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKHJvdy52YWx1ZSwgcm93TmF2aWdhdGFibGUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSByb3cgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXggSW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKi9cbiAgICB0b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdyB8fCByb3cudmFsdWVbdGhpcy5zZWxlY3RhYmxlS2V5XSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KHJvdyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVNdWx0aVNlbGVjdFJvdyhyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hlY2tlZCBzdGF0ZSBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBJbmRleCBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKi9cbiAgICBzZXRSb3dDaGVja2VkU3RhdGUocm93SW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdy5jaGVja2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgcmVtb3ZlUm93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5uYXZpZ2F0YWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB0cmlnZ2VycyBjb2x1bW4ncyB3aWR0aCByZWNhbGN1bGF0aW9uICovXG4gICAgcmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2Uuc2V0Q29sdW1uTmFtZXModGhpcy5fdmlzaWJsZUNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKSk7XG4gICAgICAgIHRoaXMuX3NldEZyZWV6YWJsZUluZm8oKTtcbiAgICB9XG5cbiAgICAvKiogR2V0cyB0aGUgbWF4IGFsbG93ZWQgd2lkdGggZm9yIGFsbCBmcmVlemFibGUgY29sdW1ucyAqL1xuICAgIGdldE1heEFsbG93ZWRGcmVlemFibGVDb2x1bW5zV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFRoZW1lYWJsZSBzY3JvbGxiYXIgaGFzIDAuNzVyZW0gaW4gZGltZW5zaW9uICovXG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemVJblB4ID0gMTI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlV2lkdGhQeCAtIHRoaXMuX2ZpeGVkQ29sdW1uc1BhZGRpbmcgLSBzY3JvbGxiYXJTaXplSW5QeCAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0YWJsZSBkYXRhIHNvdXJjZSAqL1xuICAgIGdldERhdGFTb3VyY2UoKTogVGFibGVEYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGVtcHR5IHJvdyBmb3IgZWRpdGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIGFkZFJvdygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93ID0gYnVpbGROZXdSb3dTa2VsZXRvbih0aGlzLmVkaXRhYmxlUm93U2tlbGV0b24sIHRoaXMuY29sdW1ucy50b0FycmF5KCkpO1xuICAgICAgICBuZXdSb3dbdGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZ10gPSBFRElUQUJMRV9ST1dfU0VNQU5USUNfU1RBVEU7XG5cbiAgICAgICAgdGhpcy5fYWRkZWRJdGVtcy51bnNoaWZ0KG5ld1Jvdyk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93cyA9IHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKFtuZXdSb3ddKTtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gWy4uLm5ld1Jvd3MsIC4uLnRoaXMuX25ld1RhYmxlUm93c107XG5cbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuZW1wdHlSb3dBZGRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIENhbmNlbHMgZWRpdGluZyBhbmQgZGlzY2FyZHMgbmV3bHkgYWRkZWQgcm93cyAqL1xuICAgIGNhbmNlbEVkaXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0RWRpdFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzYXZlIGV2ZW50IGFuZCByZXNldHMgZWRpdGFibGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBzYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2F2ZVJvd3NFdmVudDxUPigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2godGhpcy5nZXRUYWJsZVN0YXRlKCkpO1xuICAgICAgICB9LCBbLi4udGhpcy5fYWRkZWRJdGVtc10pO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGxzOiBFZGl0YWJsZVRhYmxlQ2VsbFtdID0gKFtdIGFzIEVkaXRhYmxlVGFibGVDZWxsW10pLmNvbmNhdC5hcHBseShcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl90YWJsZVJvd1NlcnZpY2UuZWRpdGFibGVDZWxscy52YWx1ZXMoKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmb3JtcyA9IFsuLi50aGlzLmN1c3RvbUVkaXRhYmxlQ2VsbHMudG9BcnJheSgpLCAuLi5lZGl0YWJsZUNlbGxzXS5tYXAoKHQpID0+IHQuZm9ybSk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBmb3JtIHJldmFsaWRhdGlvblxuICAgICAgICBmb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiBmb3JtLm9uU3VibWl0KG51bGwgYXMgYW55KSk7XG4gICAgICAgIGlmIChmb3Jtcy5zb21lKChmb3JtKSA9PiBmb3JtLmludmFsaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZXNldEVkaXRTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNhdmUuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY3VycmVudCBwcmVzZXQgZm9yIHRoZSBUYWJsZS4gKi9cbiAgICBzZXRQcmVzZXQoZGF0YTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFByZXNldCA9IGRhdGE7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlOiBUYWJsZVN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdGFibGVTZXJ2aWNlLmdldERlZmF1bHRTdGF0ZSgpLCBkYXRhKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQobmV3U3RhdGUuc29ydEJ5KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEZpbHRlcnMobmV3U3RhdGUuZmlsdGVyQnkpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKG5ld1N0YXRlLmdyb3VwQnkpO1xuICAgICAgICB0aGlzLnNldENvbHVtbnMobmV3U3RhdGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZWFyY2gobmV3U3RhdGUuc2VhcmNoSW5wdXQpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZnJlZXplVG8obmV3U3RhdGUuZnJlZXplVG9Db2x1bW4pO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gbmV3U3RhdGUucGFnZS5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEN1cnJlbnRQYWdlKG5ld1N0YXRlLnBhZ2UuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbi4gKi9cbiAgICBnZXRDdXJyZW50UHJlc2V0KCk6IFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50UHJlc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbmVlZCB0byByZXR1cm4gb2JqZWN0IGFzIHNpbWlsYXIgYXMgdGhlIG9yaWdpbmFsIHByZXNldC5cbiAgICAgICAgY29uc3QgY3VycmVudFByZXNldCA9IHsgLi4udGhpcy5fY3VycmVudFByZXNldCB9O1xuICAgICAgICBjb25zdCBwcmVzZXRLZXlzID0gT2JqZWN0LmtleXMoY3VycmVudFByZXNldCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRTdGF0ZSkuZm9yRWFjaCgoc3RhdGVLZXkpID0+IHtcbiAgICAgICAgICAgIC8vIFNraXAgc3RhdGUgZW50cnkgaWYgaXQncyBub3QgcHJlc2VudCBpbiBwcmVzZXQgYW5kIGRvZXNuJ3QgaGF2ZSBhbnkgdmFsdWUuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RhdGVLZXkgPT09ICdjb2x1bW5LZXlzJyB8fFxuICAgICAgICAgICAgICAgICgoIWN1cnJlbnRTdGF0ZVtzdGF0ZUtleV0gfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY3VycmVudFN0YXRlW3N0YXRlS2V5XSkgJiYgY3VycmVudFN0YXRlW3N0YXRlS2V5XT8ubGVuZ3RoID09PSAwKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXByZXNldEtleXMuaW5jbHVkZXMoc3RhdGVLZXkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50UHJlc2V0W3N0YXRlS2V5XSA9IGN1cnJlbnRTdGF0ZVtzdGF0ZUtleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50UHJlc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHRyaWdnZXJzIGxpc3QgaXRlbSBldmVudCBsaXN0ZW5lcnMgZm9yIGRyYWcmZHJvcCBsaXN0IGRpcmVjdGl2ZS5cbiAgICAgKi9cbiAgICByZWZyZXNoRG5kTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kbmREaXJlY3RpdmU/LnJlZnJlc2hRdWVyeUxpc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHRvZ2dsZXMgYGV4cGFuZGAgc3RhdGUgb2YgdGhlIHJvdyB3aXRoIGRlZmluZWQgaW5kZXguXG4gICAgICogQHBhcmFtIHJvd0luZGV4ZXMgcm93IGluZGV4ZXMgaW5jbHVkaW5nIG5lc3RlZCByb3dzLlxuICAgICAqXG4gICAgICogVXNhZ2UgZXhhbXBsZTpcbiAgICAgKiAqIFRvIHRvZ2dsZSBmaXJzdCBsZXZlbCByb3csIHBhc3Mgb25lIGFyZ3VtZW50OlxuICAgICAqIGBgYFxuICAgICAqIHRhYmxlLnRvZ2dsZUdyb3VwUm93cygwKSAvLyBXaWxsIHJlc3VsdCBpbiB0b2dnbGluZyBmaXJzdCByb3cgaWYgaXQncyB0eXBlIGlzIGBUYWJsZVJvd1R5cGUuVFJFRWAgb3IgYFRhYmxlUm93VHlwZS5HUk9VUGAuXG4gICAgICogYGBgXG4gICAgICogKiBUbyB0b2dnbGUgbmVzdGVkIHJvd3MsIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgb2YgaW5kZXhlczpcbiAgICAgKiBgYGBcbiAgICAgKiB0YWJsZS50b2dnbGVHcm91cFJvd3MoMCwgMSkgLy8gV2lsbCByZXN1bHQgaW4gdG9nZ2xpbmcgZmlyc3Qgcm9vdCByb3csIHRoZW4gaXQncyBzZWNvbmQgY2hpbGQuXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdG9nZ2xlR3JvdXBSb3dzKC4uLnJvd0luZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGxldCB0YWJsZVJvdzogVGFibGVSb3cgfCBudWxsID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCByb3dJbmRleCBvZiByb3dJbmRleGVzKSB7XG4gICAgICAgICAgICB0YWJsZVJvdyA9IHRhYmxlUm93ID8gdGFibGVSb3cuY2hpbGRyZW5bcm93SW5kZXhdIDogdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICAgICAgaWYgKHRhYmxlUm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHRhYmxlUm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZm9jdXMgYSBjZWxsIGluIHRoZSB0YWJsZSB1dGlsaXppbmcgYSBGb2N1c2FibGVDZWxsUG9zaXRpb24gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZvY3VzQ2VsbChwb3NpdGlvbjogRm9jdXNhYmxlQ2VsbFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlRWwgPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgICAgdGFibGVFbC5yb3dzW3Bvc2l0aW9uLnJvd0luZGV4XS5jZWxsc1twb3NpdGlvbi5jb2xJbmRleF0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlIEFQSVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbChcbiAgICAgICAgICAgIHRoaXMuX3J0bCxcbiAgICAgICAgICAgIHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSxcbiAgICAgICAgICAgIHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NhbGN1bGF0aW5nTG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RuZExvYWRpbmdTdGF0ZSA9PT0gaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kbmRMb2FkaW5nU3RhdGUgPSBpc0xvYWRpbmc7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZUxvYWRpbmcodGhpcy5sb2FkaW5nU3RhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2dnbGUgc2VsZWN0YWJsZSByb3cgaW4gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRVxuICAgICAqL1xuICAgIF90b2dnbGVNdWx0aVNlbGVjdFJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3csIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHNlbGVjdGlvbiBtb2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IChyb3dUb1RvZ2dsZS5jaGVja2VkID0gIXJvd1RvVG9nZ2xlLmNoZWNrZWQpO1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5fdGFibGVSb3dzO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fdGFibGVSb3dzLmZpbmRJbmRleCgocm93KSA9PiByb3cgPT09IHJvd1RvVG9nZ2xlKTtcblxuICAgICAgICBjb25zdCByZW1vdmVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3Iub25SYW5nZUVsZW1lbnRUb2dnbGVkKHNlbGVjdGVkSW5kZXgsIGV2ZW50IGFzIFBvaW50ZXJFdmVudCB8IEtleWJvYXJkRXZlbnQpO1xuXG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IuYXBwbHlWYWx1ZVRvRWFjaEluUmFuZ2UoKGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tpZHhdO1xuICAgICAgICAgICAgaWYgKHJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuSVRFTSB8fCByb3cuaXNUcmVlKSB7XG4gICAgICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgICAgIGNoZWNrZWQgPyBhZGRlZC5wdXNoKHJvdykgOiByZW1vdmVkLnB1c2gocm93KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VHJpc3RhdGVTZWxlY3Rpb24ocm93LCBhZGRlZCwgcmVtb3ZlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZCwgcmVtb3ZlZCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2dnbGUgc2VsZWN0YWJsZSByb3cgaW4gU2VsZWN0aW9uTW9kZS5TSU5HTEVcbiAgICAgKi9cbiAgICBfdG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3cpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gU2VsZWN0aW9uTW9kZS5TSU5HTEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZWxlY3Rpb24gbW9kZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IChyb3dUb1RvZ2dsZS5jaGVja2VkID0gIXJvd1RvVG9nZ2xlLmNoZWNrZWQpO1xuICAgICAgICBjb25zdCByZW1vdmVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkOiBUYWJsZVJvdzxUPltdID0gW107XG5cbiAgICAgICAgLy8gdW5jaGVjayBwcmV2aW91c2x5IGNoZWNrZWRcbiAgICAgICAgZ2V0U2VsZWN0YWJsZVJvd3ModGhpcy5fdGFibGVSb3dzLCB0aGlzLnNlbGVjdGFibGVLZXkpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKHJvdyA9PT0gcm93VG9Ub2dnbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyb3cuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjaGVja2VkID8gYWRkZWQucHVzaChyb3dUb1RvZ2dsZSkgOiByZW1vdmVkLnB1c2gocm93VG9Ub2dnbGUpO1xuXG4gICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZCwgcmVtb3ZlZCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3QgLyBVbnNlbGVjdCBhbGwgc2VsZWN0YWJsZSByb3dzXG4gICAgICovXG4gICAgX3RvZ2dsZUFsbFNlbGVjdGFibGVSb3dzKHNlbGVjdEFsbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkOiBUYWJsZVJvdzxUPltdID0gW107XG5cbiAgICAgICAgZ2V0U2VsZWN0YWJsZVJvd3ModGhpcy5fdGFibGVSb3dzLCB0aGlzLnNlbGVjdGFibGVLZXkpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKHJvdy5jaGVja2VkID09PSBzZWxlY3RBbGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cuY2hlY2tlZCA9IHNlbGVjdEFsbDtcbiAgICAgICAgICAgIHNlbGVjdEFsbCA/IGFkZGVkLnB1c2gocm93KSA6IHJlbW92ZWQucHVzaChyb3cpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG5cbiAgICAgICAgdGhpcy5fc2hvdWxkQ2hlY2tOZXdSb3dzID0gc2VsZWN0QWxsO1xuXG4gICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZCwgcmVtb3ZlZCwgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDcmVhdGUgdGFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAqL1xuICAgIF9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQ6IFRhYmxlUm93W10sIHJlbW92ZWQ6IFRhYmxlUm93W10sIGFsbDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZ2V0U2VsZWN0YWJsZVJvd3ModGhpcy5fdGFibGVSb3dzLCB0aGlzLnNlbGVjdGFibGVLZXkpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGNoZWNrZWQgfSkgPT4gY2hlY2tlZClcbiAgICAgICAgICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuXG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgICAgIGFkZGVkOiBhZGRlZC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgcmVtb3ZlZDogcmVtb3ZlZC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgaW5kZXg6IGFkZGVkLmNvbmNhdChyZW1vdmVkKS5tYXAoKHsgaW5kZXggfSkgPT4gaW5kZXgpLFxuICAgICAgICAgICAgYWxsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uQ2VsbENsaWNrKGNvbElkeDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChyb3cuc3RhdGUgPT09ICdyZWFkb25seScgJiYgaXNUcmVlUm93Rmlyc3RDZWxsKGNvbElkeCwgcm93KSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlR3JvdXBSb3cocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uUm93Q2xpY2socm93OiBUYWJsZVJvdzxUPiB8IG51bGwsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5zdGF0ZSAhPT0gJ3JlYWRvbmx5Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHRhYmJhYmxlRWxlbWVudCA9IHRoaXMuX3RhYmJhYmxlU2VydmljZS5nZXRUYWJiYWJsZUVsZW1lbnQoZXZlbnRUYXJnZXQsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICh0YWJiYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dOYXZpZ2F0ZShyb3cpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdFJvd0FjdGl2YXRlKHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lbWl0Um93QWN0aXZhdGUocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm93c0FjdGl2YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICAgICAgICB0aGlzLnJvd0FjdGl2YXRlLmVtaXQobmV3IFRhYmxlUm93QWN0aXZhdGVFdmVudDxUPihyb3dJbmRleCwgcm93LnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEV4cGFuZC9Db2xsYXBzZSBncm91cCByb3dcbiAgICAgKi9cbiAgICBfdG9nZ2xlR3JvdXBSb3coZ3JvdXBSb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BJblByb2dyZXNzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGFibGVUYWJsZVJvdyhncm91cFJvdyk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXBSb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKGdyb3VwUm93KTtcbiAgICAgICAgdGhpcy5yb3dUb2dnbGVPcGVuU3RhdGUuZW1pdChcbiAgICAgICAgICAgIG5ldyBUYWJsZVJvd1RvZ2dsZU9wZW5TdGF0ZUV2ZW50KGdyb3VwUm93SW5kZXgsIGdyb3VwUm93LnZhbHVlLCBncm91cFJvdy5leHBhbmRlZClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lbWl0Um93TmF2aWdhdGUocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAoIXJvdy5uYXZpZ2F0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2Yocm93KTtcblxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHROYXZpZ2F0ZWRSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuX25hdmlnYXRlZFJvd0luZGV4ID0gcm93SW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvd05hdmlnYXRlLmVtaXQobmV3IFRhYmxlUm93QWN0aXZhdGVFdmVudDxUPihyb3dJbmRleCwgcm93LnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGRhdGEgc291cmNlIGRhdGEuICovXG4gICAgZmV0Y2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZS5mZXRjaCh0aGlzLmdldFRhYmxlU3RhdGUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRhYmxlUm93c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVUYWJsZVJvd3MoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9nZ2xlRXhwYW5kYWJsZVRhYmxlUm93KHJvd1RvVG9nZ2xlOiBUYWJsZVJvdywgZm9yY2VGZXRjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHJvd1RvVG9nZ2xlLmZvcmNlRmV0Y2ggPSBmb3JjZUZldGNoO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IChyb3dUb1RvZ2dsZS5leHBhbmRlZCA9ICFyb3dUb1RvZ2dsZS5leHBhbmRlZCk7XG5cbiAgICAgICAgZmluZFJvd0NoaWxkcmVuKHJvd1RvVG9nZ2xlLCB0aGlzLl90YWJsZVJvd3MpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGlzIGNvbGxhcHNlZCB3ZSB3YW50IHRvIGhpZGUgYWxsIG5lc3RlZCBpdGVtc1xuICAgICAgICAgICAgaWYgKCFleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJvdy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBwYXJlbnQgaXMgZXhwYW5kZWQsIHdlIHdhbnQgdG8gc2hvdyBvbmx5IGl0ZW1zIHdoaWNoIGRpcmVjdCBwYXJlbnRzIGFyZSBleHBhbmRlZCBhcyB3ZWxsXG4gICAgICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gIWdldFJvd1BhcmVudHMocm93LCByb3dUb1RvZ2dsZSkuZXZlcnkoKHBhcmVudCkgPT4gcGFyZW50LmV4cGFuZGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblNweUludGVyc2VjdChpbnRlcnNlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWludGVyc2VjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFnZTogeyBjdXJyZW50UGFnZSwgcGFnZVNpemUgfVxuICAgICAgICB9ID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbXMgPSB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLnRvdGFsSXRlbXMkLnZhbHVlO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguY2VpbCh0b3RhbEl0ZW1zIC8gKHBhZ2VTaXplIHx8IHRvdGFsSXRlbXMpKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlID49IGxhc3RQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB1cGRhdGUgaW5kZXggYWZ0ZXIgd2UgYWRkIG5ldyBpdGVtcyB0byB0aGUgbWFpbiBhcnJheSAqL1xuICAgIHByaXZhdGUgX3JlSW5kZXhUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChyb3cuaW5kZXggPSBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBSZXNldCB0YWJsZSB3aGVuIHRoZSBkYXRhIHNvdXJjZSBpcyBjaGFuZ2VkLFxuICAgICAgICAgICAgICogYmVjYXVzZSBuZXcgZGF0YSBzb3VyY2UgY2FuIGhhdmUgZGlmZmVyZW50IHNldCBvZiBkYXRhXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoW10pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLml0ZW1zJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBtYXAgc291cmNlIGl0ZW1zIHRvIHRhYmxlIHJvd3NcbiAgICAgICAgICAgICAgICAgICAgbWFwKChzb3VyY2U6IFRbXSkgPT4gdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlKSksXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBpdGVtcyB0byBzaG93IGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJvd3M6IFRhYmxlUm93W10pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVHJlZVRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvZihyb3dzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fdGFibGVTZXJ2aWNlLmdyb3VwUnVsZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChncm91cFJ1bGVzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuZ3JvdXBUYWJsZVJvd3Mocm93cywgZ3JvdXBSdWxlcy52YWx1ZXMoKSwgZ3JvdXBSdWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocm93cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByb3dzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNjcm9sbGluZyAmJiB0aGlzLmdldFRhYmxlU3RhdGUoKS5wYWdlLmN1cnJlbnRQYWdlID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWy4uLnRoaXMuX3RhYmxlUm93cywgLi4ucm93c11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhyb3dzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGRJdGVtcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TWFwID0gbmV3IE1hcDxUYWJsZVJvdzxUPiwgVGFibGVSb3c8VD5bXT4oKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgocm93SXRlbXMsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93TWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMocm93SXRlbXMpLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnRSb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZXZlbCA9IHBhcmVudFJvdy5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhcGFyZW50Um93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93TWFwO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd3MsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3Muc3BsaWNlKHBhcmVudFJvdy5pbmRleCArIHBhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggKyAxLCAwLCAuLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cuY2hpbGRyZW4ucHVzaCguLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cubGFzdENoaWxkID0gcGFyZW50Um93LmNoaWxkcmVuW3BhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlU3RhdGVDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2V0Q2hhbmdlZC5lbWl0KHRoaXMuZ2V0Q3VycmVudFByZXNldCgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm5lZWRGZXRjaCRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX3RhYmxlU2VydmljZS5nZXRUYWJsZVN0YXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiAhIXN0YXRlICYmICEhdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2goc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlcyQuc3Vic2NyaWJlKChydWxlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzR3JvdXBUYWJsZSA9IHJ1bGVzLnNpemUgPiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zdGF0ZUNoYW5nZSQuc3Vic2NyaWJlKCh7IHR5cGUsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ2hhbmdlLmVtaXQobmV3IFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQobmV3IFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmcmVlemUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GcmVlemUuZW1pdChuZXcgVGFibGVDb2x1bW5GcmVlemVFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlLmVtaXQobmV3IFRhYmxlR3JvdXBDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQobmV3IFRhYmxlUGFnZUNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXcgVGFibGVTb3J0Q2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd1N0YXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93U3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzJC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlPy5kYXRhUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yb3dDaGlsZHJlbkNvdW50KHJvdywgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGNvdW50KSA9PiByb3cuZm9yY2VGZXRjaCB8fCBjb3VudCA+IHJvdy5jaGlsZHJlbi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocm93LmZvcmNlRmV0Y2ggPSBmYWxzZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHJvdy5jaGlsZHJlbi5sZW5ndGggLyBzdGF0ZS5wYWdlLnBhZ2VTaXplKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2UucGFnZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2U/LmZldGNoKHJvd1N0YXRlLCBbcm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DZWxsQ2xpY2soZXZ0LmluZGV4LCBldnQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MoZXZ0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93JC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlUm93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZU11bHRpU2VsZWN0Um93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KGV2dC5yb3csIGV2dC5ldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZTogVFtdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgICAgIGxldCByb3dzOiBUYWJsZVJvdzxUPltdO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkge1xuICAgICAgICAgICAgcm93cyA9IHRoaXMuX2NyZWF0ZVRyZWVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93cyA9IGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd05hdmlnYXRhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb21wYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyAmJiB0aGlzLmZvcmNlQ2hlY2tlZEFsbFN0YXRlKSB7XG4gICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gcm93LmNoZWNrZWQgfHwgdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVUcmVlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlOiBUW10pOiBUYWJsZVJvdzxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGlzVGFibGVSb3coaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdChzb3VyY2UgYXMgVGFibGVSb3dbXSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHRoaXMucm93Q29tcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkU3RhdGVLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dOYXZpZ2F0YWJsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRUYWJsZVJvd3Mocm93cyA9IHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFsuLi50aGlzLl9uZXdUYWJsZVJvd3MsIC4uLnRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3NdO1xuICAgICAgICB0aGlzLl9yZUluZGV4VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcblxuICAgICAgICB0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoICYmICF0aGlzLl9jb2x1bW5zV2lkdGhTZXQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zV2lkdGhTZXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZpc2libGVUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93c1Zpc2libGUgPSB0aGlzLl90YWJsZVJvd3MuZmlsdGVyKChyb3cpID0+ICFyb3cuaGlkZGVuKTtcbiAgICAgICAgaWYgKHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUuY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Um93c0luVmlld3BvcnQoMCwgdGhpcy5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1Jvd0hlaWdodENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gQXJyYXkuZnJvbShST1dfSEVJR0hULnZhbHVlcygpKS5pbmNsdWRlcyh0aGlzLnJvd0hlaWdodCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuX3Jvd0hlaWdodE1hbnVhbGx5U2V0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChjb250ZW50RGVuc2l0eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KGNvbnRlbnREZW5zaXR5KSA/PyBST1dfSEVJR0hULmdldChDb250ZW50RGVuc2l0eU1vZGUuQ09aWSkhO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5yb3dIZWlnaHQgPSB0aGlzLnJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUuY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICYmICFwcmV2Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpXG4gICAgICAgICAgICAgICAgLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlQ29sdW1ucyA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpLmNvbHVtbnM7XG5cbiAgICAgICAgICAgIHRoaXMuX2J1aWxkQ29sdW1uc01hcChjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLm5leHQoY29sdW1ucyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsU3RhdGVTZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbHVtbnMoWy4uLnN0YXRlQ29sdW1ucywgLi4ubmV3Q29sdW1uc10pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsU3RhdGVTZXQgPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWwodXBkYXRlZENvbHVtbnMsIGN1cnJlbnRDb2x1bW5zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zdGF0ZUNoYW5nZSQubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHsgcHJldmlvdXM6IGN1cnJlbnRDb2x1bW5zLCBjdXJyZW50OiB1cGRhdGVkQ29sdW1ucyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmNvbHVtbnNDaGFuZ2UkLm5leHQoeyBwcmV2aW91czogY3VycmVudENvbHVtbnMsIGN1cnJlbnQ6IHVwZGF0ZWRDb2x1bW5zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IHZpc2libGUgY29sdW1ucyBmb3IgcmVuZGVyaW5nIHB1cnBvc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBncm91cEJ5IH0gPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnNUb0hpZGUgPSBncm91cEJ5LmZpbHRlcigoeyBzaG93QXNDb2x1bW4gfSkgPT4gIXNob3dBc0NvbHVtbikubWFwKCh7IGZpZWxkIH0pID0+IGZpZWxkKTtcblxuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gY29sdW1ucyAvLyBuZWVkIHRvIHN0YXJ0IG1hcHBpbmcgZnJvbSBzdGF0ZS5jb2x1bW5zIGxpc3QgdG8ga2VlcCByaWdodCBvcmRlclxuICAgICAgICAgICAgLm1hcCgobmFtZSkgPT4gY29sdW1uc0RlZmluaXRpb24uZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSkpXG4gICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pOiBjb2x1bW4gaXMgVGFibGVDb2x1bW4gPT4gISFjb2x1bW4pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGtleSB9KSA9PiAhZ3JvdXBlZENvbHVtbnNUb0hpZGUuaW5jbHVkZXMoa2V5KSk7XG5cbiAgICAgICAgY29uc3QgW3Zpc2libGVDb2x1bW5zLCBwb3BwaW5nQ29sdW1uc10gPSBhbGxDb2x1bW5zLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ucmVzcG9uc2l2ZVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2NbY29sdW1uLnJlc3BvbnNpdmVTdGF0ZSA9PT0gJ3Zpc2libGUnID8gMCA6IDFdLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtbXSwgW11dIGFzIFRhYmxlQ29sdW1uW11bXVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRWaXNpYmxlQ29sdW1ucyh2aXNpYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRQb3BwaW5nQ29sdW1ucyhwb3BwaW5nQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVUYWJsZUNvbHVtbnNMZW5ndGgoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVRhYmxlQ29sdW1uc0xlbmd0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5zTGVuZ3RoID0gdGhpcy5fdmlzaWJsZUNvbHVtbnMubGVuZ3RoICsgKHRoaXMuX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPyAxIDogMCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9pc1Nob3duTmF2aWdhdGlvbkNvbHVtbiQubmV4dCh0aGlzLl90YWJsZVJvd3Muc29tZSgodGFibGVSb3cpID0+IHRhYmxlUm93Lm5hdmlnYXRhYmxlKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRGcmVlemFibGVJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mcmVlemFibGVDb2x1bW5zID0gZ2V0RnJlZXphYmxlQ29sdW1ucyh0aGlzLl92aXNpYmxlQ29sdW1ucywgdGhpcy5mcmVlemVDb2x1bW5zVG8pO1xuICAgICAgICB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zID0gZ2V0RnJlZXphYmxlRW5kQ29sdW1ucyh0aGlzLl92aXNpYmxlQ29sdW1ucywgdGhpcy5mcmVlemVFbmRDb2x1bW5zVG8pO1xuICAgICAgICB0aGlzLmZpeGVkID0gISF0aGlzLmZpeGVkIHx8ICEhdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8ICEhdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5zaXplO1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4uX2ZyZWV6ZWQgPSB0aGlzLl9mcmVlemFibGVDb2x1bW5zLmhhcyhjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICBjb2x1bW4uX2VuZEZyZWV6ZWQgPSB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLmhhcyhjb2x1bW4ubmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYnVpbGRDb2x1bW5zTWFwKGNvbHVtbnMgPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC52YWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlUb0NvbHVtbk1hcCA9IG5ldyBNYXAoY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gW2NvbHVtbi5rZXksIGNvbHVtbl0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGVSb3dzID0gZ2V0U2VsZWN0YWJsZVJvd3ModGhpcy5fdGFibGVSb3dzLCB0aGlzLnNlbGVjdGFibGVLZXkpO1xuICAgICAgICBjb25zdCB0b3RhbFNlbGVjdGVkID0gc2VsZWN0YWJsZVJvd3MuZmlsdGVyKChyKSA9PiByLmNoZWNrZWQpO1xuICAgICAgICB0aGlzLl9jaGVja2VkQWxsID0gdG90YWxTZWxlY3RlZC5sZW5ndGggPT09IHNlbGVjdGFibGVSb3dzLmxlbmd0aCAmJiBzZWxlY3RhYmxlUm93cy5sZW5ndGggIT09IDA7XG4gICAgICAgIHRoaXMuX2NoZWNrZWRBbnkgPSB0b3RhbFNlbGVjdGVkLmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuX2NoZWNrZWRTdGF0ZSA9IHRoaXMuX2NoZWNrZWRBbGwgPyB0cnVlIDogdGhpcy5fY2hlY2tlZEFueSA/IG51bGwgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wYWdhdGVzIHRyaXN0YXRlIHNlbGVjdGlvbiBtb2RlIHRvIHRoZSB0cmVlLiBJdCBzdGFydHMgd2l0aCB1cGRhdGluZyBhIHN0YXRlIGZvciBhbGwgdGhlIHBhcmVudHMgYW5kIHRoZW5cbiAgICAgKiB0byBjaGlsZHJlblxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2FwcGx5VHJpc3RhdGVTZWxlY3Rpb24ocm93OiBUYWJsZVJvdywgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLCByZW1vdmVkUm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlVHJpc3RhdGVNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwbHlTZWxlY3Rpb25Ub1BhcmVudHMocm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICAgICAgdGhpcy5fYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHJvdywgYWRkZWRSb3dzLCByZW1vdmVkUm93cyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBseVNlbGVjdGlvblRvUGFyZW50cyhyb3c6IFRhYmxlUm93LCBhZGRlZFJvd3M6IFRhYmxlUm93PFQ+W10sIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgICAgIGxldCBjdXJyZW50Um93ID0gcm93LnBhcmVudDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudFJvdykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmaW5kUm93Q2hpbGRyZW4oY3VycmVudFJvdywgdGhpcy5fdGFibGVSb3dzKS5maWx0ZXIoKHIpID0+IHIucGFyZW50ID09PSBjdXJyZW50Um93KTtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsQ2hlY2tlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdG90YWxJbmRldGVybWluYXRlOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHIuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbENoZWNrZWQucHVzaChyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHIuY2hlY2tlZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbEluZGV0ZXJtaW5hdGUucHVzaChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRBbGwgPSB0b3RhbENoZWNrZWQubGVuZ3RoID09PSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkQW55ID0gdG90YWxDaGVja2VkLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIGN1cnJlbnRSb3cuY2hlY2tlZCA9IGNoZWNrZWRBbGwgPyB0cnVlIDogY2hlY2tlZEFueSB8fCB0b3RhbEluZGV0ZXJtaW5hdGUubGVuZ3RoID4gMCA/IG51bGwgOiBmYWxzZTtcbiAgICAgICAgICAgIGN1cnJlbnRSb3cuY2hlY2tlZCB8fCBjdXJyZW50Um93LmNoZWNrZWQgPT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGFkZGVkUm93cy5wdXNoKGN1cnJlbnRSb3cpXG4gICAgICAgICAgICAgICAgOiByZW1vdmVkUm93cy5wdXNoKGN1cnJlbnRSb3cpO1xuXG4gICAgICAgICAgICBjdXJyZW50Um93ID0gY3VycmVudFJvdy5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbihyb3c6IFRhYmxlUm93LCBhZGRlZFJvd3M6IFRhYmxlUm93PFQ+W10sIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgICAgIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbih0aGlzLl90YWJsZVJvd3MsIHJvdywgYWRkZWRSb3dzLCByZW1vdmVkUm93cyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1BhZ2VTY3JvbGxpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTY3JvbGxEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLnNjcm9sbGVkKClcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5wYWdlU2Nyb2xsaW5nKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzY3JvbGxhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHNjcm9sbGFibGUuZ2V0U2Nyb2xsVG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVNjcm9sbGVkLmVtaXQoc2Nyb2xsVG9wKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJbnN0ZWFkIG9mIGhhdmluZyB0d28gcGxhY2VzIHRvIHJlY29yZCB0aGlzIHBvc3NpdGlvbiwgd2UgY291bGQganVzdCBzdWJzY3JpYmUgb25jZS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVN0YXRlKCkuc2Nyb2xsVG9wUG9zaXRpb24gPSBzY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvQ29sdW1uUHJvcGVydGllc0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UubWFya0ZvckNoZWNrJC5waXBlKGRlYm91bmNlVGltZSg1KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcyQucGlwZShkZWJvdW5jZVRpbWUoNSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UYWJsZVdpZHRoQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3RhYmxlQ29udGFpbmVyU2Nyb2xsV2lkdGggPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0NlbGxNb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS51cGRhdGVGcm96ZW5Db2x1bW5zV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fdGFibGVTY3JvbGxXaWR0aCA9IHRoaXMudGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0NlbGxNb2NrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UYWJsZUNvbnRhaW5lck1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQodGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnbW91c2VsZWF2ZScpLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuaGlkZVJlc2l6ZXIoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNjcm9sbFBvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuXG4gICAgICAgIGlmICghc3RhdGUuc2Nyb2xsVG9wUG9zaXRpb24gfHwgdGhpcy5fdGFibGVSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGVTY3JvbGxhYmxlLmluaXRpYWxpemVTY3JvbGxUb3Aoc3RhdGUuc2Nyb2xsVG9wUG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXNldHMgZWRpdGFibGUgcm93cyBkaXNjYXJkaW5nIHRoZSBlZGl0YWJsZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Jlc2V0RWRpdFN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZXdUYWJsZVJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5fYWRkZWRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLl9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk7XG4gICAgICAgIHRoaXMuX3NldFRhYmxlUm93cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Mb2FkaW5nQW5kUmVmb2N1c0NlbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlTG9hZGluZyQucGlwZShmaWx0ZXIoKGxvYWRpbmdTdGF0ZSkgPT4gIWxvYWRpbmdTdGF0ZSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YWJsZUhlYWRlclJlc2l6ZXIuZm9jdXNlZENlbGxQb3NpdGlvbiAmJiB0aGlzLl9mb2N1c2FibGVHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkLmZvY3VzQ2VsbCh0aGlzLl90YWJsZUhlYWRlclJlc2l6ZXIuZm9jdXNlZENlbGxQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vblpvbmVGcmVlKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5fc2VtYW50aWNIaWdobGlnaHRpbmckLm5leHQodGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCQubmV4dCh0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IHRoaXMuX2lzU2VsZWN0aW9uQ29sdW1uU2hvd25cbiAgICAgICAgICAgID8gU0VMRUNUSU9OX0NPTFVNTl9XSURUSC5nZXQodGhpcy5jb250ZW50RGVuc2l0eU9ic2VydmVyLnZhbHVlKSA/PyAwXG4gICAgICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja0NlbGxNb2NrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuY2VsbE1vY2tWaXNpYmxlJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmZpeGVkV2lkdGggJiZcbiAgICAgICAgICAgICAgICAodGhpcy50YWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsV2lkdGggPz8gMCkgPiAodGhpcy50YWJsZT8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsV2lkdGggPz8gMClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCJAaWYgKHRhYmxlVG9vbGJhcikge1xuICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVUb29sYmFyLmNvbnRlbnRUZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJfdG9vbGJhckNvbnRleHRcIlxuICAgID48L25nLXRlbXBsYXRlPlxufVxuPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgW2xvYWRpbmddPVwiKF90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSAmJiBfZGF0YVNvdXJjZURpcmVjdGl2ZS5fZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgW2Jsb2NrXT1cInRydWVcIlxuPlxuICAgIDwhLS0gVGFibGUgQ29udGFpbmVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdGFibGVfX2NvbnRhaW5lclwiICN0YWJsZUNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICBAaWYgKGVuYWJsZURyYWdSZXNpemUpIHtcbiAgICAgICAgICAgIDwhLS0gVGFibGUgY29sdW1uIHJlc2l6ZXIgZm9yIHZpc3VhbGx5IHJlcHJlc2VudGluZyB0aGUgcmVzaXppbmcgcHJvY2VzcyAtLT5cbiAgICAgICAgICAgIDxmZHAtdGFibGUtY29sdW1uLXJlc2l6ZXIgY2xhc3M9XCJmZHAtdGFibGVfX2NvbHVtbi1yZXNpemVyXCI+PC9mZHAtdGFibGUtY29sdW1uLXJlc2l6ZXI+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvZmQtYnVzeS1pbmRpY2F0b3I+XG48IS0tIFRhYmxlIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICN0YWJsZVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZHAtdGFibGVfX2JvZHkgZmQtc2Nyb2xsYmFyXCJcbiAgICAgICAgW2NsYXNzLmZkcC10YWJsZV9fYm9keS0tdmlydHVhbC1zY3JvbGxdPVwiISFfdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbFwiXG4gICAgICAgIGZkcFRhYmxlU2Nyb2xsYWJsZVxuICAgICAgICAjdGFibGVTY3JvbGxhYmxlPVwidGFibGVTY3JvbGxhYmxlXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJib2R5SGVpZ2h0XCJcbiAgICAgICAgW2NsYXNzLmZpeGVkLWhlaWdodF09XCIhIWJvZHlIZWlnaHRcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cInBhZ2VTY3JvbGxpbmcgPyAnZmVlZCcgOiBudWxsXCJcbiAgICAgICAgW2NsYXNzLmZkLXRhYmxlLS1maXhlZF09XCJfZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8IGZpeGVkXCJcbiAgICA+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgICAgZmQtdGFibGVcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiaXNUcmVlVGFibGUgPyAndHJlZWdyaWQnIDogJ2dyaWQnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19ib2R5LXRhYmxlXCJcbiAgICAgICAgICAgIFthbGxDZWxsc0ZvY3VzYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwb3BJbl09XCJfcG9wcGluZ0NvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtdGFibGUtLW5vLW91dGVyLWJvcmRlcl09XCJub091dGVyQm9yZGVyc1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2FyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHRoZWFkIGZkLXRhYmxlLWhlYWRlciBjbGFzcz1cImZkcC10YWJsZV9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1oZWFkZXItcm93XG4gICAgICAgICAgICAgICAgICAgIFtyb3dJZF09XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgIFtmaXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1Nob3duU2VsZWN0aW9uQ29sdW1uXT1cImlzU2VsZWN0aW9uQ29sdW1uU2hvd25cIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZFN0YXRlXT1cIl9jaGVja2VkU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db2x1bW5XaWR0aF09XCJfc2VsZWN0aW9uQ29sdW1uV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBbZnJlZXplQ29sdW1uc1RvXT1cImZyZWV6ZUNvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX29uUm93Q2xpY2sobnVsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIl9vblJvd0NsaWNrKG51bGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uUm93Q2xpY2sobnVsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlU2VsZWN0aW9uQ2hlY2tib3hdPVwiX2RhdGFTb3VyY2VUYWJsZVJvd3MubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICBAaWYgKCEhX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoICYmIF90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgPHRib2R5XG4gICAgICAgICAgICAgICAgICAgIGZkLXRhYmxlLWJvZHlcbiAgICAgICAgICAgICAgICAgICAgZmRrRG5kTGlzdFxuICAgICAgICAgICAgICAgICAgICAjdGFibGVCb2R5XG4gICAgICAgICAgICAgICAgICAgIFtkcmFnb3ZlclByZWRpY2F0ZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdvdmVyUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Ryb3BQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25vQm9yZGVyWF09XCJub0JvcmRlclggfHwgbm9Cb3JkZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgW25vQm9yZGVyWV09XCJub0JvcmRlclkgfHwgbm9Cb3JkZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cInBhZ2VTY3JvbGxpbmcgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiX2RuZFRhYmxlUm93c1BsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcm9wTW9kZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BNb2RlID8/ICdncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICAoaXRlbURyb3BwZWQpPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcEl0ZW1Ecm9wKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nKT1cIl9jYWxjdWxhdGluZ0xvYWRpbmcoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkcm9wQ2FuY2VsbGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcENhbmNlbGxlZCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHJvd0luZGV4IG9mIF90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI7IHRyYWNrIF9yb3dUcmFja0J5KCRpbmRleCwgcm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKF90YWJsZVJvd3NWaXNpYmxlW3Jvd0luZGV4XTsgYXMgcm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAocm93LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdncm91cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1ncm91cC1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5VG9Db2x1bW5NYXBdPVwiX2tleVRvQ29sdW1uTWFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVDb2x1bW5zTGVuZ3RoXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2dnbGVHcm91cFJvdyk9XCJfdG9nZ2xlR3JvdXBSb3coJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9lbWl0Um93QWN0aXZhdGUocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRrRG5kSXRlbV09XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBseURyYWdJdGVtQ2xhc3NdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cgfCByb3dDbGFzc2VzOiByb3dzQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJyb3dzQWN0aXZhYmxlIHx8ICEhcm93Lm5hdmlnYXRhYmxlID8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9jdXNhYmxlXT1cInJvd3NBY3RpdmFibGUgfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtob3ZlcmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCBpc1NlbGVjdGlvbkNvbHVtblNob3duIHx8ICEhcm93Lm5hdmlnYXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZhYmxlXT1cInJvd3NBY3RpdmFibGUgfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwicm93SW5kZXggPT09IF9uYXZpZ2F0ZWRSb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZ2hsaWdodEFjdGl2ZV09XCJoaWdobGlnaHROYXZpZ2F0ZWRSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxldmVsXT1cImlzVHJlZVRhYmxlID8gcm93LmxldmVsICsgMSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIl9vblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiX29uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnRlZCk9XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdEcm9wU3RhcnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21haW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlX19yb3ctLWRyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJZF09XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiX3NlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlS2V5XT1cInNlbGVjdGFibGVLZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGVUcmlzdGF0ZU1vZGVdPVwiZW5hYmxlVHJpc3RhdGVNb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZml4ZWRdPVwiZml4ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db2x1bW5XaWR0aF09XCJfc2VsZWN0aW9uQ29sdW1uV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmVlemVDb2x1bW5zVG9dPVwiZnJlZXplQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJlZXplRW5kQ29sdW1uc1RvXT1cImZyZWV6ZUVuZENvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy50eXBlID09PSAnaXRlbScgJiYgX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtcG9wcGluZy1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cgfCByb3dDbGFzc2VzOiByb3dzQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2tlZCk9XCJfb25DZWxsQ2xpY2soJGV2ZW50LmluZGV4LCAkZXZlbnQucm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgKHJvdy5jaGlsZEl0ZW1zTG9hZGluZyQgfCBhc3luYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExpbmVzPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNjAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGFzdCByZW5kZXJlZCBjaGlsZCByb3cuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocm93LnBhcmVudD8ubGFzdENoaWxkPy5pbmRleCA9PT0gcm93LmluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdGFibGVfX2ludGVyc2VjdGlvbi1zcHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0ludGVyc2VjdGlvblNweV09XCJwYWdlU2Nyb2xsaW5nVGhyZXNob2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHJvdy5wYXJlbnQhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKHBhZ2VTY3JvbGxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0ludGVyc2VjdGlvblNweV09XCJwYWdlU2Nyb2xsaW5nVGhyZXNob2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJzZWN0ZWQpPVwiJGV2ZW50ICYmIF9vblNweUludGVyc2VjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKCFfZGF0YVNvdXJjZURpcmVjdGl2ZS5fZmlyc3RMb2FkaW5nRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgZmQtdGFibGUtYm9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCAqZmRrUmVwZWF0PVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5dPVwiJ2F1dG8gMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExpbmVzPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjYwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgZmQtdGFibGUtYm9keSBjbGFzcz1cImZkcC10YWJsZV9fZW1wdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJmZC10YWJsZV9fY2VsbC0tbm8tZGF0YVwiIFthdHRyLmNvbHNwYW5dPVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19lbXB0eS10YWJsZS1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNub0RhdGFXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkcC10YWJsZS1uby1kYXRhLXdyYXBwZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIW5vRGF0YVdyYXBwZXIuaGFzQ2hpbGROb2RlcygpICYmIF90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5VGFibGVNZXNzYWdlIHx8ICgncGxhdGZvcm1UYWJsZS5kZWZhdWx0RW1wdHlNZXNzYWdlJyB8IGZkVHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vVmlzaWJsZUNvbHVtbnNNZXNzYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwbGF0Zm9ybVRhYmxlLm5vVmlzaWJsZUNvbHVtbnNNZXNzYWdlJyB8IGZkVHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHBhZ2VTY3JvbGxpbmcpIHtcbiAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmZC10YWJsZV9fYm9keV9fZm9jdXMtbW9ja1wiPjwvdGJvZHk+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKF92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgPCEtLSB0aGUgdGJvZHkgZWxlbWVudCBiZWxvdyBpcyBzbyB0aGUgc2Nyb2xsYmFyIHJlbmRlcnMgY29ycmVjdGx5IC0tPlxuICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIxMDAlXCIgW3N0eWxlLmhlaWdodC5weF09XCJfdmlydHVhbFNjcm9sbERpcmVjdGl2ZSEudmlydHVhbFNjcm9sbFRvdGFsSGVpZ2h0XCI+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gRW1wdHkgVGFibGUgTWVzc2FnZSAtLT5cbiJdfQ==
|
|
1699
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUdILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFJTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQiw0QkFBNEIsRUFFNUIsc0JBQXNCLEVBQ3RCLHNCQUFzQixJQUFJLHdCQUF3QixFQUNsRCx3QkFBd0IsRUFDeEIsT0FBTyxFQUVQLGFBQWEsRUFDYixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixzQkFBc0IsRUFDekIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVB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RSxZQUFZO3NCQURwQixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFJRSxXQUFXO3NCQURuQixNQUFNO2dCQUlFLGVBQWU7c0JBRHZCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUluQixjQUFjO3NCQUR0QixTQUFTO3VCQUFDLGdCQUFnQjtnQkFJbEIsS0FBSztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsY0FBYztzQkFEdEIsU0FBUzt1QkFBQyw0QkFBNEI7Z0JBSXRCLFVBQVU7c0JBRDFCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJM0IsYUFBYTtzQkFEN0IsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSWxCLE9BQU87c0JBRGYsZUFBZTt1QkFBQyxXQUFXO2dCQUluQixtQkFBbUI7c0JBRDNCLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUloRCxZQUFZO3NCQURwQixZQUFZO3VCQUFDLGFBQWE7Z0JBaUkzQixhQUFhO3NCQURaLFdBQVc7dUJBQUMsdUJBQXVCO2dCQTJDNUIsT0FBTztzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUcmFja0J5RnVuY3Rpb24sXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEbmRMaXN0RGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wTW9kdWxlLFxuICAgIEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUsXG4gICAgRm9jdXNhYmxlQ2VsbFBvc2l0aW9uLFxuICAgIEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsXG4gICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZSBhcyBGb2N1c2FibGVHcmlkRGlyZWN0aXZlXzEsXG4gICAgSW50ZXJzZWN0aW9uU3B5RGlyZWN0aXZlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUmFuZ2VTZWxlY3RvcixcbiAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgcmVzaXplT2JzZXJ2YWJsZSxcbiAgICBSdGxTZXJ2aWNlLFxuICAgIFRhYmJhYmxlRWxlbWVudFNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnVzeUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXN5LWluZGljYXRvcic7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQge1xuICAgIFRhYmxlQ29tcG9uZW50IGFzIENvcmVUYWJsZUNvbXBvbmVudCxcbiAgICBUYWJsZVNlcnZpY2UgYXMgQ29yZVRhYmxlU2VydmljZSxcbiAgICBUYWJsZUNvbXBvbmVudCBhcyBGZFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlQm9keURpcmVjdGl2ZSxcbiAgICBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gICAgVGFibGVSb3dEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RhYmxlJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsIGlzSnNPYmplY3QgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbixcbiAgICBidWlsZE5ld1Jvd1NrZWxldG9uLFxuICAgIENvbGxlY3Rpb25GaWx0ZXIsXG4gICAgQ29sbGVjdGlvbkdyb3VwLFxuICAgIENvbGxlY3Rpb25Tb3J0LFxuICAgIGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3QsXG4gICAgREVGQVVMVF9ISUdITElHSFRJTkdfS0VZLFxuICAgIEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURSxcbiAgICBFZGl0YWJsZVRhYmxlQ2VsbCxcbiAgICBGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSxcbiAgICBGRFBfVEFCTEVfU1RBVEVfRElSRUNUSVZFLFxuICAgIEZEUF9UQUJMRV9WSVJUVUFMX1NDUk9MTF9ESVJFQ1RJVkUsXG4gICAgZmluZFJvd0NoaWxkcmVuLFxuICAgIGdldEZyZWV6YWJsZUNvbHVtbnMsXG4gICAgZ2V0RnJlZXphYmxlRW5kQ29sdW1ucyxcbiAgICBnZXRSb3dQYXJlbnRzLFxuICAgIGdldFNlbGVjdGFibGVSb3dzLFxuICAgIGlzUm93TmF2aWdhdGFibGUsXG4gICAgaXNUYWJsZVJvdyxcbiAgICBpc1RyZWVSb3dGaXJzdENlbGwsXG4gICAgUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQsXG4gICAgUk9XX0hFSUdIVCxcbiAgICBSb3dDbGFzc2VzUGlwZSxcbiAgICBSb3dDb21wYXJhdG9yLFxuICAgIFNhdmVSb3dzRXZlbnQsXG4gICAgU0VMRUNUSU9OX0NPTFVNTl9XSURUSCxcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRILFxuICAgIFRhYmxlLFxuICAgIFRhYmxlQ29sdW1uLFxuICAgIFRhYmxlQ29sdW1uRnJlZXplRXZlbnQsXG4gICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgIFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50LFxuICAgIFRhYmxlRGF0YVNvdXJjZSxcbiAgICBUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUsXG4gICAgVGFibGVEcmFnZ2FibGUsXG4gICAgVGFibGVGaWx0ZXJDaGFuZ2VFdmVudCxcbiAgICBUYWJsZUdyb3VwQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgIFRhYmxlSW5pdGlhbFN0YXRlLFxuICAgIFRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICAgIFRhYmxlUmVzcG9uc2l2ZVNlcnZpY2UsXG4gICAgVGFibGVSb3csXG4gICAgVGFibGVSb3dBY3RpdmF0ZUV2ZW50LFxuICAgIFRhYmxlUm93Q2xhc3MsXG4gICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudCxcbiAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgVGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudCxcbiAgICBUYWJsZVJvd1R5cGUsXG4gICAgVGFibGVTY3JvbGxhYmxlLFxuICAgIFRhYmxlU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIFRhYmxlU2VydmljZSxcbiAgICBUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgICBUYWJsZVN0YXRlLFxuICAgIFRhYmxlVmlydHVhbFNjcm9sbFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUQUJMRV9UT09MQkFSLCBUYWJsZVRvb2xiYXJJbnRlcmZhY2UgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1UYWJsZUNvbHVtblJlc2l6ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtY29sdW1uLXJlc2l6ZXIvdGFibGUtY29sdW1uLXJlc2l6ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlR3JvdXBSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZ3JvdXAtcm93L3RhYmxlLWdyb3VwLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtaGVhZGVyLXJvdy90YWJsZS1oZWFkZXItcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVBvcHBpbmdSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtcG9wcGluZy1yb3cvdGFibGUtcG9wcGluZy1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIFRvb2xiYXJDb250ZXh0IHtcbiAgICBjb3VudGVyOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgc29ydGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZmlsdGVyYWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBncm91cGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgY29sdW1uczogT2JzZXJ2YWJsZTxib29sZWFuPjtcbn1cblxubGV0IHRhYmxlVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCByZXByZXNlbnRzIGEgdGFibGUuXG4gKiBBIHRhYmxlIGlzIGEgc2V0IG9mIHRhYnVsYXIgZGF0YS4gTGluZSBpdGVtcyBjYW4gc3VwcG9ydCBkYXRhLCBpbWFnZXMgYW5kIGFjdGlvbnMuXG4gKiBgYGBodG1sXG4gKiA8ZmRwLXRhYmxlXG4gKiAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAqICBmZENvbXBhY3RcbiAqICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICogIGVtcHR5VGFibGVNZXNzYWdlPVwiTm8gZGF0YSBmb3VuZFwiPlxuICpcbiAqICA8ZmRwLXRhYmxlLXRvb2xiYXJcbiAqICAgdGl0bGU9XCJPcmRlciBMaW5lIEl0ZW1zXCJcbiAqICAgW2hpZGVJdGVtQ291bnRdPVwiZmFsc2VcIj5cbiAqICA8L2ZkcC10YWJsZS10b29sYmFyPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwibmFtZVwiXG4gKiAgIGtleT1cIm5hbWVcIlxuICogICBsYWJlbD1cIk5hbWVcIlxuICogICBhbGlnbj1cInN0YXJ0XCI+XG4gKiAgPC9mZHAtY29sdW1uPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICogICBrZXk9XCJkZXNjcmlwdGlvblwiXG4gKiAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAqICA8L2ZkcC1jb2x1bW4+XG4gKiA8L2ZkcC10YWJsZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogVGFibGUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhYmxlQ29tcG9uZW50KSB9LFxuICAgICAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgICAgIFRhYmxlU2VydmljZSxcbiAgICAgICAgQ29yZVRhYmxlU2VydmljZSxcbiAgICAgICAgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICAgICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIHN1cHBvcnRlZENvbnRlbnREZW5zaXR5OiBbQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QsIENvbnRlbnREZW5zaXR5TW9kZS5DT1pZLCBDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEXVxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUYWJsZUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJywgJ2NoaWxkRGF0YVNvdXJjZSddLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2NoaWxkRGF0YVNvdXJjZUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZXF1ZXN0ZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZWNlaXZlZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGFTb3VyY2VDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAnZGF0YUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgICdpc0xvYWRpbmcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC10YWJsZScsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLW5vLWhvcml6b250YWwtYm9yZGVyc10nOiAnbm9Ib3Jpem9udGFsQm9yZGVycyB8fCBub0JvcmRlcnMnLFxuICAgICAgICAnW2NsYXNzLmZkLXRhYmxlLS1uby12ZXJ0aWNhbC1ib3JkZXJzXSc6ICdub1ZlcnRpY2FsQm9yZGVycyB8fCBub0JvcmRlcnMnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgUGxhdGZvcm1UYWJsZUNvbHVtblJlc2l6ZXJDb21wb25lbnQsXG4gICAgICAgIFRhYmxlU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICAgICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZV8xLFxuICAgICAgICBDb3JlVGFibGVDb21wb25lbnQsXG4gICAgICAgIFRhYmxlSGVhZGVyRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUhlYWRlclJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVCb2R5RGlyZWN0aXZlLFxuICAgICAgICBEcmFnQW5kRHJvcE1vZHVsZSxcbiAgICAgICAgVGFibGVHcm91cFJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVSb3dDb21wb25lbnQsXG4gICAgICAgIFRhYmxlUG9wcGluZ1Jvd0NvbXBvbmVudCxcbiAgICAgICAgUmVwZWF0RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZVJvd0RpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVDZWxsRGlyZWN0aXZlLFxuICAgICAgICBTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgSW50ZXJzZWN0aW9uU3B5RGlyZWN0aXZlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgUm93Q2xhc3Nlc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgPSBhbnk+XG4gICAgZXh0ZW5kcyBUYWJsZTxUPlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICAgIC8qKiBDb21wb25lbnQgbmFtZSB1c2VkIGluIGEgUHJlc2V0LW1hbmFnZWQgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZSA9ICdwbGF0Zm9ybVRhYmxlJztcblxuICAgIC8qKiBJRCBmb3IgdGhlIFRhYmxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBpZCA9IGBmZHAtdGFibGUtJHt0YWJsZVVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IHJlc2l6aW5nIGNvbHVtbnMgYnkgZHJhZ2dpbmcgdGhlIGNvbHVtbiBlZGdlIHdpdGggbW91c2UuICovXG4gICAgQElucHV0KClcbiAgICBlbmFibGVEcmFnUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZml4IHRoZSB0YWJsZSBoZWFkZXIgYW5kIGZvb3Rlci4gRGVmYXVsdCBpcyB0cnVlLlxuICAgICAqIE5vdGUgdGhhdCBpZiB0aGUgdGFibGUgY29udGFpbnMgZnJlZXphYmxlIGNvbHVtbnMsIHRoZSBoZWFkZXIgYW5kXG4gICAgICogZm9vdGVyIHdpbGwgYmUgZml4ZWQgYXV0b21hdGljYWxseSwgcmVnYXJkbGVzcyBvZiB0aGlzIGlucHV0IHZhbHVlLlxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBmaXhlZCA9IHRydWU7XG5cbiAgICAvKiogVGhlIGNvbHVtbiBgbmFtZWAgdG8gZnJlZXplIGNvbHVtbnMgdXAgdG8gYW5kIGluY2x1ZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZyZWV6ZUNvbHVtbnNUbzogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIGFmdGVyIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVFbmRDb2x1bW5zVG86IHN0cmluZztcbiAgICAvKiogVG9nZ2xlIGZvciBwYWdlIHNjcm9sbGluZyBmZWF0dXJlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNjcm9sbGluZyA9IGZhbHNlO1xuICAgIC8qKiBOdW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2l6ZTogTnVsbGFibGU8bnVtYmVyPjtcbiAgICAvKiogUGFnZSBzY3JvbGxpbmcgdGhyZXNob2xkIGluIHB4LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNjcm9sbGluZ1RocmVzaG9sZCA9IDgwO1xuICAgIC8qKiBUYWJsZSBib2R5IGhlaWdodC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGJvZHlIZWlnaHQ6IHN0cmluZztcbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgd2hlbiB0YWJsZSBoYXMgbm8gaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBlbXB0eVRhYmxlTWVzc2FnZTogc3RyaW5nO1xuICAgIC8qKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyB2aXNpYmxlIGNvbHVtbnMuICovXG4gICAgQElucHV0KClcbiAgICBub1Zpc2libGVDb2x1bW5zTWVzc2FnZTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vSG9yaXpvbnRhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCB2ZXJ0aWNhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9WZXJ0aWNhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCBhbnkgYm9yZGVycywgYnV0IGhlYWRlciB3aXRoIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvZHlCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgb3V0ZXIgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLXRhYmxlLS1uby1vdXRlci1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9PdXRlckJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWCA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgdmVydGljYWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWSA9IGZhbHNlO1xuICAgIC8qKiBBY2Nlc3NvciB0byBhIGNoaWxkcmVuIG5vZGVzIG9mIHRyZWUuICovXG4gICAgQElucHV0KClcbiAgICByZWxhdGlvbktleTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSByb3cgZXhwYW5kZWQgc3RhdGUga2V5LiBVc2VkIHRvIHNldCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0cmVlIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGV4cGFuZGVkU3RhdGVLZXk6IHN0cmluZztcbiAgICAvKiogUHJvcGVydHkga2V5IGluZGljYXRpbmcgdGhhdCB0aGUgcm93IGhhcyBjaGlsZHJlbiBhY2Nlc3NpYmxlIHZpYSBbY2hpbGREYXRhU291cmNlXS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhhc0NoaWxkcmVuS2V5OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciByb3cgaXMgbmF2aWdhdGFibGUuXG4gICAgICogUGFzcyBib29sZWFuIHZhbHVlIHRvIHNldCBzdGF0ZSBmb3IgdGhlIGFsbCByb3dzLlxuICAgICAqIFBhc3Mgc3RyaW5nIHZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHN0YXRlIGZvciBldmVyeSBzaW5nbGUgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZ2hsaWdodCBuYXZpZ2F0ZWQgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlnaGxpZ2h0TmF2aWdhdGVkUm93ID0gZmFsc2U7XG4gICAgLyoqIFdoZXRoZXIgdGFibGUgcm93IGNhbiBiZSBjbGlja2VkICovXG4gICAgQElucHV0KClcbiAgICByb3dzQWN0aXZhYmxlID0gZmFsc2U7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkS2V5OiBzdHJpbmc7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGFibGVLZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUcmFja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjaGVjayB0aGUgZGlmZmVyZW5jZXMgaW4gZGF0YSBjaGFuZ2VzLlxuICAgICAqIFVzZWQgc2ltaWxhcmx5IHRvIGBuZ0ZvcmAgYHRyYWNrQnlgIGZ1bmN0aW9uLlxuICAgICAqIEFjY2VwdHMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBwYXJhbWV0ZXJzLCBpbmRleCBhbmQgaXRlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxUPjtcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgdW5pcXVlbmVzcyBvZiBhIHBhcnRpY3VsYXIgcm93LlxuICAgICAqIFRhYmxlIGNvbXBvbmVudCB1c2VzIGl0IHRvIGJlIGFibGUgdG8gcHJlc2VydmUgc2VsZWN0aW9uIHdoZW4gYSBkYXRhIGxpc3QgaXMgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0NvbXBhcmF0b3I6IFJvd0NvbXBhcmF0b3I8VD47XG4gICAgLyoqIFN0cmluZyBvciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYWRkaXRpb25hbCByb3dzJyBDU1MgY2xhc3Nlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3NDbGFzczogVGFibGVSb3dDbGFzczxUPjtcbiAgICAvKiogVXNlZCB0byBjb25zdHJ1Y3QgZW1wdHkgcm93IG9iamVjdCBmb3IgZWRpdGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRhYmxlUm93U2tlbGV0b246IFQ7XG4gICAgLyoqIFdoZXRoZXIgYWxsIHJvd3Mgc2hvdWxkIGJlIGNvbGxhcHNlZCBieSBkZWZhdWx0IGFmdGVyIHRoZSB0YWJsZSBpcyBsb2FkZWQuICovXG4gICAgQElucHV0KClcbiAgICBleHBhbmRPbkluaXQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHJvdywgcmVxdWlyZWQgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLFxuICAgICAqIGRlZmF1bHQgaXMgNDRweCBpbiBjb3p5LCAzMnB4IGluIGNvbXBhY3QgYW5kIDI0cHggaW4gY29uZGVuc2VkIChzZXQgYXV0b21hdGljYWxseSlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbG9hZCBwcmV2aW91cyBwYWdlcy5cbiAgICAgKiBUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdoZW4gYHBhZ2VTY3JvbGxpbmdgIGlzIHRydWUsIGFuZCB0aGUgaW5pdGlhbCBwYWdlID4gMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFBhZ2VzQmVmb3JlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlVmFsdWUgPSBTZWxlY3Rpb25Nb2RlLk5PTkU7XG5cbiAgICAvKiogU2V0cyBzZWxlY3Rpb24gbW9kZSBmb3IgdGhlIHRhYmxlLiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgfCAnbm9uZScgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlOiBTZWxlY3Rpb25Nb2RlVmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duID0gdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSBTZWxlY3Rpb25Nb2RlLk5PTkU7XG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGlvbk1vZGUoKTogU2VsZWN0aW9uTW9kZVZhbHVlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbmFibGVUcmlzdGF0ZU1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBXaGVuIFRydWUsIHRoZSBjaGVja2VkIHN0YXRlIG9mIGVhY2ggdHJlZSBpdGVtIGRlcGVuZHMgb24gdGhlIGNoZWNrZWRcbiAgICAgKiAgc3RhdGUgb2YgaXRzIHBhcmVudCBvciBkaXJlY3QgY2hpbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZW5hYmxlVHJpc3RhdGVNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZVRyaXN0YXRlTW9kZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBlbmFibGVUcmlzdGF0ZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJlZVRhYmxlICYmIHRoaXMuX2VuYWJsZVRyaXN0YXRlTW9kZTtcbiAgICB9XG5cbiAgICAvKiogVmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGNvbXB1dGUgc2VtYW50aWMgc3RhdGUgb2YgdGhlIHJvdy4gICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VtYW50aWNIaWdobGlnaHRpbmcodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpO1xuICAgIH1cbiAgICBnZXQgc2VtYW50aWNIaWdobGlnaHRpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleSAmJiB0aGlzLl9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gREVGQVVMVF9ISUdITElHSFRJTkdfS0VZO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZm9yY2Ugcm93cyB0byBmb2xsb3cgJ2NoZWNrZWQgYWxsJyBzdGF0ZSBvZiB0aGUgdGFibGUuXG4gICAgICogSWYgdHJ1ZSwgYWxsIG5ldyByb3dzIHRoYXQgYXJlIGNvbWluZyBmcm9tIHRoZSBkYXRhU291cmNlIHdpbGwgZm9sbG93ICdjaGVja2VkIGFsbCcgc3RhdGUuXG4gICAgICogSWYgZmFsc2UsIHJvdyB3aWxsIHJlc3BlY3QgYGNoZWNrZWRLZXlgIHByb3BlcnR5IHRvIGRlZmluZSBjaGVja2VkIHN0YXRlIG9mIGl0c2VsZi5cbiAgICAgKiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9yY2VDaGVja2VkQWxsU3RhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgdmFsdWUgZm9yIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZENoZWNrTmV3Um93cyA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHJlc2V0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd1NlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8VD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAgICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudDxUPlxuICAgID4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0YWJsZSBzb3J0IG9yZGVyIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnRDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU29ydENoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRoZSB0YWJsZSBmaWx0ZXIgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZmlsdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVGaWx0ZXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgZ3JvdXBpbmcgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZ3JvdXBDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZUdyb3VwQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUdyb3VwQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdmlzaWJsZSBjb2x1bW5zIGxpc3QgaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjb2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5zQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHBhZ2luYXRpb24gc3RhdGUgaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgZnJvemVuIGNvbHVtbi4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjb2x1bW5GcmVlemU6IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5GcmVlemVFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBncm91cC90cmVlIHJvdyBjb2xsYXBzZWQvZXhwYW5kZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93VG9nZ2xlT3BlblN0YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1RvZ2dsZU9wZW5TdGF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHJvdyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd0FjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gcm93IG5hdmlnYXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dOYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGVtcHR5IHJvdyBhZGRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBlbXB0eVJvd0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHNhdmUgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZVJvd3NFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBjYW5jZWwgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGFibGUgYm9keSBiZWluZyBzY3JvbGxlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBuZXcgcm93cyBoYXMgYmVlbiBzZXQgYW5kIHJlbmRlcmVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRhYmxlUm93c1NldCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGV4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFsbFJvd3NFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGNvbGxhcHNlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhbGxSb3dzQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBjZWxsIGlzIGZvY3VzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2VsbEZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlU2Nyb2xsYWJsZScpXG4gICAgcmVhZG9ubHkgdGFibGVTY3JvbGxhYmxlOiBUYWJsZVNjcm9sbGFibGU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpXG4gICAgcmVhZG9ubHkgdGFibGVDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGZFRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSB0YWJsZTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzYWJsZUdyaWQ6IEZvY3VzYWJsZUdyaWREaXJlY3RpdmU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUJvZHknLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUJvZHk6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEbmRMaXN0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RuZERpcmVjdGl2ZTogTnVsbGFibGU8RG5kTGlzdERpcmVjdGl2ZTxUYWJsZVJvdz4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcbiAgICByZWFkb25seSBjb2x1bW5zOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihFZGl0YWJsZVRhYmxlQ2VsbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IGN1c3RvbUVkaXRhYmxlQ2VsbHM6IFF1ZXJ5TGlzdDxFZGl0YWJsZVRhYmxlQ2VsbD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFRBQkxFX1RPT0xCQVIpXG4gICAgcmVhZG9ubHkgdGFibGVUb29sYmFyOiBUYWJsZVRvb2xiYXJJbnRlcmZhY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaW5pdGlhbFNvcnRCeSgpOiBDb2xsZWN0aW9uU29ydFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFN0YXRlPy5pbml0aWFsU29ydEJ5ID8/IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb2x1bW5zIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIGdldCBfdmlzaWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnMkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb2x1bW5zIHRvIGJlIHJlbmRlcmVkIGFzIGEgcG9wLWluIGNvbHVtbnMuXG4gICAgICovXG4gICAgZ2V0IF9wb3BwaW5nQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlU2VydmljZS5wb3BwaW5nQ29sdW1ucyQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNUcmVlVGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5pc1RyZWVUYWJsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBlbmFibGVSb3dSZW9yZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZW5hYmxlUm93UmVvcmRlcmluZztcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgdGFibGUgcm93cyBhcmUgZHJhZ2dhYmxlLiAqL1xuICAgIGdldCBpc0RyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmlzVHJlZVRhYmxlICYmICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmVuYWJsZVJvd1Jlb3JkZXJpbmc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VtYW50aWNIaWdobGlnaHRpbmcgPyBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRIIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTdW0gb2Ygd2lkdGhzIG9mIGZpeGVkIGNvbHVtbnMgKHNlbWFudGljIGhpZ2hsaWdodGluZywgc2VsZWN0aW9uKSAqL1xuICAgIGdldCBfZml4ZWRDb2x1bW5zUGFkZGluZygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCArIHRoaXMuX3NlbGVjdGlvbkNvbHVtbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF90YWJsZVdpZHRoUHgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBsb2FkaW5nU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPz9cbiAgICAgICAgICAgICh0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl9pbnRlcm5hbExvYWRpbmdTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ludGVybmFsQ2hpbGRyZW5Mb2FkaW5nU3RhdGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9kbmRMb2FkaW5nU3RhdGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIGJlIHNob3duLFxuICAgICAqICBJZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSByb3dzIG9yIHZpc2libGUgY29sdW1uc1xuICAgICAqICBvciBzZWxlY3Rpb24gbW9kZSBpcyBub25lLCB0aGVuIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIG5vdCBiZSBzaG93bi5cbiAgICAgKiovXG4gICAgZ2V0IGlzU2VsZWN0aW9uQ29sdW1uU2hvd24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duICYmXG4gICAgICAgICAgICAhIXRoaXMuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FyaWFMYWJlbGxlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5hcmlhTGFiZWxsZWRCeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkQnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVUb29sYmFyPy50YWJsZVRvb2xiYXJUaXRsZUlkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlcHJlc2VudGF0aW9uIG9mIGNvbWJpbmVkIHRhYmxlIHJvd3MuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX3RhYmxlUm93czogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiB0YWJsZSByb3dzIHRoYXQgY2FtZSBmcm9tIGRhdGFTb3VyY2UuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX2RhdGFTb3VyY2VUYWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgYWRkZWQgdGFibGUgcm93cy5cbiAgICAgKi9cbiAgICBfbmV3VGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZpc2libGUgdGFibGUgcm93cy5cbiAgICAgKiBSb3dzIGxpc3QgdGhhdCBpcyB1c2VkIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB1aS5cbiAgICAgKiBCYXNlZCBvbiBfdGFibGVSb3dzIGFuZCBleGNsdWRlcyBoaWRkZW4gcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzVmlzaWJsZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUYWJsZSBDb2x1bW4gTWFwLiBXaGVyZSBrZXkgaXMgY29sdW1uIGtleSBhbmQgdmFsdWUgaXMgY29sdW1uXG4gICAgICovXG4gICAgX2tleVRvQ29sdW1uTWFwOiBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtbj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlc1xuICAgICAqL1xuICAgIF9mcmVlemFibGVDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGcmVlemFibGUgY29sdW1uIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGluZGV4ZXMgZm9yIGNvbHVtbnMgdGhhdCB3aWxsIGJlIGZyb3plbiB0byB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIF9mcmVlemFibGVFbmRDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYmxlQ29sdW1uc0xlbmd0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tlZFN0YXRlOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZS0tZ3JvdXAnKVxuICAgIF9pc0dyb3VwVGFibGUgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCB0byBjcmVhdGUgYSByb3cgY29tcG9uZW50IHBsYWNlaG9sZGVyIGFuZCBzZXQgZGF0YSBpbiBpdCByYXRoZXIgdGhhbiByZS1jcmVhdGUgdGhlIHJvdyBjb21wb25lbnQgd2hlbiBkYXRhIGNoYW5nZXMuXG4gICAgICogT3B0aW1pemVzIHBlcmZvcm1hbmNlIGR1ZSB0byBza2lwcGluZyBpbml0aWFsIHNldHVwIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlcjogbnVtYmVyW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlcjogVGFibGVSb3dbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90b29sYmFyQ29udGV4dDogVG9vbGJhckNvbnRleHQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSB0YWJsZUNvbHVtbnNTdHJlYW06IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbG9hZFByZXZpb3VzUGFnZXMgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ydGwgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kYXRhU291cmNlRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZTxUPj4oVGFibGVEYXRhU291cmNlRGlyZWN0aXZlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGluaXRpYWxTdGF0ZSA9IGluamVjdDxUYWJsZUluaXRpYWxTdGF0ZT4oRkRQX1RBQkxFX1NUQVRFX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVWaXJ0dWFsU2Nyb2xsPihGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZG5kVGFibGVEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVEcmFnZ2FibGU+KEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLy8ga2VlcGluZyBcImxvYWRpbmdcIiBmaWVsZCBwcml2YXRlIHRvIG1ha2Ugc3VyZSBcImxvYWRpbmdTdGF0ZVwiIGlzIHVzZWQgaW5zdGVhZFxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25GaWx0ZXJTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBhbGwgaXRlbXMgYXJlIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGF0IGxlYXN0IDEgaXRlbSBpcyBjaGVja2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hlY2tlZEFueSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0aWF0ZWQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc1dpZHRoU2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kbmRMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFByZXNldDogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQgPSB7fTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxTdGF0ZVNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0TWFudWFsbHlTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUhlYWRlclJlc2l6ZXIgPSBpbmplY3QoVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNYXBwaW5nIGZ1bmN0aW9uIGZvciB0aGUgdHJhY2tCeSwgcHJvdmlkZWQgYnkgdGhlIHVzZXIuXG4gICAgICogSXMgbmVlZGVkLCBiZWNhdXNlIHdlIGFyZSB3cmFwcGluZyB1c2VyIHN1cHBsaWVkIGRhdGEgaW50byBhIGBUYWJsZVJvd2AgY2xhc3MuXG4gICAgICovXG4gICAgX3Jvd1RyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxudW1iZXI+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPG51bWJlcj4gPSAoaW5kZXg6IG51bWJlcikgPT4gaW5kZXg7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcmVhZG9ubHkgX3RhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVNjcm9sbERpc3BhdGNoZXI6IFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBfdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlOiBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgICAgICByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmJhYmxlU2VydmljZTogVGFiYmFibGVFbGVtZW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5zZXRUYWJsZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuc2V0VGFibGUodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fcm93VHJhY2tCeSA9IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB0aGlzLl90b29sYmFyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUudG90YWxJdGVtcyQsXG4gICAgICAgICAgICBzb3J0YWJsZTogdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgZ3JvdXBhYmxlOiB0aGlzLl9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50YWJsZUNvbHVtbnNTdHJlYW0gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fcnRsU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ydGwgPSBpc1J0bDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbEZvY3VzZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxGb2N1c2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC4gKi9cbiAgICBnZXRSb3dzSW5WaWV3cG9ydCgpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydCBpbmRleCBvZiBhbGwgcm93cy5cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiB2aWV3cG9ydCByb3dzLlxuICAgICAqL1xuICAgIHNldFJvd3NJblZpZXdwb3J0KHN0YXJ0SW5kZXggPSAwLCBsZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXIgPSBuZXcgQXJyYXkobGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gaSArIHN0YXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlciA9IHRoaXMuX3RhYmxlUm93cy5zbGljZShzdGFydEluZGV4LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoJ2xvYWRpbmcnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZUxvYWRpbmcodGhpcy5sb2FkaW5nU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd0cmFja0J5JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dUcmFja0J5ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy50cmFja0J5ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gKGluZGV4KSA9PiB0aGlzLnRyYWNrQnkoaW5kZXgsIHRoaXMuX3RhYmxlUm93c1Zpc2libGVbaW5kZXhdLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hhbmdlcyBiZWxvdyBzaG91bGQgYmUgY2hlY2tlZCBvbmx5IGFmdGVyIHZpZXcgaXMgaW5pdGlhbGl6ZWRcbiAgICAgICAgaWYgKCF0aGlzLl92aWV3SW5pdGlhdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3NlbGVjdGlvbk1vZGUnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICdzZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplRW5kQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnc2VtYW50aWNIaWdobGlnaHRpbmcnIGluIGNoYW5nZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dOYXZpZ2F0YWJsZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLmZvckVhY2goKHJvdykgPT4gKHJvdy5uYXZpZ2F0YWJsZSA9IGlzUm93TmF2aWdhdGFibGUocm93LnZhbHVlLCB0aGlzLnJvd05hdmlnYXRhYmxlKSkpO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dIZWlnaHQnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0hlaWdodE1hbnVhbGx5U2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRUYWJsZVJlZih0aGlzKTtcblxuICAgICAgICB0aGlzLl9pc0dyb3VwVGFibGUgPSAodGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxHcm91cEJ5Py5sZW5ndGggPz8gMCkgPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3SW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pbml0aWFsaXplRGF0YVNvdXJjZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb25zdHJ1Y3RUYWJsZU1ldGFkYXRhKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk7XG5cbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8ubGlzdGVuT25WaXJ0dWFsU2Nyb2xsKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUNvbnRhaW5lck1vdXNlTGVhdmUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZE9uSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbFRyYW5zZm9ybSRcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gISF0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsICYmICEhdGhpcy5fdGFibGVCb2R5KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh0cmFuc2Zvcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHt0cmFuc2Zvcm19cHgpYDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2FibGVHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkLnNob3J0Um93Rm9jdXMgPSAnZmlyc3QnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIC8vIFdoZW4gdGFibGUgcm93cyBhcmUgc2V0LCBlbWl0IGFuIGV2ZW50IHRvIG1hbmlwdWxhdGUgdGhlIHZpZXcgKGUuZy4sIHNjcm9sbCB0byBzb21lIHJvdykuXG4gICAgICAgIGlmICghdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gdGhpcy50YWJsZVJvd3NTZXQ7XG4gICAgICAgIHRoaXMuX29uWm9uZUZyZWUoKCkgPT4ge1xuICAgICAgICAgICAgZW1pdHRlci5lbWl0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0LiAqL1xuICAgIGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBsaXN0IG9mIHZpc2libGUgdGFibGUgY29sdW1ucy4gKi9cbiAgICBnZXRWaXNpYmxlVGFibGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIFNldCBTb3J0aW5nIHJ1bGVzICovXG4gICAgc29ydChzb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQoc29ydFJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEZpbHRlciBydWxlcyAqL1xuICAgIGZpbHRlcihmaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRGaWx0ZXJzKGZpbHRlclJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgRmlsdGVyIHJ1bGUgKi9cbiAgICBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkRmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBmaWx0ZXJzIGZvciB0aGUgcHJvdmlkZWQgZmllbGRzICovXG4gICAgcmVtb3ZlRmlsdGVyKGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnJlbW92ZUZpbHRlcnMoZmllbGRzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgR3JvdXBzICovXG4gICAgZ3JvdXAoZ3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEdyb3VwcyAqL1xuICAgIGFkZEdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHZpc2libGUgdGFibGUgY29sdW1uc1xuICAgICAqIFRoZSBvcmRlciBpcyBtYXR0ZXJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyB0YWJsZSBjb2x1bW5zIG5hbWVzXG4gICAgICovXG4gICAgc2V0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCBjb2x1bW5zT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRhYmxlQ29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzYW1lIG9yZGVyIG9mIGNvbHVtbnMgYXMgdXNlciBkZWZpbmVkLlxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbHVtbnMuaW5kZXhPZihhLm5hbWUpIC0gY29sdW1ucy5pbmRleE9mKGIubmFtZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGFjYy5jb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgICAgIGFjYy5rZXlzLnB1c2goY29sdW1uLmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGNvbHVtbnNPYmplY3QpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q29sdW1ucyhjb2x1bW5zT2JqZWN0LmNvbHVtbnMsIGNvbHVtbnNPYmplY3Qua2V5cyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRnJlZXplIHRhYmxlIHRvIGNvbHVtbiAqL1xuICAgIGZyZWV6ZVRvQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBlbmQgPyAodGhpcy5mcmVlemVFbmRDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKSA6ICh0aGlzLmZyZWV6ZUNvbHVtbnNUbyA9IGNvbHVtbk5hbWUpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhjb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICB1bmZyZWV6ZShjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVuZCA/IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgOiB0aGlzLl9mcmVlemFibGVDb2x1bW5zO1xuICAgICAgICBjb25zdCBmcmVlemVUb0NvbHVtbkluZGV4ID0gY29sdW1ucy5nZXQoY29sdW1uTmFtZSkgPz8gLTE7XG4gICAgICAgIGNvbnN0IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lID0gY29sdW1uc1tmcmVlemVUb0NvbHVtbkluZGV4IC0gMV07XG5cbiAgICAgICAgZW5kXG4gICAgICAgICAgICA/ICh0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyA9IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lKVxuICAgICAgICAgICAgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmZyZWV6ZVRvKGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBleHBhbmQgYWxsIHJvd3MgKi9cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGFibGVSb3dzID0gdGhpcy5fdGFibGVSb3dzLmZpbHRlcigocm93KSA9PiByb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLlRSRUUpO1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKGV4cGFuZGFibGVSb3dzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXJrQXNFeHBhbmRlZChleHBhbmRhYmxlUm93cyk7XG4gICAgICAgIHRoaXMuYWxsUm93c0V4cGFuZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcmtBc0V4cGFuZGVkKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgcm93cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBjb2xsYXBzZSBhbGwgcm93cyAqL1xuICAgIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGUucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5hbGxSb3dzQ29sbGFwc2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGluIHRhYmxlICovXG4gICAgc2VhcmNoKHNlYXJjaElucHV0OiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2VhcmNoKHNlYXJjaElucHV0KTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZWFyY2ggaW4gdGFibGUgKi9cbiAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBTb3J0IFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd1NvcnRTZXR0aW5nc0luVG9vbGJhcihzaG93U29ydFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Tb3J0U2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd1NvcnRTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgRmlsdGVyIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0ZpbHRlclNldHRpbmdzSW5Ub29sYmFyKHNob3dGaWx0ZXJTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0ZpbHRlclNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBHcm91cCBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dHcm91cFNldHRpbmdzSW5Ub29sYmFyKHNob3dHcm91cFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJC5uZXh0KHNob3dHcm91cFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBDb2x1bW5zIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0NvbHVtblNldHRpbmdzSW5Ub29sYmFyKHNob3dDb2x1bW5TZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0NvbHVtblNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXIgZnJvbSBjb2x1bW4gaGVkZXIgbWVudSAqL1xuICAgIHNldEhlYWRlckNvbHVtbkZpbHRlcmluZ0Rpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNGaWx0ZXJpbmdGcm9tSGVhZGVyRGlzYWJsZWQkLm5leHQoZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgc2V0Um93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyLCByb3dOYXZpZ2F0YWJsZTogc3RyaW5nIHwgYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKHJvdy52YWx1ZSwgcm93TmF2aWdhdGFibGUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSByb3cgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXggSW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKi9cbiAgICB0b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdyB8fCByb3cudmFsdWVbdGhpcy5zZWxlY3RhYmxlS2V5XSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KHJvdyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVNdWx0aVNlbGVjdFJvdyhyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hlY2tlZCBzdGF0ZSBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBJbmRleCBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKi9cbiAgICBzZXRSb3dDaGVja2VkU3RhdGUocm93SW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdy5jaGVja2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgcmVtb3ZlUm93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5uYXZpZ2F0YWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB0cmlnZ2VycyBjb2x1bW4ncyB3aWR0aCByZWNhbGN1bGF0aW9uICovXG4gICAgcmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2Uuc2V0Q29sdW1uTmFtZXModGhpcy5fdmlzaWJsZUNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKSk7XG4gICAgICAgIHRoaXMuX3NldEZyZWV6YWJsZUluZm8oKTtcbiAgICB9XG5cbiAgICAvKiogR2V0cyB0aGUgbWF4IGFsbG93ZWQgd2lkdGggZm9yIGFsbCBmcmVlemFibGUgY29sdW1ucyAqL1xuICAgIGdldE1heEFsbG93ZWRGcmVlemFibGVDb2x1bW5zV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFRoZW1lYWJsZSBzY3JvbGxiYXIgaGFzIDAuNzVyZW0gaW4gZGltZW5zaW9uICovXG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemVJblB4ID0gMTI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlV2lkdGhQeCAtIHRoaXMuX2ZpeGVkQ29sdW1uc1BhZGRpbmcgLSBzY3JvbGxiYXJTaXplSW5QeCAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0YWJsZSBkYXRhIHNvdXJjZSAqL1xuICAgIGdldERhdGFTb3VyY2UoKTogVGFibGVEYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGVtcHR5IHJvdyBmb3IgZWRpdGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIGFkZFJvdygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93ID0gYnVpbGROZXdSb3dTa2VsZXRvbih0aGlzLmVkaXRhYmxlUm93U2tlbGV0b24sIHRoaXMuY29sdW1ucy50b0FycmF5KCkpO1xuICAgICAgICBuZXdSb3dbdGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZ10gPSBFRElUQUJMRV9ST1dfU0VNQU5USUNfU1RBVEU7XG5cbiAgICAgICAgdGhpcy5fYWRkZWRJdGVtcy51bnNoaWZ0KG5ld1Jvdyk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93cyA9IHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKFtuZXdSb3ddKTtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gWy4uLm5ld1Jvd3MsIC4uLnRoaXMuX25ld1RhYmxlUm93c107XG5cbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuZW1wdHlSb3dBZGRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIENhbmNlbHMgZWRpdGluZyBhbmQgZGlzY2FyZHMgbmV3bHkgYWRkZWQgcm93cyAqL1xuICAgIGNhbmNlbEVkaXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0RWRpdFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzYXZlIGV2ZW50IGFuZCByZXNldHMgZWRpdGFibGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBzYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2F2ZVJvd3NFdmVudDxUPigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2godGhpcy5nZXRUYWJsZVN0YXRlKCkpO1xuICAgICAgICB9LCBbLi4udGhpcy5fYWRkZWRJdGVtc10pO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGxzOiBFZGl0YWJsZVRhYmxlQ2VsbFtdID0gKFtdIGFzIEVkaXRhYmxlVGFibGVDZWxsW10pLmNvbmNhdC5hcHBseShcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl90YWJsZVJvd1NlcnZpY2UuZWRpdGFibGVDZWxscy52YWx1ZXMoKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmb3JtcyA9IFsuLi50aGlzLmN1c3RvbUVkaXRhYmxlQ2VsbHMudG9BcnJheSgpLCAuLi5lZGl0YWJsZUNlbGxzXS5tYXAoKHQpID0+IHQuZm9ybSk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBmb3JtIHJldmFsaWRhdGlvblxuICAgICAgICBmb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiBmb3JtLm9uU3VibWl0KG51bGwgYXMgYW55KSk7XG4gICAgICAgIGlmIChmb3Jtcy5zb21lKChmb3JtKSA9PiBmb3JtLmludmFsaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZXNldEVkaXRTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNhdmUuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY3VycmVudCBwcmVzZXQgZm9yIHRoZSBUYWJsZS4gKi9cbiAgICBzZXRQcmVzZXQoZGF0YTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFByZXNldCA9IGRhdGE7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlOiBUYWJsZVN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdGFibGVTZXJ2aWNlLmdldERlZmF1bHRTdGF0ZSgpLCBkYXRhKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQobmV3U3RhdGUuc29ydEJ5KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEZpbHRlcnMobmV3U3RhdGUuZmlsdGVyQnkpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKG5ld1N0YXRlLmdyb3VwQnkpO1xuICAgICAgICB0aGlzLnNldENvbHVtbnMobmV3U3RhdGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZWFyY2gobmV3U3RhdGUuc2VhcmNoSW5wdXQpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZnJlZXplVG8obmV3U3RhdGUuZnJlZXplVG9Db2x1bW4pO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gbmV3U3RhdGUucGFnZS5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEN1cnJlbnRQYWdlKG5ld1N0YXRlLnBhZ2UuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbi4gKi9cbiAgICBnZXRDdXJyZW50UHJlc2V0KCk6IFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50UHJlc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbmVlZCB0byByZXR1cm4gb2JqZWN0IGFzIHNpbWlsYXIgYXMgdGhlIG9yaWdpbmFsIHByZXNldC5cbiAgICAgICAgY29uc3QgY3VycmVudFByZXNldCA9IHsgLi4udGhpcy5fY3VycmVudFByZXNldCB9O1xuICAgICAgICBjb25zdCBwcmVzZXRLZXlzID0gT2JqZWN0LmtleXMoY3VycmVudFByZXNldCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRTdGF0ZSkuZm9yRWFjaCgoc3RhdGVLZXkpID0+IHtcbiAgICAgICAgICAgIC8vIFNraXAgc3RhdGUgZW50cnkgaWYgaXQncyBub3QgcHJlc2VudCBpbiBwcmVzZXQgYW5kIGRvZXNuJ3QgaGF2ZSBhbnkgdmFsdWUuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RhdGVLZXkgPT09ICdjb2x1bW5LZXlzJyB8fFxuICAgICAgICAgICAgICAgICgoIWN1cnJlbnRTdGF0ZVtzdGF0ZUtleV0gfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY3VycmVudFN0YXRlW3N0YXRlS2V5XSkgJiYgY3VycmVudFN0YXRlW3N0YXRlS2V5XT8ubGVuZ3RoID09PSAwKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXByZXNldEtleXMuaW5jbHVkZXMoc3RhdGVLZXkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50UHJlc2V0W3N0YXRlS2V5XSA9IGN1cnJlbnRTdGF0ZVtzdGF0ZUtleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50UHJlc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHRyaWdnZXJzIGxpc3QgaXRlbSBldmVudCBsaXN0ZW5lcnMgZm9yIGRyYWcmZHJvcCBsaXN0IGRpcmVjdGl2ZS5cbiAgICAgKi9cbiAgICByZWZyZXNoRG5kTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kbmREaXJlY3RpdmU/LnJlZnJlc2hRdWVyeUxpc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHRvZ2dsZXMgYGV4cGFuZGAgc3RhdGUgb2YgdGhlIHJvdyB3aXRoIGRlZmluZWQgaW5kZXguXG4gICAgICogQHBhcmFtIHJvd0luZGV4ZXMgcm93IGluZGV4ZXMgaW5jbHVkaW5nIG5lc3RlZCByb3dzLlxuICAgICAqXG4gICAgICogVXNhZ2UgZXhhbXBsZTpcbiAgICAgKiAqIFRvIHRvZ2dsZSBmaXJzdCBsZXZlbCByb3csIHBhc3Mgb25lIGFyZ3VtZW50OlxuICAgICAqIGBgYFxuICAgICAqIHRhYmxlLnRvZ2dsZUdyb3VwUm93cygwKSAvLyBXaWxsIHJlc3VsdCBpbiB0b2dnbGluZyBmaXJzdCByb3cgaWYgaXQncyB0eXBlIGlzIGBUYWJsZVJvd1R5cGUuVFJFRWAgb3IgYFRhYmxlUm93VHlwZS5HUk9VUGAuXG4gICAgICogYGBgXG4gICAgICogKiBUbyB0b2dnbGUgbmVzdGVkIHJvd3MsIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgb2YgaW5kZXhlczpcbiAgICAgKiBgYGBcbiAgICAgKiB0YWJsZS50b2dnbGVHcm91cFJvd3MoMCwgMSkgLy8gV2lsbCByZXN1bHQgaW4gdG9nZ2xpbmcgZmlyc3Qgcm9vdCByb3csIHRoZW4gaXQncyBzZWNvbmQgY2hpbGQuXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdG9nZ2xlR3JvdXBSb3dzKC4uLnJvd0luZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGxldCB0YWJsZVJvdzogVGFibGVSb3cgfCBudWxsID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCByb3dJbmRleCBvZiByb3dJbmRleGVzKSB7XG4gICAgICAgICAgICB0YWJsZVJvdyA9IHRhYmxlUm93ID8gdGFibGVSb3cuY2hpbGRyZW5bcm93SW5kZXhdIDogdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICAgICAgaWYgKHRhYmxlUm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHRhYmxlUm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZm9jdXMgYSBjZWxsIGluIHRoZSB0YWJsZSB1dGlsaXppbmcgYSBGb2N1c2FibGVDZWxsUG9zaXRpb24gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZvY3VzQ2VsbChwb3NpdGlvbjogRm9jdXNhYmxlQ2VsbFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlRWwgPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgICAgdGFibGVFbC5yb3dzW3Bvc2l0aW9uLnJvd0luZGV4XS5jZWxsc1twb3NpdGlvbi5jb2xJbmRleF0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGFycmF5IG9mIHRhYmxlIHJvd3MuIFRyaWdnZXJlZCB3aGVuIG5ldyBkYXRhIHNvdXJjZSBpcyBhcHBsaWVkLlxuICAgICAqL1xuICAgIGNsZWFyVGFibGVSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzVmlzaWJsZSA9IFtdO1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXIgPSBbXTtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gW107XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKFtdKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEN1cnJlbnRQYWdlKDEpO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGUgQVBJXG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zY3JvbGxUb092ZXJsYXBwZWRDZWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsYWJsZS5zY3JvbGxUb092ZXJsYXBwZWRDZWxsKFxuICAgICAgICAgICAgdGhpcy5fcnRsLFxuICAgICAgICAgICAgdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplLFxuICAgICAgICAgICAgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5zaXplXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2FsY3VsYXRpbmdMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZG5kTG9hZGluZ1N0YXRlID09PSBpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RuZExvYWRpbmdTdGF0ZSA9IGlzTG9hZGluZztcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFRhYmxlTG9hZGluZyh0aGlzLmxvYWRpbmdTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZ2dsZSBzZWxlY3RhYmxlIHJvdyBpbiBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFXG4gICAgICovXG4gICAgX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvd1RvVG9nZ2xlOiBUYWJsZVJvdywgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2VsZWN0aW9uIG1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja2VkID0gKHJvd1RvVG9nZ2xlLmNoZWNrZWQgPSAhcm93VG9Ub2dnbGUuY2hlY2tlZCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLl90YWJsZVJvd3M7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLl90YWJsZVJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdyA9PT0gcm93VG9Ub2dnbGUpO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWRkZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5vblJhbmdlRWxlbWVudFRvZ2dsZWQoc2VsZWN0ZWRJbmRleCwgZXZlbnQgYXMgUG9pbnRlckV2ZW50IHwgS2V5Ym9hcmRFdmVudCk7XG5cbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5hcHBseVZhbHVlVG9FYWNoSW5SYW5nZSgoaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSByb3dzW2lkeF07XG4gICAgICAgICAgICBpZiAocm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNIHx8IHJvdy5pc1RyZWUpIHtcbiAgICAgICAgICAgICAgICByb3cuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgY2hlY2tlZCA/IGFkZGVkLnB1c2gocm93KSA6IHJlbW92ZWQucHVzaChyb3cpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlUcmlzdGF0ZVNlbGVjdGlvbihyb3csIGFkZGVkLCByZW1vdmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkLCByZW1vdmVkKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZ2dsZSBzZWxlY3RhYmxlIHJvdyBpbiBTZWxlY3Rpb25Nb2RlLlNJTkdMRVxuICAgICAqL1xuICAgIF90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KHJvd1RvVG9nZ2xlOiBUYWJsZVJvdyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSBTZWxlY3Rpb25Nb2RlLlNJTkdMRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHNlbGVjdGlvbiBtb2RlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGVja2VkID0gKHJvd1RvVG9nZ2xlLmNoZWNrZWQgPSAhcm93VG9Ub2dnbGUuY2hlY2tlZCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWRkZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcblxuICAgICAgICAvLyB1bmNoZWNrIHByZXZpb3VzbHkgY2hlY2tlZFxuICAgICAgICBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSkuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAocm93ID09PSByb3dUb1RvZ2dsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJvdy5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNoZWNrZWQgPyBhZGRlZC5wdXNoKHJvd1RvVG9nZ2xlKSA6IHJlbW92ZWQucHVzaChyb3dUb1RvZ2dsZSk7XG5cbiAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkLCByZW1vdmVkKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCAvIFVuc2VsZWN0IGFsbCBzZWxlY3RhYmxlIHJvd3NcbiAgICAgKi9cbiAgICBfdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3Moc2VsZWN0QWxsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWRkZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcblxuICAgICAgICBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSkuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAocm93LmNoZWNrZWQgPT09IHNlbGVjdEFsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdy5jaGVja2VkID0gc2VsZWN0QWxsO1xuICAgICAgICAgICAgc2VsZWN0QWxsID8gYWRkZWQucHVzaChyb3cpIDogcmVtb3ZlZC5wdXNoKHJvdyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcblxuICAgICAgICB0aGlzLl9zaG91bGRDaGVja05ld1Jvd3MgPSBzZWxlY3RBbGw7XG5cbiAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkLCByZW1vdmVkLCB0cnVlKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENyZWF0ZSB0YWJsZSByb3cgc2VsZWN0aW9uIGV2ZW50XG4gICAgICovXG4gICAgX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZDogVGFibGVSb3dbXSwgcmVtb3ZlZDogVGFibGVSb3dbXSwgYWxsOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgY2hlY2tlZCB9KSA9PiBjaGVja2VkKVxuICAgICAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgICAgYWRkZWQ6IGFkZGVkLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgICAgICByZW1vdmVkOiByZW1vdmVkLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgICAgICBpbmRleDogYWRkZWQuY29uY2F0KHJlbW92ZWQpLm1hcCgoeyBpbmRleCB9KSA9PiBpbmRleCksXG4gICAgICAgICAgICBhbGxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DZWxsQ2xpY2soY29sSWR4OiBudW1iZXIsIHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdy5zdGF0ZSA9PT0gJ3JlYWRvbmx5JyAmJiBpc1RyZWVSb3dGaXJzdENlbGwoY29sSWR4LCByb3cpKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVHcm91cFJvdyhyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Sb3dDbGljayhyb3c6IFRhYmxlUm93PFQ+IHwgbnVsbCwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LnN0YXRlICE9PSAncmVhZG9ubHknKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50ICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdGFiYmFibGVFbGVtZW50ID0gdGhpcy5fdGFiYmFibGVTZXJ2aWNlLmdldFRhYmJhYmxlRWxlbWVudChldmVudFRhcmdldCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgaWYgKHRhYmJhYmxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGFiYmFibGVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGFiYmFibGVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgdGhpcy5fZW1pdFJvd05hdmlnYXRlKHJvdyk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93QWN0aXZhdGUocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dBY3RpdmF0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yb3dzQWN0aXZhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gICAgICAgIHRoaXMucm93QWN0aXZhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRXhwYW5kL0NvbGxhcHNlIGdyb3VwIHJvd1xuICAgICAqL1xuICAgIF90b2dnbGVHcm91cFJvdyhncm91cFJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kYWJsZVRhYmxlUm93KGdyb3VwUm93KTtcblxuICAgICAgICBjb25zdCBncm91cFJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2YoZ3JvdXBSb3cpO1xuICAgICAgICB0aGlzLnJvd1RvZ2dsZU9wZW5TdGF0ZS5lbWl0KFxuICAgICAgICAgICAgbmV3IFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQoZ3JvdXBSb3dJbmRleCwgZ3JvdXBSb3cudmFsdWUsIGdyb3VwUm93LmV4cGFuZGVkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dOYXZpZ2F0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghcm93Lm5hdmlnYXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodE5hdmlnYXRlZFJvdykge1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVkUm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93TmF2aWdhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggZGF0YSBzb3VyY2UgZGF0YS4gKi9cbiAgICBmZXRjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlLmZldGNoKHRoaXMuZ2V0VGFibGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVGFibGVSb3dzQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZVRhYmxlUm93cygpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2dnbGVFeHBhbmRhYmxlVGFibGVSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93LCBmb3JjZUZldGNoID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgcm93VG9Ub2dnbGUuZm9yY2VGZXRjaCA9IGZvcmNlRmV0Y2g7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gKHJvd1RvVG9nZ2xlLmV4cGFuZGVkID0gIXJvd1RvVG9nZ2xlLmV4cGFuZGVkKTtcblxuICAgICAgICBmaW5kUm93Q2hpbGRyZW4ocm93VG9Ub2dnbGUsIHRoaXMuX3RhYmxlUm93cykuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAvLyBpZiBwYXJlbnQgaXMgY29sbGFwc2VkIHdlIHdhbnQgdG8gaGlkZSBhbGwgbmVzdGVkIGl0ZW1zXG4gICAgICAgICAgICBpZiAoIWV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHBhcmVudCBpcyBleHBhbmRlZCwgd2Ugd2FudCB0byBzaG93IG9ubHkgaXRlbXMgd2hpY2ggZGlyZWN0IHBhcmVudHMgYXJlIGV4cGFuZGVkIGFzIHdlbGxcbiAgICAgICAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhZ2V0Um93UGFyZW50cyhyb3csIHJvd1RvVG9nZ2xlKS5ldmVyeSgocGFyZW50KSA9PiBwYXJlbnQuZXhwYW5kZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uU3B5SW50ZXJzZWN0KGludGVyc2VjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghaW50ZXJzZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYWdlOiB7IGN1cnJlbnRQYWdlLCBwYWdlU2l6ZSB9XG4gICAgICAgIH0gPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtcyA9IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUudG90YWxJdGVtcyQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyAocGFnZVNpemUgfHwgdG90YWxJdGVtcykpO1xuICAgICAgICBpZiAoY3VycmVudFBhZ2UgPj0gbGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UoY3VycmVudFBhZ2UgKyAxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIE1hbnVhbGx5IHVwZGF0ZSBpbmRleCBhZnRlciB3ZSBhZGQgbmV3IGl0ZW1zIHRvIHRoZSBtYWluIGFycmF5ICovXG4gICAgcHJpdmF0ZSBfcmVJbmRleFRhYmxlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKHJvdy5pbmRleCA9IGluZGV4KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93c1BpcGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pdGVtcyRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFwIHNvdXJjZSBpdGVtcyB0byB0YWJsZSByb3dzXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoc291cmNlOiBUW10pID0+IHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZSkpLFxuICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgaXRlbXMgdG8gc2hvdyBncm91cHNcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChyb3dzOiBUYWJsZVJvd1tdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RyZWVUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb2Yocm93cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3RhYmxlU2VydmljZS5ncm91cFJ1bGVzJC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoZ3JvdXBSdWxlcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLmdyb3VwVGFibGVSb3dzKHJvd3MsIGdyb3VwUnVsZXMudmFsdWVzKCksIGdyb3VwUnVsZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm93cyA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTY3JvbGxpbmcgJiYgdGhpcy5nZXRUYWJsZVN0YXRlKCkucGFnZS5jdXJyZW50UGFnZSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFsuLi50aGlzLl90YWJsZVJvd3MsIC4uLnJvd3NdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByb3dzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3Mocm93cyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmNoaWxkSXRlbXMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd01hcCA9IG5ldyBNYXA8VGFibGVSb3c8VD4sIFRhYmxlUm93PFQ+W10+KCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd0l0ZW1zLCBwYXJlbnRSb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd01hcC5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Um93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHJvd0l0ZW1zKS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cucGFyZW50ID0gcGFyZW50Um93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubGV2ZWwgPSBwYXJlbnRSb3cubGV2ZWwgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gIXBhcmVudFJvdy5leHBhbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvd01hcDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChyb3dzLCBwYXJlbnRSb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLnNwbGljZShwYXJlbnRSb3cuaW5kZXggKyBwYXJlbnRSb3cuY2hpbGRyZW4ubGVuZ3RoICsgMSwgMCwgLi4ucm93cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Um93LmNoaWxkcmVuLnB1c2goLi4ucm93cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Um93Lmxhc3RDaGlsZCA9IHBhcmVudFJvdy5jaGlsZHJlbltwYXJlbnRSb3cuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlU3RhdGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZVN0YXRlQ2hhbmdlcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNldENoYW5nZWQuZW1pdCh0aGlzLmdldEN1cnJlbnRQcmVzZXQoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5uZWVkRmV0Y2gkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0ZSkgPT4gISFzdGF0ZSAmJiAhIXRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlLmZldGNoKHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmdyb3VwUnVsZXMkLnN1YnNjcmliZSgocnVsZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0dyb3VwVGFibGUgPSBydWxlcy5zaXplID4gMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoeyB0eXBlLCBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbHVtbnMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KG5ldyBUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KG5ldyBUYWJsZUZpbHRlckNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnJlZXplJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRnJlZXplLmVtaXQobmV3IFRhYmxlQ29sdW1uRnJlZXplRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZml4ZWQgPSAhIXRoaXMuZml4ZWQgfHwgISF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgISF0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2VhcmNoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cENoYW5nZS5lbWl0KG5ldyBUYWJsZUdyb3VwQ2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdwYWdlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KG5ldyBUYWJsZVBhZ2VDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQobmV3IFRhYmxlU29ydENoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVSb3dTdGF0ZUNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UYWJsZVJvd1N0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5zY3JvbGxUb092ZXJsYXBwZWRDZWxsJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvT3ZlcmxhcHBlZENlbGwoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UubG9hZENoaWxkUm93cyQuc3Vic2NyaWJlKChyb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmNoaWxkRGF0YVNvdXJjZT8uZGF0YVByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAucm93Q2hpbGRyZW5Db3VudChyb3csIHN0YXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChjb3VudCkgPT4gcm93LmZvcmNlRmV0Y2ggfHwgY291bnQgPiByb3cuY2hpbGRyZW4ubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4gKHJvdy5mb3JjZUZldGNoID0gZmFsc2UpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogTWF0aC5mbG9vcihyb3cuY2hpbGRyZW4ubGVuZ3RoIC8gc3RhdGUucGFnZS5wYWdlU2l6ZSkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZS5wYWdlLnBhZ2VTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlPy5mZXRjaChyb3dTdGF0ZSwgW3Jvd10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLmNlbGxDbGlja2VkJC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uQ2VsbENsaWNrKGV2dC5pbmRleCwgZXZ0LnJvdyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnRvZ2dsZUFsbFNlbGVjdGFibGVSb3dzJC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUFsbFNlbGVjdGFibGVSb3dzKGV2dCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnRvZ2dsZVJvdyQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2dC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZVJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVHcm91cFJvdyhldnQucm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGVNdWx0aVNlbGVjdFJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVNdWx0aVNlbGVjdFJvdyhldnQucm93LCBldnQuZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyhldnQucm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2U6IFRbXSk6IFRhYmxlUm93PFQ+W10ge1xuICAgICAgICBsZXQgcm93czogVGFibGVSb3c8VD5bXTtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmVlVGFibGUpIHtcbiAgICAgICAgICAgIHJvd3MgPSB0aGlzLl9jcmVhdGVUcmVlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd3MgPSBjb252ZXJ0T2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dOYXZpZ2F0YWJsZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHRoaXMucm93Q29tcGFyYXRvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRDaGVja05ld1Jvd3MgJiYgdGhpcy5mb3JjZUNoZWNrZWRBbGxTdGF0ZSkge1xuICAgICAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICByb3cuY2hlY2tlZCA9IHJvdy5jaGVja2VkIHx8IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb3dzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlVHJlZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZTogVFtdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzb3VyY2VbMF0gYXMgYW55O1xuXG4gICAgICAgIGlmIChpc1RhYmxlUm93KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3Qoc291cmNlIGFzIFRhYmxlUm93W10sIHRoaXMucm93TmF2aWdhdGFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSnNPYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VHJlZU9iamVjdHNUb1RhYmxlUm93cyhcbiAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93cyxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0NvbXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGlvbktleSxcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoaWxkcmVuS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZFN0YXRlS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMucm93TmF2aWdhdGFibGUsXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUcmlzdGF0ZU1vZGVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VGFibGVSb3dzKHJvd3MgPSB0aGlzLl9kYXRhU291cmNlVGFibGVSb3dzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MgPSByb3dzO1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MgPSBbLi4udGhpcy5fbmV3VGFibGVSb3dzLCAuLi50aGlzLl9kYXRhU291cmNlVGFibGVSb3dzXTtcbiAgICAgICAgdGhpcy5fcmVJbmRleFRhYmxlUm93cygpO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG5cbiAgICAgICAgdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSB0cnVlO1xuXG4gICAgICAgIGlmIChyb3dzLmxlbmd0aCAmJiAhdGhpcy5fY29sdW1uc1dpZHRoU2V0KSB7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICAgICAgdGhpcy5fY29sdW1uc1dpZHRoU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVWaXNpYmxlVGFibGVSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NWaXNpYmxlID0gdGhpcy5fdGFibGVSb3dzLmZpbHRlcigocm93KSA9PiAhcm93LmhpZGRlbik7XG4gICAgICAgIGlmICh0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFJvd3NJblZpZXdwb3J0KDAsIHRoaXMuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5jb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3Rpb25Db2x1bW5XaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IEFycmF5LmZyb20oUk9XX0hFSUdIVC52YWx1ZXMoKSkuaW5jbHVkZXModGhpcy5yb3dIZWlnaHQpKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLl9yb3dIZWlnaHRNYW51YWxseVNldClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY29udGVudERlbnNpdHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBST1dfSEVJR0hULmdldChjb250ZW50RGVuc2l0eSkgPz8gUk9XX0hFSUdIVC5nZXQoQ29udGVudERlbnNpdHlNb2RlLkNPWlkpITtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUucm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Db2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgY29uc3QgcHJldkNvbHVtbnMgPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC52YWx1ZS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbHVtbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4udmlzaWJsZSAmJiAhcHJldkNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlU3RhdGUoKS5jb2x1bW5zO1xuXG4gICAgICAgICAgICB0aGlzLl9idWlsZENvbHVtbnNNYXAoY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC5uZXh0KGNvbHVtbnMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbFN0YXRlU2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb2x1bW5zKFsuLi5zdGF0ZUNvbHVtbnMsIC4uLm5ld0NvbHVtbnNdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFN0YXRlU2V0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbHVtbnMgPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC52YWx1ZS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIWVxdWFsKHVwZGF0ZWRDb2x1bW5zLCBjdXJyZW50Q29sdW1ucykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc3RhdGVDaGFuZ2UkLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiB7IHByZXZpb3VzOiBjdXJyZW50Q29sdW1ucywgY3VycmVudDogdXBkYXRlZENvbHVtbnMgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb2x1bW5zQ2hhbmdlJC5uZXh0KHsgcHJldmlvdXM6IGN1cnJlbnRDb2x1bW5zLCBjdXJyZW50OiB1cGRhdGVkQ29sdW1ucyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCB2aXNpYmxlIGNvbHVtbnMgZm9yIHJlbmRlcmluZyBwdXJwb3NlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgZ3JvdXBCeSB9ID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zVG9IaWRlID0gZ3JvdXBCeS5maWx0ZXIoKHsgc2hvd0FzQ29sdW1uIH0pID0+ICFzaG93QXNDb2x1bW4pLm1hcCgoeyBmaWVsZCB9KSA9PiBmaWVsZCk7XG5cbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IGNvbHVtbnMgLy8gbmVlZCB0byBzdGFydCBtYXBwaW5nIGZyb20gc3RhdGUuY29sdW1ucyBsaXN0IHRvIGtlZXAgcmlnaHQgb3JkZXJcbiAgICAgICAgICAgIC5tYXAoKG5hbWUpID0+IGNvbHVtbnNEZWZpbml0aW9uLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUpKVxuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKTogY29sdW1uIGlzIFRhYmxlQ29sdW1uID0+ICEhY29sdW1uKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBrZXkgfSkgPT4gIWdyb3VwZWRDb2x1bW5zVG9IaWRlLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICAgIGNvbnN0IFt2aXNpYmxlQ29sdW1ucywgcG9wcGluZ0NvbHVtbnNdID0gYWxsQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnJlc3BvbnNpdmVTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjW2NvbHVtbi5yZXNwb25zaXZlU3RhdGUgPT09ICd2aXNpYmxlJyA/IDAgOiAxXS5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbW10sIFtdXSBhcyBUYWJsZUNvbHVtbltdW11cbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VmlzaWJsZUNvbHVtbnModmlzaWJsZUNvbHVtbnMpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0UG9wcGluZ0NvbHVtbnMocG9wcGluZ0NvbHVtbnMpO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGFibGVDb2x1bW5zTGVuZ3RoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVUYWJsZUNvbHVtbnNMZW5ndGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uc0xlbmd0aCA9IHRoaXMuX3Zpc2libGVDb2x1bW5zLmxlbmd0aCArICh0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duID8gMSA6IDApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNTaG93bk5hdmlnYXRpb25Db2x1bW4kLm5leHQodGhpcy5fdGFibGVSb3dzLnNvbWUoKHRhYmxlUm93KSA9PiB0YWJsZVJvdy5uYXZpZ2F0YWJsZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0RnJlZXphYmxlSW5mbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZnJlZXphYmxlQ29sdW1ucyA9IGdldEZyZWV6YWJsZUNvbHVtbnModGhpcy5fdmlzaWJsZUNvbHVtbnMsIHRoaXMuZnJlZXplQ29sdW1uc1RvKTtcbiAgICAgICAgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucyA9IGdldEZyZWV6YWJsZUVuZENvbHVtbnModGhpcy5fdmlzaWJsZUNvbHVtbnMsIHRoaXMuZnJlZXplRW5kQ29sdW1uc1RvKTtcbiAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLl9mcmVlemVkID0gdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5oYXMoY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgY29sdW1uLl9lbmRGcmVlemVkID0gdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5oYXMoY29sdW1uLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2J1aWxkQ29sdW1uc01hcChjb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5VG9Db2x1bW5NYXAgPSBuZXcgTWFwKGNvbHVtbnMubWFwKChjb2x1bW4pID0+IFtjb2x1bW4ua2V5LCBjb2x1bW5dKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDaGVja2VkQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlUm93cyA9IGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KTtcbiAgICAgICAgY29uc3QgdG90YWxTZWxlY3RlZCA9IHNlbGVjdGFibGVSb3dzLmZpbHRlcigocikgPT4gci5jaGVja2VkKTtcbiAgICAgICAgdGhpcy5fY2hlY2tlZEFsbCA9IHRvdGFsU2VsZWN0ZWQubGVuZ3RoID09PSBzZWxlY3RhYmxlUm93cy5sZW5ndGggJiYgc2VsZWN0YWJsZVJvd3MubGVuZ3RoICE9PSAwO1xuICAgICAgICB0aGlzLl9jaGVja2VkQW55ID0gdG90YWxTZWxlY3RlZC5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLl9jaGVja2VkU3RhdGUgPSB0aGlzLl9jaGVja2VkQWxsID8gdHJ1ZSA6IHRoaXMuX2NoZWNrZWRBbnkgPyBudWxsIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGFnYXRlcyB0cmlzdGF0ZSBzZWxlY3Rpb24gbW9kZSB0byB0aGUgdHJlZS4gSXQgc3RhcnRzIHdpdGggdXBkYXRpbmcgYSBzdGF0ZSBmb3IgYWxsIHRoZSBwYXJlbnRzIGFuZCB0aGVuXG4gICAgICogdG8gY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9hcHBseVRyaXN0YXRlU2VsZWN0aW9uKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVRyaXN0YXRlTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcGx5U2VsZWN0aW9uVG9QYXJlbnRzKHJvdywgYWRkZWRSb3dzLCByZW1vdmVkUm93cyk7XG4gICAgICAgIHRoaXMuX2FwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbihyb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlTZWxlY3Rpb25Ub1BhcmVudHMocm93OiBUYWJsZVJvdywgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLCByZW1vdmVkUm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudFJvdyA9IHJvdy5wYXJlbnQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmluZFJvd0NoaWxkcmVuKGN1cnJlbnRSb3csIHRoaXMuX3RhYmxlUm93cykuZmlsdGVyKChyKSA9PiByLnBhcmVudCA9PT0gY3VycmVudFJvdyk7XG4gICAgICAgICAgICBjb25zdCB0b3RhbENoZWNrZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsSW5kZXRlcm1pbmF0ZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyLmNoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDaGVja2VkLnB1c2gocik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyLmNoZWNrZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJbmRldGVybWluYXRlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkQWxsID0gdG90YWxDaGVja2VkLmxlbmd0aCA9PT0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEFueSA9IHRvdGFsQ2hlY2tlZC5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjdXJyZW50Um93LmNoZWNrZWQgPSBjaGVja2VkQWxsID8gdHJ1ZSA6IGNoZWNrZWRBbnkgfHwgdG90YWxJbmRldGVybWluYXRlLmxlbmd0aCA+IDAgPyBudWxsIDogZmFsc2U7XG4gICAgICAgICAgICBjdXJyZW50Um93LmNoZWNrZWQgfHwgY3VycmVudFJvdy5jaGVja2VkID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBhZGRlZFJvd3MucHVzaChjdXJyZW50Um93KVxuICAgICAgICAgICAgICAgIDogcmVtb3ZlZFJvd3MucHVzaChjdXJyZW50Um93KTtcblxuICAgICAgICAgICAgY3VycmVudFJvdyA9IGN1cnJlbnRSb3cucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4ocm93OiBUYWJsZVJvdywgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLCByZW1vdmVkUm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICBhcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4odGhpcy5fdGFibGVSb3dzLCByb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5zY3JvbGxlZCgpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMucGFnZVNjcm9sbGluZykpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBzY3JvbGxhYmxlLmdldFNjcm9sbFRvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTY3JvbGxlZC5lbWl0KHNjcm9sbFRvcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBoYXZpbmcgdHdvIHBsYWNlcyB0byByZWNvcmQgdGhpcyBwb3NzaXRpb24sIHdlIGNvdWxkIGp1c3Qgc3Vic2NyaWJlIG9uY2UuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVTdGF0ZSgpLnNjcm9sbFRvcFBvc2l0aW9uID0gc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm1hcmtGb3JDaGVjayQucGlwZShkZWJvdW5jZVRpbWUoNSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmRldGVjdENoYW5nZXMkLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVXaWR0aENoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl90YWJsZUNvbnRhaW5lclNjcm9sbFdpZHRoID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDZWxsTW9jaygpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UudXBkYXRlRnJvemVuQ29sdW1uc1dpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3RhYmxlU2Nyb2xsV2lkdGggPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDZWxsTW9jaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVDb250YWluZXJNb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmhpZGVSZXNpemVyKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTY3JvbGxQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLnNjcm9sbFRvcFBvc2l0aW9uIHx8IHRoaXMuX3RhYmxlUm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsYWJsZS5pbml0aWFsaXplU2Nyb2xsVG9wKHN0YXRlLnNjcm9sbFRvcFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzZXRzIGVkaXRhYmxlIHJvd3MgZGlzY2FyZGluZyB0aGUgZWRpdGFibGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNldEVkaXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gW107XG4gICAgICAgIHRoaXMuX2FkZGVkSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpO1xuICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTG9hZGluZ0FuZFJlZm9jdXNDZWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUxvYWRpbmckLnBpcGUoZmlsdGVyKChsb2FkaW5nU3RhdGUpID0+ICFsb2FkaW5nU3RhdGUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFibGVIZWFkZXJSZXNpemVyLmZvY3VzZWRDZWxsUG9zaXRpb24gJiYgdGhpcy5fZm9jdXNhYmxlR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZC5mb2N1c0NlbGwodGhpcy5fdGFibGVIZWFkZXJSZXNpemVyLmZvY3VzZWRDZWxsUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25ab25lRnJlZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX3NlbWFudGljSGlnaGxpZ2h0aW5nJC5uZXh0KHRoaXMuc2VtYW50aWNIaWdobGlnaHRpbmcpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgkLm5leHQodGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZWxlY3Rpb25Db2x1bW5XaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQ29sdW1uV2lkdGggPSB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duXG4gICAgICAgICAgICA/IFNFTEVDVElPTl9DT0xVTU5fV0lEVEguZ2V0KHRoaXMuY29udGVudERlbnNpdHlPYnNlcnZlci52YWx1ZSkgPz8gMFxuICAgICAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hlY2tDZWxsTW9jaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmNlbGxNb2NrVmlzaWJsZSQubmV4dChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5maXhlZFdpZHRoICYmXG4gICAgICAgICAgICAgICAgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IDApID4gKHRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IDApXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiQGlmICh0YWJsZVRvb2xiYXIpIHtcbiAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlVG9vbGJhci5jb250ZW50VGVtcGxhdGVSZWZcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiX3Rvb2xiYXJDb250ZXh0XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbn1cbjxmZC1idXN5LWluZGljYXRvclxuICAgIFtsb2FkaW5nXT1cIihfdGFibGVTZXJ2aWNlLnRhYmxlTG9hZGluZyQgfCBhc3luYykgPT09IHRydWUgJiYgX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgIFtibG9ja109XCJ0cnVlXCJcbj5cbiAgICA8IS0tIFRhYmxlIENvbnRhaW5lciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19jb250YWluZXJcIiAjdGFibGVDb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgQGlmIChlbmFibGVEcmFnUmVzaXplKSB7XG4gICAgICAgICAgICA8IS0tIFRhYmxlIGNvbHVtbiByZXNpemVyIGZvciB2aXN1YWxseSByZXByZXNlbnRpbmcgdGhlIHJlc2l6aW5nIHByb2Nlc3MgLS0+XG4gICAgICAgICAgICA8ZmRwLXRhYmxlLWNvbHVtbi1yZXNpemVyIGNsYXNzPVwiZmRwLXRhYmxlX19jb2x1bW4tcmVzaXplclwiPjwvZmRwLXRhYmxlLWNvbHVtbi1yZXNpemVyPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuPCEtLSBUYWJsZSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19ib2R5IGZkLXNjcm9sbGJhclwiXG4gICAgICAgIFtjbGFzcy5mZHAtdGFibGVfX2JvZHktLXZpcnR1YWwtc2Nyb2xsXT1cIiEhX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxcIlxuICAgICAgICBmZHBUYWJsZVNjcm9sbGFibGVcbiAgICAgICAgI3RhYmxlU2Nyb2xsYWJsZT1cInRhYmxlU2Nyb2xsYWJsZVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keUhlaWdodFwiXG4gICAgICAgIFtjbGFzcy5maXhlZC1oZWlnaHRdPVwiISFib2R5SGVpZ2h0XCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJwYWdlU2Nyb2xsaW5nID8gJ2ZlZWQnIDogbnVsbFwiXG4gICAgICAgIFtjbGFzcy5mZC10YWJsZS0tZml4ZWRdPVwiX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCBmaXhlZFwiXG4gICAgPlxuICAgICAgICA8dGFibGVcbiAgICAgICAgICAgIGZkLXRhYmxlXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cImlzVHJlZVRhYmxlID8gJ3RyZWVncmlkJyA6ICdncmlkJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fYm9keS10YWJsZVwiXG4gICAgICAgICAgICBbYWxsQ2VsbHNGb2N1c2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcG9wSW5dPVwiX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlLS1uby1vdXRlci1ib3JkZXJdPVwibm9PdXRlckJvcmRlcnNcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0aGVhZCBmZC10YWJsZS1oZWFkZXIgY2xhc3M9XCJmZHAtdGFibGVfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtaGVhZGVyLXJvd1xuICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBbZml4ZWRdPVwiZml4ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbaXNTaG93blNlbGVjdGlvbkNvbHVtbl09XCJpc1NlbGVjdGlvbkNvbHVtblNob3duXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRTdGF0ZV09XCJfY2hlY2tlZFN0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiX3NlbGVjdGlvbk1vZGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29sdW1uV2lkdGhdPVwiX3NlbGVjdGlvbkNvbHVtbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUNvbHVtbnNUb109XCJmcmVlemVDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICBbZnJlZXplRW5kQ29sdW1uc1RvXT1cImZyZWV6ZUVuZENvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIl9vblJvd0NsaWNrKG51bGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vblJvd0NsaWNrKG51bGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVNlbGVjdGlvbkNoZWNrYm94XT1cIl9kYXRhU291cmNlVGFibGVSb3dzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgQGlmICghIV90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAmJiBfdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDx0Ym9keVxuICAgICAgICAgICAgICAgICAgICBmZC10YWJsZS1ib2R5XG4gICAgICAgICAgICAgICAgICAgIGZka0RuZExpc3RcbiAgICAgICAgICAgICAgICAgICAgI3RhYmxlQm9keVxuICAgICAgICAgICAgICAgICAgICBbZHJhZ292ZXJQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnb3ZlclByZWRpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcm9wUHJlZGljYXRlXT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcFByZWRpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtub0JvcmRlclhdPVwibm9Cb3JkZXJYIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFtub0JvcmRlclldPVwibm9Cb3JkZXJZIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCJwYWdlU2Nyb2xsaW5nID8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBbZHJvcE1vZGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wTW9kZSA/PyAnZ3JvdXAnXCJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1Ecm9wcGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BJdGVtRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRyb3BQcmVkaWNhdGVDYWxjdWxhdGluZyk9XCJfY2FsY3VsYXRpbmdMb2FkaW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJvcENhbmNlbGxlZCk9XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BDYW5jZWxsZWQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChyb3dJbmRleCBvZiBfdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyOyB0cmFjayBfcm93VHJhY2tCeSgkaW5kZXgsIHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfdGFibGVSb3dzVmlzaWJsZVtyb3dJbmRleF07IGFzIHJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHJvdy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnZ3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtZ3JvdXAtcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cInJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJZF09XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleVRvQ29sdW1uTWFwXT1cIl9rZXlUb0NvbHVtbk1hcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlQ29sdW1uc0xlbmd0aF09XCJfdGFibGVDb2x1bW5zTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlR3JvdXBSb3cpPVwiX3RvZ2dsZUdyb3VwUm93KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfZW1pdFJvd0FjdGl2YXRlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0RuZEl0ZW1dPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwbHlEcmFnSXRlbUNsYXNzXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3Nlczogcm93c0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzYWJsZV09XCJyb3dzQWN0aXZhYmxlIHx8ICEhcm93Lm5hdmlnYXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG92ZXJhYmxlXT1cInJvd3NBY3RpdmFibGUgfHwgaXNTZWxlY3Rpb25Db2x1bW5TaG93biB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2YWJsZV09XCJyb3dzQWN0aXZhYmxlIHx8ICEhcm93Lm5hdmlnYXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cInJvd0luZGV4ID09PSBfbmF2aWdhdGVkUm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRBY3RpdmVdPVwiaGlnaGxpZ2h0TmF2aWdhdGVkUm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJpc1RyZWVUYWJsZSA/IHJvdy5sZXZlbCArIDEgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIl9vblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0ZWQpPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcFN0YXJ0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYWluXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZV9fcm93LS1kcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIl9zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZUtleV09XCJzZWxlY3RhYmxlS2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlVHJpc3RhdGVNb2RlXT1cImVuYWJsZVRyaXN0YXRlTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeGVkXT1cImZpeGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29sdW1uV2lkdGhdPVwiX3NlbGVjdGlvbkNvbHVtbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJlZXplQ29sdW1uc1RvXT1cImZyZWV6ZUNvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUVuZENvbHVtbnNUb109XCJmcmVlemVFbmRDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cudHlwZSA9PT0gJ2l0ZW0nICYmIF9wb3BwaW5nQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLXBvcHBpbmctcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Vjb25kYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3cuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3Nlczogcm93c0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2dnbGVHcm91cFJvdyk9XCJfdG9nZ2xlR3JvdXBSb3coJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrZWQpPVwiX29uQ2VsbENsaWNrKCRldmVudC5pbmRleCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cuY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmIChyb3cuY2hpbGRJdGVtc0xvYWRpbmckIHwgYXN5bmMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsICpmZGtSZXBlYXQ9XCJfdGFibGVDb2x1bW5zTGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5dPVwiJ2F1dG8gMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lcz1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjYwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExhc3QgcmVuZGVyZWQgY2hpbGQgcm93LiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5wYXJlbnQ/Lmxhc3RDaGlsZD8uaW5kZXggPT09IHJvdy5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRhYmxlX19pbnRlcnNlY3Rpb24tc3B5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJzZWN0ZWQpPVwiJGV2ZW50ICYmIF90YWJsZVJvd1NlcnZpY2UubG9hZENoaWxkUm93cyhyb3cucGFyZW50ISlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJwYWdlU2Nyb2xsaW5nVGhyZXNob2xkICogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChwYWdlU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdGFibGVfX2ludGVyc2VjdGlvbi1zcHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVyc2VjdGVkKT1cIiRldmVudCAmJiBfb25TcHlJbnRlcnNlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJwYWdlU2Nyb2xsaW5nVGhyZXNob2xkICogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQGlmICghX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ZpcnN0TG9hZGluZ0RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGZkLXRhYmxlLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93ICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luXT1cIidhdXRvIDAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lcz1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI2MCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGZkLXRhYmxlLWJvZHkgY2xhc3M9XCJmZHAtdGFibGVfX2VtcHR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwiZmQtdGFibGVfX2NlbGwtLW5vLWRhdGFcIiBbYXR0ci5jb2xzcGFuXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC10YWJsZV9fZW1wdHktdGFibGUtbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjbm9EYXRhV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJmZHAtdGFibGUtbm8tZGF0YS13cmFwcGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFub0RhdGFXcmFwcGVyLmhhc0NoaWxkTm9kZXMoKSAmJiBfdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eVRhYmxlTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUuZGVmYXVsdEVtcHR5TWVzc2FnZScgfCBmZFRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub1Zpc2libGVDb2x1bW5zTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGxhdGZvcm1UYWJsZS5ub1Zpc2libGVDb2x1bW5zTWVzc2FnZScgfCBmZFRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChwYWdlU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZmQtdGFibGVfX2JvZHlfX2ZvY3VzLW1vY2tcIj48L3Rib2R5PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChfdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIDwhLS0gdGhlIHRib2R5IGVsZW1lbnQgYmVsb3cgaXMgc28gdGhlIHNjcm9sbGJhciByZW5kZXJzIGNvcnJlY3RseSAtLT5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMTAwJVwiIFtzdHlsZS5oZWlnaHQucHhdPVwiX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUhLnZpcnR1YWxTY3JvbGxUb3RhbEhlaWdodFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48IS0tIEVtcHR5IFRhYmxlIE1lc3NhZ2UgLS0+XG4iXX0=
|