@provoly/dashboard 1.4.7 → 1.4.8
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/dataset/components/dataset-detail/dataset-detail.component.d.ts +5 -3
- package/esm2022/admin/admin-routing.module.mjs +4 -4
- package/esm2022/admin/admin.module.mjs +4 -4
- package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-edit/admin-abac-rules-edit.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-form/admin-abac-rules-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-new/admin-abac-rules-new.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-view/admin-abac-rules-view.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/admin-abac-rules.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/components/composed-condition/composed-condition.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/components/select-attribute/select-attribute.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/components/select-metadata/select-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/store/abac-rules.effects.mjs +3 -3
- package/esm2022/admin/components/admin-abac-rules/store/abac-rules.service.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-customize/admin-classes-customize.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-edit/admin-classes-edit.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-new/admin-classes-new.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-select/admin-classes-select.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-edit/admin-attributes-edit.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-new/admin-attributes-new.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-select/admin-attributes-select.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/store/admin-class.effects.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/admin-dataset.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/admin-edit-dataset/admin-edit-dataset.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/admin-form-dataset/admin-form-dataset.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/admin-new-dataset/admin-new-dataset.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.effects.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.service.mjs +3 -3
- package/esm2022/admin/components/admin-environment/admin-environment-form/admin-environment-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-environment/admin-environment-new/admin-environment-new.component.mjs +3 -3
- package/esm2022/admin/components/admin-environment/admin-environment-select/admin-environment-select.component.mjs +3 -3
- package/esm2022/admin/components/admin-environment/admin-environment-update/admin-environment-update.component.mjs +3 -3
- package/esm2022/admin/components/admin-environment/admin-environment.component.mjs +3 -3
- package/esm2022/admin/components/admin-environment/store/environment.effects.mjs +3 -3
- package/esm2022/admin/components/admin-fields/admin-fields-edit/admin-fields-edit.component.mjs +3 -3
- package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-fields/admin-fields-new/admin-fields-new.component.mjs +3 -3
- package/esm2022/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.mjs +3 -3
- package/esm2022/admin/components/admin-fields/admin-fields.component.mjs +3 -3
- package/esm2022/admin/components/admin-fields/store/fields.effects.mjs +3 -3
- package/esm2022/admin/components/admin-layout/admin-layout.component.mjs +3 -3
- package/esm2022/admin/components/admin-links/admin-links-new/admin-links-new.component.mjs +3 -3
- package/esm2022/admin/components/admin-links/admin-links.component.mjs +3 -3
- package/esm2022/admin/components/admin-links/store/links.effects.mjs +3 -3
- package/esm2022/admin/components/admin-menu/admin-menu.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata/admin-edit-metadata/admin-edit-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata/admin-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata/admin-new-metadata/admin-new-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata/admin-select-metadata/admin-select-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata/shared/list-metadata/list-metadata.module.mjs +4 -4
- package/esm2022/admin/components/admin-metadata/shared/list-metadata/pry-list-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-rules/admin-edit-metadata-rules/admin-edit-metadata-rules.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-rules/admin-metadata-rules.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-rules/admin-new-metadata-rules/admin-new-metadata-rules.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-rules/admin-select-metadata-rules/admin-select-metadata-rules.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-rules/store/metadata-rules.effects.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-user/admin-metadata-user.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-user/admin-user-edit-metadata/admin-user-edit-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-user/admin-user-new-metadata/admin-user-new-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-user/admin-user-select-metadata/admin-user-select-metadata.component.mjs +3 -3
- package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.effects.mjs +3 -3
- package/esm2022/admin/components/admin-predicates/admin-predicates-form/admin-predicates-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-predicates/admin-predicates-new/admin-predicates-new.component.mjs +3 -3
- package/esm2022/admin/components/admin-predicates/admin-predicates-select/admin-predicates-select.component.mjs +3 -3
- package/esm2022/admin/components/admin-predicates/admin-predicates-update/admin-predicates-update.component.mjs +3 -3
- package/esm2022/admin/components/admin-predicates/admin-predicates.component.mjs +3 -3
- package/esm2022/admin/components/admin-predicates/store/predicates.effects.mjs +3 -3
- package/esm2022/admin/components/admin-relation-types/admin-relation-types-modal/admin-relation-types-modal.component.mjs +3 -3
- package/esm2022/admin/components/admin-relation-types/admin-relation-types-select/admin-relation-types-select.component.mjs +3 -3
- package/esm2022/admin/components/admin-relation-types/admin-relation-types.component.mjs +3 -3
- package/esm2022/admin/components/admin-title/admin-title.component.mjs +3 -3
- package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +3 -3
- package/esm2022/admin/components/admin-user/admin-user.component.mjs +3 -3
- package/esm2022/admin/components/admin-user/store/admin-user.effects.mjs +3 -3
- package/esm2022/admin/components/admin.component.mjs +3 -3
- package/esm2022/admin/components/association/association.component.mjs +3 -3
- package/esm2022/admin/components/shared/add-category-modal/add-category-modal.component.mjs +3 -3
- package/esm2022/admin/store/admin.effects.mjs +3 -3
- package/esm2022/admin/store/admin.service.mjs +3 -3
- package/esm2022/components/card/card.component.mjs +18 -18
- package/esm2022/components/card/card.module.mjs +4 -4
- package/esm2022/components/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/components/checkbox/checkbox.module.mjs +4 -4
- package/esm2022/components/color-picker/color-picker.component.mjs +3 -3
- package/esm2022/components/color-picker/color-picker.module.mjs +4 -4
- package/esm2022/components/data-format/data-format.module.mjs +4 -4
- package/esm2022/components/data-format/data-format.pipe.mjs +3 -3
- package/esm2022/components/expand-panel/expand-panel.component.mjs +6 -6
- package/esm2022/components/expand-panel/expand-panel.module.mjs +4 -4
- package/esm2022/components/filter/filter.module.mjs +4 -4
- package/esm2022/components/filter/filter.pipe.mjs +3 -3
- package/esm2022/components/metadata-editor/metadata-editor.component.mjs +3 -3
- package/esm2022/components/metadata-editor/metadata-editor.module.mjs +4 -4
- package/esm2022/components/metadata-editor/store/metadata.effects.mjs +3 -3
- package/esm2022/components/metadata-editor/store/metadata.service.mjs +3 -3
- package/esm2022/components/metadata-editor/style/css.component.mjs +3 -3
- package/esm2022/components/page-loader/page-loader.component.mjs +3 -3
- package/esm2022/components/page-loader/page-loader.module.mjs +4 -4
- package/esm2022/components/paginator/paginator.component.mjs +3 -3
- package/esm2022/components/paginator/paginator.module.mjs +4 -4
- package/esm2022/components/paginator/style/css.component.mjs +3 -3
- package/esm2022/components/scheme-picker/scheme-picker.component.mjs +4 -4
- package/esm2022/components/scheme-picker/scheme-picker.module.mjs +4 -4
- package/esm2022/components/scheme-picker/scheme.service.mjs +3 -3
- package/esm2022/components/stepper/step/step.component.mjs +3 -3
- package/esm2022/components/stepper/step-title.directive.mjs +3 -3
- package/esm2022/components/stepper/stepper.component.mjs +3 -3
- package/esm2022/components/stepper/stepper.module.mjs +4 -4
- package/esm2022/components/text-editor/component/text-editor.component.mjs +3 -3
- package/esm2022/components/text-editor/mdToHtml.pipe.mjs +3 -3
- package/esm2022/components/text-editor/service/text-editor.service.mjs +3 -3
- package/esm2022/components/text-editor/style/css.component.mjs +3 -3
- package/esm2022/components/text-editor/text-editor.module.mjs +4 -4
- package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +16 -10
- package/esm2022/dataset/components/dataset-version-form/dataset-version-form.component.mjs +3 -3
- package/esm2022/dataset/components/dataset.component.mjs +3 -3
- package/esm2022/dataset/dataset.module.mjs +4 -4
- package/esm2022/dataset/style/css.component.mjs +3 -3
- package/esm2022/filters/autocomplete/autocomplete.component.mjs +8 -5
- package/esm2022/filters/autocomplete/autocomplete.module.mjs +4 -4
- package/esm2022/filters/autocomplete/style/css.component.mjs +3 -3
- package/esm2022/filters/date/date-filter.component.mjs +5 -5
- package/esm2022/filters/date/date-filter.module.mjs +4 -4
- package/esm2022/filters/list/list-filter.component.mjs +6 -6
- package/esm2022/filters/list/list-filter.module.mjs +7 -7
- package/esm2022/filters/list/style/css.component.mjs +3 -3
- package/esm2022/filters/number/number-filter.component.mjs +11 -5
- package/esm2022/filters/number/number-filter.module.mjs +4 -4
- package/esm2022/filters/text/text-filter.component.mjs +11 -5
- package/esm2022/filters/text/text-filter.module.mjs +4 -4
- package/esm2022/import/components/form/import-form.component.mjs +3 -3
- package/esm2022/import/components/list/import-list.component.mjs +3 -3
- package/esm2022/import/components/version-modal/version-modal.component.mjs +3 -3
- package/esm2022/import/import-routing.module.mjs +4 -4
- package/esm2022/import/import.module.mjs +4 -4
- package/esm2022/import/store/import.effects.mjs +3 -3
- package/esm2022/import/store/import.service.mjs +3 -3
- package/esm2022/import/style/css.component.mjs +3 -3
- package/esm2022/lib/core/access/access.directive.mjs +3 -3
- package/esm2022/lib/core/access/access.guard.mjs +3 -3
- package/esm2022/lib/core/access/access.service.mjs +3 -3
- package/esm2022/lib/core/auth/geoAuth.service.mjs +3 -3
- package/esm2022/lib/core/components/about/about.component.mjs +3 -3
- package/esm2022/lib/core/components/about/pry-about.module.mjs +4 -4
- package/esm2022/lib/core/components/accordion/accordion-item/accordion-item.component.mjs +3 -3
- package/esm2022/lib/core/components/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/core/components/base-layout/base-layout.component.mjs +3 -3
- package/esm2022/lib/core/components/base-menu/base-menu.component.mjs +3 -3
- package/esm2022/lib/core/components/base-toolbox/base-toolbox.component.mjs +3 -3
- package/esm2022/lib/core/components/base-toolbox-action/base-toolbox-action.component.mjs +3 -3
- package/esm2022/lib/core/components/chips-selector/chips-selector.component.mjs +3 -3
- package/esm2022/lib/core/components/chips-selector/chips-selector.module.mjs +4 -4
- package/esm2022/lib/core/components/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/core/components/date-picker/date-picker.module.mjs +4 -4
- package/esm2022/lib/core/components/date-picker/date-range-highlight.pipe.mjs +3 -3
- package/esm2022/lib/core/components/date-picker/time-picker/loop-scroll-column/loop-scroll-column.component.mjs +3 -3
- package/esm2022/lib/core/components/date-picker/time-picker/time-picker.component.mjs +3 -3
- package/esm2022/lib/core/components/edit-input/edit-input.component.mjs +3 -3
- package/esm2022/lib/core/components/edit-input/edit-input.module.mjs +4 -4
- package/esm2022/lib/core/components/ellipsis.directive.mjs +3 -3
- package/esm2022/lib/core/components/hidden-when-overlay/hidden-when-overlay.directive.mjs +3 -3
- package/esm2022/lib/core/components/hidden-when-overlay/hidden-when-overlay.module.mjs +4 -4
- package/esm2022/lib/core/components/icon/icon.component.mjs +3 -3
- package/esm2022/lib/core/components/icon/icon.module.mjs +4 -4
- package/esm2022/lib/core/components/modal/modal.component.mjs +3 -3
- package/esm2022/lib/core/components/modal/pry-modal.module.mjs +4 -4
- package/esm2022/lib/core/components/nq-color-selector/nq-color-selector.component.mjs +3 -3
- package/esm2022/lib/core/components/overlay/dialog-confirm.component.mjs +3 -3
- package/esm2022/lib/core/components/overlay/dialog.service.mjs +3 -3
- package/esm2022/lib/core/components/overlay/overlay.directive.mjs +3 -3
- package/esm2022/lib/core/components/overlay/overlay.module.mjs +4 -4
- package/esm2022/lib/core/components/range/range.component.mjs +3 -3
- package/esm2022/lib/core/components/range/range.module.mjs +4 -4
- package/esm2022/lib/core/components/select/select.component.mjs +12 -6
- package/esm2022/lib/core/components/select/select.module.mjs +4 -4
- package/esm2022/lib/core/components/select-image/select-image.component.mjs +3 -3
- package/esm2022/lib/core/components/share/access-rights-share/access-rights-share.component.mjs +4 -4
- package/esm2022/lib/core/components/share/access-rights-share-modal/access-rights-share-modal.component.mjs +3 -3
- package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +3 -3
- package/esm2022/lib/core/components/share/legacy-share/share.component.mjs +4 -4
- package/esm2022/lib/core/components/share/share.module.mjs +4 -4
- package/esm2022/lib/core/components/snackbar/snackbar/snackbar.component.mjs +3 -3
- package/esm2022/lib/core/components/snackbar/snackbar.module.mjs +4 -4
- package/esm2022/lib/core/components/snackbar/snackbar.service.mjs +3 -3
- package/esm2022/lib/core/components/sort/sort-data.pipe.mjs +3 -3
- package/esm2022/lib/core/components/sort/sort-header/sort-header.component.mjs +3 -3
- package/esm2022/lib/core/components/sort/sort-header.directive.mjs +3 -3
- package/esm2022/lib/core/components/sort/sort-table.directive.mjs +3 -3
- package/esm2022/lib/core/components/sort/sort.module.mjs +4 -4
- package/esm2022/lib/core/components/status-modal/status-modal.component.mjs +3 -3
- package/esm2022/lib/core/components/status-modal/status-modal.module.mjs +4 -4
- package/esm2022/lib/core/components/tabs/tab-group.component.mjs +3 -3
- package/esm2022/lib/core/components/tabs/tab.component.mjs +3 -3
- package/esm2022/lib/core/components/toggle/toggle.component.mjs +3 -3
- package/esm2022/lib/core/components/toggle/toggle.module.mjs +4 -4
- package/esm2022/lib/core/components/upload/upload.component.mjs +3 -3
- package/esm2022/lib/core/core.module.mjs +4 -4
- package/esm2022/lib/core/errors/http-error-interceptor.service.mjs +3 -3
- package/esm2022/lib/core/i18n/i18n.module.mjs +4 -4
- package/esm2022/lib/core/i18n/i18n.pipe.mjs +3 -3
- package/esm2022/lib/core/i18n/i18n.service.mjs +3 -3
- package/esm2022/lib/core/model/filter.interface.mjs +1 -1
- package/esm2022/lib/core/pipes/get-secured-image/get-secured-image.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/since-date/since-date.module.mjs +4 -4
- package/esm2022/lib/core/pipes/since-date/since-date.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/translate-id/translate-id.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/translate-item-to-symbol/translate-item-to-symbol.pipe.mjs +3 -3
- package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +3 -3
- package/esm2022/lib/core/store/aggregation/base-aggregation.service.mjs +3 -3
- package/esm2022/lib/core/store/aggregation/frontend-aggregation/frontend-aggregation.service.mjs +3 -3
- package/esm2022/lib/core/store/category/category.effects.mjs +3 -3
- package/esm2022/lib/core/store/category/category.service.mjs +3 -3
- package/esm2022/lib/core/store/class/class.effects.mjs +3 -3
- package/esm2022/lib/core/store/class/class.service.mjs +3 -3
- package/esm2022/lib/core/store/config/config.effects.mjs +3 -3
- package/esm2022/lib/core/store/config/config.service.mjs +3 -3
- package/esm2022/lib/core/store/config/open-map-tiles.service.mjs +3 -3
- package/esm2022/lib/core/store/context-menu/context-menu.effects.mjs +3 -3
- package/esm2022/lib/core/store/data-source/data-source.effects.mjs +3 -3
- package/esm2022/lib/core/store/data-source/data-source.service.mjs +3 -3
- package/esm2022/lib/core/store/field/field.effects.mjs +3 -3
- package/esm2022/lib/core/store/field/field.service.mjs +3 -3
- package/esm2022/lib/core/store/image/image.effects.mjs +3 -3
- package/esm2022/lib/core/store/image/image.service.mjs +3 -3
- package/esm2022/lib/core/store/item/item.effects.mjs +3 -3
- package/esm2022/lib/core/store/item/item.service.mjs +3 -3
- package/esm2022/lib/core/store/raw/raw.service.mjs +3 -3
- package/esm2022/lib/core/store/relation-types/relation-types.effects.mjs +3 -3
- package/esm2022/lib/core/store/relation-types/relation-types.service.mjs +3 -3
- package/esm2022/lib/core/store/search/search.actions.mjs +3 -3
- package/esm2022/lib/core/store/search/search.effects.mjs +3 -3
- package/esm2022/lib/core/store/search/search.service.mjs +3 -3
- package/esm2022/lib/core/symbol/symbol.service.mjs +3 -3
- package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +3 -3
- package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +3 -3
- package/esm2022/lib/core/ws/websocket.service.mjs +3 -3
- package/esm2022/lib/dashboard/action-bus/effect/action-bus.effects.mjs +3 -3
- package/esm2022/lib/dashboard/action-bus/service/bus.service.mjs +3 -3
- package/esm2022/lib/dashboard/base-widget.module.mjs +4 -4
- package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/dashboard.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/manifests/manifests.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/metadata/metadata.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/subscriptionner.directive.mjs +3 -3
- package/esm2022/lib/dashboard/components/vizualize-raw/vizualize-raw.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-card/datasource-card.component.mjs +5 -5
- package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-list/datasource-list.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/header/resultset-size.pipe.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/widget-filler/widget-filler.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-factory.service.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/widget-placeholder/widget-placeholder.component.mjs +3 -3
- package/esm2022/lib/dashboard/dashboard.module.mjs +4 -4
- package/esm2022/lib/dashboard/filter/base-filter.component.mjs +7 -4
- package/esm2022/lib/dashboard/filter/base-filter.module.mjs +4 -4
- package/esm2022/lib/dashboard/filter/components/filter-group/filter-group.component.mjs +10 -7
- package/esm2022/lib/dashboard/filter/components/filter-instanciator/filter-instanciator.component.mjs +15 -7
- package/esm2022/lib/dashboard/filter/filter-factory.service.mjs +3 -3
- package/esm2022/lib/dashboard/filter/filter-loader.function.mjs +15 -4
- package/esm2022/lib/dashboard/filter/style/css.component.mjs +3 -3
- package/esm2022/lib/dashboard/store/dashboard-init.service.mjs +3 -3
- package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -2
- package/esm2022/lib/dashboard/store/dashboard.effects.mjs +3 -3
- package/esm2022/lib/dashboard/store/manifest.service.mjs +3 -3
- package/esm2022/lib/dashboard/store/refresh.service.mjs +3 -3
- package/esm2022/lib/dashboard/store/title.service.mjs +3 -3
- package/esm2022/lib/dashboard/store/wms.service.mjs +3 -3
- package/esm2022/lib/dashboard/tooltip/base-tooltip.component.mjs +3 -3
- package/esm2022/lib/dashboard/tooltip/base-tooltip.module.mjs +4 -4
- package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +3 -3
- package/esm2022/lib/dashboard/tooltip/tooltip-factory.service.mjs +3 -3
- package/esm2022/lib/dashboard/tooltip/tooltip-loader.function.mjs +15 -4
- package/esm2022/notification/components/notification/content/notification-content.component.mjs +3 -3
- package/esm2022/notification/components/notification/notification.component.mjs +3 -3
- package/esm2022/notification/notification.module.mjs +4 -4
- package/esm2022/notification/store/notification.effects.mjs +3 -3
- package/esm2022/notification/store/notification.service.mjs +3 -3
- package/esm2022/notification/style/css.component.mjs +3 -3
- package/esm2022/pipeline/components/pipeline-details/pipeline-details.component.mjs +3 -3
- package/esm2022/pipeline/components/pipeline-editor/pipeline-editor.component.mjs +3 -3
- package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +3 -3
- package/esm2022/pipeline/components/pipeline-properties-panel.component.mjs +3 -3
- package/esm2022/pipeline/factory/pipeline-component-factory.service.mjs +3 -3
- package/esm2022/pipeline/pipeline.module.mjs +4 -4
- package/esm2022/pipeline/store/pipeline.effects.mjs +3 -3
- package/esm2022/pipeline/store/pipeline.service.mjs +3 -3
- package/esm2022/pipeline/style/css.component.mjs +3 -3
- package/esm2022/pipeline-components/filter/component/filter.component.mjs +3 -3
- package/esm2022/pipeline-components/filter/filter.module.mjs +4 -4
- package/esm2022/pipeline-components/input-datasource/component/input-datasource.component.mjs +3 -3
- package/esm2022/pipeline-components/input-datasource/input-datasource.module.mjs +4 -4
- package/esm2022/pipeline-components/noop/component/noop.component.mjs +3 -3
- package/esm2022/pipeline-components/noop/noop.module.mjs +4 -4
- package/esm2022/pipeline-components/output-dataset/component/output-dataset.component.mjs +3 -3
- package/esm2022/pipeline-components/output-dataset/output-dataset.module.mjs +4 -4
- package/esm2022/pipeline-components/subgraph/component/empty.component.mjs +3 -3
- package/esm2022/pipeline-components/subgraph/subgraph.module.mjs +4 -4
- package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
- package/esm2022/presentation/components/presentation.component.mjs +5 -5
- package/esm2022/presentation/components/title-presentation/title-presentation.component.mjs +5 -5
- package/esm2022/presentation/presentation.module.mjs +4 -4
- package/esm2022/presentation/style/css.component.mjs +3 -3
- package/esm2022/restitution/components/restitution/restitution.component.mjs +3 -3
- package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +3 -3
- package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +3 -3
- package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +3 -3
- package/esm2022/restitution/restitution.module.mjs +4 -4
- package/esm2022/restitution/style/css.component.mjs +3 -3
- package/esm2022/search/components/choose-widget/choose-widget.component.mjs +3 -3
- package/esm2022/search/components/edit-named-query/edit-named-query.component.mjs +3 -3
- package/esm2022/search/components/edit-named-query-modal/edit-named-query-modal.component.mjs +3 -3
- package/esm2022/search/components/save-query/save-query.component.mjs +3 -3
- package/esm2022/search/components/save-query-button/save-query-button.component.mjs +3 -3
- package/esm2022/search/search-fulltext/search-fulltext/search-fulltext.component.mjs +3 -3
- package/esm2022/search/search-fulltext/store/search-fulltext.effects.mjs +3 -3
- package/esm2022/search/search-fulltext/store/search-fulltext.service.mjs +3 -3
- package/esm2022/search/search-home/search-home.component.mjs +3 -3
- package/esm2022/search/search-mono-class/components/search-composed/search-composed.component.mjs +3 -3
- package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +3 -3
- package/esm2022/search/search-mono-class/components/search-mono-class/search-mono-class.component.mjs +3 -3
- package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +3 -3
- package/esm2022/search/search-mono-class/components/search-select-attribute/search-select-attribute.component.mjs +3 -3
- package/esm2022/search/search-mono-class/store/search-mono-class.effects.mjs +3 -3
- package/esm2022/search/search-mono-class/store/search-mono-class.service.mjs +3 -3
- package/esm2022/search/search-multi-class/components/multi-class-condition/multi-class-condition.component.mjs +3 -3
- package/esm2022/search/search-multi-class/components/multi-class-field-selection/multi-class-field-selection.component.mjs +3 -3
- package/esm2022/search/search-multi-class/components/search-multi-class/search-multi-class.component.mjs +3 -3
- package/esm2022/search/search-multi-class/store/search-multi-class.effects.mjs +3 -3
- package/esm2022/search/search-multi-class/store/search-multi-class.service.mjs +3 -3
- package/esm2022/search/search-tools/search-tools.component.mjs +3 -3
- package/esm2022/search/search.module.mjs +4 -4
- package/esm2022/search/style/css.component.mjs +3 -3
- package/esm2022/toolbox/components/automate-refresh/automate-refresh.component.mjs +3 -3
- package/esm2022/toolbox/components/clear-view/clear-view.component.mjs +3 -3
- package/esm2022/toolbox/components/dashboard-details/dashboard-details.component.mjs +3 -3
- package/esm2022/toolbox/components/delete/delete.component.mjs +3 -3
- package/esm2022/toolbox/components/drag-widgets/drag-widgets.component.mjs +3 -3
- package/esm2022/toolbox/components/edit-mode-action/edit-mode-action.component.mjs +3 -3
- package/esm2022/toolbox/components/edit-mode-toggle/edit-mode-toggle.component.mjs +3 -3
- package/esm2022/toolbox/components/edit-presentation/edit-presentation.component.mjs +3 -3
- package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +3 -3
- package/esm2022/toolbox/components/launch-tab/launch-tab.component.mjs +3 -3
- package/esm2022/toolbox/components/named-query/named-query.component.mjs +3 -3
- package/esm2022/toolbox/components/refresh-datasets/refresh-datasets.component.mjs +3 -3
- package/esm2022/toolbox/components/save-view/save-view.component.mjs +3 -3
- package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +3 -3
- package/esm2022/toolbox/components/share/share.component.mjs +3 -3
- package/esm2022/toolbox/components/switch-to-edit-content/switch-to-edit-content.component.mjs +3 -3
- package/esm2022/toolbox/components/toolbox.component.mjs +3 -3
- package/esm2022/toolbox/shared/presentation-form/presentation-form.component.mjs +3 -3
- package/esm2022/toolbox/shared/toolbox-action/toolbox-action.component.mjs +3 -3
- package/esm2022/toolbox/shared/toolbox-action-instanciator/toolbox-action-instanciator.component.mjs +3 -3
- package/esm2022/toolbox/style/css.component.mjs +3 -3
- package/esm2022/toolbox/toolbox.module.mjs +4 -4
- package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +3 -3
- package/esm2022/tooltips/attribute/attribute-tooltip.module.mjs +4 -4
- package/esm2022/tooltips/cluster/cluster-tooltip.component.mjs +3 -3
- package/esm2022/tooltips/cluster/cluster-tooltip.module.mjs +4 -4
- package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +29 -15
- package/esm2022/widgets/widget-aggregated-chart/i18n/en.translations.mjs +2 -1
- package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +7 -6
- package/esm2022/widgets/widget-aggregated-chart/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +4 -4
- package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +3 -3
- package/esm2022/widgets/widget-analytic/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-analytic/widget-analytic.module.mjs +4 -4
- package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +3 -3
- package/esm2022/widgets/widget-chart/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-chart/widget-chart.module.mjs +4 -4
- package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +3 -3
- package/esm2022/widgets/widget-detail/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-detail/widget-detail.module.mjs +4 -4
- package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -3
- package/esm2022/widgets/widget-graph/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-graph/widget-graph.module.mjs +4 -4
- package/esm2022/widgets/widget-iframe/component/widget-iframe.component.mjs +3 -3
- package/esm2022/widgets/widget-iframe/messaging/iframe-messaging.service.mjs +3 -3
- package/esm2022/widgets/widget-iframe/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-iframe/widget-iframe.module.mjs +4 -4
- package/esm2022/widgets/widget-image/component/widget-image.component.mjs +3 -3
- package/esm2022/widgets/widget-image/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-image/widget-image.module.mjs +4 -4
- package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +3 -3
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +3 -3
- package/esm2022/widgets/widget-map/pipe/widget-map-geometry-fields-for.pipe.mjs +3 -3
- package/esm2022/widgets/widget-map/pipe/widget-map-legend-url.pipe.mjs +5 -5
- package/esm2022/widgets/widget-map/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-map/widget-map.module.mjs +4 -4
- package/esm2022/widgets/widget-table/component/widget-table.component.mjs +3 -3
- package/esm2022/widgets/widget-table/expand-value/detach-row.directive.mjs +3 -3
- package/esm2022/widgets/widget-table/expand-value/expand-value.component.mjs +3 -3
- package/esm2022/widgets/widget-table/get-value/get-value.pipe.mjs +3 -3
- package/esm2022/widgets/widget-table/resizable/resizable.component.mjs +3 -3
- package/esm2022/widgets/widget-table/resizable/resizable.directive.mjs +3 -3
- package/esm2022/widgets/widget-table/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-table/widget-table.module.mjs +4 -4
- package/esm2022/widgets/widget-template/component/widget-template.component.mjs +3 -3
- package/esm2022/widgets/widget-template/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-template/widget-template.module.mjs +4 -4
- package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -3
- package/esm2022/widgets/widget-tile/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-tile/widget-tile.module.mjs +4 -4
- package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +3 -3
- package/esm2022/widgets/widget-vega/style/css.component.mjs +3 -3
- package/esm2022/widgets/widget-vega/widget-vega.module.mjs +4 -4
- package/fesm2022/provoly-dashboard-admin.mjs +267 -267
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-components-card.mjs +22 -22
- package/fesm2022/provoly-dashboard-components-checkbox.mjs +7 -7
- package/fesm2022/provoly-dashboard-components-color-picker.mjs +7 -7
- package/fesm2022/provoly-dashboard-components-data-format.mjs +7 -7
- package/fesm2022/provoly-dashboard-components-expand-panel.mjs +10 -10
- package/fesm2022/provoly-dashboard-components-filter.mjs +7 -7
- package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +16 -16
- package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-components-page-loader.mjs +7 -7
- package/fesm2022/provoly-dashboard-components-paginator.mjs +10 -10
- package/fesm2022/provoly-dashboard-components-scheme-picker.mjs +11 -11
- package/fesm2022/provoly-dashboard-components-scheme-picker.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-components-stepper.mjs +13 -13
- package/fesm2022/provoly-dashboard-components-text-editor.mjs +16 -16
- package/fesm2022/provoly-dashboard-dataset.mjs +28 -22
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs +14 -11
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-date.mjs +8 -8
- package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-list.mjs +14 -14
- package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-number.mjs +14 -8
- package/fesm2022/provoly-dashboard-filters-number.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-text.mjs +14 -8
- package/fesm2022/provoly-dashboard-filters-text.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-import.mjs +26 -26
- package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-notification.mjs +19 -19
- package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs +7 -7
- package/fesm2022/provoly-dashboard-pipeline-components-filter.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs +7 -7
- package/fesm2022/provoly-dashboard-pipeline-components-input-datasource.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-pipeline-components-noop.mjs +7 -7
- package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs +7 -7
- package/fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-pipeline-components-subgraph.mjs +7 -7
- package/fesm2022/provoly-dashboard-pipeline.mjs +28 -28
- package/fesm2022/provoly-dashboard-presentation.mjs +18 -18
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +19 -19
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-search.mjs +73 -73
- package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-toolbox.mjs +67 -67
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +7 -7
- package/fesm2022/provoly-dashboard-tooltips-cluster.mjs +7 -7
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +42 -26
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +10 -10
- package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +10 -10
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +10 -10
- package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +10 -10
- package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs +13 -13
- package/fesm2022/provoly-dashboard-widgets-widget-image.mjs +10 -10
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +20 -20
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +25 -25
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-template.mjs +10 -10
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +10 -10
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +10 -10
- package/fesm2022/provoly-dashboard.mjs +492 -450
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/filters/autocomplete/autocomplete.component.d.ts +1 -0
- package/filters/list/list-filter.module.d.ts +1 -1
- package/filters/number/number-filter.component.d.ts +1 -0
- package/filters/text/text-filter.component.d.ts +1 -0
- package/lib/core/components/select/select.component.d.ts +3 -1
- package/lib/core/model/filter.interface.d.ts +1 -0
- package/lib/core/store/search/search.actions.d.ts +4 -4
- package/lib/core/store/search/search.effects.d.ts +3 -3
- package/lib/dashboard/filter/base-filter.component.d.ts +2 -1
- package/lib/dashboard/filter/components/filter-group/filter-group.component.d.ts +2 -1
- package/lib/dashboard/filter/components/filter-instanciator/filter-instanciator.component.d.ts +3 -2
- package/lib/dashboard/store/dashboard.actions.d.ts +2 -2
- package/lib/dashboard/store/dashboard.effects.d.ts +3 -3
- package/package.json +31 -31
- package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +1 -0
- package/widgets/widget-aggregated-chart/i18n/en.translations.d.ts +1 -0
- package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +1 -0
package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs
CHANGED
|
@@ -52,11 +52,6 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
52
52
|
.map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa?.attribute))
|
|
53
53
|
.find((attr) => !!attr);
|
|
54
54
|
const fixInterval = this.fixInterval(options, abscissa);
|
|
55
|
-
console.log({
|
|
56
|
-
graph: { type: GraphType.BAR, tooltip: true, legend: false },
|
|
57
|
-
abscissa: { keep0: true },
|
|
58
|
-
ordinate: { keep0: true }
|
|
59
|
-
}, (options ?? {}), fixInterval);
|
|
60
55
|
return mergeDeep({
|
|
61
56
|
graph: { type: GraphType.BAR, tooltip: true, legend: false },
|
|
62
57
|
abscissa: { keep0: true },
|
|
@@ -64,7 +59,6 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
64
59
|
}, (options ?? {}), fixInterval);
|
|
65
60
|
}));
|
|
66
61
|
this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {
|
|
67
|
-
console.log(options);
|
|
68
62
|
this.optionsCopy$.next(JSON.parse(JSON.stringify(options)));
|
|
69
63
|
});
|
|
70
64
|
this.operations$ = combineLatest([this.usedDatasources$, this.classes$, this.fields$]).pipe(map(([datasources, classes, fields]) => classes
|
|
@@ -248,7 +242,8 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
248
242
|
zero: !!options.abscissa.keep0
|
|
249
243
|
//type: WidgetChartComponent.isTimeUnitUTC(variables[0]) ? 'utc' : undefined
|
|
250
244
|
},
|
|
251
|
-
...this.getSort(options.abscissa.attribute, options.graph?.sort)
|
|
245
|
+
...this.getSort(options.abscissa.attribute, options.graph?.sort),
|
|
246
|
+
timeUnit: this.getTimeUnit(options, types)
|
|
252
247
|
}
|
|
253
248
|
: undefined,
|
|
254
249
|
y: !isCircular
|
|
@@ -327,7 +322,7 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
327
322
|
],
|
|
328
323
|
config: this.getChartConfig()
|
|
329
324
|
}, options.additionalSpec);
|
|
330
|
-
})
|
|
325
|
+
}));
|
|
331
326
|
this.sortValues$ = this.optionsCopy$.pipe(map((options) => {
|
|
332
327
|
return [
|
|
333
328
|
{
|
|
@@ -364,6 +359,10 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
364
359
|
}
|
|
365
360
|
fixInterval(options, abscissa) {
|
|
366
361
|
const fixInterval = { abscissa: options.abscissa ?? {} };
|
|
362
|
+
if (options?.graph?.type !== GraphType.HISTOGRAM) {
|
|
363
|
+
fixInterval.abscissa.interval = undefined;
|
|
364
|
+
return fixInterval;
|
|
365
|
+
}
|
|
367
366
|
if (!!abscissa) {
|
|
368
367
|
let newIntervalValue = options.abscissa?.interval ?? (abscissa.field.type !== FieldType.INSTANT ? CHART_INTERVAL_STEP : 'second');
|
|
369
368
|
// if date time interval and field is not date, reinitializing interval value
|
|
@@ -513,9 +512,7 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
513
512
|
circleColorScheme: this.optionsCopy$.value?.circleColorScheme ?? 'Provoly'
|
|
514
513
|
});
|
|
515
514
|
}
|
|
516
|
-
|
|
517
|
-
this.enableIntervals(true);
|
|
518
|
-
}
|
|
515
|
+
this.enableIntervals([GraphType.HISTOGRAM.toString()].includes($event));
|
|
519
516
|
}
|
|
520
517
|
}
|
|
521
518
|
changeDonutSize($event) {
|
|
@@ -853,14 +850,31 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
|
|
|
853
850
|
return formats[interval ?? 'default'];
|
|
854
851
|
}
|
|
855
852
|
}
|
|
856
|
-
|
|
857
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div\n class=\"o-widget o-widget--chart\"\n *ngIf=\"optionsCopy$ | async as optionsCopy\"\n [class.-has-header]=\"displayHeader$ | async\"\n>\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n </div>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [items]=\"abscissaAttributes$ | async | prySortData: sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n </div>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(\n (attributeTypes$ | async)?.abscissa?.vegaType?.toString() ?? '--'\n ) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"enableIntervals($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.interval\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.interval' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.interval\">\n <ng-container *ngIf=\"!isTimeInterval(optionsCopy.abscissa.interval); else timeInterval\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.interval\"\n (ngModelChange)=\"changeInterval($event)\"\n labelTranslate=\"@pry.widget.chart.specifyInterval\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n </ng-container>\n\n <ng-template #timeInterval>\n <label class=\"a-label\" for=\"time_interval\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeInterval($event)\"\n [items]=\"['second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year']\"\n [ngModel]=\"optionsCopy.abscissa.interval\"\n i18nPrefix=\"@pry.widget.chart.time.\"\n id=\"time_interval\"\n ></pry-select>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [items]=\"ordinateAttributes$ | async | prySortData: sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n </div>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData: sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleLimitItems($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit !== undefined && optionsCopy.abscissa.limit !== null\"\n >\n {{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"optionsCopy.abscissa.limit !== undefined && optionsCopy.abscissa.limit !== null\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_limitItemsValue\">{{ '@pry.widget.chart.limitMaxNb' | i18n }}</label>\n <input\n type=\"number\"\n id=\"chart_limitItemsValue\"\n class=\"a-form-field\"\n [ngModel]=\"optionsCopy.abscissa.limit\"\n (ngModelChange)=\"changeLimitValue($event)\"\n min=\"1\"\n step=\"1\"\n [attr.aria-invalid]=\"optionsCopy.abscissa.limit < 1\"\n />\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_sortValue\">{{ '@pry.widget.chart.sort.attribute' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSortValue($event)\"\n [ngModel]=\"optionsCopy.graph.sort.value\"\n [items]=\"sortValues$ | async\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"chart_sortValue\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_sortDirection\">{{ '@pry.widget.chart.sort.direction' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chip -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label", "editButtonTooltip", "confirmButtonTooltip"], outputs: ["validated"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i7.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "component", type: i3.PrySchemePickerComponent, selector: "pry-scheme-picker" }, { kind: "component", type: i8.PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
|
|
853
|
+
getTimeUnit(options, types) {
|
|
854
|
+
if (options?.graph.type !== GraphType.HISTOGRAM ||
|
|
855
|
+
types.abscissa.vegaType !== VegaType.TEMPORAL ||
|
|
856
|
+
!options?.abscissa?.interval) {
|
|
857
|
+
return undefined;
|
|
858
|
+
}
|
|
859
|
+
const vegaTimeUnits = {
|
|
860
|
+
year: 'binnedyear',
|
|
861
|
+
month: 'binnedyearmonth',
|
|
862
|
+
week: 'binnedyearweek',
|
|
863
|
+
day: 'binnedyearmonthdate',
|
|
864
|
+
hour: 'binnedyearmonthdatehours',
|
|
865
|
+
minute: 'binnedyearmonthdatehoursminutes',
|
|
866
|
+
second: 'binnedyearmonthdatehoursminutesseconds'
|
|
867
|
+
};
|
|
868
|
+
return vegaTimeUnits[options.abscissa.interval];
|
|
869
|
+
}
|
|
870
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WidgetAggregatedChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i2.PryAggregationService }, { token: i3.PrySchemeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
871
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div\n class=\"o-widget o-widget--chart\"\n *ngIf=\"optionsCopy$ | async as optionsCopy\"\n [class.-has-header]=\"displayHeader$ | async\"\n>\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n </div>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [items]=\"abscissaAttributes$ | async | prySortData: sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n </div>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(\n (attributeTypes$ | async)?.abscissa?.vegaType?.toString() ?? '--'\n ) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"enableIntervals($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.interval\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.interval' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.interval\">\n <ng-container *ngIf=\"!isTimeInterval(optionsCopy.abscissa.interval); else timeInterval\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.interval\"\n (ngModelChange)=\"changeInterval($event)\"\n labelTranslate=\"@pry.widget.chart.specifyInterval\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n </ng-container>\n\n <ng-template #timeInterval>\n <label class=\"a-label\" for=\"time_interval\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeInterval($event)\"\n [items]=\"['second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year']\"\n [ngModel]=\"optionsCopy.abscissa.interval\"\n i18nPrefix=\"@pry.widget.chart.time.\"\n id=\"time_interval\"\n ></pry-select>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [items]=\"ordinateAttributes$ | async | prySortData: sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n </div>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData: sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleLimitItems($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit !== undefined && optionsCopy.abscissa.limit !== null\"\n >\n {{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"optionsCopy.abscissa.limit !== undefined && optionsCopy.abscissa.limit !== null\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_limitItemsValue\">{{ '@pry.widget.chart.limitMaxNb' | i18n }}</label>\n <input\n type=\"number\"\n id=\"chart_limitItemsValue\"\n class=\"a-form-field\"\n [ngModel]=\"optionsCopy.abscissa.limit\"\n (ngModelChange)=\"changeLimitValue($event)\"\n min=\"1\"\n step=\"1\"\n [attr.aria-invalid]=\"optionsCopy.abscissa.limit < 1\"\n />\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_sortValue\">{{ '@pry.widget.chart.sort.attribute' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSortValue($event)\"\n [ngModel]=\"optionsCopy.graph.sort.value\"\n [items]=\"sortValues$ | async\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"chart_sortValue\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_sortDirection\">{{ '@pry.widget.chart.sort.direction' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chip -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked", "pressedEnter"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label", "editButtonTooltip", "confirmButtonTooltip"], outputs: ["validated"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i7.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "component", type: i3.PrySchemePickerComponent, selector: "pry-scheme-picker" }, { kind: "component", type: i8.PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
|
|
858
872
|
}
|
|
859
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
873
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WidgetAggregatedChartComponent, decorators: [{
|
|
860
874
|
type: Component,
|
|
861
875
|
args: [{ selector: 'pry-widget-aggregated-chart', template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div\n class=\"o-widget o-widget--chart\"\n *ngIf=\"optionsCopy$ | async as optionsCopy\"\n [class.-has-header]=\"displayHeader$ | async\"\n>\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n </div>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [items]=\"abscissaAttributes$ | async | prySortData: sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n </div>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(\n (attributeTypes$ | async)?.abscissa?.vegaType?.toString() ?? '--'\n ) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"enableIntervals($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.interval\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.interval' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.interval\">\n <ng-container *ngIf=\"!isTimeInterval(optionsCopy.abscissa.interval); else timeInterval\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.interval\"\n (ngModelChange)=\"changeInterval($event)\"\n labelTranslate=\"@pry.widget.chart.specifyInterval\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n </ng-container>\n\n <ng-template #timeInterval>\n <label class=\"a-label\" for=\"time_interval\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeInterval($event)\"\n [items]=\"['second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year']\"\n [ngModel]=\"optionsCopy.abscissa.interval\"\n i18nPrefix=\"@pry.widget.chart.time.\"\n id=\"time_interval\"\n ></pry-select>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [items]=\"ordinateAttributes$ | async | prySortData: sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n </div>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData: sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox\n (ngModelChange)=\"toggleLimitItems($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit !== undefined && optionsCopy.abscissa.limit !== null\"\n >\n {{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"optionsCopy.abscissa.limit !== undefined && optionsCopy.abscissa.limit !== null\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_limitItemsValue\">{{ '@pry.widget.chart.limitMaxNb' | i18n }}</label>\n <input\n type=\"number\"\n id=\"chart_limitItemsValue\"\n class=\"a-form-field\"\n [ngModel]=\"optionsCopy.abscissa.limit\"\n (ngModelChange)=\"changeLimitValue($event)\"\n min=\"1\"\n step=\"1\"\n [attr.aria-invalid]=\"optionsCopy.abscissa.limit < 1\"\n />\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_sortValue\">{{ '@pry.widget.chart.sort.attribute' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSortValue($event)\"\n [ngModel]=\"optionsCopy.graph.sort.value\"\n [items]=\"sortValues$ | async\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"chart_sortValue\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_sortDirection\">{{ '@pry.widget.chart.sort.direction' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chip -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
|
|
862
876
|
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }, { type: i2.PryAggregationService }, { type: i3.PrySchemeService }], propDecorators: { vega: [{
|
|
863
877
|
type: ViewChild,
|
|
864
878
|
args: ['vega']
|
|
865
879
|
}] } });
|
|
866
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFLTCxjQUFjLEVBRWQsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUlULGVBQWUsRUFDZixTQUFTLEVBR1QsYUFBYSxFQUdiLFFBQVEsRUFDUixvQkFBb0IsRUFDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUVILEtBQUssRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUNWLGNBQWMsRUFDZixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBZSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7OztBQUd4RCxNQUFNLENBQUMsTUFBTSxtQkFB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QUFDLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25GO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBd0IsRUFBRSxRQUE0QjtRQUNwRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDM0YsT0FBTyxPQUFPLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ3BHLE9BQU8sT0FBTyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQzs4R0EvaUNVLDhCQUE4QjtrR0FBOUIsOEJBQThCLHdMQ3hEM0MseXhlQXFXQTs7MkZEN1NhLDhCQUE4QjtrQkFKMUMsU0FBUzsrQkFDRSw2QkFBNkI7bU1BSXBCLElBQUk7c0JBQXRCLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgRGF0YXNldCxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEdyYXBoVHlwZSxcbiAgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCxcbiAgTXVsdGlDbGFzc1NlYXJjaFBheWxvYWQsXG4gIE5hbWVkUXVlcnksXG4gIE5hbWVkUXVlcnlUeXBlcyxcbiAgT3BlcmF0aW9uLFxuICBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBTZWFyY2hBY3Rpb25zLFxuICBTb3J0LFxuICBWYWx1ZVR5cGUsXG4gIFZlZ2FUeXBlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHNoYXJlLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxuICB0aHJvd0Vycm9yLFxuICB3aXRoTGF0ZXN0RnJvbVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZpZXcgfSBmcm9tICd2ZWdhJztcbmltcG9ydCBlbWJlZCwgeyB2ZWdhIH0gZnJvbSAndmVnYS1lbWJlZCc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCwgbWVyZ2VEZWVwLCBUb3BMZXZlbFNwZWMgfSBmcm9tICd2ZWdhLWxpdGUnO1xuaW1wb3J0IHsgaW5pdENvbmZpZyB9IGZyb20gJ3ZlZ2EtbGl0ZS9idWlsZC9zcmMvY29uZmlnJztcbmltcG9ydCB7IFByeVNjaGVtZVNlcnZpY2UgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQvY29tcG9uZW50cy9zY2hlbWUtcGlja2VyJztcblxuZXhwb3J0IGNvbnN0IENIQVJUX0lOVEVSVkFMX1NURVAgPSAzO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmVnYScpIHZlZ2EhOiBFbGVtZW50UmVmO1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9uc0NvcHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHZpZXc/OiBWaWV3O1xuICB0cmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHZlZ2FMaXRlU3BlYyQ6IE9ic2VydmFibGU8VG9wTGV2ZWxTcGVjPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGF0dHJpYnV0ZVR5cGVzJDogT2JzZXJ2YWJsZTx7XG4gICAgb3JkaW5hdGU6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBuYW1lOiBhbnk7IGZpZWxkOiBhbnkgfTtcbiAgICBncm91cEJ5OiB7IHZlZ2FUeXBlOiBWZWdhVHlwZTsgZmllbGQ6IGFueTsgbmFtZTogYW55IH07XG4gICAgYWJzY2lzc2E6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZDogYW55OyBuYW1lOiBhbnkgfTtcbiAgfT47XG4gIGFnZ3JlZ2F0ZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPHsgZGF0YTogYW55OyBvcGVyYXRpb246IGFueSB9PjtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgR3JhcGhUeXBlID0gR3JhcGhUeXBlO1xuICBPcGVyYXRpb24gPSBPcGVyYXRpb247XG4gIGlzQ2hhcnRWYWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHR5cGVPcHRpb25zOiB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XG4gIG9wZXJhdGlvbnMkOiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10+O1xuICBhYnNjaXNzYUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgY2xhc3NlczogQ2xhc3NbXSA9IFtdO1xuICBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgb3JkaW5hdGVBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29weU9yZGluYXRlRmllbGQ/OiBGaWVsZDtcbiAgbm9EYXRhJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc29ydEFjdGl2ZT8gPSAnbmFtZSc7XG4gIHNvcnREaXJlY3Rpb24/ID0gJ2FzYyc7XG4gIHNvcnRWYWx1ZXMkOiBPYnNlcnZhYmxlPHsgdmFsdWU6ICdrZXknIHwgJ3ZhbHVlJzsgYXR0cklkPzogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgaXNEaXNwbGF5ZWQ6IGJvb2xlYW4gfVtdPjtcbiAgc29ydERpcmVjdGlvbnMgPSBbXG4gICAgeyB2YWx1ZTogJ2FzYycsIGxhYmVsOiAnJyB9LFxuICAgIHsgdmFsdWU6ICdkZXNjJywgbGFiZWw6ICcnIH1cbiAgXTtcbiAgbm9BZ2dyZWdhdGlvbkRhdGEkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhbGxvd2VkQ2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29sb3JzID0gdmVnYS5zY2hlbWUoJ1Byb3ZvbHknKTtcbiAgREVGQVVMVF9JVEVNX0xJTUlUID0gMjA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGFnZ3JlZ2F0aW9uU2VydmljZTogUHJ5QWdncmVnYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NoZW1lU2VydmljZTogUHJ5U2NoZW1lU2VydmljZVxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuICAgIHRoaXMudHlwZU9wdGlvbnMgPSBPYmplY3QudmFsdWVzKEdyYXBoVHlwZSlcbiAgICAgIC5tYXAoKHYpID0+ICh7XG4gICAgICAgIGlkOiB2LFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LmdyYXBoVHlwZS4nICsgdilcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSk7XG5cbiAgICB0aGlzLm9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5tYW5pZmVzdCQsIHRoaXMuY2xhc3NlcyRdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIGNsYXNzZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBtYW5pZmVzdC5vcHRpb25zIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGFic2Npc3NhID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuYWJzY2lzc2E/LmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik7XG5cbiAgICAgICAgY29uc3QgZml4SW50ZXJ2YWwgPSB0aGlzLmZpeEludGVydmFsKG9wdGlvbnMsIGFic2Npc3NhKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBncmFwaDogeyB0eXBlOiBHcmFwaFR5cGUuQkFSLCB0b29sdGlwOiB0cnVlLCBsZWdlbmQ6IGZhbHNlIH0sXG4gICAgICAgICAgICBhYnNjaXNzYTogeyBrZWVwMDogdHJ1ZSB9LFxuICAgICAgICAgICAgb3JkaW5hdGU6IHsga2VlcDA6IHRydWUgfVxuICAgICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgICAgICAgICAob3B0aW9ucyA/PyB7fSkgYXMgRGVlcFBhcnRpYWw8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucz4sXG4gICAgICAgICAgZml4SW50ZXJ2YWwgYXMgRGVlcFBhcnRpYWw8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucz5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1lcmdlRGVlcChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBncmFwaDogeyB0eXBlOiBHcmFwaFR5cGUuQkFSLCB0b29sdGlwOiB0cnVlLCBsZWdlbmQ6IGZhbHNlIH0sXG4gICAgICAgICAgICBhYnNjaXNzYTogeyBrZWVwMDogdHJ1ZSB9LFxuICAgICAgICAgICAgb3JkaW5hdGU6IHsga2VlcDA6IHRydWUgfVxuICAgICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgICAgICAgICAob3B0aW9ucyA/PyB7fSkgYXMgRGVlcFBhcnRpYWw8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucz4sXG4gICAgICAgICAgZml4SW50ZXJ2YWwgYXMgRGVlcFBhcnRpYWw8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucz5cbiAgICAgICAgKSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wZXJhdGlvbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy51c2VkRGF0YXNvdXJjZXMkLCB0aGlzLmNsYXNzZXMkLCB0aGlzLmZpZWxkcyRdKS5waXBlKFxuICAgICAgbWFwKChbZGF0YXNvdXJjZXMsIGNsYXNzZXMsIGZpZWxkc10pID0+XG4gICAgICAgIGNsYXNzZXNcbiAgICAgICAgICAuZmlsdGVyKChjbGF6eikgPT4gZGF0YXNvdXJjZXMubWFwKChkcykgPT4gKCdvQ2xhc3MnIGluIGRzID8gZHMub0NsYXNzIDogdW5kZWZpbmVkKSkuaW5jbHVkZXMoY2xhenouaWQpKVxuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiBbRmllbGRUeXBlLklOVEVHRVIsIEZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuTE9OR10uaW5jbHVkZXMoYXR0ci5maWVsZC50eXBlKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiAhIWF0dHIpXG4gICAgICApLFxuICAgICAgbWFwKChhdHRyaWJ1dGVzKSA9PlxuICAgICAgICAoYXR0cmlidXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBPYmplY3QudmFsdWVzKE9wZXJhdGlvbikuZmlsdGVyKChvcGVyYXRpb24pID0+IG9wZXJhdGlvbiAhPT0gT3BlcmF0aW9uLkVYVEVOVClcbiAgICAgICAgICA6IFtPcGVyYXRpb24uQ09VTlQsIE9wZXJhdGlvbi5ESVNUSU5DVCwgT3BlcmF0aW9uLk5PTkVdXG4gICAgICAgIClcbiAgICAgICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9wZXJhdGlvbi4nICsgdilcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZmllbGRzJC5zdWJzY3JpYmUoKGZpZWxkcykgPT4gKHRoaXMuZmllbGRzID0gZmllbGRzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5jbGFzc2VzJC5zdWJzY3JpYmUoKGNsYXNzZXMpID0+ICh0aGlzLmNsYXNzZXMgPSBjbGFzc2VzKSkpO1xuXG4gICAgdGhpcy5hbGxvd2VkQ2xhc3NlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNsYXNzZXMkLCB0aGlzLnVzZWREYXRhc291cmNlcyRdKS5waXBlKFxuICAgICAgbWFwKChbY2xhc3NlcywgZGF0YXNvdXJjZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0Z1bGxUZXh0ID0gZGF0YXNvdXJjZXNcbiAgICAgICAgICAubWFwKChkcykgPT4gZHMuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmIGRzLnJlcXVlc3QudHlwZSA9PT0gTmFtZWRRdWVyeVR5cGVzLk1VTFRJX0NMQVNTKVxuICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IHAgfHwgYywgZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IG11bHRpQ2xhc3NEYXRhc291cmNlc0NsYXNzZXMgPSBkYXRhc291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgZHMucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MpXG4gICAgICAgICAgLm1hcCgobXVsdGlEcykgPT4gKG11bHRpRHMgYXMgTmFtZWRRdWVyeSkucmVxdWVzdCBhcyBNdWx0aUNsYXNzU2VhcmNoUGF5bG9hZClcbiAgICAgICAgICAubWFwKChwYXlsb2FkKSA9PiBwYXlsb2FkLm9DbGFzc2VzKTtcblxuICAgICAgICBjb25zdCBoYXNNdWx0aU5vQ2xhc3MgPSBtdWx0aUNsYXNzRGF0YXNvdXJjZXNDbGFzc2VzLmluY2x1ZGVzKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgY29uc3QgbXVsdGlDbGFzc2VzID0gKFxuICAgICAgICAgIG11bHRpQ2xhc3NEYXRhc291cmNlc0NsYXNzZXMuZmlsdGVyKChjbGFzc2VzKSA9PiAhIWNsYXNzZXMpIGFzIHVua25vd24gYXMgc3RyaW5nW11cbiAgICAgICAgKS5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10gYXMgc3RyaW5nW10pO1xuXG4gICAgICAgIGNvbnN0IHNpbmdsZUNsYXNzZXMgPSBkYXRhc291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAoZHMpID0+XG4gICAgICAgICAgICAgIChkcy5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgZHMucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTU9OT19DTEFTUykgfHxcbiAgICAgICAgICAgICAgZHMuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAoc2luZ2xlRHMpID0+XG4gICAgICAgICAgICAgIChzaW5nbGVEcyBhcyBEYXRhc2V0KS5vQ2xhc3MgPz8gKChzaW5nbGVEcyBhcyBOYW1lZFF1ZXJ5KS5yZXF1ZXN0IGFzIE1vbm9DbGFzc1NlYXJjaFBheWxvYWQpLm9DbGFzc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKFxuICAgICAgICAgIChjbGF6eikgPT5cbiAgICAgICAgICAgIGhhc0Z1bGxUZXh0IHx8IGhhc011bHRpTm9DbGFzcyB8fCBtdWx0aUNsYXNzZXMuaW5jbHVkZXMoY2xhenouaWQpIHx8IHNpbmdsZUNsYXNzZXMuaW5jbHVkZXMoY2xhenouaWQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmFic2Npc3NhQXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpZWxkcyQsIHRoaXMuYWxsb3dlZENsYXNzZXMkLCB0aGlzLm9wdGlvbnNDb3B5JF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWVsZHMsIGFsbG93ZWRDbGFzc2VzLCBvcHRpb25Db3B5XSkgPT5cbiAgICAgICAgYWxsb3dlZENsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAubWFwKChhdHRycykgPT5cbiAgICAgICAgICAgIGF0dHJzLmZpbHRlcigoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZC5pZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgISFmaWVsZCAmJlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiZcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuU1RSSU5HICYmXG4gICAgICAgICAgICAgICAgKG9wdGlvbkNvcHk/LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ISVNUT0dSQU0gfHwgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLktFWVdPUkQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm9yZGluYXRlQXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuYWxsb3dlZENsYXNzZXMkLFxuICAgICAgdGhpcy50cmlnZ2VyT3JkaW5hdGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWVsZHMsIGFsbG93ZWRDbGFzc2VzXSkgPT5cbiAgICAgICAgYWxsb3dlZENsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAubWFwKChhdHRycykgPT5cbiAgICAgICAgICAgIGF0dHJzLmZpbHRlcigoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZC5pZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NQVgsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUlOLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlNVTSxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5RMSxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5RMyxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5BVkVSQUdFLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1FRElBTixcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5OT05FXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgLm1hcCgob3ApID0+IG9wLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLm9wZXJhdGlvbiA/PyAnLS0tLScpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAhIWZpZWxkICYmXG4gICAgICAgICAgICAgICAgICBbRmllbGRUeXBlLklOVEVHRVIsIEZpZWxkVHlwZS5JTlNUQU5ULCBGaWVsZFR5cGUuTE9ORywgRmllbGRUeXBlLkRFQ0lNQUxdLmluY2x1ZGVzKGZpZWxkLnR5cGUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gISFmaWVsZCAmJiBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuUkFXICYmIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmlzQ2hhcnRWYWxpZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmFic2Npc3NhQXR0cmlidXRlcyQsIHRoaXMub3JkaW5hdGVBdHRyaWJ1dGVzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCBhYnNjaXNzYUF0dHJzLCBvcmRpbmF0ZUF0dHJzXSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICEhb3B0aW9ucy5hYnNjaXNzYS5hdHRyaWJ1dGUgJiZcbiAgICAgICAgICBhYnNjaXNzYUF0dHJzLm1hcCgoYXR0cikgPT4gYXR0ci5pZCkuaW5jbHVkZXMob3B0aW9ucy5hYnNjaXNzYS5hdHRyaWJ1dGUpICYmXG4gICAgICAgICAgKG9wdGlvbnMub3JkaW5hdGUuYXR0cmlidXRlXG4gICAgICAgICAgICA/IG9yZGluYXRlQXR0cnMubWFwKChhdHRyKSA9PiBhdHRyLmlkKS5pbmNsdWRlcyhvcHRpb25zLm9yZGluYXRlLmF0dHJpYnV0ZSlcbiAgICAgICAgICAgIDogdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYXR0cmlidXRlVHlwZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zQ29weSQsIHRoaXMuZmllbGRzJCwgdGhpcy5jbGFzc2VzJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiAhIW9wdGlvbnMgJiYgISFvcHRpb25zLmFic2Npc3NhICYmICEhb3B0aW9ucy5vcmRpbmF0ZSksXG4gICAgICBtYXAoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic2Npc3NhID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMhLmFic2Npc3NhLmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik7XG4gICAgICAgIGNvbnN0IG9yZGluYXRlID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMhLm9yZGluYXRlLmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik7XG4gICAgICAgIGNvbnN0IGdyb3VwQnkgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucz8uZ3JvdXBCeT8uYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgICAgZmllbGQ6IGFic2Npc3NhPy5maWVsZCxcbiAgICAgICAgICAgIHZlZ2FUeXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoYWJzY2lzc2E/LmZpZWxkLnR5cGUsIGFic2Npc3NhPy5uYW1lID8/ICcnKSxcbiAgICAgICAgICAgIG5hbWU6IGFic2Npc3NhPy5uYW1lID8/ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgZmllbGQ6IG9yZGluYXRlPy5maWVsZCxcbiAgICAgICAgICAgIHZlZ2FUeXBlOlxuICAgICAgICAgICAgICBvcHRpb25zIS5vcmRpbmF0ZS5vcGVyYXRpb24gPT09IE9wZXJhdGlvbi5DT1VOVCB8fCBvcHRpb25zIS5vcmRpbmF0ZS5vcGVyYXRpb24gPT09IE9wZXJhdGlvbi5ESVNUSU5DVFxuICAgICAgICAgICAgICAgID8gVmVnYVR5cGUuUVVBTlRJVEFUSVZFXG4gICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUob3JkaW5hdGU/LmZpZWxkLnR5cGUsIG9yZGluYXRlPy5uYW1lID8/ICcnKSxcbiAgICAgICAgICAgIG5hbWU6IG9yZGluYXRlPy5uYW1lID8/ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICBmaWVsZDogZ3JvdXBCeT8uZmllbGQsXG4gICAgICAgICAgICB2ZWdhVHlwZTogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGdyb3VwQnk/LmZpZWxkLnR5cGUsIGdyb3VwQnk/Lm5hbWUpLFxuICAgICAgICAgICAgbmFtZTogZ3JvdXBCeT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWdncmVnYXRlZFZhbHVlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgY29tYmluZUxhdGVzdChbZnJvbUV2ZW50KHdpbmRvdywgJ2RhdGFzb3VyY2VSZWZyZXNoJyksIHRoaXMuZGF0YXNvdXJjZUlkcyRdKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKFtldmVudCwgZGF0YXNvdXJjZXNdKSA9PlxuICAgICAgICAgIGRhdGFzb3VyY2VzLmluY2x1ZGVzKChldmVudCBhcyBDdXN0b21FdmVudCkuZGV0YWlsLnJlcGxhY2UoLyRhZ2dyZWdhdGUhLywgJycpKVxuICAgICAgICApLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKVxuICAgICAgKVxuICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIHRhcCgoW2RhdGFzb3VyY2VzXSkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChTZWFyY2hBY3Rpb25zLnNldFNlYXJjaExvYWRpbmcoeyBkYXRhc291cmNlcywgc3RhcnQ6IHRydWUgfSkpKSxcbiAgICAgIHN3aXRjaE1hcCgoW2RhdGFzb3VyY2VzLCBvcHRpb25zXSkgPT5cbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblNlcnZpY2UuYWdncmVnYXRlKGRhdGFzb3VyY2VzLCBvcHRpb25zKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKFNlYXJjaEFjdGlvbnMuc2V0U2VhcmNoTG9hZGluZyh7IGRhdGFzb3VyY2VzLCBzdGFydDogZmFsc2UgfSkpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goU2VhcmNoQWN0aW9ucy5zZXRTZWFyY2hMb2FkaW5nKHsgZGF0YXNvdXJjZXMsIHN0YXJ0OiBmYWxzZSB9KSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICkgYXMgYW55LFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5vcHRpb25zJCksXG4gICAgICBtYXAoKFthZ2dyZWdhdGUsIG9wdGlvbnNdOiBbQWdncmVnYXRpb25SZXN1bHQsIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnNdKSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGFnZ3JlZ2F0ZS52YWx1ZXMubGVuZ3RoID4gMCAmJiAhYWdncmVnYXRlLnZhbHVlc1swXS5ncm91cEJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogYWdncmVnYXRlLm9wZXJhdGlvbixcbiAgICAgICAgICAgIGRhdGE6IGFnZ3JlZ2F0ZS52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIHNlcmllczogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCB9KSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IChcbiAgICAgICAgICBhZ2dyZWdhdGUudmFsdWVzIGFzIHtcbiAgICAgICAgICAgIGtleTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgICBrZXk6IFZhbHVlVHlwZTtcbiAgICAgICAgICAgICAgdmFsdWU6IFZhbHVlVHlwZTtcbiAgICAgICAgICAgIH1bXTtcbiAgICAgICAgICB9W11cbiAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdmFsdWUuZ3JvdXBCeS5tYXAoKGdyb3VwQnkpID0+ICh7XG4gICAgICAgICAgICAgIGtleTogdmFsdWUua2V5LFxuICAgICAgICAgICAgICBzZXJpZXM6IGdyb3VwQnkua2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXBCeS52YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pO1xuICAgICAgICByZXR1cm4geyBvcGVyYXRpb246IGFnZ3JlZ2F0ZS5vcGVyYXRpb24sIGRhdGE6IGZsYXR0ZW5lZCB9O1xuICAgICAgfSkgYXMgYW55LFxuICAgICAgc3RhcnRXaXRoKHsgb3BlcmF0aW9uOiBPcGVyYXRpb24uTk9ORSwgZGF0YToge30gfSkgYXMgYW55LFxuICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICB0aGlzLm5vRGF0YSQgPSB0aGlzLmRhdGFzb3VyY2VJZHMkLnBpcGUobWFwKChpZHMpID0+IGlkcy5sZW5ndGggPT09IDApKTtcbiAgICB0aGlzLm5vQWdncmVnYXRpb25EYXRhJCA9IHRoaXMuYWdncmVnYXRlZFZhbHVlcyQucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhLmxlbmd0aCA9PT0gMCkpO1xuXG4gICAgdGhpcy52ZWdhTGl0ZVNwZWMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQsXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkLFxuICAgICAgdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdHlwZXMsIHZhbHVlcywgc2l6ZSwgZGlzcGxheV0pID0+IHtcbiAgICAgICAgY29uc3QgaXNDaXJjdWxhciA9IFtHcmFwaFR5cGUuQ0lSQ1VMQVIsIEdyYXBoVHlwZS5ET05VVF0uaW5jbHVkZXMob3B0aW9ucy5ncmFwaC50eXBlKTtcbiAgICAgICAgY29uc3Qgc3RhY2tlZCA9IG9wdGlvbnMuZ3JhcGgudHlwZS5zdGFydHNXaXRoKCdiYXInKSA/ICFvcHRpb25zLmdyYXBoLnN0YWNrZWQgOiBvcHRpb25zLmdyYXBoLnN0YWNrZWQ7XG4gICAgICAgIGNvbnN0IGxlZ2VuZFRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgb3B0aW9ucy5ncm91cEJ5ID8gdHlwZXMuZ3JvdXBCeS5uYW1lID8/ICcnIDogJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxlZ2VuZExhYmVsJ1xuICAgICAgICApO1xuXG4gICAgICAgIChbb3B0aW9ucy5ncm91cEJ5Py5jb2xvciwgb3B0aW9ucy5jaXJjbGVDb2xvclNjaGVtZV0uZmlsdGVyKChzY2hlbWUpID0+ICEhc2NoZW1lKSBhcyBzdHJpbmdbXSkuZm9yRWFjaChcbiAgICAgICAgICAoc2NoZW1lKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtZVNlcnZpY2UuYXNzZXJ0U2NoZW1lKHNjaGVtZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWVyZ2VEZWVwKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRzY2hlbWE6ICdodHRwczovL3ZlZ2EuZ2l0aHViLmlvL3NjaGVtYS92ZWdhLWxpdGUvdjUuanNvbicsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZShvcHRpb25zIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpLFxuICAgICAgICAgICAgd2lkdGg6ICdjb250YWluZXInLFxuICAgICAgICAgICAgaGVpZ2h0OiAoc2l6ZS5oZWlnaHQgPz8gMTAwKSAtIChkaXNwbGF5ID8gV0lER0VUX0hFQURFUl9IRUlHSFQudmFsdWUgOiAwKSxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgICAgYXV0b3NpemU6IHsgdHlwZTogJ2ZpdCcsIGNvbnRhaW5zOiAncGFkZGluZycgfSxcbiAgICAgICAgICAgIGRhdGE6IHsgdmFsdWVzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlcy5kYXRhKSkgfSxcbiAgICAgICAgICAgIGxheWVyOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBvcHRpb25zLmdyYXBoLnR5cGUuc3BsaXQoJy0nKVswXSBhcyAnYXJjJyB8ICdsaW5lJyB8ICdwb2ludCcgfCAnYmFyJyB8ICdhcmVhJyxcbiAgICAgICAgICAgICAgICAgIHBvaW50OiBvcHRpb25zLmdyYXBoLnR5cGUuaW5kZXhPZigncG9pbnQnKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgbGluZTogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ2xpbmUnKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgaW5uZXJSYWRpdXM6IG9wdGlvbnMuZ3JhcGguZG9udXRTaXplID8/IDMwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmNvZGluZzoge1xuICAgICAgICAgICAgICAgICAgeDogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0QWJzY2lzc2FUeXBlKHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLCAhIW9wdGlvbnMuZ3JhcGguc29ydCksXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5XaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQubWluVGljayh0eXBlcy5hYnNjaXNzYS5maWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxFeHByOiB0aGlzLmdldExhYmVsRXhwcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz8uYWJzY2lzc2E/LmludGVydmFsIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldExhYmVsQW5nbGUodHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsIHZhbHVlcy5kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgZmFsc2UgdmFsdWUgaGVyZSBzbyB0aGF0IHZlZ2EgdW5kZXJzdGFuZHMgcHJvcGVybHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgemVybzogISFvcHRpb25zLmFic2Npc3NhLmtlZXAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vdHlwZTogV2lkZ2V0Q2hhcnRDb21wb25lbnQuaXNUaW1lVW5pdFVUQyh2YXJpYWJsZXNbMF0pID8gJ3V0YycgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldFNvcnQob3B0aW9ucy5hYnNjaXNzYS5hdHRyaWJ1dGUsIG9wdGlvbnMuZ3JhcGg/LnNvcnQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHk6ICFpc0NpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5XaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQubWluVGljayh0eXBlcy5vcmRpbmF0ZS5maWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zZXRUaWNrQ291bnQodmFsdWVzLmRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEV4cHI6IHRoaXMuZ2V0TGFiZWxFeHByKCd5JywgdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsIHVuZGVmaW5lZCwgdHlwZXMub3JkaW5hdGUuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgemVybzogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUgPT09IFZlZ2FUeXBlLlFVQU5USVRBVElWRSA/ICEhb3B0aW9ucy5vcmRpbmF0ZS5rZWVwMCA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHN0YWNrZWQgPyB7IHN0YWNrOiB0cnVlIH0gOiB7fSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdGhldGE6IGlzQ2lyY3VsYXIgPyB7IGZpZWxkOiAndmFsdWUnLCB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxlZ2VuZFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogIWlzQ2lyY3VsYXIgPyAoIW9wdGlvbnMuZ3JvdXBCeSA/IHVuZGVmaW5lZCA6ICdzZXJpZXMnKSA6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICBsZWdlbmQ6IG9wdGlvbnMuZ3JhcGgubGVnZW5kLFxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZ3JvdXBCeVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IHNjaGVtZTogb3B0aW9ucy5ncm91cEJ5Py5jb2xvciA/PyB0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0RGVmYXVsdFNjaGVtZSgpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgOiB7IHNjaGVtZTogb3B0aW9ucy5jaXJjbGVDb2xvclNjaGVtZSA/PyB0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0RGVmYXVsdFNjaGVtZSgpIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgICFpc0NpcmN1bGFyICYmICFvcHRpb25zLmdyb3VwQnlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5iYXNlQ29sb3IgPz8gdGhpcy5zY2hlbWVTZXJ2aWNlLmdldFNjaGVtZUNvbG9ycyh0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0RGVmYXVsdFNjaGVtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB4T2Zmc2V0OlxuICAgICAgICAgICAgICAgICAgICBzdGFja2VkICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXBCeSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFic2Npc3NhVHlwZSh0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSwgISFvcHRpb25zLmdyYXBoLnNvcnQpICE9PSBWZWdhVHlwZS5URU1QT1JBTFxuICAgICAgICAgICAgICAgICAgICAgID8geyBmaWVsZDogJ3NlcmllcycgfVxuICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogb3B0aW9ucy5ncmFwaC50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5ncm91cEJ5XG4gICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXREYXRhRm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPy5hYnNjaXNzYT8uaW50ZXJ2YWwgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGFGb3JtYXQodHlwZXMub3JkaW5hdGUudmVnYVR5cGUsIHVuZGVmaW5lZCwgdHlwZXMub3JkaW5hdGUuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3NlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxlZ2VuZFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdub21pbmFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXREYXRhRm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPy5hYnNjaXNzYT8uaW50ZXJ2YWwgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGFGb3JtYXQodHlwZXMub3JkaW5hdGUudmVnYVR5cGUsIHVuZGVmaW5lZCwgdHlwZXMub3JkaW5hdGUuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb25maWc6IHRoaXMuZ2V0Q2hhcnRDb25maWcoKVxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICAgIG9wdGlvbnMuYWRkaXRpb25hbFNwZWNcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKCh2KSA9PiBjb25zb2xlLmxvZyh2KSlcbiAgICApO1xuXG4gICAgdGhpcy5zb3J0VmFsdWVzJCA9IHRoaXMub3B0aW9uc0NvcHkkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdHRySWQ6IG9wdGlvbnM/LmFic2Npc3NhLmF0dHJpYnV0ZSxcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb25zPy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgIHZhbHVlOiAna2V5JyBhcyAna2V5JyB8ICd2YWx1ZScsXG4gICAgICAgICAgICBpc0Rpc3BsYXllZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0cklkOiBvcHRpb25zPy5vcmRpbmF0ZS5hdHRyaWJ1dGUsXG4gICAgICAgICAgICBsYWJlbDogb3B0aW9ucz8ub3JkaW5hdGUuYXR0cmlidXRlXG4gICAgICAgICAgICAgID8gb3B0aW9ucz8ub3JkaW5hdGUubGFiZWxcbiAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgQHByeS53aWRnZXQuY2hhcnQuc29ydC5ieS5vcGVyYXRpb24uJHtvcHRpb25zPy5vcmRpbmF0ZS5vcGVyYXRpb259YCksXG4gICAgICAgICAgICB2YWx1ZTogJ3ZhbHVlJyBhcyAna2V5JyB8ICd2YWx1ZScsXG4gICAgICAgICAgICBpc0Rpc3BsYXllZDogISFvcHRpb25zPy5vcmRpbmF0ZVxuICAgICAgICAgIH1cbiAgICAgICAgXS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5pc0Rpc3BsYXllZCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zQ29weSQsIHRoaXMuc29ydFZhbHVlcyQsIHRoaXMuYXR0cmlidXRlVHlwZXMkLCB0aGlzLmNsYXNzZXMkXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW29wdGlvbnMsIHNvcnRWYWx1ZXMsIGF0dHJUeXBlcywgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb25zID0gdGhpcy5zb3J0RGlyZWN0aW9uc1xuICAgICAgICAgICAgLm1hcCgoc29ydERpcikgPT4ge1xuICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0gY2xhc3Nlc1xuICAgICAgICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PlxuICAgICAgICAgICAgICAgICAgY2xhenouYXR0cmlidXRlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoYXR0cikgPT5cbiAgICAgICAgICAgICAgICAgICAgICBhdHRyLmlkID09PSBzb3J0VmFsdWVzLmZpbmQoKHNvcnRWYWx1ZSkgPT4gc29ydFZhbHVlLnZhbHVlID09PSBvcHRpb25zPy5ncmFwaC5zb3J0Py52YWx1ZSk/LmF0dHJJZFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc29ydERpci52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICBgQHByeS53aWRnZXQuY2hhcnQuc29ydC4ke3NvcnREaXIudmFsdWV9LiR7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJUeXBlcy5hYnNjaXNzYS5uYW1lID09PSBhdHRyaWJ1dGU/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGF0dHJUeXBlcy5hYnNjaXNzYS52ZWdhVHlwZVxuICAgICAgICAgICAgICAgICAgICAgIDogYXR0clR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpeEludGVydmFsKFxuICAgIG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gICAgYWJzY2lzc2E6IEF0dHJpYnV0ZSB8IHVuZGVmaW5lZFxuICApOiBQYXJ0aWFsPENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnM+IHtcbiAgICBjb25zdCBmaXhJbnRlcnZhbCA9IHsgYWJzY2lzc2E6IG9wdGlvbnMuYWJzY2lzc2EgPz8ge30gfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zO1xuICAgIGlmICghIWFic2Npc3NhKSB7XG4gICAgICBsZXQgbmV3SW50ZXJ2YWxWYWx1ZSA9XG4gICAgICAgIG9wdGlvbnMuYWJzY2lzc2E/LmludGVydmFsID8/IChhYnNjaXNzYS5maWVsZC50eXBlICE9PSBGaWVsZFR5cGUuSU5TVEFOVCA/IENIQVJUX0lOVEVSVkFMX1NURVAgOiAnc2Vjb25kJyk7XG4gICAgICAvLyBpZiBkYXRlIHRpbWUgaW50ZXJ2YWwgYW5kIGZpZWxkIGlzIG5vdCBkYXRlLCByZWluaXRpYWxpemluZyBpbnRlcnZhbCB2YWx1ZVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zPy5hYnNjaXNzYT8uaW50ZXJ2YWwgPT09ICdzdHJpbmcnICYmIGFic2Npc3NhLmZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5JTlNUQU5UKSB7XG4gICAgICAgIG5ld0ludGVydmFsVmFsdWUgPSBDSEFSVF9JTlRFUlZBTF9TVEVQO1xuICAgICAgfVxuICAgICAgLy8gaWYgbnVtZXJpYyBpbnRlcnZhbCBhbmQgZmllbGQgaXMgZGF0ZSwgcmVpbml0aWFsaXppbmcgaW50ZXJ2YWwgdmFsdWVcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucz8uYWJzY2lzc2E/LmludGVydmFsICE9PSAnc3RyaW5nJyAmJiBhYnNjaXNzYS5maWVsZC50eXBlID09PSBGaWVsZFR5cGUuSU5TVEFOVCkge1xuICAgICAgICBuZXdJbnRlcnZhbFZhbHVlID0gJ3NlY29uZCc7XG4gICAgICB9XG4gICAgICBmaXhJbnRlcnZhbC5hYnNjaXNzYS5pbnRlcnZhbCA9IG5ld0ludGVydmFsVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaXhJbnRlcnZhbDtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy52ZWdhTGl0ZVNwZWMkLCB0aGlzLnRyaWdnZXIkXSkuc3Vic2NyaWJlKChbc3BlYywgX10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShzcGVjKSk7XG4gICAgICAgICAgZW1iZWQodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3BlYykpLCB7XG4gICAgICAgICAgICBhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIHJlbmRlcmVyOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGZvcm1hdExvY2FsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm51bWJlckxvY2FsZScpLFxuICAgICAgICAgICAgdGltZUZvcm1hdExvY2FsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVGb3JtYXRMb2NhbGUnKSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgdGhlbWU6ICdjdXN0b20nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignQ2Fubm90IGRpc3BsYXkgY2hhcnQnLCBlcnIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlciQubmV4dCgpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyJC5uZXh0KCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiZcbiAgICAgICghIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYS5saW1pdCB8fCB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQgPT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHRoaXMudG9nZ2xlTGltaXRJdGVtcyh0cnVlKTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2xhdGVUb1ZlZ2FUeXBlKHR5cGU/OiBGaWVsZFR5cGUsIG5hbWU/OiBzdHJpbmcpOiBWZWdhVHlwZSB7XG4gICAgbGV0IGlkUmVnZXggPSBuZXcgUmVnRXhwKC9faWR8aWRffF9JRHxJRF98X0lkfElkXy8sICdnJyk7XG4gICAgaWYgKGlkUmVnZXgudGVzdChuYW1lID8/ICctLS0tLS0tJykpIHtcbiAgICAgIHJldHVybiBWZWdhVHlwZS5PUkRJTkFMO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuUVVBTlRJVEFUSVZFO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWluVGljayh0eXBlOiBGaWVsZFR5cGUpOiB7IHRpY2tNaW5TdGVwOiBudW1iZXIgfSB8IHt9IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4geyB0aWNrTWluU3RlcDogMSB9O1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldFNvcnQoYWJzY2lzc2E6IHN0cmluZywgc29ydD86IFNvcnQpIHtcbiAgICByZXR1cm4gc29ydCA/IHsgc29ydDogeyBmaWVsZDogc29ydC52YWx1ZSwgb3JkZXI6IHNvcnQuZGlyZWN0aW9uICsgJ2VuZGluZycgfSB9IDoge307XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLmdldFZhbHVlKCkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9wZW5EYXRhKCkge1xuICAgICh0aGlzLm9wZW5EYXRhJCBhcyBTdWJqZWN0PHZvaWQ+KS5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRpdGxlKG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ncmFwaD8udGl0bGUgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q2hhcnRDb25maWcoKSB7XG4gICAgcmV0dXJuIGluaXRDb25maWcoe1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgJ2d1aWRlLWxhYmVsJzoge1xuICAgICAgICAgIC8vIGF4aXMgdGljayB0aXRsZXNcbiAgICAgICAgICBmb250OiAnVWJ1bnR1LCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICAgIGZpbGw6ICcjMjYzMzQwJ1xuICAgICAgICB9LFxuICAgICAgICAnZ3VpZGUtdGl0bGUnOiB7XG4gICAgICAgICAgLy8gYXhpcyB0aXRsZVxuICAgICAgICAgIGZvbnQ6ICdVYnVudHUsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgZmlsbDogJyMzRTU0NkEnXG4gICAgICAgIH0sXG4gICAgICAgICdncm91cC10aXRsZSc6IHtcbiAgICAgICAgICAvLyBjaGFydCB0aXRsZVxuICAgICAgICAgIGZvbnQ6ICdVYnVudHUsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICBmb250V2VpZ2h0OiA0MDAsXG4gICAgICAgICAgZmlsbDogJyMyNjMzNDAnXG4gICAgICAgIH0sXG4gICAgICAgICdncm91cC1zdWJ0aXRsZSc6IHtcbiAgICAgICAgICAvLyBub3Qgc3VyZVxuICAgICAgICAgIGZvbnQ6ICdVYnVudHUsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgZmlsbDogJyMyNjMzNDAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0aXRsZTogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVHlwZSgkZXZlbnQ6IEdyYXBoVHlwZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHR5cGU6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgICAgaWYgKFtHcmFwaFR5cGUuQ0lSQ1VMQVIsIEdyYXBoVHlwZS5ET05VVF0ubWFwKChndCkgPT4gZ3QudG9TdHJpbmcoKSkuaW5jbHVkZXMoJGV2ZW50KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB1bmRlZmluZWQsXG4gICAgICAgICAgY2lyY2xlQ29sb3JTY2hlbWU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5jaXJjbGVDb2xvclNjaGVtZSA/PyAnUHJvdm9seSdcbiAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChbR3JhcGhUeXBlLkhJU1RPR1JBTS50b1N0cmluZygpXS5pbmNsdWRlcygkZXZlbnQpKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlSW50ZXJ2YWxzKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZURvbnV0U2l6ZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIGRvbnV0U2l6ZTogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3BlcmF0aW9uKCRldmVudDogT3BlcmF0aW9uKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgb3BlcmF0aW9uOiAkZXZlbnQgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIGlmICgkZXZlbnQgPT09IE9wZXJhdGlvbi5DT1VOVCB8fCAkZXZlbnQgPT09IE9wZXJhdGlvbi5ESVNUSU5DVCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24uJyArICRldmVudCksXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyT3JkaW5hdGVBdHRyaWJ1dGVzJC5uZXh0KCksIDEwKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VBYnNjaXNzYSgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICgkZXZlbnQgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGF0dHIgPSB0aGlzLmNsYXNzZXNcbiAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICAgIC5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSAkZXZlbnQpO1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGF0dHJpYnV0ZTogJGV2ZW50LFxuICAgICAgICAgIGxhYmVsOiBhdHRyPy5uYW1lID8/ICdhdHRyLW5vdC1mb3VuZCcsXG4gICAgICAgICAgaW50ZXJ2YWw6IHRoaXMuZml4SW50ZXJ2YWwoXG4gICAgICAgICAgICB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlISwgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUhLmFic2Npc3NhLCBhdHRyaWJ1dGU6ICRldmVudCB9IH0sXG4gICAgICAgICAgICBhdHRyXG4gICAgICAgICAgKS5hYnNjaXNzYT8uaW50ZXJ2YWxcbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VBYnNjaXNzYUxhYmVsKCRldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGFiZWw6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuY29weU9yZGluYXRlRmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gYXR0cj8uZmllbGQuaWQgPT09IGZpZWxkLmlkKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VPcmRpbmF0ZUxhYmVsKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgbGFiZWw6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBlbmFibGVJbnRlcnZhbHMoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5hdHRyaWJ1dGUpO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGludGVydmFsOiAkZXZlbnQgPyB0aGlzLmZpeEludGVydmFsKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlISwgYXR0cikuYWJzY2lzc2E/LmludGVydmFsIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlSW50ZXJ2YWwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsXG4gICAgICAgICAgaW50ZXJ2YWw6ICskZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUaW1lSW50ZXJ2YWwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsXG4gICAgICAgICAgaW50ZXJ2YWw6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIGxlZ2VuZDogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlVG9vbHRpcCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHRvb2x0aXA6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgYXR0cmlidXRlOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeT8uYXR0cmlidXRlID8/ICcnLFxuICAgICAgICAgICAgY29sb3I6IHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB1bmRlZmluZWRcbiAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VHcm91cEJ5KCRldmVudDogYW55KSB7XG4gICAgaWYgKHR5cGVvZiAkZXZlbnQgPT09ICdzdHJpbmcnICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeSxcbiAgICAgICAgICBhdHRyaWJ1dGU6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUNvbG9yU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5Py5hdHRyaWJ1dGUsXG4gICAgICAgICAgY29sb3I6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHNldFRpY2tDb3VudChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uZGF0YS5tYXAoKHZhbDogYW55KSA9PiB2YWwudmFsdWUpKSA8IDNcbiAgICAgID8geyB0aWNrQ291bnQ6IE1hdGgubWF4KC4uLmRhdGEubWFwKCh2YWw6IGFueSkgPT4gdmFsLnZhbHVlKSkgfVxuICAgICAgOiB7fTtcbiAgfVxuXG4gIHRvZ2dsZVN0YWNrZWQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsXG4gICAgICAgICAgc3RhY2tlZDogJGV2ZW50XG4gICAgICAgIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU29ydCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDoge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCxcbiAgICAgICAgICBzb3J0OiAkZXZlbnRcbiAgICAgICAgICAgID8gdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLnNvcnQgPz8ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAna2V5JyxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdhc2MnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU29ydFZhbHVlKCRldmVudDogJ2tleScgfCAndmFsdWUnKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLFxuICAgICAgICAgIHNvcnQ6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLnNvcnQhLCB2YWx1ZTogJGV2ZW50IH1cbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTb3J0RGlyZWN0aW9uKCRldmVudDogJ2FzYycgfCAnZGVzYycpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsXG4gICAgICAgICAgc29ydDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGguc29ydCEsIGRpcmVjdGlvbjogJGV2ZW50IH1cbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVMaW1pdEl0ZW1zKCRldmVudDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICAkZXZlbnQgIT09ICEhdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0IHx8XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYS5saW1pdCA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQgPyBudWxsIDogdGhpcy5ERUZBVUxUX0lURU1fTElNSVRcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRWYWx1ZSgkZXZlbnQ6IG51bWJlciB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgJGV2ZW50ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiAkZXZlbnQgPiAwID8gJGV2ZW50IDogMVxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZSh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdjYW52YXMnKVswXS50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUNpcmNsZUNvbG9yU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGNpcmNsZUNvbG9yU2NoZW1lOiAkZXZlbnRcbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQmFzZUNvbG9yKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGJhc2VDb2xvcjogJGV2ZW50XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsQW5nbGUoYWJzY2lzc2FUeXBlOiBWZWdhVHlwZSwgZGF0YTogeyBrZXk6IHN0cmluZyB8IG51bWJlcjsgdmFsdWU6IGFueSB9W10pIHtcbiAgICBpZiAoXG4gICAgICAoW1ZlZ2FUeXBlLk5PTUlOQUwsIFZlZ2FUeXBlLk9SRElOQUxdLm1hcCgodnQpID0+IHZ0LnRvU3RyaW5nKCkpLmluY2x1ZGVzKGFic2Npc3NhVHlwZSkgJiZcbiAgICAgICAgZGF0YS5zb21lKChpdGVtOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyOyB2YWx1ZTogYW55IH0pID0+IGl0ZW0ua2V5LnRvU3RyaW5nKCkubGVuZ3RoID4gMTApKSB8fFxuICAgICAgW1ZlZ2FUeXBlLlRFTVBPUkFMXS5tYXAoKHZ0KSA9PiB2dC50b1N0cmluZygpKS5pbmNsdWRlcyhhYnNjaXNzYVR5cGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4geyBsYWJlbEFuZ2xlOiAtMzAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0QWJzY2lzc2FUeXBlKGFic2Npc3NhVmVnYVR5cGU6IFZlZ2FUeXBlLCBoYXNTb3J0OiBib29sZWFuKSB7XG4gICAgaWYgKGFic2Npc3NhVmVnYVR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMKSB7XG4gICAgICByZXR1cm4gYWJzY2lzc2FWZWdhVHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc1NvcnQgPyBWZWdhVHlwZS5PUkRJTkFMIDogYWJzY2lzc2FWZWdhVHlwZTtcbiAgfVxuXG4gIGlzVGltZUludGVydmFsKGFic2Npc3NhSW50ZXJ2YWw6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHJldHVybiB0eXBlb2YgYWJzY2lzc2FJbnRlcnZhbCA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBnZXRMYWJlbEV4cHIoYXhpczogJ3gnIHwgJ3knLCBheGlzVHlwZTogc3RyaW5nLCBpbnRlcnZhbDogc3RyaW5nIHwgdW5kZWZpbmVkLCBmaWVsZD86IEZpZWxkKSB7XG4gICAgY29uc3QgdHJ1bmNhdGVCYXNlZE9uID0gYXhpcyA9PT0gJ3gnID8gJ2hlaWdodCA8IDMwMCcgOiAnd2lkdGggPCAxMDAnO1xuICAgIGNvbnN0IHRpbWVGb3JtYXQgPSBgdGltZUZvcm1hdChkYXR1bS52YWx1ZSwgJyR7dGhpcy5nZXRMb2NhbGVGb3JtYXQoZmllbGQ/LmZvcm1hdCwgaW50ZXJ2YWwpfScpYDtcbiAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBmaWVsZD8uZGVjaW1hbFByZWNpc2lvblxuICAgICAgPyBgZm9ybWF0KGRhdHVtLnZhbHVlLCAnLiR7ZmllbGQ/LmRlY2ltYWxQcmVjaXNpb259ZicpYFxuICAgICAgOiAnZGF0dW0udmFsdWUnO1xuICAgIGNvbnN0IHRydW5jYXRlZEZvcm1hdCA9ICd0cnVuY2F0ZShkYXR1bS52YWx1ZSwgMTApJztcblxuICAgIHJldHVybiBheGlzVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgID8gdGltZUZvcm1hdFxuICAgICAgOiBgJHtheGlzVHlwZSA9PT0gVmVnYVR5cGUuUVVBTlRJVEFUSVZFID8gbnVtYmVyRm9ybWF0IDogYCR7dHJ1bmNhdGVCYXNlZE9ufSA/ICR7dHJ1bmNhdGVkRm9ybWF0fSA6IGRhdHVtLnZhbHVlYH1gO1xuICB9XG5cbiAgZ2V0RGF0YUZvcm1hdChheGlzVHlwZTogc3RyaW5nLCBpbnRlcnZhbDogc3RyaW5nIHwgdW5kZWZpbmVkLCBmaWVsZD86IEZpZWxkKSB7XG4gICAgc3dpdGNoIChheGlzVHlwZSkge1xuICAgICAgY2FzZSBWZWdhVHlwZS5URU1QT1JBTDpcbiAgICAgICAgcmV0dXJuIHsgZm9ybWF0OiB0aGlzLmdldExvY2FsZUZvcm1hdChmaWVsZD8uZm9ybWF0LCBpbnRlcnZhbCksIHNjYWxlOiB7IHR5cGU6ICd1dGMnIH0gfTtcbiAgICAgIGNhc2UgVmVnYVR5cGUuUVVBTlRJVEFUSVZFOlxuICAgICAgICByZXR1cm4gZmllbGQ/LmRlY2ltYWxQcmVjaXNpb24gPyB7IGZvcm1hdDogYC4ke2ZpZWxkPy5kZWNpbWFsUHJlY2lzaW9ufWZgIH0gOiB7fTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBnZXRMb2NhbGVGb3JtYXQodHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbnRlcnZhbDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpbnRlcnZhbCkge1xuICAgICAgY29uc3QgZm9ybWF0cyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50T2JqZWN0KCdAcHJ5LndpZGdldC5jaGFydC5zcGVjaWFsaXplZExvY2FsZScpO1xuICAgICAgcmV0dXJuIGZvcm1hdHNbdHlwZSA/PyAnZGVmYXVsdCddO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3JtYXRzID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNwZWNpYWxpemVkTG9jYWxlLmludGVydmFsJyk7XG4gICAgICByZXR1cm4gZm9ybWF0c1tpbnRlcnZhbCA/PyAnZGVmYXVsdCddO1xuICAgIH1cbiAgfVxufVxuIiwiPHByeS13aWRnZXQtYWdncmVnYXRlZC1jaGFydC1jc3M+PC9wcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQtY3NzPlxuPGRpdlxuICBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1jaGFydFwiXG4gICpuZ0lmPVwib3B0aW9uc0NvcHkkIHwgYXN5bmMgYXMgb3B0aW9uc0NvcHlcIlxuICBbY2xhc3MuLWhhcy1oZWFkZXJdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgICNoZWFkZXJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIFtkaXNwbGF5Q291bnRdPVwiZmFsc2VcIlxuICAgIFtvcGVuRGF0YSRdPVwib3BlbkRhdGEkXCJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC50aXRsZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDaGFydFRpdGxlKCRldmVudClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGgudGl0bGVcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uc0NvcHlcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF90eXBlXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnR5cGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwidHlwZU9wdGlvbnNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZVwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBpZD1cImNoYXJ0X3R5cGVcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuRE9OVVRcIj5cbiAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5kb251dFNpemVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRG9udXRTaXplKCRldmVudClcIlxuICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5kb251dFNpemVcIlxuICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlTGVnZW5kKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmdyYXBoLmxlZ2VuZFwiPlxuICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxlZ2VuZCcgfCBpMThuIH19XG4gICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LmdyYXBoLnR5cGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhYnNjaXNzYVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5hYnNjaXNzYScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUFic2Npc3NhKCRldmVudClcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiYWJzY2lzc2FBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGE6IHNvcnRBY3RpdmUgOiBzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgaWQ9XCJhYnNjaXNzYVwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWJzY2lzc2FMYWJlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGFiZWxcIlxuICAgICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBbJ3F1YW50aXRhdGl2ZScsICd0ZW1wb3JhbCddLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVUeXBlcyQgfCBhc3luYyk/LmFic2Npc3NhPy52ZWdhVHlwZT8udG9TdHJpbmcoKSA/PyAnLS0nXG4gICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmXG4gICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUlxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmtlZXAwXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuSElTVE9HUkFNXCI+XG4gICAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJlbmFibGVJbnRlcnZhbHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5pbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgPT09IEdyYXBoVHlwZS5ISVNUT0dSQU1cIlxuICAgICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuaW50ZXJ2YWwnIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5pbnRlcnZhbFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUaW1lSW50ZXJ2YWwob3B0aW9uc0NvcHkuYWJzY2lzc2EuaW50ZXJ2YWwpOyBlbHNlIHRpbWVJbnRlcnZhbFwiPlxuICAgICAgICAgICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5pbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUludGVydmFsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LnNwZWNpZnlJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMFwiXG4gICAgICAgICAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RpbWVJbnRlcnZhbD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJ0aW1lX2ludGVydmFsXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVJbnRlcnZhbCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVRpbWVJbnRlcnZhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIlsnc2Vjb25kJywgJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3F1YXJ0ZXInLCAneWVhciddXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EuaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQudGltZS5cIlxuICAgICAgICAgICAgICAgICAgICBpZD1cInRpbWVfaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm9wZXJhdGlvbnNcIj57eyAnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLnRpdGxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3BlcmF0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwib3BlcmF0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLm9wZXJhdGlvblwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICBpZD1cIm9wZXJhdGlvbnNcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5vcGVyYXRpb24gIT09IE9wZXJhdGlvbi5DT1VOVFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwib3JkaW5hdGVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQub3JkaW5hdGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3JkaW5hdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9yZGluYXRlQXR0cmlidXRlcyQgfCBhc3luYyB8IHByeVNvcnREYXRhOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJvcmRpbmF0ZVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRhdGFMYWJlbFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9yZGluYXRlTGFiZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLmxhYmVsXCJcbiAgICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInRyYW5zbGF0ZVRvVmVnYVR5cGUoY29weU9yZGluYXRlRmllbGQ/LnR5cGUpID09PSAncXVhbnRpdGF0aXZlJ1wiIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUtlZXAwT3JkaW5hdGUoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLmtlZXAwXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ET05VVCAmJiBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuQ0lSQ1VMQVJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUdyb3VwQnkoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JvdXBCeVwiXG4gICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5ncm91cEJ5JyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuZ3JvdXBCeVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3Nlcmllc0F0dHJcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuZ3JvdXBBdHRyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VHcm91cEJ5KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JvdXBCeS5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImFic2Npc3NhQXR0cmlidXRlcyQgfCBhc3luYyB8IHByeVNvcnREYXRhOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxwcnktc2NoZW1lLXBpY2tlclxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ29sb3JTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncm91cEJ5LmNvbG9yXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2NoZW1lLXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguc3RhY2tlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVN0YWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnN0YWNrZWQnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUxpbWl0SXRlbXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdCAhPT0gbnVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQubGltaXQnIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQgIT09IG51bGxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9saW1pdEl0ZW1zVmFsdWVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQubGltaXRNYXhOYicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9saW1pdEl0ZW1zVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXRcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGltaXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0IDwgMVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU29ydCgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncmFwaC5zb3J0XCJcbiAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNvcnQudGl0bGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuZ3JhcGguc29ydFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3NvcnRWYWx1ZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5zb3J0LmF0dHJpYnV0ZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU29ydFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguc29ydC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwic29ydFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImNoYXJ0X3NvcnRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc29ydERpcmVjdGlvblwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5zb3J0LmRpcmVjdGlvbicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU29ydERpcmVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnNvcnQuZGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzb3J0RGlyZWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImNoYXJ0X3NvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgPT09IEdyYXBoVHlwZS5ET05VVCB8fCBvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuQ0lSQ1VMQVJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1zY2hlbWUtcGlja2VyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDaXJjbGVDb2xvclNjaGVtZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmNpcmNsZUNvbG9yU2NoZW1lXCJcbiAgICAgICAgICA+PC9wcnktc2NoZW1lLXBpY2tlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuRE9OVVQgJiZcbiAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUiAmJlxuICAgICAgICAgICAgIW9wdGlvbnNDb3B5Lmdyb3VwQnlcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X2Jhc2VDb2xvclwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jb2xvcicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktY29sb3ItcGlja2VyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUJhc2VDb2xvcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYmFzZUNvbG9yXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9iYXNlQ29sb3JcIlxuICAgICAgICAgICAgPjwvcHJ5LWNvbG9yLXBpY2tlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVPcHRpb24gbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbmVkLW9wdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLWNoaXAgLW1kXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbVwiPnt7IGl0ZW0gfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXNDaGFydFZhbGlkJCB8IGFzeW5jKSAmJiAhKG5vRGF0YSQgfCBhc3luYykgJiYgIShub0FnZ3JlZ2F0aW9uRGF0YSQgfCBhc3luYylcIj5cbiAgICA8ZGl2ICN2ZWdhPjwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhJCB8IGFzeW5jXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm5vRGF0YScgfCBpMThuIH19XCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5ub0RhdGEnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuRGF0YSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnRvb2x0aXAucmVhZFNlYXJjaCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKG5vRGF0YSQgfCBhc3luYykgJiYgKG5vQWdncmVnYXRpb25EYXRhJCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fY2hvb3NlLXBhcmFtZXRlcnNcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC5jaGFydC5hZ2dOb1Jlc3VsdCcgfCBpMThuIH19XCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5hZ2dOb1Jlc3VsdCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5TZXR0aW5ncygpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEobm9EYXRhJCB8IGFzeW5jKSAmJiAhKG5vQWdncmVnYXRpb25EYXRhJCB8IGFzeW5jKSAmJiAhKGlzQ2hhcnRWYWxpZCQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19XCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaG9vc2VQYXJhbWV0ZXJzJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQuc2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
|
|
880
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFLTCxjQUFjLEVBRWQsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUlULGVBQWUsRUFDZixTQUFTLEVBR1QsYUFBYSxFQUdiLFFBQVEsRUFDUixvQkFBb0IsRUFDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUVILEtBQUssRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUNWLGNBQWMsRUFDZixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBZSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7OztBQUd4RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFNckMsTUFBTSxPQUFPLDhCQUErQixTQUFRLG1CQUFtQjtJQXlDckUsWUFDRSxLQUFpQixFQUNULGdCQUFnQyxFQUN4QyxFQUFjLEVBQ04sa0JBQXlDLEVBQ3pDLGFBQStCO1FBRXZDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMVCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBRWhDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBdUI7UUFDekMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBM0N6QyxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFzQyxJQUFJLENBQUMsQ0FBQztRQUU5RSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVUvQix5QkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QyxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFFdEIsZ0JBQVcsR0FBb0MsRUFBRSxDQUFDO1FBR2xELFlBQU8sR0FBWSxFQUFFLENBQUM7UUFDdEIsV0FBTSxHQUFZLEVBQUUsQ0FBQztRQUVyQiwrQkFBMEIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR2pELGVBQVUsR0FBSSxNQUFNLENBQUM7UUFDckIsa0JBQWEsR0FBSSxLQUFLLENBQUM7UUFFdkIsbUJBQWMsR0FBRztZQUNmLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzNCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1NBQzdCLENBQUM7UUFHRixhQUFhO1FBQ2IsV0FBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBVXRCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1gsRUFBRSxFQUFFLENBQUM7WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLENBQUM7U0FDekUsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUMxQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBdUMsQ0FBQztZQUNqRSxNQUFNLFFBQVEsR0FBRyxPQUFPO2lCQUNyQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ3hGLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTFCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXhELE9BQU8sU0FBUyxDQUNkO2dCQUNFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDNUQsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtnQkFDekIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTthQUNNLEVBQ2pDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBOEMsRUFDNUQsV0FBd0QsQ0FDekIsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pGLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQ3JDLE9BQU87YUFDSixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUNoQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN6RzthQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDbEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQzVCLEVBQ0QsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNoRixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUN4RDthQUNFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNYLEVBQUUsRUFBRSxDQUFDO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsQ0FBQyxDQUFDO1NBQ3pFLENBQUMsQ0FBQzthQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNsRCxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RixJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9FLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsTUFBTSxXQUFXLEdBQUcsV0FBVztpQkFDNUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsV0FBVyxDQUFDO2lCQUM5RixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRW5DLE1BQU0sNEJBQTRCLEdBQUcsV0FBVztpQkFDN0MsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsV0FBVyxDQUFDO2lCQUNqRyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFFLE9BQXNCLENBQUMsT0FBa0MsQ0FBQztpQkFDNUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdEMsTUFBTSxlQUFlLEdBQUcsNEJBQTRCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXpFLE1BQU0sWUFBWSxHQUNoQiw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzNELENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQWMsQ0FBQyxDQUFDO1lBRWpELE1BQU0sYUFBYSxHQUFHLFdBQVc7aUJBQzlCLE1BQU0sQ0FDTCxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ0wsQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUNsRixFQUFFLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FDOUI7aUJBQ0EsR0FBRyxDQUNGLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDVixRQUFvQixDQUFDLE1BQU0sSUFBTSxRQUF1QixDQUFDLE9BQWtDLENBQUMsTUFBTSxDQUN0RyxDQUFDO1lBRUosT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsV0FBVyxJQUFJLGVBQWUsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDeEcsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDcEcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FDM0MsY0FBYzthQUNYLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzthQUNoQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xDLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztnQkFDUCxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxHQUFHO2dCQUM1QixLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUMvQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQ3JGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSDthQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDdEMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQztZQUN2QyxJQUFJLENBQUMsT0FBTztZQUNaLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQywwQkFBMEI7U0FDaEMsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLENBQy9CLGNBQWM7YUFDWCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDaEMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNsQyxPQUFPLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDdkI7b0JBQ0UsU0FBUyxDQUFDLEdBQUc7b0JBQ2IsU0FBUyxDQUFDLEdBQUc7b0JBQ2IsU0FBUyxDQUFDLEdBQUc7b0JBQ2IsU0FBUyxDQUFDLEVBQUU7b0JBQ1osU0FBUyxDQUFDLEVBQUU7b0JBQ1osU0FBUyxDQUFDLE9BQU87b0JBQ2pCLFNBQVMsQ0FBQyxNQUFNO29CQUNoQixTQUFTLENBQUMsSUFBSTtpQkFDZjtxQkFDRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQ2xFLENBQUM7Z0JBQ0QsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO29CQUNQLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQy9GLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQ0g7YUFDQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ3RDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQzlDLE9BQU8sQ0FDTCxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUM1QixhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUN6RSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztvQkFDekIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7b0JBQzNFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDVixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDekYsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQzdGLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU87aUJBQ3JCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDeEYsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsTUFBTSxRQUFRLEdBQUcsT0FBTztpQkFDckIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN4RixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixNQUFNLE9BQU8sR0FBRyxPQUFPO2lCQUNwQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ3hGLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLE9BQU87Z0JBQ0wsUUFBUSxFQUFFO29CQUNSLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSztvQkFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDOUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtpQkFDM0I7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSztvQkFDdEIsUUFBUSxFQUNOLE9BQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLLElBQUksT0FBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFFBQVE7d0JBQ25HLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWTt3QkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDMUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtpQkFDM0I7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztvQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO29CQUN0RSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFO2lCQUMxQjthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsUUFBUTtZQUNiLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9FLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FDOUIsV0FBVyxDQUFDLFFBQVEsQ0FBRSxLQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQy9FLEVBQ0QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUNyQjtTQUNGLENBQUMsQ0FBQyxJQUFJLENBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUN6RyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDMUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzdGLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUNILENBQ0ssRUFDUixjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQW9ELEVBQUUsRUFBRTtZQUM5RSxhQUFhO1lBQ2IsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoRSxPQUFPO29CQUNMLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztvQkFDOUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDdEYsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FDYixTQUFTLENBQUMsTUFPWDtpQkFDRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ2QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHO2dCQUNuQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7YUFDckIsQ0FBQyxDQUFDLENBQ0o7aUJBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDN0QsQ0FBQyxDQUFRLEVBQ1QsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFRLEVBQ3pELEtBQUssRUFBRSxDQUNSLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjO1NBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDdEcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FDN0UsQ0FBQztZQUVELENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFjLENBQUMsT0FBTyxDQUNwRyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FDRixDQUFDO1lBQ0YsT0FBTyxTQUFTLENBQ2Q7Z0JBQ0UsT0FBTyxFQUFFLGlEQUFpRDtnQkFDMUQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBdUMsQ0FBQztnQkFDN0QsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7Z0JBQzlDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pELEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQThDOzRCQUNuRixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7NEJBQy9DLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzs0QkFDN0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUU7eUJBQzNDO3dCQUNELFFBQVEsRUFBRTs0QkFDUixDQUFDLEVBQUUsQ0FBQyxVQUFVO2dDQUNaLENBQUMsQ0FBQztvQ0FDRSxLQUFLLEVBQUUsS0FBSztvQ0FDWixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO29DQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7b0NBQ3pFLElBQUksRUFBRTt3Q0FDSixJQUFJLEVBQUUsS0FBSzt3Q0FDWCxHQUFHLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQzt3Q0FDekYsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQzFCLEdBQUcsRUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFlLEVBQ2xDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUNyQjt3Q0FDRCxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztxQ0FDNUQ7b0NBQ0QsS0FBSyxFQUFFO3dDQUNMLDZEQUE2RDt3Q0FDN0QsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7d0NBQzlCLDRFQUE0RTtxQ0FDN0U7b0NBQ0QsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO29DQUNoRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2lDQUMzQztnQ0FDSCxDQUFDLENBQUMsU0FBUzs0QkFDYixDQUFDLEVBQUUsQ0FBQyxVQUFVO2dDQUNaLENBQUMsQ0FBQztvQ0FDRSxLQUFLLEVBQUUsT0FBTztvQ0FDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO29DQUM3QixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRO29DQUM3QixJQUFJLEVBQUU7d0NBQ0osR0FBRyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7d0NBQ3pGLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO3dDQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO3FDQUM1RjtvQ0FDRCxLQUFLLEVBQUU7d0NBQ0wsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztxQ0FDM0Y7b0NBQ0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQ0FDcEM7Z0NBQ0gsQ0FBQyxDQUFDLFNBQVM7NEJBQ2IsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTOzRCQUNqRixLQUFLLEVBQUU7Z0NBQ0wsS0FBSyxFQUFFLFdBQVc7Z0NBQ2xCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0NBQ3RFLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07Z0NBQzVCLEtBQUssRUFBRSxDQUFDLFVBQVU7b0NBQ2hCLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTzt3Q0FDZixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO3dDQUM3RSxDQUFDLENBQUMsU0FBUztvQ0FDYixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtnQ0FDbEYsS0FBSyxFQUNILENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87b0NBQzdCLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQ0FDaEcsQ0FBQyxDQUFDLFNBQVM7NkJBQ2hCOzRCQUNELE9BQU8sRUFDTCxPQUFPO2dDQUNQLE9BQU8sQ0FBQyxPQUFPO2dDQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLFFBQVE7Z0NBQ3ZGLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0NBQ3JCLENBQUMsQ0FBQyxTQUFTOzRCQUNmLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU87Z0NBQzVCLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTztvQ0FDZixDQUFDLENBQUM7d0NBQ0U7NENBQ0UsS0FBSyxFQUFFLEtBQUs7NENBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUTs0Q0FDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSzs0Q0FDN0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUNuQixLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFlLEVBQ2xDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUNyQjt5Q0FDRjt3Q0FDRDs0Q0FDRSxLQUFLLEVBQUUsT0FBTzs0Q0FDZCxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFROzRDQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLOzRDQUM3QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO3lDQUNoRjt3Q0FDRDs0Q0FDRSxLQUFLLEVBQUUsUUFBUTs0Q0FDZixLQUFLLEVBQUUsV0FBVzs0Q0FDbEIsSUFBSSxFQUFFLFNBQVM7eUNBQ2hCO3FDQUNGO29DQUNILENBQUMsQ0FBQzt3Q0FDRTs0Q0FDRSxLQUFLLEVBQUUsS0FBSzs0Q0FDWixJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFROzRDQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLOzRDQUM3QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQ25CLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQWUsRUFDbEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQ3JCO3lDQUNGO3dDQUNEOzRDQUNFLEtBQUssRUFBRSxPQUFPOzRDQUNkLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVE7NENBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7NENBQzdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7eUNBQ2hGO3FDQUNGO2dDQUNMLENBQUMsQ0FBQyxTQUFTO3lCQUNkO3FCQUNGO2lCQUNGO2dCQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO2FBQ3ZCLEVBQ1IsT0FBTyxDQUFDLGNBQWMsQ0FDdkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN2QyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNkLE9BQU87Z0JBQ0w7b0JBQ0UsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUztvQkFDbkMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSztvQkFDOUIsS0FBSyxFQUFFLEtBQXdCO29CQUMvQixXQUFXLEVBQUUsSUFBSTtpQkFDbEI7Z0JBQ0Q7b0JBQ0UsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUztvQkFDbkMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUzt3QkFDaEMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSzt3QkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsdUNBQXVDLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3ZHLEtBQUssRUFBRSxPQUEwQjtvQkFDakMsV0FBVyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUTtpQkFDakM7YUFDRixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNqRyxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjO2lCQUN0QyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDZixJQUFJLFNBQVMsR0FBRyxPQUFPO3FCQUNwQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNuQixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FDckcsQ0FDRjtxQkFDQSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsT0FBTztvQkFDTCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUNsQywwQkFBMEIsT0FBTyxDQUFDLEtBQUssSUFDckMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLElBQUk7d0JBQ3pDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVE7d0JBQzdCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQ3pCLEVBQUUsQ0FDSDtpQkFDRixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVyxDQUNqQixPQUFxQyxFQUNyQyxRQUErQjtRQUUvQixNQUFNLFdBQVcsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBa0MsQ0FBQztRQUN6RixJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDMUMsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2YsSUFBSSxnQkFBZ0IsR0FDbEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0csNkVBQTZFO1lBQzdFLElBQUksT0FBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsdUVBQXVFO1lBQ3ZFLElBQUksT0FBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqRyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7WUFDOUIsQ0FBQztZQUNELFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDekUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDdEIscUNBQXFDO2dCQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQy9ELE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxRQUFRO29CQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQztvQkFDbkYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxvQ0FBb0MsQ0FBQztvQkFDM0YsT0FBTyxFQUFFO3dCQUNQLEtBQUssRUFBRSxRQUFRO3FCQUNoQjtpQkFDRixDQUFDO3FCQUNDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDM0MsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztZQUN2QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEVBQ3BHLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFnQixFQUFFLElBQWE7UUFDakQsSUFBSSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMseUJBQXlCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUMxQixDQUFDO1FBRUQsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDakIsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQy9CLEtBQUssU0FBUyxDQUFDLE9BQU87Z0JBQ3BCLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMzQixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQzFCO2dCQUNFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBZTtRQUM1QixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3RCO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsUUFBZ0IsRUFBRSxJQUFXO1FBQ25DLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRTtnQkFDUixHQUFHLElBQUksQ0FBQyxRQUFRO2dCQUNoQixPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUU7YUFDN0M7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNULElBQUksQ0FBQyxLQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsUUFBUTtRQUNMLElBQUksQ0FBQyxTQUEyQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sUUFBUSxDQUFDLE9BQXFDO1FBQ3BELE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxVQUFVLENBQUM7WUFDaEIsS0FBSyxFQUFFO2dCQUNMLGFBQWEsRUFBRTtvQkFDYixtQkFBbUI7b0JBQ25CLElBQUksRUFBRSxvQkFBb0I7b0JBQzFCLFFBQVEsRUFBRSxFQUFFO29CQUNaLFVBQVUsRUFBRSxHQUFHO29CQUNmLElBQUksRUFBRSxTQUFTO2lCQUNoQjtnQkFDRCxhQUFhLEVBQUU7b0JBQ2IsYUFBYTtvQkFDYixJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixRQUFRLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsR0FBRztvQkFDZixJQUFJLEVBQUUsU0FBUztpQkFDaEI7Z0JBQ0QsYUFBYSxFQUFFO29CQUNiLGNBQWM7b0JBQ2QsSUFBSSxFQUFFLG9CQUFvQjtvQkFDMUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLEdBQUc7b0JBQ2YsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCO2dCQUNELGdCQUFnQixFQUFFO29CQUNoQixXQUFXO29CQUNYLElBQUksRUFBRSxvQkFBb0I7b0JBQzFCLFFBQVEsRUFBRSxFQUFFO29CQUNaLFVBQVUsRUFBRSxHQUFHO29CQUNmLElBQUksRUFBRSxTQUFTO2lCQUNoQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTthQUM1QixDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsTUFBaUI7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTthQUMzQixDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztvQkFDMUIsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLGlCQUFpQixJQUFJLFNBQVM7aUJBQzNDLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7YUFDaEMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWlCO1FBQy9CLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7YUFDdEMsQ0FBQyxDQUFDO1lBQ25DLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQyxLQUFLLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO29CQUMxQixRQUFRLEVBQUU7d0JBQ1IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRO3dCQUNwQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxNQUFNLENBQUM7d0JBQzdFLFNBQVMsRUFBRSxTQUFTO3FCQUNyQjtpQkFDOEIsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWM7UUFDM0IsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTztpQkFDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2lCQUNoQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2lCQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7WUFFdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUU7b0JBQ1IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRO29CQUNwQyxTQUFTLEVBQUUsTUFBTTtvQkFDakIsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksZ0JBQWdCO29CQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FDeEIsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUN0RyxJQUFJLENBQ0wsQ0FBQyxRQUFRLEVBQUUsUUFBUTtpQkFDckI7YUFDOEIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2FBQ2xDLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFXO1FBQ3hCLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO2FBQ3RDLENBQUMsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTztpQkFDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2lCQUNoQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2lCQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxnQkFBZ0IsRUFBRTthQUMxRCxDQUFDLENBQUM7WUFFbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFXO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7YUFDbEMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBVztRQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2FBQ2xDLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQVc7UUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTthQUNsQyxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVztRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTzthQUN0QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDaEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRTtvQkFDUixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7b0JBQ3BDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDbkc7YUFDOEIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQVc7UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFO29CQUNSLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUTtvQkFDcEMsUUFBUSxFQUFFLENBQUMsTUFBTTtpQkFDbEI7YUFDOEIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBVztRQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixRQUFRLEVBQUU7b0JBQ1IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRO29CQUNwQyxRQUFRLEVBQUUsTUFBTTtpQkFDakI7YUFDOEIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTthQUM3QixDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsTUFBVztRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO2FBQzlCLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFXO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztvQkFDMUIsT0FBTyxFQUFFO3dCQUNQLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUU7d0JBQzVELEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFO3FCQUM3QztpQkFDOEIsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7b0JBQzFCLE9BQU8sRUFBRSxTQUFTO2lCQUNhLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsTUFBVztRQUN2QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM5RixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLE9BQU8sRUFBRTtvQkFDUCxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU87b0JBQ25DLFNBQVMsRUFBRSxNQUFNO2lCQUNsQjthQUM4QixDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFXO1FBQzNCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTO29CQUN0RCxLQUFLLEVBQUUsTUFBTTtpQkFDZDthQUM4QixDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUztRQUNwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDL0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFRCxhQUFhLENBQUMsTUFBVztRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLO29CQUNqQyxPQUFPLEVBQUUsTUFBTTtpQkFDaEI7YUFDOEIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFO29CQUNMLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSztvQkFDakMsSUFBSSxFQUFFLE1BQU07d0JBQ1YsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUk7NEJBQ3JDLEtBQUssRUFBRSxLQUFLOzRCQUNaLFNBQVMsRUFBRSxLQUFLO3lCQUNqQjt3QkFDSCxDQUFDLENBQUMsU0FBUztpQkFDZDthQUM4QixDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBdUI7UUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFO29CQUNMLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSztvQkFDakMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7aUJBQ2pFO2FBQzhCLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQXNCO1FBQ3hDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLEtBQUssRUFBRTtvQkFDTCxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUs7b0JBQ2pDLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO2lCQUNyRTthQUM4QixDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFlO1FBQzlCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUNFLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUNyRCxDQUFDO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztvQkFDMUIsUUFBUSxFQUFFO3dCQUNSLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUTt3QkFDcEMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQjtxQkFDaEY7aUJBQzhCLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFxQjtRQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLFFBQVEsRUFBRTtvQkFDUixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVE7b0JBQ3BDLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9CO2FBQzhCLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVRLE9BQU87UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxNQUFXO1FBQ2pDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQzFCLGlCQUFpQixFQUFFLE1BQU07YUFDTSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVztRQUN6QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixTQUFTLEVBQUUsTUFBTTthQUNjLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUFzQixFQUFFLElBQTRDO1FBQ2hGLElBQ0UsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUNyRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBMEMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0YsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQ3JFLENBQUM7WUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGVBQWUsQ0FBQyxnQkFBMEIsRUFBRSxPQUFnQjtRQUMxRCxJQUFJLGdCQUFnQixLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxPQUFPLGdCQUFnQixDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7SUFDdkQsQ0FBQztJQUVELGNBQWMsQ0FBQyxnQkFBaUM7UUFDOUMsT0FBTyxPQUFPLGdCQUFnQixLQUFLLFFBQVEsQ0FBQztJQUM5QyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQWUsRUFBRSxRQUFnQixFQUFFLFFBQTRCLEVBQUUsS0FBYTtRQUN6RixNQUFNLGVBQWUsR0FBRyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUN0RSxNQUFNLFVBQVUsR0FBRyw0QkFBNEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDakcsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLGdCQUFnQjtZQUMxQyxDQUFDLENBQUMseUJBQXlCLEtBQUssRUFBRSxnQkFBZ0IsS0FBSztZQUN2RCxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ2xCLE1BQU0sZUFBZSxHQUFHLDJCQUEyQixDQUFDO1FBRXBELE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVO1lBQ1osQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLE1BQU0sZUFBZSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZILENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0IsRUFBRSxRQUE0QixFQUFFLEtBQWE7UUFDekUsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLFFBQVEsQ0FBQyxRQUFRO2dCQUNwQixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMzRixLQUFLLFFBQVEsQ0FBQyxZQUFZO2dCQUN4QixPQUFPLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkY7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUF3QixFQUFFLFFBQTRCO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUMzRixPQUFPLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFDcEcsT0FBTyxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLE9BQXFDLEVBQUUsS0FBVTtRQUNuRSxJQUNFLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxTQUFTO1lBQzNDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRO1lBQzdDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQzVCLENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUc7WUFDcEIsSUFBSSxFQUFFLFlBQVk7WUFDbEIsS0FBSyxFQUFFLGlCQUFpQjtZQUN4QixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLEdBQUcsRUFBRSxxQkFBcUI7WUFDMUIsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxNQUFNLEVBQUUsaUNBQWlDO1lBQ3pDLE1BQU0sRUFBRSx3Q0FBd0M7U0FDcEIsQ0FBQztRQUUvQixPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUM1RCxDQUFDOzhHQTVqQ1UsOEJBQThCO2tHQUE5Qiw4QkFBOEIsd0xDeEQzQyx5eGVBcVdBOzsyRkQ3U2EsOEJBQThCO2tCQUoxQyxTQUFTOytCQUNFLDZCQUE2QjttTUFJcEIsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb25SZXN1bHQsXG4gIEF0dHJpYnV0ZSxcbiAgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgQ2xhc3MsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBEYXRhc2V0LFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEZpZWxkVHlwZSxcbiAgR3JhcGhUeXBlLFxuICBNb25vQ2xhc3NTZWFyY2hQYXlsb2FkLFxuICBNdWx0aUNsYXNzU2VhcmNoUGF5bG9hZCxcbiAgTmFtZWRRdWVyeSxcbiAgTmFtZWRRdWVyeVR5cGVzLFxuICBPcGVyYXRpb24sXG4gIFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFNlYXJjaEFjdGlvbnMsXG4gIFNvcnQsXG4gIFZhbHVlVHlwZSxcbiAgVmVnYVR5cGUsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZmlsdGVyLFxuICBmcm9tRXZlbnQsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc2hhcmUsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG4gIHdpdGhMYXRlc3RGcm9tXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVmlldyB9IGZyb20gJ3ZlZ2EnO1xuaW1wb3J0IGVtYmVkLCB7IHZlZ2EgfSBmcm9tICd2ZWdhLWVtYmVkJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsLCBtZXJnZURlZXAsIFRvcExldmVsU3BlYyB9IGZyb20gJ3ZlZ2EtbGl0ZSc7XG5pbXBvcnQgeyBpbml0Q29uZmlnIH0gZnJvbSAndmVnYS1saXRlL2J1aWxkL3NyYy9jb25maWcnO1xuaW1wb3J0IHsgUHJ5U2NoZW1lU2VydmljZSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZC9jb21wb25lbnRzL3NjaGVtZS1waWNrZXInO1xuXG5leHBvcnQgY29uc3QgQ0hBUlRfSU5URVJWQUxfU1RFUCA9IDM7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtYWdncmVnYXRlZC1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtYWdncmVnYXRlZC1jaGFydC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0QWdncmVnYXRlZENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgRGF0YVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCd2ZWdhJykgdmVnYSE6IEVsZW1lbnRSZWY7XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnM+O1xuICBvcHRpb25zQ29weSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMgfCBudWxsPihudWxsKTtcbiAgdmlldz86IFZpZXc7XG4gIHRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgdmVnYUxpdGVTcGVjJDogT2JzZXJ2YWJsZTxUb3BMZXZlbFNwZWM+O1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgYXR0cmlidXRlVHlwZXMkOiBPYnNlcnZhYmxlPHtcbiAgICBvcmRpbmF0ZTogeyB2ZWdhVHlwZTogVmVnYVR5cGU7IG5hbWU6IGFueTsgZmllbGQ6IGFueSB9O1xuICAgIGdyb3VwQnk6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZDogYW55OyBuYW1lOiBhbnkgfTtcbiAgICBhYnNjaXNzYTogeyB2ZWdhVHlwZTogVmVnYVR5cGU7IGZpZWxkOiBhbnk7IG5hbWU6IGFueSB9O1xuICB9PjtcbiAgYWdncmVnYXRlZFZhbHVlcyQ6IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IG9wZXJhdGlvbjogYW55IH0+O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBHcmFwaFR5cGUgPSBHcmFwaFR5cGU7XG4gIE9wZXJhdGlvbiA9IE9wZXJhdGlvbjtcbiAgaXNDaGFydFZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdHlwZU9wdGlvbnM6IHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgb3BlcmF0aW9ucyQ6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIGFic2Npc3NhQXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICBjbGFzc2VzOiBDbGFzc1tdID0gW107XG4gIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBvcmRpbmF0ZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgdHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb3B5T3JkaW5hdGVGaWVsZD86IEZpZWxkO1xuICBub0RhdGEkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzb3J0QWN0aXZlPyA9ICduYW1lJztcbiAgc29ydERpcmVjdGlvbj8gPSAnYXNjJztcbiAgc29ydFZhbHVlcyQ6IE9ic2VydmFibGU8eyB2YWx1ZTogJ2tleScgfCAndmFsdWUnOyBhdHRySWQ/OiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyBpc0Rpc3BsYXllZDogYm9vbGVhbiB9W10+O1xuICBzb3J0RGlyZWN0aW9ucyA9IFtcbiAgICB7IHZhbHVlOiAnYXNjJywgbGFiZWw6ICcnIH0sXG4gICAgeyB2YWx1ZTogJ2Rlc2MnLCBsYWJlbDogJycgfVxuICBdO1xuICBub0FnZ3JlZ2F0aW9uRGF0YSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFsbG93ZWRDbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb2xvcnMgPSB2ZWdhLnNjaGVtZSgnUHJvdm9seScpO1xuICBERUZBVUxUX0lURU1fTElNSVQgPSAyMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgYWdncmVnYXRpb25TZXJ2aWNlOiBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2hlbWVTZXJ2aWNlOiBQcnlTY2hlbWVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG4gICAgdGhpcy50eXBlT3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoR3JhcGhUeXBlKVxuICAgICAgLm1hcCgodikgPT4gKHtcbiAgICAgICAgaWQ6IHYsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuZ3JhcGhUeXBlLicgKyB2KVxuICAgICAgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm1hbmlmZXN0JCwgdGhpcy5jbGFzc2VzJF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG1hbmlmZXN0Lm9wdGlvbnMgYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucztcbiAgICAgICAgY29uc3QgYWJzY2lzc2EgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucy5hYnNjaXNzYT8uYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcblxuICAgICAgICBjb25zdCBmaXhJbnRlcnZhbCA9IHRoaXMuZml4SW50ZXJ2YWwob3B0aW9ucywgYWJzY2lzc2EpO1xuXG4gICAgICAgIHJldHVybiBtZXJnZURlZXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ3JhcGg6IHsgdHlwZTogR3JhcGhUeXBlLkJBUiwgdG9vbHRpcDogdHJ1ZSwgbGVnZW5kOiBmYWxzZSB9LFxuICAgICAgICAgICAgYWJzY2lzc2E6IHsga2VlcDA6IHRydWUgfSxcbiAgICAgICAgICAgIG9yZGluYXRlOiB7IGtlZXAwOiB0cnVlIH1cbiAgICAgICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gICAgICAgICAgKG9wdGlvbnMgPz8ge30pIGFzIERlZXBQYXJ0aWFsPENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnM+LFxuICAgICAgICAgIGZpeEludGVydmFsIGFzIERlZXBQYXJ0aWFsPENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnM+XG4gICAgICAgICkgYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucztcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpKTtcbiAgICB9KTtcblxuICAgIHRoaXMub3BlcmF0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnVzZWREYXRhc291cmNlcyQsIHRoaXMuY2xhc3NlcyQsIHRoaXMuZmllbGRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtkYXRhc291cmNlcywgY2xhc3NlcywgZmllbGRzXSkgPT5cbiAgICAgICAgY2xhc3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGNsYXp6KSA9PiBkYXRhc291cmNlcy5tYXAoKGRzKSA9PiAoJ29DbGFzcycgaW4gZHMgPyBkcy5vQ2xhc3MgOiB1bmRlZmluZWQpKS5pbmNsdWRlcyhjbGF6ei5pZCkpXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgLm1hcCgoYXR0cnMpID0+XG4gICAgICAgICAgICBhdHRycy5maWx0ZXIoKGF0dHIpID0+IFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLkRFQ0lNQUwsIEZpZWxkVHlwZS5MT05HXS5pbmNsdWRlcyhhdHRyLmZpZWxkLnR5cGUpKVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+ICEhYXR0cilcbiAgICAgICksXG4gICAgICBtYXAoKGF0dHJpYnV0ZXMpID0+XG4gICAgICAgIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IE9iamVjdC52YWx1ZXMoT3BlcmF0aW9uKS5maWx0ZXIoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uICE9PSBPcGVyYXRpb24uRVhURU5UKVxuICAgICAgICAgIDogW09wZXJhdGlvbi5DT1VOVCwgT3BlcmF0aW9uLkRJU1RJTkNULCBPcGVyYXRpb24uTk9ORV1cbiAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7XG4gICAgICAgICAgICBpZDogdixcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLicgKyB2KVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5maWVsZHMkLnN1YnNjcmliZSgoZmllbGRzKSA9PiAodGhpcy5maWVsZHMgPSBmaWVsZHMpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmNsYXNzZXMkLnN1YnNjcmliZSgoY2xhc3NlcykgPT4gKHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMpKSk7XG5cbiAgICB0aGlzLmFsbG93ZWRDbGFzc2VzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2xhc3NlcyQsIHRoaXMudXNlZERhdGFzb3VyY2VzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBkYXRhc291cmNlc10pID0+IHtcbiAgICAgICAgY29uc3QgaGFzRnVsbFRleHQgPSBkYXRhc291cmNlc1xuICAgICAgICAgIC5tYXAoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgZHMucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MpXG4gICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcCB8fCBjLCBmYWxzZSk7XG5cbiAgICAgICAgY29uc3QgbXVsdGlDbGFzc0RhdGFzb3VyY2VzQ2xhc3NlcyA9IGRhdGFzb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcigoZHMpID0+IGRzLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiBkcy5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NVUxUSV9DTEFTUylcbiAgICAgICAgICAubWFwKChtdWx0aURzKSA9PiAobXVsdGlEcyBhcyBOYW1lZFF1ZXJ5KS5yZXF1ZXN0IGFzIE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkKVxuICAgICAgICAgIC5tYXAoKHBheWxvYWQpID0+IHBheWxvYWQub0NsYXNzZXMpO1xuXG4gICAgICAgIGNvbnN0IGhhc011bHRpTm9DbGFzcyA9IG11bHRpQ2xhc3NEYXRhc291cmNlc0NsYXNzZXMuaW5jbHVkZXModW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBtdWx0aUNsYXNzZXMgPSAoXG4gICAgICAgICAgbXVsdGlDbGFzc0RhdGFzb3VyY2VzQ2xhc3Nlcy5maWx0ZXIoKGNsYXNzZXMpID0+ICEhY2xhc3NlcykgYXMgdW5rbm93biBhcyBzdHJpbmdbXVxuICAgICAgICApLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSBhcyBzdHJpbmdbXSk7XG5cbiAgICAgICAgY29uc3Qgc2luZ2xlQ2xhc3NlcyA9IGRhdGFzb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChkcykgPT5cbiAgICAgICAgICAgICAgKGRzLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiBkcy5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NT05PX0NMQVNTKSB8fFxuICAgICAgICAgICAgICBkcy5zb3VyY2VUeXBlID09PSAnZGF0YXNldCdcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChzaW5nbGVEcykgPT5cbiAgICAgICAgICAgICAgKHNpbmdsZURzIGFzIERhdGFzZXQpLm9DbGFzcyA/PyAoKHNpbmdsZURzIGFzIE5hbWVkUXVlcnkpLnJlcXVlc3QgYXMgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCkub0NsYXNzXG4gICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoXG4gICAgICAgICAgKGNsYXp6KSA9PlxuICAgICAgICAgICAgaGFzRnVsbFRleHQgfHwgaGFzTXVsdGlOb0NsYXNzIHx8IG11bHRpQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5pZCkgfHwgc2luZ2xlQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5pZClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZmllbGRzJCwgdGhpcy5hbGxvd2VkQ2xhc3NlcyQsIHRoaXMub3B0aW9uc0NvcHkkXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpZWxkcywgYWxsb3dlZENsYXNzZXMsIG9wdGlvbkNvcHldKSA9PlxuICAgICAgICBhbGxvd2VkQ2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkLmlkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAhIWZpZWxkICYmXG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlJBVyAmJlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5TVFJJTkcgJiZcbiAgICAgICAgICAgICAgICAob3B0aW9uQ29weT8uZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkhJU1RPR1JBTSB8fCBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuS0VZV09SRClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMub3JkaW5hdGVBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5hbGxvd2VkQ2xhc3NlcyQsXG4gICAgICB0aGlzLnRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpZWxkcywgYWxsb3dlZENsYXNzZXNdKSA9PlxuICAgICAgICBhbGxvd2VkQ2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkLmlkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1BWCxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NSU4sXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uU1VNLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlExLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlEzLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLkFWRVJBR0UsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUVESUFOLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk5PTkVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAubWFwKChvcCkgPT4gb3AudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUub3BlcmF0aW9uID8/ICctLS0tJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICEhZmllbGQgJiZcbiAgICAgICAgICAgICAgICAgIFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuREVDSU1BTF0uaW5jbHVkZXMoZmllbGQudHlwZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAhIWZpZWxkICYmIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiYgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCwgdGhpcy5vcmRpbmF0ZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIGFic2Npc3NhQXR0cnMsIG9yZGluYXRlQXR0cnNdKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgISFvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSAmJlxuICAgICAgICAgIGFic2Npc3NhQXR0cnMubWFwKChhdHRyKSA9PiBhdHRyLmlkKS5pbmNsdWRlcyhvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSkgJiZcbiAgICAgICAgICAob3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGVcbiAgICAgICAgICAgID8gb3JkaW5hdGVBdHRycy5tYXAoKGF0dHIpID0+IGF0dHIuaWQpLmluY2x1ZGVzKG9wdGlvbnMub3JkaW5hdGUuYXR0cmlidXRlKVxuICAgICAgICAgICAgOiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnNDb3B5JCwgdGhpcy5maWVsZHMkLCB0aGlzLmNsYXNzZXMkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW29wdGlvbnMsIGZpZWxkcywgY2xhc3Nlc10pID0+ICEhb3B0aW9ucyAmJiAhIW9wdGlvbnMuYWJzY2lzc2EgJiYgISFvcHRpb25zLm9yZGluYXRlKSxcbiAgICAgIG1hcCgoW29wdGlvbnMsIGZpZWxkcywgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgY29uc3QgYWJzY2lzc2EgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucyEuYWJzY2lzc2EuYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3Qgb3JkaW5hdGUgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucyEub3JkaW5hdGUuYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3QgZ3JvdXBCeSA9IGNsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSBvcHRpb25zPy5ncm91cEJ5Py5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgICBmaWVsZDogYWJzY2lzc2E/LmZpZWxkLFxuICAgICAgICAgICAgdmVnYVR5cGU6IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShhYnNjaXNzYT8uZmllbGQudHlwZSwgYWJzY2lzc2E/Lm5hbWUgPz8gJycpLFxuICAgICAgICAgICAgbmFtZTogYWJzY2lzc2E/Lm5hbWUgPz8gJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yZGluYXRlOiB7XG4gICAgICAgICAgICBmaWVsZDogb3JkaW5hdGU/LmZpZWxkLFxuICAgICAgICAgICAgdmVnYVR5cGU6XG4gICAgICAgICAgICAgIG9wdGlvbnMhLm9yZGluYXRlLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uLkNPVU5UIHx8IG9wdGlvbnMhLm9yZGluYXRlLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uLkRJU1RJTkNUXG4gICAgICAgICAgICAgICAgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkVcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShvcmRpbmF0ZT8uZmllbGQudHlwZSwgb3JkaW5hdGU/Lm5hbWUgPz8gJycpLFxuICAgICAgICAgICAgbmFtZTogb3JkaW5hdGU/Lm5hbWUgPz8gJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGZpZWxkOiBncm91cEJ5Py5maWVsZCxcbiAgICAgICAgICAgIHZlZ2FUeXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoZ3JvdXBCeT8uZmllbGQudHlwZSwgZ3JvdXBCeT8ubmFtZSksXG4gICAgICAgICAgICBuYW1lOiBncm91cEJ5Py5uYW1lID8/ICcnXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGVkVmFsdWVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICBjb21iaW5lTGF0ZXN0KFtmcm9tRXZlbnQod2luZG93LCAnZGF0YXNvdXJjZVJlZnJlc2gnKSwgdGhpcy5kYXRhc291cmNlSWRzJF0pLnBpcGUoXG4gICAgICAgIGZpbHRlcigoW2V2ZW50LCBkYXRhc291cmNlc10pID0+XG4gICAgICAgICAgZGF0YXNvdXJjZXMuaW5jbHVkZXMoKGV2ZW50IGFzIEN1c3RvbUV2ZW50KS5kZXRhaWwucmVwbGFjZSgvJGFnZ3JlZ2F0ZSEvLCAnJykpXG4gICAgICAgICksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpXG4gICAgICApXG4gICAgXSkucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgdGFwKChbZGF0YXNvdXJjZXNdKSA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKFNlYXJjaEFjdGlvbnMuc2V0U2VhcmNoTG9hZGluZyh7IGRhdGFzb3VyY2VzLCBzdGFydDogdHJ1ZSB9KSkpLFxuICAgICAgc3dpdGNoTWFwKChbZGF0YXNvdXJjZXMsIG9wdGlvbnNdKSA9PlxuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uU2VydmljZS5hZ2dyZWdhdGUoZGF0YXNvdXJjZXMsIG9wdGlvbnMpLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goU2VhcmNoQWN0aW9ucy5zZXRTZWFyY2hMb2FkaW5nKHsgZGF0YXNvdXJjZXMsIHN0YXJ0OiBmYWxzZSB9KSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChTZWFyY2hBY3Rpb25zLnNldFNlYXJjaExvYWRpbmcoeyBkYXRhc291cmNlcywgc3RhcnQ6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSBhcyBhbnksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLm9wdGlvbnMkKSxcbiAgICAgIG1hcCgoW2FnZ3JlZ2F0ZSwgb3B0aW9uc106IFtBZ2dyZWdhdGlvblJlc3VsdCwgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9uc10pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoYWdncmVnYXRlLnZhbHVlcy5sZW5ndGggPiAwICYmICFhZ2dyZWdhdGUudmFsdWVzWzBdLmdyb3VwQnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBhZ2dyZWdhdGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgZGF0YTogYWdncmVnYXRlLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgc2VyaWVzOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH0pKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gKFxuICAgICAgICAgIGFnZ3JlZ2F0ZS52YWx1ZXMgYXMge1xuICAgICAgICAgICAga2V5OiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICAgIGtleTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgICB2YWx1ZTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgfVtdO1xuICAgICAgICAgIH1bXVxuICAgICAgICApXG4gICAgICAgICAgLm1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB2YWx1ZS5ncm91cEJ5Lm1hcCgoZ3JvdXBCeSkgPT4gKHtcbiAgICAgICAgICAgICAga2V5OiB2YWx1ZS5rZXksXG4gICAgICAgICAgICAgIHNlcmllczogZ3JvdXBCeS5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBncm91cEJ5LnZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSk7XG4gICAgICAgIHJldHVybiB7IG9wZXJhdGlvbjogYWdncmVnYXRlLm9wZXJhdGlvbiwgZGF0YTogZmxhdHRlbmVkIH07XG4gICAgICB9KSBhcyBhbnksXG4gICAgICBzdGFydFdpdGgoeyBvcGVyYXRpb246IE9wZXJhdGlvbi5OT05FLCBkYXRhOiB7fSB9KSBhcyBhbnksXG4gICAgICBzaGFyZSgpXG4gICAgKTtcblxuICAgIHRoaXMubm9EYXRhJCA9IHRoaXMuZGF0YXNvdXJjZUlkcyQucGlwZShtYXAoKGlkcykgPT4gaWRzLmxlbmd0aCA9PT0gMCkpO1xuICAgIHRoaXMubm9BZ2dyZWdhdGlvbkRhdGEkID0gdGhpcy5hZ2dyZWdhdGVkVmFsdWVzJC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEubGVuZ3RoID09PSAwKSk7XG5cbiAgICB0aGlzLnZlZ2FMaXRlU3BlYyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGVzJCxcbiAgICAgIHRoaXMuYWdncmVnYXRlZFZhbHVlcyQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCB0eXBlcywgdmFsdWVzLCBzaXplLCBkaXNwbGF5XSkgPT4ge1xuICAgICAgICBjb25zdCBpc0NpcmN1bGFyID0gW0dyYXBoVHlwZS5DSVJDVUxBUiwgR3JhcGhUeXBlLkRPTlVUXS5pbmNsdWRlcyhvcHRpb25zLmdyYXBoLnR5cGUpO1xuICAgICAgICBjb25zdCBzdGFja2VkID0gb3B0aW9ucy5ncmFwaC50eXBlLnN0YXJ0c1dpdGgoJ2JhcicpID8gIW9wdGlvbnMuZ3JhcGguc3RhY2tlZCA6IG9wdGlvbnMuZ3JhcGguc3RhY2tlZDtcbiAgICAgICAgY29uc3QgbGVnZW5kVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBvcHRpb25zLmdyb3VwQnkgPyB0eXBlcy5ncm91cEJ5Lm5hbWUgPz8gJycgOiAnQHByeS53aWRnZXQuY2hhcnQubGVnZW5kTGFiZWwnXG4gICAgICAgICk7XG5cbiAgICAgICAgKFtvcHRpb25zLmdyb3VwQnk/LmNvbG9yLCBvcHRpb25zLmNpcmNsZUNvbG9yU2NoZW1lXS5maWx0ZXIoKHNjaGVtZSkgPT4gISFzY2hlbWUpIGFzIHN0cmluZ1tdKS5mb3JFYWNoKFxuICAgICAgICAgIChzY2hlbWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2NoZW1lU2VydmljZS5hc3NlcnRTY2hlbWUoc2NoZW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBtZXJnZURlZXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHNjaGVtYTogJ2h0dHBzOi8vdmVnYS5naXRodWIuaW8vc2NoZW1hL3ZlZ2EtbGl0ZS92NS5qc29uJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRpdGxlKG9wdGlvbnMgYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyksXG4gICAgICAgICAgICB3aWR0aDogJ2NvbnRhaW5lcicsXG4gICAgICAgICAgICBoZWlnaHQ6IChzaXplLmhlaWdodCA/PyAxMDApIC0gKGRpc3BsYXkgPyBXSURHRVRfSEVBREVSX0hFSUdIVC52YWx1ZSA6IDApLFxuICAgICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgICBhdXRvc2l6ZTogeyB0eXBlOiAnZml0JywgY29udGFpbnM6ICdwYWRkaW5nJyB9LFxuICAgICAgICAgICAgZGF0YTogeyB2YWx1ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzLmRhdGEpKSB9LFxuICAgICAgICAgICAgbGF5ZXI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcms6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMuZ3JhcGgudHlwZS5zcGxpdCgnLScpWzBdIGFzICdhcmMnIHwgJ2xpbmUnIHwgJ3BvaW50JyB8ICdiYXInIHwgJ2FyZWEnLFxuICAgICAgICAgICAgICAgICAgcG9pbnQ6IG9wdGlvbnMuZ3JhcGgudHlwZS5pbmRleE9mKCdwb2ludCcpID49IDAsXG4gICAgICAgICAgICAgICAgICBsaW5lOiBvcHRpb25zLmdyYXBoLnR5cGUuaW5kZXhPZignbGluZScpID49IDAsXG4gICAgICAgICAgICAgICAgICBpbm5lclJhZGl1czogb3B0aW9ucy5ncmFwaC5kb251dFNpemUgPz8gMzBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgICB4OiAhaXNDaXJjdWxhclxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLmFic2Npc3NhLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5nZXRBYnNjaXNzYVR5cGUodHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsICEhb3B0aW9ucy5ncmFwaC5zb3J0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLldpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudC5taW5UaWNrKHR5cGVzLmFic2Npc3NhLmZpZWxkPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEV4cHI6IHRoaXMuZ2V0TGFiZWxFeHByKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPy5hYnNjaXNzYT8uaW50ZXJ2YWwgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFic2Npc3NhLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0TGFiZWxBbmdsZSh0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSwgdmFsdWVzLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSBmYWxzZSB2YWx1ZSBoZXJlIHNvIHRoYXQgdmVnYSB1bmRlcnN0YW5kcyBwcm9wZXJseVxuICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvOiAhIW9wdGlvbnMuYWJzY2lzc2Eua2VlcDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy90eXBlOiBXaWRnZXRDaGFydENvbXBvbmVudC5pc1RpbWVVbml0VVRDKHZhcmlhYmxlc1swXSkgPyAndXRjJyA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0U29ydChvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSwgb3B0aW9ucy5ncmFwaD8uc29ydCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lVW5pdDogdGhpcy5nZXRUaW1lVW5pdChvcHRpb25zLCB0eXBlcylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgeTogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLldpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudC5taW5UaWNrKHR5cGVzLm9yZGluYXRlLmZpZWxkPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnNldFRpY2tDb3VudCh2YWx1ZXMuZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsRXhwcjogdGhpcy5nZXRMYWJlbEV4cHIoJ3knLCB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSwgdW5kZWZpbmVkLCB0eXBlcy5vcmRpbmF0ZS5maWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuUVVBTlRJVEFUSVZFID8gISFvcHRpb25zLm9yZGluYXRlLmtlZXAwIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oc3RhY2tlZCA/IHsgc3RhY2s6IHRydWUgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0aGV0YTogaXNDaXJjdWxhciA/IHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGVnZW5kVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAhaXNDaXJjdWxhciA/ICghb3B0aW9ucy5ncm91cEJ5ID8gdW5kZWZpbmVkIDogJ3NlcmllcycpIDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZDogb3B0aW9ucy5ncmFwaC5sZWdlbmQsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAhaXNDaXJjdWxhclxuICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5ncm91cEJ5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgc2NoZW1lOiBvcHRpb25zLmdyb3VwQnk/LmNvbG9yID8/IHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICA6IHsgc2NoZW1lOiBvcHRpb25zLmNpcmNsZUNvbG9yU2NoZW1lID8/IHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgIWlzQ2lyY3VsYXIgJiYgIW9wdGlvbnMuZ3JvdXBCeVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmJhc2VDb2xvciA/PyB0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0U2NoZW1lQ29sb3JzKHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHhPZmZzZXQ6XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ncm91cEJ5ICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWJzY2lzc2FUeXBlKHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLCAhIW9wdGlvbnMuZ3JhcGguc29ydCkgIT09IFZlZ2FUeXBlLlRFTVBPUkFMXG4gICAgICAgICAgICAgICAgICAgICAgPyB7IGZpZWxkOiAnc2VyaWVzJyB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBvcHRpb25zLmdyYXBoLnRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmdyb3VwQnlcbiAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGFGb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/LmFic2Npc3NhPy5pbnRlcnZhbCBhcyBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0YUZvcm1hdCh0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSwgdW5kZWZpbmVkLCB0eXBlcy5vcmRpbmF0ZS5maWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnc2VyaWVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGVnZW5kVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWluYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGFGb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/LmFic2Npc3NhPy5pbnRlcnZhbCBhcyBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0YUZvcm1hdCh0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSwgdW5kZWZpbmVkLCB0eXBlcy5vcmRpbmF0ZS5maWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbmZpZzogdGhpcy5nZXRDaGFydENvbmZpZygpXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgb3B0aW9ucy5hZGRpdGlvbmFsU3BlY1xuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zb3J0VmFsdWVzJCA9IHRoaXMub3B0aW9uc0NvcHkkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdHRySWQ6IG9wdGlvbnM/LmFic2Npc3NhLmF0dHJpYnV0ZSxcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb25zPy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgIHZhbHVlOiAna2V5JyBhcyAna2V5JyB8ICd2YWx1ZScsXG4gICAgICAgICAgICBpc0Rpc3BsYXllZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0cklkOiBvcHRpb25zPy5vcmRpbmF0ZS5hdHRyaWJ1dGUsXG4gICAgICAgICAgICBsYWJlbDogb3B0aW9ucz8ub3JkaW5hdGUuYXR0cmlidXRlXG4gICAgICAgICAgICAgID8gb3B0aW9ucz8ub3JkaW5hdGUubGFiZWxcbiAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgQHByeS53aWRnZXQuY2hhcnQuc29ydC5ieS5vcGVyYXRpb24uJHtvcHRpb25zPy5vcmRpbmF0ZS5vcGVyYXRpb259YCksXG4gICAgICAgICAgICB2YWx1ZTogJ3ZhbHVlJyBhcyAna2V5JyB8ICd2YWx1ZScsXG4gICAgICAgICAgICBpc0Rpc3BsYXllZDogISFvcHRpb25zPy5vcmRpbmF0ZVxuICAgICAgICAgIH1cbiAgICAgICAgXS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5pc0Rpc3BsYXllZCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zQ29weSQsIHRoaXMuc29ydFZhbHVlcyQsIHRoaXMuYXR0cmlidXRlVHlwZXMkLCB0aGlzLmNsYXNzZXMkXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW29wdGlvbnMsIHNvcnRWYWx1ZXMsIGF0dHJUeXBlcywgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb25zID0gdGhpcy5zb3J0RGlyZWN0aW9uc1xuICAgICAgICAgICAgLm1hcCgoc29ydERpcikgPT4ge1xuICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0gY2xhc3Nlc1xuICAgICAgICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PlxuICAgICAgICAgICAgICAgICAgY2xhenouYXR0cmlidXRlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoYXR0cikgPT5cbiAgICAgICAgICAgICAgICAgICAgICBhdHRyLmlkID09PSBzb3J0VmFsdWVzLmZpbmQoKHNvcnRWYWx1ZSkgPT4gc29ydFZhbHVlLnZhbHVlID09PSBvcHRpb25zPy5ncmFwaC5zb3J0Py52YWx1ZSk/LmF0dHJJZFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc29ydERpci52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICBgQHByeS53aWRnZXQuY2hhcnQuc29ydC4ke3NvcnREaXIudmFsdWV9LiR7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJUeXBlcy5hYnNjaXNzYS5uYW1lID09PSBhdHRyaWJ1dGU/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGF0dHJUeXBlcy5hYnNjaXNzYS52ZWdhVHlwZVxuICAgICAgICAgICAgICAgICAgICAgIDogYXR0clR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpeEludGVydmFsKFxuICAgIG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gICAgYWJzY2lzc2E6IEF0dHJpYnV0ZSB8IHVuZGVmaW5lZFxuICApOiBQYXJ0aWFsPENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnM+IHtcbiAgICBjb25zdCBmaXhJbnRlcnZhbCA9IHsgYWJzY2lzc2E6IG9wdGlvbnMuYWJzY2lzc2EgPz8ge30gfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zO1xuICAgIGlmIChvcHRpb25zPy5ncmFwaD8udHlwZSAhPT0gR3JhcGhUeXBlLkhJU1RPR1JBTSkge1xuICAgICAgZml4SW50ZXJ2YWwuYWJzY2lzc2EuaW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gZml4SW50ZXJ2YWw7XG4gICAgfVxuICAgIGlmICghIWFic2Npc3NhKSB7XG4gICAgICBsZXQgbmV3SW50ZXJ2YWxWYWx1ZSA9XG4gICAgICAgIG9wdGlvbnMuYWJzY2lzc2E/LmludGVydmFsID8/IChhYnNjaXNzYS5maWVsZC50eXBlICE9PSBGaWVsZFR5cGUuSU5TVEFOVCA/IENIQVJUX0lOVEVSVkFMX1NURVAgOiAnc2Vjb25kJyk7XG4gICAgICAvLyBpZiBkYXRlIHRpbWUgaW50ZXJ2YWwgYW5kIGZpZWxkIGlzIG5vdCBkYXRlLCByZWluaXRpYWxpemluZyBpbnRlcnZhbCB2YWx1ZVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zPy5hYnNjaXNzYT8uaW50ZXJ2YWwgPT09ICdzdHJpbmcnICYmIGFic2Npc3NhLmZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5JTlNUQU5UKSB7XG4gICAgICAgIG5ld0ludGVydmFsVmFsdWUgPSBDSEFSVF9JTlRFUlZBTF9TVEVQO1xuICAgICAgfVxuICAgICAgLy8gaWYgbnVtZXJpYyBpbnRlcnZhbCBhbmQgZmllbGQgaXMgZGF0ZSwgcmVpbml0aWFsaXppbmcgaW50ZXJ2YWwgdmFsdWVcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucz8uYWJzY2lzc2E/LmludGVydmFsICE9PSAnc3RyaW5nJyAmJiBhYnNjaXNzYS5maWVsZC50eXBlID09PSBGaWVsZFR5cGUuSU5TVEFOVCkge1xuICAgICAgICBuZXdJbnRlcnZhbFZhbHVlID0gJ3NlY29uZCc7XG4gICAgICB9XG4gICAgICBmaXhJbnRlcnZhbC5hYnNjaXNzYS5pbnRlcnZhbCA9IG5ld0ludGVydmFsVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaXhJbnRlcnZhbDtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy52ZWdhTGl0ZVNwZWMkLCB0aGlzLnRyaWdnZXIkXSkuc3Vic2NyaWJlKChbc3BlYywgX10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShzcGVjKSk7XG4gICAgICAgICAgZW1iZWQodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3BlYykpLCB7XG4gICAgICAgICAgICBhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIHJlbmRlcmVyOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGZvcm1hdExvY2FsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm51bWJlckxvY2FsZScpLFxuICAgICAgICAgICAgdGltZUZvcm1hdExvY2FsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVGb3JtYXRMb2NhbGUnKSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgdGhlbWU6ICdjdXN0b20nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignQ2Fubm90IGRpc3BsYXkgY2hhcnQnLCBlcnIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlciQubmV4dCgpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyJC5uZXh0KCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiZcbiAgICAgICghIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYS5saW1pdCB8fCB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQgPT09IHVuZGVmaW5lZClcbiAgICApIHtcbiAgICAgIHRoaXMudG9nZ2xlTGltaXRJdGVtcyh0cnVlKTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2xhdGVUb1ZlZ2FUeXBlKHR5cGU/OiBGaWVsZFR5cGUsIG5hbWU/OiBzdHJpbmcpOiBWZWdhVHlwZSB7XG4gICAgbGV0IGlkUmVnZXggPSBuZXcgUmVnRXhwKC9faWR8aWRffF9JRHxJRF98X0lkfElkXy8sICdnJyk7XG4gICAgaWYgKGlkUmVnZXgudGVzdChuYW1lID8/ICctLS0tLS0tJykpIHtcbiAgICAgIHJldHVybiBWZWdhVHlwZS5PUkRJTkFMO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuUVVBTlRJVEFUSVZFO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWluVGljayh0eXBlOiBGaWVsZFR5cGUpOiB7IHRpY2tNaW5TdGVwOiBudW1iZXIgfSB8IHt9IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4geyB0aWNrTWluU3RlcDogMSB9O1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldFNvcnQoYWJzY2lzc2E6IHN0cmluZywgc29ydD86IFNvcnQpIHtcbiAgICByZXR1cm4gc29ydCA/IHsgc29ydDogeyBmaWVsZDogc29ydC52YWx1ZSwgb3JkZXI6IHNvcnQuZGlyZWN0aW9uICsgJ2VuZGluZycgfSB9IDoge307XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLmdldFZhbHVlKCkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9wZW5EYXRhKCkge1xuICAgICh0aGlzLm9wZW5EYXRhJCBhcyBTdWJqZWN0PHZvaWQ+KS5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRpdGxlKG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ncmFwaD8udGl0bGUgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q2hhcnRDb25maWcoKSB7XG4gICAgcmV0dXJuIGluaXRDb25maWcoe1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgJ2d1aWRlLWxhYmVsJzoge1xuICAgICAgICAgIC8vIGF4aXMgdGljayB0aXRsZXNcbiAgICAgICAgICBmb250OiAnVWJ1bnR1LCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICAgIGZpbGw6ICcjMjYzMzQwJ1xuICAgICAgICB9LFxuICAgICAgICAnZ3VpZGUtdGl0bGUnOiB7XG4gICAgICAgICAgLy8gYXhpcyB0aXRsZVxuICAgICAgICAgIGZvbnQ6ICdVYnVudHUsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgZmlsbDogJyMzRTU0NkEnXG4gICAgICAgIH0sXG4gICAgICAgICdncm91cC10aXRsZSc6IHtcbiAgICAgICAgICAvLyBjaGFydCB0aXRsZVxuICAgICAgICAgIGZvbnQ6ICdVYnVudHUsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICBmb250V2VpZ2h0OiA0MDAsXG4gICAgICAgICAgZmlsbDogJyMyNjMzNDAnXG4gICAgICAgIH0sXG4gICAgICAgICdncm91cC1zdWJ0aXRsZSc6IHtcbiAgICAgICAgICAvLyBub3Qgc3VyZVxuICAgICAgICAgIGZvbnQ6ICdVYnVudHUsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgZmlsbDogJyMyNjMzNDAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0aXRsZTogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVHlwZSgkZXZlbnQ6IEdyYXBoVHlwZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHR5cGU6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgICAgaWYgKFtHcmFwaFR5cGUuQ0lSQ1VMQVIsIEdyYXBoVHlwZS5ET05VVF0ubWFwKChndCkgPT4gZ3QudG9TdHJpbmcoKSkuaW5jbHVkZXMoJGV2ZW50KSkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB1bmRlZmluZWQsXG4gICAgICAgICAgY2lyY2xlQ29sb3JTY2hlbWU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5jaXJjbGVDb2xvclNjaGVtZSA/PyAnUHJvdm9seSdcbiAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5hYmxlSW50ZXJ2YWxzKFtHcmFwaFR5cGUuSElTVE9HUkFNLnRvU3RyaW5nKCldLmluY2x1ZGVzKCRldmVudCkpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZURvbnV0U2l6ZSgkZXZlbnQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIGRvbnV0U2l6ZTogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3BlcmF0aW9uKCRldmVudDogT3BlcmF0aW9uKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgb3BlcmF0aW9uOiAkZXZlbnQgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIGlmICgkZXZlbnQgPT09IE9wZXJhdGlvbi5DT1VOVCB8fCAkZXZlbnQgPT09IE9wZXJhdGlvbi5ESVNUSU5DVCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24uJyArICRldmVudCksXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyT3JkaW5hdGVBdHRyaWJ1dGVzJC5uZXh0KCksIDEwKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VBYnNjaXNzYSgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICgkZXZlbnQgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGF0dHIgPSB0aGlzLmNsYXNzZXNcbiAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICAgIC5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSAkZXZlbnQpO1xuXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGF0dHJpYnV0ZTogJGV2ZW50LFxuICAgICAgICAgIGxhYmVsOiBhdHRyPy5uYW1lID8/ICdhdHRyLW5vdC1mb3VuZCcsXG4gICAgICAgICAgaW50ZXJ2YWw6IHRoaXMuZml4SW50ZXJ2YWwoXG4gICAgICAgICAgICB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlISwgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUhLmFic2Npc3NhLCBhdHRyaWJ1dGU6ICRldmVudCB9IH0sXG4gICAgICAgICAgICBhdHRyXG4gICAgICAgICAgKS5hYnNjaXNzYT8uaW50ZXJ2YWxcbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VBYnNjaXNzYUxhYmVsKCRldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGFiZWw6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuY29weU9yZGluYXRlRmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gYXR0cj8uZmllbGQuaWQgPT09IGZpZWxkLmlkKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VPcmRpbmF0ZUxhYmVsKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgbGFiZWw6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBlbmFibGVJbnRlcnZhbHMoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5hdHRyaWJ1dGUpO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGludGVydmFsOiAkZXZlbnQgPyB0aGlzLmZpeEludGVydmFsKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlISwgYXR0cikuYWJzY2lzc2E/LmludGVydmFsIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlSW50ZXJ2YWwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsXG4gICAgICAgICAgaW50ZXJ2YWw6ICskZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUaW1lSW50ZXJ2YWwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsXG4gICAgICAgICAgaW50ZXJ2YWw6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIGxlZ2VuZDogJGV2ZW50IH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlVG9vbHRpcCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHRvb2x0aXA6ICRldmVudCB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgYXR0cmlidXRlOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeT8uYXR0cmlidXRlID8/ICcnLFxuICAgICAgICAgICAgY29sb3I6IHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB1bmRlZmluZWRcbiAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VHcm91cEJ5KCRldmVudDogYW55KSB7XG4gICAgaWYgKHR5cGVvZiAkZXZlbnQgPT09ICdzdHJpbmcnICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeSxcbiAgICAgICAgICBhdHRyaWJ1dGU6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUNvbG9yU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5Py5hdHRyaWJ1dGUsXG4gICAgICAgICAgY29sb3I6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHNldFRpY2tDb3VudChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uZGF0YS5tYXAoKHZhbDogYW55KSA9PiB2YWwudmFsdWUpKSA8IDNcbiAgICAgID8geyB0aWNrQ291bnQ6IE1hdGgubWF4KC4uLmRhdGEubWFwKCh2YWw6IGFueSkgPT4gdmFsLnZhbHVlKSkgfVxuICAgICAgOiB7fTtcbiAgfVxuXG4gIHRvZ2dsZVN0YWNrZWQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsXG4gICAgICAgICAgc3RhY2tlZDogJGV2ZW50XG4gICAgICAgIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU29ydCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDoge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCxcbiAgICAgICAgICBzb3J0OiAkZXZlbnRcbiAgICAgICAgICAgID8gdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLnNvcnQgPz8ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAna2V5JyxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdhc2MnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU29ydFZhbHVlKCRldmVudDogJ2tleScgfCAndmFsdWUnKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLFxuICAgICAgICAgIHNvcnQ6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLnNvcnQhLCB2YWx1ZTogJGV2ZW50IH1cbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTb3J0RGlyZWN0aW9uKCRldmVudDogJ2FzYycgfCAnZGVzYycpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsXG4gICAgICAgICAgc29ydDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGguc29ydCEsIGRpcmVjdGlvbjogJGV2ZW50IH1cbiAgICAgICAgfVxuICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVMaW1pdEl0ZW1zKCRldmVudDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICAkZXZlbnQgIT09ICEhdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0IHx8XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYS5saW1pdCA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQgPyBudWxsIDogdGhpcy5ERUZBVUxUX0lURU1fTElNSVRcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRWYWx1ZSgkZXZlbnQ6IG51bWJlciB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgJGV2ZW50ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiAkZXZlbnQgPiAwID8gJGV2ZW50IDogMVxuICAgICAgICB9XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZSh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdjYW52YXMnKVswXS50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUNpcmNsZUNvbG9yU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGNpcmNsZUNvbG9yU2NoZW1lOiAkZXZlbnRcbiAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQmFzZUNvbG9yKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGJhc2VDb2xvcjogJGV2ZW50XG4gICAgICB9IGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsQW5nbGUoYWJzY2lzc2FUeXBlOiBWZWdhVHlwZSwgZGF0YTogeyBrZXk6IHN0cmluZyB8IG51bWJlcjsgdmFsdWU6IGFueSB9W10pIHtcbiAgICBpZiAoXG4gICAgICAoW1ZlZ2FUeXBlLk5PTUlOQUwsIFZlZ2FUeXBlLk9SRElOQUxdLm1hcCgodnQpID0+IHZ0LnRvU3RyaW5nKCkpLmluY2x1ZGVzKGFic2Npc3NhVHlwZSkgJiZcbiAgICAgICAgZGF0YS5zb21lKChpdGVtOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyOyB2YWx1ZTogYW55IH0pID0+IGl0ZW0ua2V5LnRvU3RyaW5nKCkubGVuZ3RoID4gMTApKSB8fFxuICAgICAgW1ZlZ2FUeXBlLlRFTVBPUkFMXS5tYXAoKHZ0KSA9PiB2dC50b1N0cmluZygpKS5pbmNsdWRlcyhhYnNjaXNzYVR5cGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4geyBsYWJlbEFuZ2xlOiAtMzAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0QWJzY2lzc2FUeXBlKGFic2Npc3NhVmVnYVR5cGU6IFZlZ2FUeXBlLCBoYXNTb3J0OiBib29sZWFuKSB7XG4gICAgaWYgKGFic2Npc3NhVmVnYVR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMKSB7XG4gICAgICByZXR1cm4gYWJzY2lzc2FWZWdhVHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc1NvcnQgPyBWZWdhVHlwZS5PUkRJTkFMIDogYWJzY2lzc2FWZWdhVHlwZTtcbiAgfVxuXG4gIGlzVGltZUludGVydmFsKGFic2Npc3NhSW50ZXJ2YWw6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHJldHVybiB0eXBlb2YgYWJzY2lzc2FJbnRlcnZhbCA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBnZXRMYWJlbEV4cHIoYXhpczogJ3gnIHwgJ3knLCBheGlzVHlwZTogc3RyaW5nLCBpbnRlcnZhbDogc3RyaW5nIHwgdW5kZWZpbmVkLCBmaWVsZD86IEZpZWxkKSB7XG4gICAgY29uc3QgdHJ1bmNhdGVCYXNlZE9uID0gYXhpcyA9PT0gJ3gnID8gJ2hlaWdodCA8IDMwMCcgOiAnd2lkdGggPCAxMDAnO1xuICAgIGNvbnN0IHRpbWVGb3JtYXQgPSBgdGltZUZvcm1hdChkYXR1bS52YWx1ZSwgJyR7dGhpcy5nZXRMb2NhbGVGb3JtYXQoZmllbGQ/LmZvcm1hdCwgaW50ZXJ2YWwpfScpYDtcbiAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBmaWVsZD8uZGVjaW1hbFByZWNpc2lvblxuICAgICAgPyBgZm9ybWF0KGRhdHVtLnZhbHVlLCAnLiR7ZmllbGQ/LmRlY2ltYWxQcmVjaXNpb259ZicpYFxuICAgICAgOiAnZGF0dW0udmFsdWUnO1xuICAgIGNvbnN0IHRydW5jYXRlZEZvcm1hdCA9ICd0cnVuY2F0ZShkYXR1bS52YWx1ZSwgMTApJztcblxuICAgIHJldHVybiBheGlzVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgID8gdGltZUZvcm1hdFxuICAgICAgOiBgJHtheGlzVHlwZSA9PT0gVmVnYVR5cGUuUVVBTlRJVEFUSVZFID8gbnVtYmVyRm9ybWF0IDogYCR7dHJ1bmNhdGVCYXNlZE9ufSA/ICR7dHJ1bmNhdGVkRm9ybWF0fSA6IGRhdHVtLnZhbHVlYH1gO1xuICB9XG5cbiAgZ2V0RGF0YUZvcm1hdChheGlzVHlwZTogc3RyaW5nLCBpbnRlcnZhbDogc3RyaW5nIHwgdW5kZWZpbmVkLCBmaWVsZD86IEZpZWxkKSB7XG4gICAgc3dpdGNoIChheGlzVHlwZSkge1xuICAgICAgY2FzZSBWZWdhVHlwZS5URU1QT1JBTDpcbiAgICAgICAgcmV0dXJuIHsgZm9ybWF0OiB0aGlzLmdldExvY2FsZUZvcm1hdChmaWVsZD8uZm9ybWF0LCBpbnRlcnZhbCksIHNjYWxlOiB7IHR5cGU6ICd1dGMnIH0gfTtcbiAgICAgIGNhc2UgVmVnYVR5cGUuUVVBTlRJVEFUSVZFOlxuICAgICAgICByZXR1cm4gZmllbGQ/LmRlY2ltYWxQcmVjaXNpb24gPyB7IGZvcm1hdDogYC4ke2ZpZWxkPy5kZWNpbWFsUHJlY2lzaW9ufWZgIH0gOiB7fTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBnZXRMb2NhbGVGb3JtYXQodHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbnRlcnZhbDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpbnRlcnZhbCkge1xuICAgICAgY29uc3QgZm9ybWF0cyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50T2JqZWN0KCdAcHJ5LndpZGdldC5jaGFydC5zcGVjaWFsaXplZExvY2FsZScpO1xuICAgICAgcmV0dXJuIGZvcm1hdHNbdHlwZSA/PyAnZGVmYXVsdCddO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3JtYXRzID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnRPYmplY3QoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNwZWNpYWxpemVkTG9jYWxlLmludGVydmFsJyk7XG4gICAgICByZXR1cm4gZm9ybWF0c1tpbnRlcnZhbCA/PyAnZGVmYXVsdCddO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVVuaXQob3B0aW9uczogQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucywgdHlwZXM6IGFueSkge1xuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ISVNUT0dSQU0gfHxcbiAgICAgIHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlICE9PSBWZWdhVHlwZS5URU1QT1JBTCB8fFxuICAgICAgIW9wdGlvbnM/LmFic2Npc3NhPy5pbnRlcnZhbFxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgdmVnYVRpbWVVbml0cyA9IHtcbiAgICAgIHllYXI6ICdiaW5uZWR5ZWFyJyxcbiAgICAgIG1vbnRoOiAnYmlubmVkeWVhcm1vbnRoJyxcbiAgICAgIHdlZWs6ICdiaW5uZWR5ZWFyd2VlaycsXG4gICAgICBkYXk6ICdiaW5uZWR5ZWFybW9udGhkYXRlJyxcbiAgICAgIGhvdXI6ICdiaW5uZWR5ZWFybW9udGhkYXRlaG91cnMnLFxuICAgICAgbWludXRlOiAnYmlubmVkeWVhcm1vbnRoZGF0ZWhvdXJzbWludXRlcycsXG4gICAgICBzZWNvbmQ6ICdiaW5uZWR5ZWFybW9udGhkYXRlaG91cnNtaW51dGVzc2Vjb25kcydcbiAgICB9IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICByZXR1cm4gdmVnYVRpbWVVbml0c1tvcHRpb25zLmFic2Npc3NhLmludGVydmFsIGFzIHN0cmluZ107XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQtY3NzPjwvcHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LWNzcz5cbjxkaXZcbiAgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIlxuICAqbmdJZj1cIm9wdGlvbnNDb3B5JCB8IGFzeW5jIGFzIG9wdGlvbnNDb3B5XCJcbiAgW2NsYXNzLi1oYXMtaGVhZGVyXT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAjaGVhZGVyXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICBbZGlzcGxheUNvdW50XT1cImZhbHNlXCJcbiAgICBbb3BlbkRhdGEkXT1cIm9wZW5EYXRhJFwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQudGl0bGVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2hhcnRUaXRsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnRpdGxlXCJcbiAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNDb3B5XCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdHlwZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInR5cGVPcHRpb25zXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGVcIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgaWQ9XCJjaGFydF90eXBlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkRPTlVUXCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguZG9udXRTaXplXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZURvbnV0U2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuY2hhcnQuZG9udXRTaXplXCJcbiAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUxlZ2VuZCgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncmFwaC5sZWdlbmRcIj5cbiAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5sZWdlbmQnIHwgaTE4biB9fVxuICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5ncmFwaC50eXBlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYWJzY2lzc2FcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuYWJzY2lzc2EnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBYnNjaXNzYSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImFic2Npc3NhQXR0cmlidXRlcyQgfCBhc3luYyB8IHByeVNvcnREYXRhOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGlkPVwiYWJzY2lzc2FcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRhdGFMYWJlbFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUFic2Npc3NhTGFiZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxhYmVsXCJcbiAgICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgWydxdWFudGl0YXRpdmUnLCAndGVtcG9yYWwnXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAoYXR0cmlidXRlVHlwZXMkIHwgYXN5bmMpPy5hYnNjaXNzYT8udmVnYVR5cGU/LnRvU3RyaW5nKCkgPz8gJy0tJ1xuICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ET05VVCAmJlxuICAgICAgICAgICAgICBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuQ0lSQ1VMQVJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VLZWVwMEFic2Npc3NhKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5rZWVwMFwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQub3JpZ2luJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkhJU1RPR1JBTVwiPlxuICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZW5hYmxlSW50ZXJ2YWxzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuYWJzY2lzc2EuaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuSElTVE9HUkFNXCJcbiAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmludGVydmFsJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuYWJzY2lzc2EuaW50ZXJ2YWxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGltZUludGVydmFsKG9wdGlvbnNDb3B5LmFic2Npc3NhLmludGVydmFsKTsgZWxzZSB0aW1lSW50ZXJ2YWxcIj5cbiAgICAgICAgICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EuaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbnRlcnZhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5zcGVjaWZ5SW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTBcIlxuICAgICAgICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0aW1lSW50ZXJ2YWw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwidGltZV9pbnRlcnZhbFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50aW1lSW50ZXJ2YWwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUaW1lSW50ZXJ2YWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJbJ3NlY29uZCcsICdtaW51dGUnLCAnaG91cicsICdkYXknLCAnd2VlaycsICdtb250aCcsICdxdWFydGVyJywgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpbWUuXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0aW1lX2ludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJvcGVyYXRpb25zXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9wZXJhdGlvbi50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9wZXJhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9wZXJhdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5vcGVyYXRpb25cIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgaWQ9XCJvcGVyYXRpb25zXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkub3JkaW5hdGUub3BlcmF0aW9uICE9PSBPcGVyYXRpb24uQ09VTlRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm9yZGluYXRlXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yZGluYXRlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9yZGluYXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcmRpbmF0ZUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YTogc29ydEFjdGl2ZSA6IHNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgIGlkPVwib3JkaW5hdGVcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC5kYXRhTGFiZWxcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcmRpbmF0ZUxhYmVsKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5sYWJlbFwiXG4gICAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmFuc2xhdGVUb1ZlZ2FUeXBlKGNvcHlPcmRpbmF0ZUZpZWxkPy50eXBlKSA9PT0gJ3F1YW50aXRhdGl2ZSdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VLZWVwME9yZGluYXRlKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5rZWVwMFwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQub3JpZ2luJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuRE9OVVQgJiYgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkNJUkNVTEFSXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVHcm91cEJ5KCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5Lmdyb3VwQnlcIlxuICAgICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuZ3JvdXBCeScgfCBpMThuIH19XG4gICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5Lmdyb3VwQnlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lmdyb3VwQXR0cicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlR3JvdXBCeSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lmdyb3VwQnkuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJhYnNjaXNzYUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YTogc29ydEFjdGl2ZSA6IHNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImNoYXJ0X3Nlcmllc0F0dHJcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8cHJ5LXNjaGVtZS1waWNrZXJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNvbG9yU2NoZW1lKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JvdXBCeS5jb2xvclwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNjaGVtZS1waWNrZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnN0YWNrZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTdGFja2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jaGFydC5zdGFja2VkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVMaW1pdEl0ZW1zKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQgIT09IG51bGxcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxpbWl0JyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0ICE9PSBudWxsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfbGltaXRJdGVtc1ZhbHVlXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxpbWl0TWF4TmInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfbGltaXRJdGVtc1ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0XCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbWl0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdCA8IDFcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNvcnQoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JhcGguc29ydFwiXG4gICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5zb3J0LnRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LmdyYXBoLnNvcnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zb3J0VmFsdWVcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuc29ydC5hdHRyaWJ1dGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNvcnRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnNvcnQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInNvcnRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zb3J0VmFsdWVcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3NvcnREaXJlY3Rpb25cIj57eyAnQHByeS53aWRnZXQuY2hhcnQuc29ydC5kaXJlY3Rpb24nIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNvcnREaXJlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5zb3J0LmRpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwic29ydERpcmVjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuRE9OVVQgfHwgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkNJUkNVTEFSXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktc2NoZW1lLXBpY2tlclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2lyY2xlQ29sb3JTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5jaXJjbGVDb2xvclNjaGVtZVwiXG4gICAgICAgICAgPjwvcHJ5LXNjaGVtZS1waWNrZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmXG4gICAgICAgICAgICBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuQ0lSQ1VMQVIgJiZcbiAgICAgICAgICAgICFvcHRpb25zQ29weS5ncm91cEJ5XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9iYXNlQ29sb3JcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29sb3InIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LWNvbG9yLXBpY2tlclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCYXNlQ29sb3IoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmJhc2VDb2xvclwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfYmFzZUNvbG9yXCJcbiAgICAgICAgICAgID48L3ByeS1jb2xvci1waWNrZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlT3B0aW9uIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ25lZC1vcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS1jaGlwIC1tZFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW1cIj57eyBpdGVtIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGlzQ2hhcnRWYWxpZCQgfCBhc3luYykgJiYgIShub0RhdGEkIHwgYXN5bmMpICYmICEobm9BZ2dyZWdhdGlvbkRhdGEkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiAjdmVnYT48L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YSQgfCBhc3luY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fY2hvb3NlLXBhcmFtZXRlcnNcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC5jaGFydC5ub0RhdGEnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQubm9EYXRhJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkRhdGEoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC50b29sdGlwLnJlYWRTZWFyY2gnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShub0RhdGEkIHwgYXN5bmMpICYmIChub0FnZ3JlZ2F0aW9uRGF0YSQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQuY2hhcnQuYWdnTm9SZXN1bHQnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuYWdnTm9SZXN1bHQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuU2V0dGluZ3MoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC5zZXR0aW5ncy50aXRsZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKG5vRGF0YSQgfCBhc3luYykgJiYgIShub0FnZ3JlZ2F0aW9uRGF0YSQgfCBhc3luYykgJiYgIShpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5TZXR0aW5ncygpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|