@vendure/admin-ui 1.7.4 → 1.8.0
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/README.md +49 -0
- package/angular.json +196 -0
- package/i18n-coverage.json +71 -0
- package/package/bundles/vendure-admin-ui-catalog.umd.js +5689 -0
- package/package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -0
- package/package/bundles/vendure-admin-ui-core.umd.js +16863 -0
- package/package/bundles/vendure-admin-ui-core.umd.js.map +1 -0
- package/package/bundles/vendure-admin-ui-customer.umd.js +1680 -0
- package/package/bundles/vendure-admin-ui-customer.umd.js.map +1 -0
- package/package/bundles/vendure-admin-ui-dashboard.umd.js +759 -0
- package/package/bundles/vendure-admin-ui-dashboard.umd.js.map +1 -0
- package/{bundles → package/bundles}/vendure-admin-ui-login.umd.js +0 -0
- package/{bundles → package/bundles}/vendure-admin-ui-login.umd.js.map +0 -0
- package/{bundles → package/bundles}/vendure-admin-ui-marketing.umd.js +0 -0
- package/{bundles → package/bundles}/vendure-admin-ui-marketing.umd.js.map +0 -0
- package/package/bundles/vendure-admin-ui-order.umd.js +4028 -0
- package/package/bundles/vendure-admin-ui-order.umd.js.map +1 -0
- package/package/bundles/vendure-admin-ui-settings.umd.js +3700 -0
- package/package/bundles/vendure-admin-ui-settings.umd.js.map +1 -0
- package/package/bundles/vendure-admin-ui-system.umd.js +524 -0
- package/{bundles → package/bundles}/vendure-admin-ui-system.umd.js.map +0 -0
- package/{bundles → package/bundles}/vendure-admin-ui.umd.js +0 -0
- package/{bundles → package/bundles}/vendure-admin-ui.umd.js.map +0 -0
- package/package/catalog/catalog.module.d.ts +5 -0
- package/{catalog → package/catalog}/catalog.routes.d.ts +0 -0
- package/{catalog → package/catalog}/components/apply-facet-dialog/apply-facet-dialog.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/asset-detail/asset-detail.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/asset-list/asset-list.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/assets/assets.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.d.ts +0 -0
- package/package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +17 -0
- package/package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +38 -0
- package/package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
- package/{catalog → package/catalog}/components/collection-contents/collection-contents.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/collection-detail/collection-detail.component.d.ts +0 -0
- package/package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
- package/package/catalog/components/collection-list/collection-list.component.d.ts +35 -0
- package/{catalog → package/catalog}/components/collection-tree/array-to-tree.d.ts +0 -0
- package/package/catalog/components/collection-tree/collection-tree-node.component.d.ts +40 -0
- package/package/catalog/components/collection-tree/collection-tree.component.d.ts +36 -0
- package/{catalog → package/catalog}/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/facet-detail/facet-detail.component.d.ts +0 -0
- package/package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
- package/package/catalog/components/facet-list/facet-list.component.d.ts +25 -0
- package/{catalog → package/catalog}/components/generate-product-variants/generate-product-variants.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/option-value-input/option-value-input.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/product-detail/product-detail.component.d.ts +0 -0
- package/package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
- package/package/catalog/components/product-list/product-list.component.d.ts +30 -0
- package/{catalog → package/catalog}/components/product-options-editor/product-options-editor.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/product-variants-editor/product-variants-editor.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/product-variants-list/product-variants-list.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/product-variants-table/product-variants-table.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/update-product-option-dialog/update-product-option-dialog.component.d.ts +0 -0
- package/{catalog → package/catalog}/components/variant-price-detail/variant-price-detail.component.d.ts +0 -0
- package/{catalog → package/catalog}/package.json +0 -0
- package/{catalog → package/catalog}/providers/product-detail/product-detail.service.d.ts +0 -0
- package/{catalog → package/catalog}/providers/product-detail/replace-last.d.ts +0 -0
- package/{catalog → package/catalog}/providers/routing/asset-resolver.d.ts +0 -0
- package/{catalog → package/catalog}/providers/routing/collection-resolver.d.ts +0 -0
- package/{catalog → package/catalog}/providers/routing/facet-resolver.d.ts +0 -0
- package/{catalog → package/catalog}/providers/routing/product-resolver.d.ts +0 -0
- package/{catalog → package/catalog}/providers/routing/product-variants-resolver.d.ts +0 -0
- package/package/catalog/public_api.d.ts +39 -0
- package/{catalog → package/catalog}/vendure-admin-ui-catalog.d.ts +0 -0
- package/package/catalog/vendure-admin-ui-catalog.metadata.json +1 -0
- package/{core → package/core}/app.component.d.ts +0 -0
- package/{core → package/core}/app.component.module.d.ts +0 -0
- package/{core → package/core}/app.config.d.ts +0 -0
- package/{core → package/core}/common/base-detail.component.d.ts +0 -0
- package/{core → package/core}/common/base-entity-resolver.d.ts +0 -0
- package/{core → package/core}/common/base-list.component.d.ts +0 -0
- package/package/core/common/component-registry-types.d.ts +56 -0
- package/{core → package/core}/common/deactivate-aware.d.ts +0 -0
- package/{core → package/core}/common/detail-breadcrumb.d.ts +0 -0
- package/package/core/common/generated-types.d.ts +9748 -0
- package/{core → package/core}/common/introspection-result-wrapper.d.ts +0 -0
- package/{core → package/core}/common/introspection-result.d.ts +0 -0
- package/{core → package/core}/common/single-search-selection-model.d.ts +0 -0
- package/package/core/common/utilities/bulk-action-utils.d.ts +19 -0
- package/{core → package/core}/common/utilities/configurable-operation-utils.d.ts +0 -0
- package/{core → package/core}/common/utilities/create-updated-translatable.d.ts +0 -0
- package/{core → package/core}/common/utilities/find-translation.d.ts +0 -0
- package/{core → package/core}/common/utilities/flatten-facet-values.d.ts +0 -0
- package/{core → package/core}/common/utilities/get-default-ui-language.d.ts +0 -0
- package/{core → package/core}/common/utilities/interpolate-description.d.ts +0 -0
- package/package/core/common/utilities/selection-manager.d.ts +30 -0
- package/{core → package/core}/common/utilities/string-to-color.d.ts +0 -0
- package/package/core/common/version.d.ts +1 -0
- package/{core → package/core}/components/app-shell/app-shell.component.d.ts +0 -0
- package/{core → package/core}/components/breadcrumb/breadcrumb.component.d.ts +0 -0
- package/{core → package/core}/components/channel-switcher/channel-switcher.component.d.ts +0 -0
- package/{core → package/core}/components/main-nav/main-nav.component.d.ts +0 -0
- package/{core → package/core}/components/notification/notification.component.d.ts +0 -0
- package/{core → package/core}/components/overlay-host/overlay-host.component.d.ts +0 -0
- package/{core → package/core}/components/theme-switcher/theme-switcher.component.d.ts +0 -0
- package/{core → package/core}/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.d.ts +0 -0
- package/{core → package/core}/components/user-menu/user-menu.component.d.ts +0 -0
- package/{core → package/core}/core.module.d.ts +0 -0
- package/{core → package/core}/data/check-jobs-link.d.ts +0 -0
- package/{core → package/core}/data/client-state/client-defaults.d.ts +0 -0
- package/{core → package/core}/data/client-state/client-resolvers.d.ts +0 -0
- package/{core → package/core}/data/data.module.d.ts +0 -0
- package/{core → package/core}/data/definitions/administrator-definitions.d.ts +0 -0
- package/{core → package/core}/data/definitions/auth-definitions.d.ts +0 -0
- package/{core → package/core}/data/definitions/client-definitions.d.ts +0 -0
- package/package/core/data/definitions/collection-definitions.d.ts +13 -0
- package/{core → package/core}/data/definitions/customer-definitions.d.ts +0 -0
- package/package/core/data/definitions/facet-definitions.d.ts +13 -0
- package/package/core/data/definitions/order-definitions.d.ts +39 -0
- package/package/core/data/definitions/product-definitions.d.ts +46 -0
- package/{core → package/core}/data/definitions/promotion-definitions.d.ts +0 -0
- package/{core → package/core}/data/definitions/settings-definitions.d.ts +0 -0
- package/{core → package/core}/data/definitions/shared-definitions.d.ts +0 -0
- package/{core → package/core}/data/definitions/shipping-definitions.d.ts +0 -0
- package/{core → package/core}/data/omit-typename-link.d.ts +0 -0
- package/{core → package/core}/data/providers/administrator-data.service.d.ts +0 -0
- package/{core → package/core}/data/providers/auth-data.service.d.ts +0 -0
- package/{core → package/core}/data/providers/base-data.service.d.ts +0 -0
- package/{core → package/core}/data/providers/client-data.service.d.ts +0 -0
- package/package/core/data/providers/collection-data.service.d.ts +28 -0
- package/{core → package/core}/data/providers/customer-data.service.d.ts +0 -0
- package/{core → package/core}/data/providers/data.service.d.ts +0 -0
- package/package/core/data/providers/facet-data.service.d.ts +24 -0
- package/{core → package/core}/data/providers/fetch-adapter.d.ts +0 -0
- package/{core → package/core}/data/providers/interceptor.d.ts +0 -0
- package/package/core/data/providers/order-data.service.d.ts +52 -0
- package/package/core/data/providers/product-data.service.d.ts +82 -0
- package/{core → package/core}/data/providers/promotion-data.service.d.ts +0 -0
- package/{core → package/core}/data/providers/settings-data.service.d.ts +0 -0
- package/{core → package/core}/data/providers/shipping-method-data.service.d.ts +0 -0
- package/{core → package/core}/data/query-result.d.ts +0 -0
- package/{core → package/core}/data/server-config.d.ts +0 -0
- package/{core → package/core}/data/utils/add-custom-fields.d.ts +0 -0
- package/{core → package/core}/data/utils/get-server-location.d.ts +0 -0
- package/{core → package/core}/data/utils/remove-readonly-custom-fields.d.ts +0 -0
- package/{core → package/core}/data/utils/transform-relation-custom-field-inputs.d.ts +0 -0
- package/{core → package/core}/package.json +0 -0
- package/{core → package/core}/providers/auth/auth.service.d.ts +0 -0
- package/package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +6 -0
- package/package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
- package/package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
- package/{core → package/core}/providers/component-registry/component-registry.service.d.ts +0 -0
- package/{core → package/core}/providers/custom-detail-component/custom-detail-component-types.d.ts +0 -0
- package/{core → package/core}/providers/custom-detail-component/custom-detail-component.service.d.ts +0 -0
- package/{core → package/core}/providers/custom-field-component/custom-field-component.service.d.ts +0 -0
- package/{core → package/core}/providers/dashboard-widget/dashboard-widget-types.d.ts +0 -0
- package/{core → package/core}/providers/dashboard-widget/dashboard-widget.service.d.ts +0 -0
- package/{core → package/core}/providers/dashboard-widget/register-dashboard-widget.d.ts +0 -0
- package/{core → package/core}/providers/guard/auth.guard.d.ts +0 -0
- package/{core → package/core}/providers/health-check/health-check.service.d.ts +0 -0
- package/{core → package/core}/providers/i18n/custom-http-loader.d.ts +0 -0
- package/{core → package/core}/providers/i18n/custom-message-format-compiler.d.ts +0 -0
- package/{core → package/core}/providers/i18n/i18n.service.d.ts +0 -0
- package/{core → package/core}/providers/job-queue/job-queue.service.d.ts +0 -0
- package/{core → package/core}/providers/local-storage/local-storage.service.d.ts +0 -0
- package/package/core/providers/modal/modal.service.d.ts +134 -0
- package/package/core/providers/nav-builder/nav-builder-types.d.ts +92 -0
- package/{core → package/core}/providers/nav-builder/nav-builder.service.d.ts +0 -0
- package/{core → package/core}/providers/notification/notification.service.d.ts +0 -0
- package/{core → package/core}/providers/overlay-host/overlay-host.service.d.ts +0 -0
- package/package/core/public_api.d.ts +239 -0
- package/{core → package/core}/shared/components/action-bar/action-bar.component.d.ts +0 -0
- package/{core → package/core}/shared/components/action-bar-items/action-bar-items.component.d.ts +0 -0
- package/{core → package/core}/shared/components/address-form/address-form.component.d.ts +0 -0
- package/{core → package/core}/shared/components/affixed-input/affixed-input.component.d.ts +0 -0
- package/{core → package/core}/shared/components/affixed-input/percentage-suffix-input.component.d.ts +0 -0
- package/{core → package/core}/shared/components/asset-file-input/asset-file-input.component.d.ts +0 -0
- package/package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +67 -0
- package/{core → package/core}/shared/components/asset-picker-dialog/asset-picker-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/asset-preview/asset-preview.component.d.ts +0 -0
- package/{core → package/core}/shared/components/asset-preview-dialog/asset-preview-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/asset-preview-links/asset-preview-links.component.d.ts +0 -0
- package/{core → package/core}/shared/components/asset-search-input/asset-search-input.component.d.ts +0 -0
- package/package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +29 -0
- package/{core → package/core}/shared/components/channel-assignment-control/channel-assignment-control.component.d.ts +0 -0
- package/{core → package/core}/shared/components/channel-badge/channel-badge.component.d.ts +0 -0
- package/{core → package/core}/shared/components/chip/chip.component.d.ts +0 -0
- package/{core → package/core}/shared/components/configurable-input/configurable-input.component.d.ts +0 -0
- package/{core → package/core}/shared/components/currency-input/currency-input.component.d.ts +0 -0
- package/{core → package/core}/shared/components/custom-detail-component-host/custom-detail-component-host.component.d.ts +0 -0
- package/{core → package/core}/shared/components/custom-field-control/custom-field-control.component.d.ts +0 -0
- package/{core → package/core}/shared/components/customer-label/customer-label.component.d.ts +0 -0
- package/{core → package/core}/shared/components/data-table/data-table-column.component.d.ts +0 -0
- package/package/core/shared/components/data-table/data-table.component.d.ts +101 -0
- package/{core → package/core}/shared/components/datetime-picker/constants.d.ts +0 -0
- package/{core → package/core}/shared/components/datetime-picker/datetime-picker.component.d.ts +0 -0
- package/{core → package/core}/shared/components/datetime-picker/datetime-picker.service.d.ts +0 -0
- package/{core → package/core}/shared/components/datetime-picker/types.d.ts +0 -0
- package/{core → package/core}/shared/components/dropdown/dropdown-item.directive.d.ts +0 -0
- package/package/core/shared/components/dropdown/dropdown-menu.component.d.ts +31 -0
- package/{core → package/core}/shared/components/dropdown/dropdown-trigger.directive.d.ts +0 -0
- package/{core → package/core}/shared/components/dropdown/dropdown.component.d.ts +0 -0
- package/{core → package/core}/shared/components/edit-note-dialog/edit-note-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/empty-placeholder/empty-placeholder.component.d.ts +0 -0
- package/{core → package/core}/shared/components/entity-info/entity-info.component.d.ts +0 -0
- package/{core → package/core}/shared/components/extension-host/extension-host-config.d.ts +0 -0
- package/{core → package/core}/shared/components/extension-host/extension-host.component.d.ts +0 -0
- package/{core → package/core}/shared/components/extension-host/extension-host.service.d.ts +0 -0
- package/{core → package/core}/shared/components/extension-host/host-external-frame.d.ts +0 -0
- package/{core → package/core}/shared/components/facet-value-chip/facet-value-chip.component.d.ts +0 -0
- package/{core → package/core}/shared/components/facet-value-selector/facet-value-selector.component.d.ts +0 -0
- package/{core → package/core}/shared/components/focal-point-control/focal-point-control.component.d.ts +0 -0
- package/{core → package/core}/shared/components/form-field/form-field-control.directive.d.ts +0 -0
- package/{core → package/core}/shared/components/form-field/form-field.component.d.ts +0 -0
- package/{core → package/core}/shared/components/form-item/form-item.component.d.ts +0 -0
- package/{core → package/core}/shared/components/formatted-address/formatted-address.component.d.ts +0 -0
- package/{core → package/core}/shared/components/help-tooltip/help-tooltip.component.d.ts +0 -0
- package/{core → package/core}/shared/components/history-entry-detail/history-entry-detail.component.d.ts +0 -0
- package/{core → package/core}/shared/components/items-per-page-controls/items-per-page-controls.component.d.ts +0 -0
- package/{core → package/core}/shared/components/labeled-data/labeled-data.component.d.ts +0 -0
- package/{core → package/core}/shared/components/language-selector/language-selector.component.d.ts +0 -0
- package/{core → package/core}/shared/components/manage-tags-dialog/manage-tags-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/modal-dialog/dialog-buttons.directive.d.ts +0 -0
- package/{core → package/core}/shared/components/modal-dialog/dialog-component-outlet.component.d.ts +0 -0
- package/{core → package/core}/shared/components/modal-dialog/dialog-title.directive.d.ts +0 -0
- package/{core → package/core}/shared/components/modal-dialog/modal-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/object-tree/object-tree.component.d.ts +0 -0
- package/{core → package/core}/shared/components/order-state-label/order-state-label.component.d.ts +0 -0
- package/{core → package/core}/shared/components/pagination-controls/pagination-controls.component.d.ts +0 -0
- package/{core → package/core}/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/product-search-input/product-search-input.component.d.ts +0 -0
- package/{core → package/core}/shared/components/product-selector/product-selector.component.d.ts +0 -0
- package/package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +21 -0
- package/package/core/shared/components/radio-card/radio-card.component.d.ts +19 -0
- package/{core → package/core}/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/rich-text-editor/link-dialog/link-dialog.component.d.ts +0 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +28 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +31 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +8 -0
- package/{core → package/core}/shared/components/rich-text-editor/prosemirror/keymap.d.ts +0 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +4 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +16 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
- package/{core → package/core}/shared/components/rich-text-editor/prosemirror/menu/menu.d.ts +0 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +5 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +25 -0
- package/package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +9 -0
- package/{core → package/core}/shared/components/rich-text-editor/prosemirror/utils.d.ts +0 -0
- package/package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +18 -0
- package/package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +39 -0
- package/{core → package/core}/shared/components/select-toggle/select-toggle.component.d.ts +0 -0
- package/{core → package/core}/shared/components/simple-dialog/simple-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/components/status-badge/status-badge.component.d.ts +0 -0
- package/{core → package/core}/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.d.ts +0 -0
- package/{core → package/core}/shared/components/table-row-action/table-row-action.component.d.ts +0 -0
- package/{core → package/core}/shared/components/tag-selector/tag-selector.component.d.ts +0 -0
- package/{core → package/core}/shared/components/timeline-entry/timeline-entry.component.d.ts +0 -0
- package/{core → package/core}/shared/components/title-input/title-input.component.d.ts +0 -0
- package/{core → package/core}/shared/components/ui-extension-point/ui-extension-point.component.d.ts +0 -0
- package/{core → package/core}/shared/directives/disabled.directive.d.ts +0 -0
- package/{core → package/core}/shared/directives/if-default-channel-active.directive.d.ts +0 -0
- package/{core → package/core}/shared/directives/if-directive-base.d.ts +0 -0
- package/{core → package/core}/shared/directives/if-multichannel.directive.d.ts +0 -0
- package/{core → package/core}/shared/directives/if-permissions.directive.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.d.ts +0 -0
- package/package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +27 -0
- package/package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +19 -0
- package/package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +20 -0
- package/{core → package/core}/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/date-form-input/date-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/number-form-input/number-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/password-form-input/password-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.d.ts +0 -0
- package/package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +90 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/text-form-input/text-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.d.ts +0 -0
- package/{core → package/core}/shared/pipes/asset-preview.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/channel-label.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/custom-field-label.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/duration.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/file-size.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/has-permission.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/locale-base.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/locale-currency-name.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/locale-currency.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/locale-date.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/locale-language-name.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/locale-region-name.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/sentence-case.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/sort.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/state-i18n-token.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/string-to-color.pipe.d.ts +0 -0
- package/{core → package/core}/shared/pipes/time-ago.pipe.d.ts +0 -0
- package/{core → package/core}/shared/providers/routing/can-deactivate-detail-guard.d.ts +0 -0
- package/{core → package/core}/shared/shared.module.d.ts +0 -0
- package/{core → package/core}/validators/unicode-pattern.validator.d.ts +0 -0
- package/{core → package/core}/vendure-admin-ui-core.d.ts +0 -0
- package/package/core/vendure-admin-ui-core.metadata.json +1 -0
- package/{customer → package/customer}/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.d.ts +0 -0
- package/{customer → package/customer}/components/address-card/address-card.component.d.ts +0 -0
- package/{customer → package/customer}/components/address-detail-dialog/address-detail-dialog.component.d.ts +0 -0
- package/{customer → package/customer}/components/customer-detail/customer-detail.component.d.ts +0 -0
- package/{customer → package/customer}/components/customer-group-detail-dialog/customer-group-detail-dialog.component.d.ts +0 -0
- package/{customer → package/customer}/components/customer-group-list/customer-group-list.component.d.ts +0 -0
- package/package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +44 -0
- package/{customer → package/customer}/components/customer-history/customer-history.component.d.ts +0 -0
- package/{customer → package/customer}/components/customer-list/customer-list.component.d.ts +0 -0
- package/{customer → package/customer}/components/customer-status-label/customer-status-label.component.d.ts +0 -0
- package/{customer → package/customer}/components/select-customer-group-dialog/select-customer-group-dialog.component.d.ts +0 -0
- package/{customer → package/customer}/customer.module.d.ts +0 -0
- package/{customer → package/customer}/customer.routes.d.ts +0 -0
- package/{customer → package/customer}/package.json +0 -0
- package/{customer → package/customer}/providers/routing/customer-resolver.d.ts +0 -0
- package/{customer → package/customer}/public_api.d.ts +0 -0
- package/{customer → package/customer}/vendure-admin-ui-customer.d.ts +0 -0
- package/package/customer/vendure-admin-ui-customer.metadata.json +1 -0
- package/{dashboard → package/dashboard}/components/dashboard/dashboard.component.d.ts +0 -0
- package/{dashboard → package/dashboard}/components/dashboard-widget/dashboard-widget.component.d.ts +0 -0
- package/{dashboard → package/dashboard}/dashboard.module.d.ts +0 -0
- package/{dashboard → package/dashboard}/dashboard.routes.d.ts +0 -0
- package/{dashboard → package/dashboard}/default-widgets.d.ts +0 -0
- package/{dashboard → package/dashboard}/package.json +0 -0
- package/{dashboard → package/dashboard}/public_api.d.ts +0 -0
- package/{dashboard → package/dashboard}/vendure-admin-ui-dashboard.d.ts +0 -0
- package/{dashboard → package/dashboard}/vendure-admin-ui-dashboard.metadata.json +0 -0
- package/{dashboard → package/dashboard}/widgets/latest-orders-widget/latest-orders-widget.component.d.ts +0 -0
- package/{dashboard → package/dashboard}/widgets/order-summary-widget/order-summary-widget.component.d.ts +0 -0
- package/{dashboard → package/dashboard}/widgets/test-widget/test-widget.component.d.ts +0 -0
- package/{dashboard → package/dashboard}/widgets/welcome-widget/welcome-widget.component.d.ts +0 -0
- package/package/esm2015/catalog/catalog.module.js +85 -0
- package/{esm2015 → package/esm2015}/catalog/catalog.routes.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/apply-facet-dialog/apply-facet-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/asset-detail/asset-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/asset-list/asset-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/assets/assets.component.js +0 -0
- package/package/esm2015/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.js +112 -0
- package/package/esm2015/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.js +51 -0
- package/package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.js +89 -0
- package/package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.js +69 -0
- package/{esm2015 → package/esm2015}/catalog/components/collection-contents/collection-contents.component.js +0 -0
- package/package/esm2015/catalog/components/collection-detail/collection-detail.component.js +244 -0
- package/package/esm2015/catalog/components/collection-list/collection-list-bulk-actions.js +147 -0
- package/package/esm2015/catalog/components/collection-list/collection-list.component.js +154 -0
- package/{esm2015 → package/esm2015}/catalog/components/collection-tree/array-to-tree.js +0 -0
- package/package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +126 -0
- package/package/esm2015/catalog/components/collection-tree/collection-tree.component.js +77 -0
- package/{esm2015 → package/esm2015}/catalog/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/facet-detail/facet-detail.component.js +0 -0
- package/package/esm2015/catalog/components/facet-list/facet-list-bulk-actions.js +208 -0
- package/package/esm2015/catalog/components/facet-list/facet-list.component.js +116 -0
- package/{esm2015 → package/esm2015}/catalog/components/generate-product-variants/generate-product-variants.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/option-value-input/option-value-input.component.js +0 -0
- package/package/esm2015/catalog/components/product-detail/product-detail.component.js +527 -0
- package/package/esm2015/catalog/components/product-list/product-list-bulk-actions.js +173 -0
- package/package/esm2015/catalog/components/product-list/product-list.component.js +158 -0
- package/{esm2015 → package/esm2015}/catalog/components/product-options-editor/product-options-editor.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/product-variants-editor/product-variants-editor.component.js +0 -0
- package/package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +214 -0
- package/{esm2015 → package/esm2015}/catalog/components/product-variants-table/product-variants-table.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/update-product-option-dialog/update-product-option-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/components/variant-price-detail/variant-price-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/providers/product-detail/product-detail.service.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/providers/product-detail/replace-last.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/providers/routing/asset-resolver.js +0 -0
- package/package/esm2015/catalog/providers/routing/collection-resolver.js +39 -0
- package/{esm2015 → package/esm2015}/catalog/providers/routing/facet-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/providers/routing/product-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/catalog/providers/routing/product-variants-resolver.js +0 -0
- package/package/esm2015/catalog/public_api.js +41 -0
- package/{esm2015 → package/esm2015}/catalog/vendure-admin-ui-catalog.js +0 -0
- package/{esm2015 → package/esm2015}/core/app.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/app.component.module.js +0 -0
- package/{esm2015 → package/esm2015}/core/app.config.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/base-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/base-entity-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/base-list.component.js +0 -0
- package/package/esm2015/core/common/component-registry-types.js +2 -0
- package/{esm2015 → package/esm2015}/core/common/deactivate-aware.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/detail-breadcrumb.js +0 -0
- package/package/esm2015/core/common/generated-types.js +987 -0
- package/{esm2015 → package/esm2015}/core/common/introspection-result-wrapper.js +0 -0
- package/package/esm2015/core/common/introspection-result.js +300 -0
- package/{esm2015 → package/esm2015}/core/common/single-search-selection-model.js +0 -0
- package/package/esm2015/core/common/utilities/bulk-action-utils.js +44 -0
- package/{esm2015 → package/esm2015}/core/common/utilities/configurable-operation-utils.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/utilities/create-updated-translatable.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/utilities/find-translation.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/utilities/flatten-facet-values.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/utilities/get-default-ui-language.js +0 -0
- package/{esm2015 → package/esm2015}/core/common/utilities/interpolate-description.js +0 -0
- package/package/esm2015/core/common/utilities/selection-manager.js +96 -0
- package/{esm2015 → package/esm2015}/core/common/utilities/string-to-color.js +0 -0
- package/package/esm2015/core/common/version.js +3 -0
- package/{esm2015 → package/esm2015}/core/components/app-shell/app-shell.component.js +0 -0
- package/package/esm2015/core/components/breadcrumb/breadcrumb.component.js +126 -0
- package/{esm2015 → package/esm2015}/core/components/channel-switcher/channel-switcher.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/components/main-nav/main-nav.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/components/notification/notification.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/components/overlay-host/overlay-host.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/components/theme-switcher/theme-switcher.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/components/user-menu/user-menu.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/core.module.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/check-jobs-link.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/client-state/client-defaults.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/client-state/client-resolvers.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/data.module.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/administrator-definitions.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/auth-definitions.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/client-definitions.js +0 -0
- package/package/esm2015/core/data/definitions/collection-definitions.js +173 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/customer-definitions.js +0 -0
- package/package/esm2015/core/data/definitions/facet-definitions.js +140 -0
- package/package/esm2015/core/data/definitions/order-definitions.js +585 -0
- package/package/esm2015/core/data/definitions/product-definitions.js +759 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/promotion-definitions.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/settings-definitions.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/shared-definitions.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/definitions/shipping-definitions.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/omit-typename-link.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/providers/administrator-data.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/providers/auth-data.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/providers/base-data.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/providers/client-data.service.js +0 -0
- package/package/esm2015/core/data/providers/collection-data.service.js +90 -0
- package/package/esm2015/core/data/providers/customer-data.service.js +121 -0
- package/{esm2015 → package/esm2015}/core/data/providers/data.service.js +0 -0
- package/package/esm2015/core/data/providers/facet-data.service.js +76 -0
- package/{esm2015 → package/esm2015}/core/data/providers/fetch-adapter.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/providers/interceptor.js +0 -0
- package/package/esm2015/core/data/providers/order-data.service.js +139 -0
- package/package/esm2015/core/data/providers/product-data.service.js +240 -0
- package/{esm2015 → package/esm2015}/core/data/providers/promotion-data.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/providers/settings-data.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/providers/shipping-method-data.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/query-result.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/server-config.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/utils/add-custom-fields.js +0 -0
- package/{esm2015 → package/esm2015}/core/data/utils/get-server-location.js +0 -0
- package/package/esm2015/core/data/utils/remove-readonly-custom-fields.js +95 -0
- package/{esm2015 → package/esm2015}/core/data/utils/transform-relation-custom-field-inputs.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/auth/auth.service.js +0 -0
- package/package/esm2015/core/providers/bulk-action-registry/bulk-action-registry.service.js +27 -0
- package/package/esm2015/core/providers/bulk-action-registry/bulk-action-types.js +2 -0
- package/package/esm2015/core/providers/bulk-action-registry/register-bulk-action.js +63 -0
- package/{esm2015 → package/esm2015}/core/providers/component-registry/component-registry.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/custom-detail-component/custom-detail-component-types.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/custom-detail-component/custom-detail-component.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/custom-field-component/custom-field-component.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/dashboard-widget/dashboard-widget-types.js +0 -0
- package/package/esm2015/core/providers/dashboard-widget/dashboard-widget.service.js +94 -0
- package/{esm2015 → package/esm2015}/core/providers/dashboard-widget/register-dashboard-widget.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/guard/auth.guard.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/health-check/health-check.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/i18n/custom-http-loader.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/i18n/custom-message-format-compiler.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/i18n/i18n.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/job-queue/job-queue.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/local-storage/local-storage.service.js +0 -0
- package/package/esm2015/core/providers/modal/modal.service.js +101 -0
- package/package/esm2015/core/providers/nav-builder/nav-builder-types.js +2 -0
- package/{esm2015 → package/esm2015}/core/providers/nav-builder/nav-builder.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/notification/notification.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/providers/overlay-host/overlay-host.service.js +0 -0
- package/package/esm2015/core/public_api.js +241 -0
- package/package/esm2015/core/shared/components/action-bar/action-bar.component.js +43 -0
- package/{esm2015 → package/esm2015}/core/shared/components/action-bar-items/action-bar-items.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/address-form/address-form.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/affixed-input/affixed-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/affixed-input/percentage-suffix-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/asset-file-input/asset-file-input.component.js +0 -0
- package/package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +84 -0
- package/{esm2015 → package/esm2015}/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/asset-preview/asset-preview.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/asset-preview-dialog/asset-preview-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/asset-preview-links/asset-preview-links.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/asset-search-input/asset-search-input.component.js +0 -0
- package/package/esm2015/core/shared/components/bulk-action-menu/bulk-action-menu.component.js +99 -0
- package/{esm2015 → package/esm2015}/core/shared/components/channel-assignment-control/channel-assignment-control.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/channel-badge/channel-badge.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/chip/chip.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/configurable-input/configurable-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/currency-input/currency-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/custom-field-control/custom-field-control.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/customer-label/customer-label.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/data-table/data-table-column.component.js +0 -0
- package/package/esm2015/core/shared/components/data-table/data-table.component.js +162 -0
- package/{esm2015 → package/esm2015}/core/shared/components/datetime-picker/constants.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/datetime-picker/datetime-picker.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/datetime-picker/datetime-picker.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/datetime-picker/types.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/dropdown/dropdown-item.directive.js +0 -0
- package/package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +122 -0
- package/{esm2015 → package/esm2015}/core/shared/components/dropdown/dropdown-trigger.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/dropdown/dropdown.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/edit-note-dialog/edit-note-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/empty-placeholder/empty-placeholder.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/entity-info/entity-info.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/extension-host/extension-host-config.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/extension-host/extension-host.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/extension-host/extension-host.service.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/extension-host/host-external-frame.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/facet-value-chip/facet-value-chip.component.js +0 -0
- package/package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +117 -0
- package/{esm2015 → package/esm2015}/core/shared/components/focal-point-control/focal-point-control.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/form-field/form-field-control.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/form-field/form-field.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/form-item/form-item.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/formatted-address/formatted-address.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/help-tooltip/help-tooltip.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/history-entry-detail/history-entry-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/items-per-page-controls/items-per-page-controls.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/labeled-data/labeled-data.component.js +0 -0
- package/package/esm2015/core/shared/components/language-selector/language-selector.component.js +21 -0
- package/{esm2015 → package/esm2015}/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/modal-dialog/dialog-buttons.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/modal-dialog/dialog-component-outlet.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/modal-dialog/dialog-title.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/modal-dialog/modal-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/object-tree/object-tree.component.js +0 -0
- package/package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +44 -0
- package/{esm2015 → package/esm2015}/core/shared/components/pagination-controls/pagination-controls.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.js +0 -0
- package/package/esm2015/core/shared/components/product-search-input/product-search-input.component.js +104 -0
- package/package/esm2015/core/shared/components/product-selector/product-selector.component.js +61 -0
- package/package/esm2015/core/shared/components/radio-card/radio-card-fieldset.component.js +57 -0
- package/package/esm2015/core/shared/components/radio-card/radio-card.component.js +54 -0
- package/package/esm2015/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.js +32 -0
- package/{esm2015 → package/esm2015}/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.js +0 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.js +140 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.js +45 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/custom-nodes.js +60 -0
- package/{esm2015 → package/esm2015}/core/shared/components/rich-text-editor/prosemirror/inputrules.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/rich-text-editor/prosemirror/keymap.js +0 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/links.js +69 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.js +42 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.js +12 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu.js +247 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.js +16 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.js +100 -0
- package/{esm2015 → package/esm2015}/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.js +0 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.js +97 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.js +166 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +142 -0
- package/package/esm2015/core/shared/components/rich-text-editor/prosemirror/types.js +2 -0
- package/{esm2015 → package/esm2015}/core/shared/components/rich-text-editor/prosemirror/utils.js +0 -0
- package/package/esm2015/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.js +57 -0
- package/package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +97 -0
- package/{esm2015 → package/esm2015}/core/shared/components/select-toggle/select-toggle.component.js +0 -0
- package/package/esm2015/core/shared/components/simple-dialog/simple-dialog.component.js +21 -0
- package/{esm2015 → package/esm2015}/core/shared/components/status-badge/status-badge.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/table-row-action/table-row-action.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/tag-selector/tag-selector.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/timeline-entry/timeline-entry.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/title-input/title-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/components/ui-extension-point/ui-extension-point.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/directives/disabled.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/directives/if-default-channel-active.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/directives/if-directive-base.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/directives/if-multichannel.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/directives/if-permissions.directive.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.js +0 -0
- package/package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.js +59 -0
- package/package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.js +66 -0
- package/package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +88 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.js +0 -0
- package/package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +266 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.js +0 -0
- package/package/esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js +136 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/asset-preview.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/channel-label.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/custom-field-label.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/duration.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/file-size.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/has-permission.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/locale-base.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/locale-currency-name.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/locale-currency.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/locale-date.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/locale-language-name.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/locale-region-name.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/sentence-case.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/sort.pipe.js +0 -0
- package/package/esm2015/core/shared/pipes/state-i18n-token.pipe.js +47 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/string-to-color.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/pipes/time-ago.pipe.js +0 -0
- package/{esm2015 → package/esm2015}/core/shared/providers/routing/can-deactivate-detail-guard.js +0 -0
- package/package/esm2015/core/shared/shared.module.js +287 -0
- package/{esm2015 → package/esm2015}/core/validators/unicode-pattern.validator.js +0 -0
- package/{esm2015 → package/esm2015}/core/vendure-admin-ui-core.js +0 -0
- package/{esm2015 → package/esm2015}/customer/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/customer/components/address-card/address-card.component.js +0 -0
- package/{esm2015 → package/esm2015}/customer/components/address-detail-dialog/address-detail-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/customer/components/customer-detail/customer-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.js +0 -0
- package/package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +198 -0
- package/package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +101 -0
- package/{esm2015 → package/esm2015}/customer/components/customer-history/customer-history.component.js +0 -0
- package/package/esm2015/customer/components/customer-list/customer-list.component.js +81 -0
- package/{esm2015 → package/esm2015}/customer/components/customer-status-label/customer-status-label.component.js +0 -0
- package/{esm2015 → package/esm2015}/customer/components/select-customer-group-dialog/select-customer-group-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/customer/customer.module.js +0 -0
- package/{esm2015 → package/esm2015}/customer/customer.routes.js +0 -0
- package/{esm2015 → package/esm2015}/customer/providers/routing/customer-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/customer/public_api.js +0 -0
- package/{esm2015 → package/esm2015}/customer/vendure-admin-ui-customer.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/components/dashboard/dashboard.component.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/components/dashboard-widget/dashboard-widget.component.js +0 -0
- package/package/esm2015/dashboard/dashboard.module.js +29 -0
- package/{esm2015 → package/esm2015}/dashboard/dashboard.routes.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/default-widgets.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/public_api.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/vendure-admin-ui-dashboard.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/widgets/order-summary-widget/order-summary-widget.component.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/widgets/test-widget/test-widget.component.js +0 -0
- package/{esm2015 → package/esm2015}/dashboard/widgets/welcome-widget/welcome-widget.component.js +0 -0
- package/{esm2015 → package/esm2015}/login/components/login/login.component.js +0 -0
- package/{esm2015 → package/esm2015}/login/login.module.js +0 -0
- package/{esm2015 → package/esm2015}/login/login.routes.js +0 -0
- package/{esm2015 → package/esm2015}/login/providers/login.guard.js +0 -0
- package/{esm2015 → package/esm2015}/login/public_api.js +0 -0
- package/{esm2015 → package/esm2015}/login/vendure-admin-ui-login.js +0 -0
- package/{esm2015 → package/esm2015}/marketing/components/promotion-detail/promotion-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/marketing/components/promotion-list/promotion-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/marketing/marketing.module.js +0 -0
- package/{esm2015 → package/esm2015}/marketing/marketing.routes.js +0 -0
- package/{esm2015 → package/esm2015}/marketing/providers/routing/promotion-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/marketing/public_api.js +0 -0
- package/{esm2015 → package/esm2015}/marketing/vendure-admin-ui-marketing.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/cancel-order-dialog/cancel-order-dialog.component.js +0 -0
- package/package/esm2015/order/components/coupon-code-selector/coupon-code-selector.component.js +42 -0
- package/package/esm2015/order/components/draft-order-detail/draft-order-detail.component.js +195 -0
- package/package/esm2015/order/components/draft-order-variant-selector/draft-order-variant-selector.component.js +59 -0
- package/{esm2015 → package/esm2015}/order/components/fulfill-order-dialog/fulfill-order-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/fulfillment-card/fulfillment-card.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/fulfillment-detail/fulfillment-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/fulfillment-state-label/fulfillment-state-label.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/line-fulfillment/line-fulfillment.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/line-refunds/line-refunds.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/modification-detail/modification-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-custom-fields-card/order-custom-fields-card.component.js +0 -0
- package/package/esm2015/order/components/order-detail/order-detail.component.js +550 -0
- package/package/esm2015/order/components/order-editor/order-editor.component.js +375 -0
- package/{esm2015 → package/esm2015}/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-history/order-history.component.js +0 -0
- package/package/esm2015/order/components/order-list/order-list.component.js +211 -0
- package/{esm2015 → package/esm2015}/order/components/order-payment-card/order-payment-card.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-process-graph/constants.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-process-graph/order-process-edge.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-process-graph/order-process-graph.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-process-graph/order-process-node.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-process-graph/types.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-process-graph-dialog/order-process-graph-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/order-state-select-dialog/order-state-select-dialog.component.js +0 -0
- package/package/esm2015/order/components/order-table/order-table.component.js +87 -0
- package/{esm2015 → package/esm2015}/order/components/payment-detail/payment-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/payment-state-label/payment-state-label.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/refund-order-dialog/refund-order-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/refund-state-label/refund-state-label.component.js +0 -0
- package/package/esm2015/order/components/select-address-dialog/select-address-dialog.component.js +91 -0
- package/package/esm2015/order/components/select-address-dialog/select-address-dialog.graphql.js +14 -0
- package/package/esm2015/order/components/select-customer-dialog/select-customer-dialog.component.js +59 -0
- package/package/esm2015/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.js +30 -0
- package/{esm2015 → package/esm2015}/order/components/settle-refund-dialog/settle-refund-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/order/components/simple-item-list/simple-item-list.component.js +0 -0
- package/package/esm2015/order/order.module.js +82 -0
- package/package/esm2015/order/order.routes.js +73 -0
- package/{esm2015 → package/esm2015}/order/providers/order-transition.service.js +0 -0
- package/package/esm2015/order/providers/routing/order-resolver.js +50 -0
- package/package/esm2015/order/providers/routing/order.guard.js +41 -0
- package/package/esm2015/order/public_api.js +44 -0
- package/{esm2015 → package/esm2015}/order/vendure-admin-ui-order.js +0 -0
- package/{esm2015 → package/esm2015}/public_api.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/admin-detail/admin-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/administrator-list/administrator-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/channel-detail/channel-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/channel-list/channel-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/country-detail/country-detail.component.js +0 -0
- package/package/esm2015/settings/components/country-list/country-list.component.js +82 -0
- package/{esm2015 → package/esm2015}/settings/components/global-settings/global-settings.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/payment-method-detail/payment-method-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/payment-method-list/payment-method-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/permission-grid/permission-grid.component.js +0 -0
- package/package/esm2015/settings/components/profile/profile.component.js +82 -0
- package/{esm2015 → package/esm2015}/settings/components/role-detail/role-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/role-list/role-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/shipping-method-detail/shipping-method-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/shipping-method-list/shipping-method-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/shipping-method-test-result/shipping-method-test-result.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/tax-category-detail/tax-category-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/tax-category-list/tax-category-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/tax-rate-detail/tax-rate-detail.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/tax-rate-list/tax-rate-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/test-address-form/test-address-form.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/test-order-builder/test-order-builder.component.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/zone-detail-dialog/zone-detail-dialog.component.js +0 -0
- package/package/esm2015/settings/components/zone-list/zone-list.component.js +160 -0
- package/{esm2015 → package/esm2015}/settings/components/zone-member-list/zone-member-controls.directive.js +0 -0
- package/{esm2015 → package/esm2015}/settings/components/zone-member-list/zone-member-list-header.directive.js +0 -0
- package/package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +63 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/administrator-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/channel-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/country-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/global-settings-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/payment-method-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/profile-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/role-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/shipping-method-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/tax-category-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/providers/routing/tax-rate-resolver.js +0 -0
- package/{esm2015 → package/esm2015}/settings/public_api.js +0 -0
- package/{esm2015 → package/esm2015}/settings/settings.module.js +0 -0
- package/{esm2015 → package/esm2015}/settings/settings.routes.js +0 -0
- package/{esm2015 → package/esm2015}/settings/vendure-admin-ui-settings.js +0 -0
- package/package/esm2015/system/components/health-check/health-check.component.js +19 -0
- package/{esm2015 → package/esm2015}/system/components/job-list/job-list.component.js +0 -0
- package/{esm2015 → package/esm2015}/system/components/job-state-label/job-state-label.component.js +0 -0
- package/{esm2015 → package/esm2015}/system/public_api.js +0 -0
- package/{esm2015 → package/esm2015}/system/system.module.js +0 -0
- package/{esm2015 → package/esm2015}/system/system.routes.js +0 -0
- package/{esm2015 → package/esm2015}/system/vendure-admin-ui-system.js +0 -0
- package/{esm2015 → package/esm2015}/vendure-admin-ui.js +0 -0
- package/package/fesm2015/vendure-admin-ui-catalog.js +4768 -0
- package/package/fesm2015/vendure-admin-ui-catalog.js.map +1 -0
- package/package/fesm2015/vendure-admin-ui-core.js +17900 -0
- package/package/fesm2015/vendure-admin-ui-core.js.map +1 -0
- package/package/fesm2015/vendure-admin-ui-customer.js +1184 -0
- package/package/fesm2015/vendure-admin-ui-customer.js.map +1 -0
- package/package/fesm2015/vendure-admin-ui-dashboard.js +375 -0
- package/package/fesm2015/vendure-admin-ui-dashboard.js.map +1 -0
- package/{fesm2015 → package/fesm2015}/vendure-admin-ui-login.js +0 -0
- package/{fesm2015 → package/fesm2015}/vendure-admin-ui-login.js.map +0 -0
- package/{fesm2015 → package/fesm2015}/vendure-admin-ui-marketing.js +0 -0
- package/{fesm2015 → package/fesm2015}/vendure-admin-ui-marketing.js.map +0 -0
- package/package/fesm2015/vendure-admin-ui-order.js +3155 -0
- package/package/fesm2015/vendure-admin-ui-order.js.map +1 -0
- package/package/fesm2015/vendure-admin-ui-settings.js +2977 -0
- package/package/fesm2015/vendure-admin-ui-settings.js.map +1 -0
- package/package/fesm2015/vendure-admin-ui-system.js +171 -0
- package/{fesm2015 → package/fesm2015}/vendure-admin-ui-system.js.map +0 -0
- package/{fesm2015 → package/fesm2015}/vendure-admin-ui.js +0 -0
- package/{fesm2015 → package/fesm2015}/vendure-admin-ui.js.map +0 -0
- package/{login → package/login}/components/login/login.component.d.ts +0 -0
- package/{login → package/login}/login.module.d.ts +0 -0
- package/{login → package/login}/login.routes.d.ts +0 -0
- package/{login → package/login}/package.json +0 -0
- package/{login → package/login}/providers/login.guard.d.ts +0 -0
- package/{login → package/login}/public_api.d.ts +0 -0
- package/{login → package/login}/vendure-admin-ui-login.d.ts +0 -0
- package/{login → package/login}/vendure-admin-ui-login.metadata.json +0 -0
- package/{marketing → package/marketing}/components/promotion-detail/promotion-detail.component.d.ts +0 -0
- package/{marketing → package/marketing}/components/promotion-list/promotion-list.component.d.ts +0 -0
- package/{marketing → package/marketing}/marketing.module.d.ts +0 -0
- package/{marketing → package/marketing}/marketing.routes.d.ts +0 -0
- package/{marketing → package/marketing}/package.json +0 -0
- package/{marketing → package/marketing}/providers/routing/promotion-resolver.d.ts +0 -0
- package/{marketing → package/marketing}/public_api.d.ts +0 -0
- package/{marketing → package/marketing}/vendure-admin-ui-marketing.d.ts +0 -0
- package/{marketing → package/marketing}/vendure-admin-ui-marketing.metadata.json +0 -0
- package/{order → package/order}/components/add-manual-payment-dialog/add-manual-payment-dialog.component.d.ts +0 -0
- package/{order → package/order}/components/cancel-order-dialog/cancel-order-dialog.component.d.ts +0 -0
- package/package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +18 -0
- package/package/order/components/draft-order-detail/draft-order-detail.component.d.ts +49 -0
- package/package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +21 -0
- package/{order → package/order}/components/fulfill-order-dialog/fulfill-order-dialog.component.d.ts +0 -0
- package/{order → package/order}/components/fulfillment-card/fulfillment-card.component.d.ts +0 -0
- package/{order → package/order}/components/fulfillment-detail/fulfillment-detail.component.d.ts +0 -0
- package/{order → package/order}/components/fulfillment-state-label/fulfillment-state-label.component.d.ts +0 -0
- package/{order → package/order}/components/line-fulfillment/line-fulfillment.component.d.ts +0 -0
- package/{order → package/order}/components/line-refunds/line-refunds.component.d.ts +0 -0
- package/{order → package/order}/components/modification-detail/modification-detail.component.d.ts +0 -0
- package/{order → package/order}/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +0 -0
- package/{order → package/order}/components/order-detail/order-detail.component.d.ts +0 -0
- package/package/order/components/order-editor/order-editor.component.d.ts +71 -0
- package/{order → package/order}/components/order-edits-preview-dialog/order-edits-preview-dialog.component.d.ts +0 -0
- package/{order → package/order}/components/order-history/order-history.component.d.ts +0 -0
- package/package/order/components/order-list/order-list.component.d.ts +35 -0
- package/{order → package/order}/components/order-payment-card/order-payment-card.component.d.ts +0 -0
- package/{order → package/order}/components/order-process-graph/constants.d.ts +0 -0
- package/{order → package/order}/components/order-process-graph/order-process-edge.component.d.ts +0 -0
- package/{order → package/order}/components/order-process-graph/order-process-graph.component.d.ts +0 -0
- package/{order → package/order}/components/order-process-graph/order-process-node.component.d.ts +0 -0
- package/{order → package/order}/components/order-process-graph/types.d.ts +0 -0
- package/{order → package/order}/components/order-process-graph-dialog/order-process-graph-dialog.component.d.ts +0 -0
- package/{order → package/order}/components/order-state-select-dialog/order-state-select-dialog.component.d.ts +0 -0
- package/package/order/components/order-table/order-table.component.d.ts +37 -0
- package/{order → package/order}/components/payment-detail/payment-detail.component.d.ts +0 -0
- package/{order → package/order}/components/payment-state-label/payment-state-label.component.d.ts +0 -0
- package/{order → package/order}/components/refund-order-dialog/refund-order-dialog.component.d.ts +0 -0
- package/{order → package/order}/components/refund-state-label/refund-state-label.component.d.ts +0 -0
- package/package/order/components/select-address-dialog/select-address-dialog.component.d.ts +24 -0
- package/package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
- package/package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +22 -0
- package/package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +16 -0
- package/{order → package/order}/components/settle-refund-dialog/settle-refund-dialog.component.d.ts +0 -0
- package/{order → package/order}/components/simple-item-list/simple-item-list.component.d.ts +0 -0
- package/{order → package/order}/order.module.d.ts +0 -0
- package/{order → package/order}/order.routes.d.ts +0 -0
- package/{order → package/order}/package.json +0 -0
- package/{order → package/order}/providers/order-transition.service.d.ts +0 -0
- package/package/order/providers/routing/order-resolver.d.ts +13 -0
- package/package/order/providers/routing/order.guard.d.ts +9 -0
- package/package/order/public_api.d.ts +42 -0
- package/{order → package/order}/vendure-admin-ui-order.d.ts +0 -0
- package/package/order/vendure-admin-ui-order.metadata.json +1 -0
- package/package/package.json +59 -0
- package/{public_api.d.ts → package/public_api.d.ts} +0 -0
- package/{settings → package/settings}/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.d.ts +0 -0
- package/{settings → package/settings}/components/admin-detail/admin-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/administrator-list/administrator-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/channel-detail/channel-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/channel-list/channel-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/country-detail/country-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/country-list/country-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/global-settings/global-settings.component.d.ts +0 -0
- package/{settings → package/settings}/components/payment-method-detail/payment-method-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/payment-method-list/payment-method-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/permission-grid/permission-grid.component.d.ts +0 -0
- package/{settings → package/settings}/components/profile/profile.component.d.ts +0 -0
- package/{settings → package/settings}/components/role-detail/role-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/role-list/role-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.d.ts +0 -0
- package/{settings → package/settings}/components/shipping-method-detail/shipping-method-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/shipping-method-list/shipping-method-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/shipping-method-test-result/shipping-method-test-result.component.d.ts +0 -0
- package/{settings → package/settings}/components/tax-category-detail/tax-category-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/tax-category-list/tax-category-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/tax-rate-detail/tax-rate-detail.component.d.ts +0 -0
- package/{settings → package/settings}/components/tax-rate-list/tax-rate-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/test-address-form/test-address-form.component.d.ts +0 -0
- package/{settings → package/settings}/components/test-order-builder/test-order-builder.component.d.ts +0 -0
- package/{settings → package/settings}/components/zone-detail-dialog/zone-detail-dialog.component.d.ts +0 -0
- package/{settings → package/settings}/components/zone-list/zone-list.component.d.ts +0 -0
- package/{settings → package/settings}/components/zone-member-list/zone-member-controls.directive.d.ts +0 -0
- package/{settings → package/settings}/components/zone-member-list/zone-member-list-header.directive.d.ts +0 -0
- package/package/settings/components/zone-member-list/zone-member-list.component.d.ts +23 -0
- package/{settings → package/settings}/package.json +0 -0
- package/{settings → package/settings}/providers/routing/administrator-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/channel-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/country-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/global-settings-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/payment-method-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/profile-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/role-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/shipping-method-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/tax-category-resolver.d.ts +0 -0
- package/{settings → package/settings}/providers/routing/tax-rate-resolver.d.ts +0 -0
- package/{settings → package/settings}/public_api.d.ts +0 -0
- package/{settings → package/settings}/settings.module.d.ts +0 -0
- package/{settings → package/settings}/settings.routes.d.ts +0 -0
- package/{settings → package/settings}/vendure-admin-ui-settings.d.ts +0 -0
- package/package/settings/vendure-admin-ui-settings.metadata.json +1 -0
- package/{static → package/static}/assets/.gitkeep +0 -0
- package/{static → package/static}/assets/logo-300px.png +0 -0
- package/{static → package/static}/assets/logo-75px.png +0 -0
- package/{static → package/static}/favicon.ico +0 -0
- package/package/static/i18n-messages/cs.json +721 -0
- package/package/static/i18n-messages/de.json +721 -0
- package/package/static/i18n-messages/en.json +721 -0
- package/package/static/i18n-messages/es.json +721 -0
- package/package/static/i18n-messages/fr.json +721 -0
- package/package/static/i18n-messages/it.json +721 -0
- package/package/static/i18n-messages/pl.json +721 -0
- package/package/static/i18n-messages/pt_BR.json +721 -0
- package/package/static/i18n-messages/pt_PT.json +721 -0
- package/package/static/i18n-messages/ru.json +721 -0
- package/package/static/i18n-messages/uk.json +721 -0
- package/package/static/i18n-messages/zh_Hans.json +721 -0
- package/package/static/i18n-messages/zh_Hant.json +721 -0
- package/{static → package/static}/index.html +0 -0
- package/{static → package/static}/polyfills.ts +0 -0
- package/{static → package/static}/styles/_mixins.scss +0 -0
- package/{static → package/static}/styles/_variables.scss +0 -0
- package/package/static/styles/global/_forms.scss +148 -0
- package/package/static/styles/global/_overrides.scss +72 -0
- package/{static → package/static}/styles/global/_sass-overrides.scss +0 -0
- package/package/static/styles/global/_utilities.scss +131 -0
- package/{static → package/static}/styles/styles.scss +0 -0
- package/{static → package/static}/styles/theme/dark.scss +0 -0
- package/{static → package/static}/styles/theme/default.scss +0 -0
- package/{static → package/static}/styles/ui-extension-theme.scss +0 -0
- package/package/static/theme.min.css +8 -0
- package/{static → package/static}/vendure-ui-config.json +0 -0
- package/{system → package/system}/components/health-check/health-check.component.d.ts +0 -0
- package/{system → package/system}/components/job-list/job-list.component.d.ts +0 -0
- package/{system → package/system}/components/job-state-label/job-state-label.component.d.ts +0 -0
- package/{system → package/system}/package.json +0 -0
- package/{system → package/system}/public_api.d.ts +0 -0
- package/{system → package/system}/system.module.d.ts +0 -0
- package/{system → package/system}/system.routes.d.ts +0 -0
- package/{system → package/system}/vendure-admin-ui-system.d.ts +0 -0
- package/package/system/vendure-admin-ui-system.metadata.json +1 -0
- package/{vendure-admin-ui.d.ts → package/vendure-admin-ui.d.ts} +0 -0
- package/{vendure-admin-ui.metadata.json → package/vendure-admin-ui.metadata.json} +0 -0
- package/package.json +59 -21
- package/tsconfig.json +61 -0
- package/tsconfig.lib.json +26 -0
- package/tsconfig.lib.prod.json +14 -0
- package/tslint.json +33 -0
- package/LICENSE +0 -9
- package/bundles/vendure-admin-ui-catalog.umd.js +0 -4861
- package/bundles/vendure-admin-ui-catalog.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-core.umd.js +0 -15291
- package/bundles/vendure-admin-ui-core.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-customer.umd.js +0 -1679
- package/bundles/vendure-admin-ui-customer.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-dashboard.umd.js +0 -757
- package/bundles/vendure-admin-ui-dashboard.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-order.umd.js +0 -3422
- package/bundles/vendure-admin-ui-order.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-settings.umd.js +0 -3699
- package/bundles/vendure-admin-ui-settings.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-system.umd.js +0 -524
- package/catalog/catalog.module.d.ts +0 -2
- package/catalog/components/collection-list/collection-list.component.d.ts +0 -33
- package/catalog/components/collection-tree/collection-tree-node.component.d.ts +0 -36
- package/catalog/components/collection-tree/collection-tree.component.d.ts +0 -35
- package/catalog/components/facet-list/facet-list.component.d.ts +0 -24
- package/catalog/components/product-list/product-list.component.d.ts +0 -29
- package/catalog/public_api.d.ts +0 -33
- package/catalog/vendure-admin-ui-catalog.metadata.json +0 -1
- package/core/common/component-registry-types.d.ts +0 -56
- package/core/common/generated-types.d.ts +0 -9142
- package/core/common/utilities/selection-manager.d.ts +0 -23
- package/core/common/version.d.ts +0 -1
- package/core/data/definitions/collection-definitions.d.ts +0 -10
- package/core/data/definitions/facet-definitions.d.ts +0 -10
- package/core/data/definitions/order-definitions.d.ts +0 -27
- package/core/data/definitions/product-definitions.d.ts +0 -45
- package/core/data/providers/collection-data.service.d.ts +0 -25
- package/core/data/providers/facet-data.service.d.ts +0 -21
- package/core/data/providers/order-data.service.d.ts +0 -35
- package/core/data/providers/product-data.service.d.ts +0 -81
- package/core/providers/modal/modal.service.d.ts +0 -132
- package/core/providers/nav-builder/nav-builder-types.d.ts +0 -91
- package/core/public_api.d.ts +0 -222
- package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +0 -67
- package/core/shared/components/data-table/data-table.component.d.ts +0 -82
- package/core/shared/components/dropdown/dropdown-menu.component.d.ts +0 -30
- package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +0 -8
- package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
- package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +0 -4
- package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +0 -4
- package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +0 -5
- package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +0 -21
- package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -11
- package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +0 -35
- package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +0 -32
- package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +0 -89
- package/core/vendure-admin-ui-core.metadata.json +0 -1
- package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +0 -37
- package/customer/vendure-admin-ui-customer.metadata.json +0 -1
- package/esm2015/catalog/catalog.module.js +0 -62
- package/esm2015/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.js +0 -109
- package/esm2015/catalog/components/collection-detail/collection-detail.component.js +0 -244
- package/esm2015/catalog/components/collection-list/collection-list.component.js +0 -145
- package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +0 -117
- package/esm2015/catalog/components/collection-tree/collection-tree.component.js +0 -76
- package/esm2015/catalog/components/facet-list/facet-list.component.js +0 -107
- package/esm2015/catalog/components/product-detail/product-detail.component.js +0 -515
- package/esm2015/catalog/components/product-list/product-list.component.js +0 -153
- package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +0 -214
- package/esm2015/catalog/providers/routing/collection-resolver.js +0 -38
- package/esm2015/catalog/public_api.js +0 -35
- package/esm2015/core/common/component-registry-types.js +0 -2
- package/esm2015/core/common/generated-types.js +0 -983
- package/esm2015/core/common/introspection-result.js +0 -195
- package/esm2015/core/common/utilities/selection-manager.js +0 -64
- package/esm2015/core/common/version.js +0 -3
- package/esm2015/core/components/breadcrumb/breadcrumb.component.js +0 -126
- package/esm2015/core/data/definitions/collection-definitions.js +0 -144
- package/esm2015/core/data/definitions/facet-definitions.js +0 -110
- package/esm2015/core/data/definitions/order-definitions.js +0 -472
- package/esm2015/core/data/definitions/product-definitions.js +0 -745
- package/esm2015/core/data/providers/collection-data.service.js +0 -75
- package/esm2015/core/data/providers/customer-data.service.js +0 -117
- package/esm2015/core/data/providers/facet-data.service.js +0 -60
- package/esm2015/core/data/providers/order-data.service.js +0 -103
- package/esm2015/core/data/providers/product-data.service.js +0 -235
- package/esm2015/core/data/utils/remove-readonly-custom-fields.js +0 -91
- package/esm2015/core/providers/dashboard-widget/dashboard-widget.service.js +0 -97
- package/esm2015/core/providers/modal/modal.service.js +0 -100
- package/esm2015/core/providers/nav-builder/nav-builder-types.js +0 -2
- package/esm2015/core/public_api.js +0 -224
- package/esm2015/core/shared/components/action-bar/action-bar.component.js +0 -47
- package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +0 -84
- package/esm2015/core/shared/components/data-table/data-table.component.js +0 -113
- package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +0 -121
- package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +0 -117
- package/esm2015/core/shared/components/language-selector/language-selector.component.js +0 -21
- package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +0 -43
- package/esm2015/core/shared/components/product-search-input/product-search-input.component.js +0 -104
- package/esm2015/core/shared/components/product-selector/product-selector.component.js +0 -61
- package/esm2015/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.js +0 -32
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/images.js +0 -36
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/links.js +0 -69
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.js +0 -20
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu.js +0 -192
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +0 -112
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/types.js +0 -2
- package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +0 -86
- package/esm2015/core/shared/components/simple-dialog/simple-dialog.component.js +0 -21
- package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +0 -125
- package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +0 -266
- package/esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js +0 -134
- package/esm2015/core/shared/pipes/state-i18n-token.pipe.js +0 -46
- package/esm2015/core/shared/shared.module.js +0 -275
- package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +0 -198
- package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +0 -101
- package/esm2015/customer/components/customer-list/customer-list.component.js +0 -81
- package/esm2015/dashboard/dashboard.module.js +0 -25
- package/esm2015/order/components/order-detail/order-detail.component.js +0 -550
- package/esm2015/order/components/order-editor/order-editor.component.js +0 -381
- package/esm2015/order/components/order-list/order-list.component.js +0 -195
- package/esm2015/order/components/order-table/order-table.component.js +0 -76
- package/esm2015/order/order.module.js +0 -70
- package/esm2015/order/order.routes.js +0 -54
- package/esm2015/order/providers/routing/order-resolver.js +0 -33
- package/esm2015/order/public_api.js +0 -36
- package/esm2015/settings/components/country-list/country-list.component.js +0 -82
- package/esm2015/settings/components/profile/profile.component.js +0 -82
- package/esm2015/settings/components/zone-list/zone-list.component.js +0 -160
- package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +0 -63
- package/esm2015/system/components/health-check/health-check.component.js +0 -19
- package/fesm2015/vendure-admin-ui-catalog.js +0 -3994
- package/fesm2015/vendure-admin-ui-catalog.js.map +0 -1
- package/fesm2015/vendure-admin-ui-core.js +0 -16292
- package/fesm2015/vendure-admin-ui-core.js.map +0 -1
- package/fesm2015/vendure-admin-ui-customer.js +0 -1184
- package/fesm2015/vendure-admin-ui-customer.js.map +0 -1
- package/fesm2015/vendure-admin-ui-dashboard.js +0 -371
- package/fesm2015/vendure-admin-ui-dashboard.js.map +0 -1
- package/fesm2015/vendure-admin-ui-order.js +0 -2607
- package/fesm2015/vendure-admin-ui-order.js.map +0 -1
- package/fesm2015/vendure-admin-ui-settings.js +0 -2977
- package/fesm2015/vendure-admin-ui-settings.js.map +0 -1
- package/fesm2015/vendure-admin-ui-system.js +0 -171
- package/order/components/order-editor/order-editor.component.d.ts +0 -76
- package/order/components/order-list/order-list.component.d.ts +0 -34
- package/order/components/order-table/order-table.component.d.ts +0 -28
- package/order/providers/routing/order-resolver.d.ts +0 -10
- package/order/public_api.d.ts +0 -34
- package/order/vendure-admin-ui-order.metadata.json +0 -1
- package/settings/components/zone-member-list/zone-member-list.component.d.ts +0 -21
- package/settings/vendure-admin-ui-settings.metadata.json +0 -1
- package/static/i18n-messages/cs.json +0 -688
- package/static/i18n-messages/de.json +0 -688
- package/static/i18n-messages/en.json +0 -689
- package/static/i18n-messages/es.json +0 -688
- package/static/i18n-messages/fr.json +0 -688
- package/static/i18n-messages/it.json +0 -688
- package/static/i18n-messages/pl.json +0 -688
- package/static/i18n-messages/pt_BR.json +0 -688
- package/static/i18n-messages/pt_PT.json +0 -688
- package/static/i18n-messages/ru.json +0 -688
- package/static/i18n-messages/uk.json +0 -688
- package/static/i18n-messages/zh_Hans.json +0 -688
- package/static/i18n-messages/zh_Hant.json +0 -688
- package/static/styles/global/_forms.scss +0 -146
- package/static/styles/global/_overrides.scss +0 -72
- package/static/styles/global/_utilities.scss +0 -127
- package/static/theme.min.css +0 -8
- package/system/vendure-admin-ui-system.metadata.json +0 -1
|
@@ -1,515 +0,0 @@
|
|
|
1
|
-
import { Location } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
|
|
3
|
-
import { FormBuilder, FormControl, Validators } from '@angular/forms';
|
|
4
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
5
|
-
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|
6
|
-
import { BaseDetailComponent, createUpdatedTranslatable, DataService, findTranslation, flattenFacetValues, LogicalOperator, ModalService, NotificationService, Permission, ServerConfigService, unicodePatternValidator, } from '@vendure/admin-ui/core';
|
|
7
|
-
import { normalizeString } from '@vendure/common/lib/normalize-string';
|
|
8
|
-
import { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';
|
|
9
|
-
import { notNullOrUndefined } from '@vendure/common/lib/shared-utils';
|
|
10
|
-
import { unique } from '@vendure/common/lib/unique';
|
|
11
|
-
import { BehaviorSubject, combineLatest, EMPTY, merge } from 'rxjs';
|
|
12
|
-
import { debounceTime, distinctUntilChanged, map, mergeMap, shareReplay, skip, skipUntil, startWith, switchMap, take, takeUntil, tap, withLatestFrom, } from 'rxjs/operators';
|
|
13
|
-
import { ProductDetailService } from '../../providers/product-detail/product-detail.service';
|
|
14
|
-
import { ApplyFacetDialogComponent } from '../apply-facet-dialog/apply-facet-dialog.component';
|
|
15
|
-
import { AssignProductsToChannelDialogComponent } from '../assign-products-to-channel-dialog/assign-products-to-channel-dialog.component';
|
|
16
|
-
export class ProductDetailComponent extends BaseDetailComponent {
|
|
17
|
-
constructor(route, router, serverConfigService, productDetailService, formBuilder, modalService, notificationService, dataService, location, changeDetector) {
|
|
18
|
-
super(route, router, serverConfigService, dataService);
|
|
19
|
-
this.productDetailService = productDetailService;
|
|
20
|
-
this.formBuilder = formBuilder;
|
|
21
|
-
this.modalService = modalService;
|
|
22
|
-
this.notificationService = notificationService;
|
|
23
|
-
this.dataService = dataService;
|
|
24
|
-
this.location = location;
|
|
25
|
-
this.changeDetector = changeDetector;
|
|
26
|
-
this.filterInput = new FormControl('');
|
|
27
|
-
this.assetChanges = {};
|
|
28
|
-
this.variantAssetChanges = {};
|
|
29
|
-
this.variantFacetValueChanges = {};
|
|
30
|
-
this.currentPage$ = new BehaviorSubject(1);
|
|
31
|
-
this.itemsPerPage$ = new BehaviorSubject(10);
|
|
32
|
-
this.selectedVariantIds = [];
|
|
33
|
-
this.variantDisplayMode = 'card';
|
|
34
|
-
this.createVariantsConfig = { groups: [], variants: [] };
|
|
35
|
-
// Used to store all ProductVariants which have been loaded.
|
|
36
|
-
// It is needed when saving changes to variants.
|
|
37
|
-
this.productVariantMap = new Map();
|
|
38
|
-
this.updatePermissions = [Permission.UpdateCatalog, Permission.UpdateProduct];
|
|
39
|
-
this.customFields = this.getCustomFieldConfig('Product');
|
|
40
|
-
this.customVariantFields = this.getCustomFieldConfig('ProductVariant');
|
|
41
|
-
this.customOptionGroupFields = this.getCustomFieldConfig('ProductOptionGroup');
|
|
42
|
-
this.customOptionFields = this.getCustomFieldConfig('ProductOption');
|
|
43
|
-
this.detailForm = this.formBuilder.group({
|
|
44
|
-
product: this.formBuilder.group({
|
|
45
|
-
enabled: true,
|
|
46
|
-
name: ['', Validators.required],
|
|
47
|
-
autoUpdateVariantNames: true,
|
|
48
|
-
slug: ['', unicodePatternValidator(/^[\p{Letter}0-9_-]+$/)],
|
|
49
|
-
description: '',
|
|
50
|
-
facetValueIds: [[]],
|
|
51
|
-
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
52
|
-
}),
|
|
53
|
-
variants: this.formBuilder.array([]),
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
ngOnInit() {
|
|
57
|
-
this.init();
|
|
58
|
-
this.product$ = this.entity$;
|
|
59
|
-
this.totalItems$ = this.product$.pipe(map(product => product.variantList.totalItems));
|
|
60
|
-
this.paginationConfig$ = combineLatest(this.totalItems$, this.itemsPerPage$, this.currentPage$).pipe(map(([totalItems, itemsPerPage, currentPage]) => ({
|
|
61
|
-
totalItems,
|
|
62
|
-
itemsPerPage,
|
|
63
|
-
currentPage,
|
|
64
|
-
})));
|
|
65
|
-
const variants$ = this.product$.pipe(map(product => product.variantList.items));
|
|
66
|
-
const filterTerm$ = this.filterInput.valueChanges.pipe(startWith(''), debounceTime(200), shareReplay());
|
|
67
|
-
const initialVariants$ = this.product$.pipe(map(p => p.variantList.items));
|
|
68
|
-
const updatedVariants$ = combineLatest(filterTerm$, this.currentPage$, this.itemsPerPage$).pipe(skipUntil(initialVariants$), skip(1), switchMap(([term, currentPage, itemsPerPage]) => {
|
|
69
|
-
return this.dataService.product
|
|
70
|
-
.getProductVariants(Object.assign(Object.assign({ skip: (currentPage - 1) * itemsPerPage, take: itemsPerPage }, (term
|
|
71
|
-
? { filter: { name: { contains: term }, sku: { contains: term } } }
|
|
72
|
-
: {})), { filterOperator: LogicalOperator.OR }), this.id)
|
|
73
|
-
.mapStream(({ productVariants }) => productVariants.items);
|
|
74
|
-
}), shareReplay({ bufferSize: 1, refCount: true }));
|
|
75
|
-
this.variants$ = merge(initialVariants$, updatedVariants$).pipe(tap(variants => {
|
|
76
|
-
for (const variant of variants) {
|
|
77
|
-
this.productVariantMap.set(variant.id, variant);
|
|
78
|
-
}
|
|
79
|
-
}));
|
|
80
|
-
this.taxCategories$ = this.productDetailService.getTaxCategories().pipe(takeUntil(this.destroy$));
|
|
81
|
-
this.activeTab$ = this.route.paramMap.pipe(map(qpm => qpm.get('tab')));
|
|
82
|
-
combineLatest(updatedVariants$, this.languageCode$)
|
|
83
|
-
.pipe(takeUntil(this.destroy$))
|
|
84
|
-
.subscribe(([variants, languageCode]) => {
|
|
85
|
-
this.buildVariantFormArray(variants, languageCode);
|
|
86
|
-
});
|
|
87
|
-
// FacetValues are provided initially by the nested array of the
|
|
88
|
-
// Product entity, but once a fetch to get all Facets is made (as when
|
|
89
|
-
// opening the FacetValue selector modal), then these additional values
|
|
90
|
-
// are concatenated onto the initial array.
|
|
91
|
-
this.facets$ = this.productDetailService.getFacets();
|
|
92
|
-
const productFacetValues$ = this.product$.pipe(map(product => product.facetValues));
|
|
93
|
-
const allFacetValues$ = this.facets$.pipe(map(flattenFacetValues));
|
|
94
|
-
const productGroup = this.getProductFormGroup();
|
|
95
|
-
const formFacetValueIdChanges$ = productGroup.valueChanges.pipe(map(val => val.facetValueIds), distinctUntilChanged());
|
|
96
|
-
const formChangeFacetValues$ = combineLatest(formFacetValueIdChanges$, productFacetValues$, allFacetValues$).pipe(map(([ids, productFacetValues, allFacetValues]) => {
|
|
97
|
-
const combined = [...productFacetValues, ...allFacetValues];
|
|
98
|
-
return ids.map(id => combined.find(fv => fv.id === id)).filter(notNullOrUndefined);
|
|
99
|
-
}));
|
|
100
|
-
this.facetValues$ = merge(productFacetValues$, formChangeFacetValues$);
|
|
101
|
-
this.productChannels$ = this.product$.pipe(map(p => p.channels));
|
|
102
|
-
this.channelPriceIncludesTax$ = this.dataService.settings
|
|
103
|
-
.getActiveChannel('cache-first')
|
|
104
|
-
.refetchOnChannelChange()
|
|
105
|
-
.mapStream(data => data.activeChannel.pricesIncludeTax)
|
|
106
|
-
.pipe(shareReplay(1));
|
|
107
|
-
}
|
|
108
|
-
ngOnDestroy() {
|
|
109
|
-
this.destroy();
|
|
110
|
-
}
|
|
111
|
-
navigateToTab(tabName) {
|
|
112
|
-
this.location.replaceState(this.router
|
|
113
|
-
.createUrlTree(['./', Object.assign(Object.assign({}, this.route.snapshot.params), { tab: tabName })], {
|
|
114
|
-
queryParamsHandling: 'merge',
|
|
115
|
-
relativeTo: this.route,
|
|
116
|
-
})
|
|
117
|
-
.toString());
|
|
118
|
-
}
|
|
119
|
-
isDefaultChannel(channelCode) {
|
|
120
|
-
return channelCode === DEFAULT_CHANNEL_CODE;
|
|
121
|
-
}
|
|
122
|
-
setPage(page) {
|
|
123
|
-
this.currentPage$.next(page);
|
|
124
|
-
}
|
|
125
|
-
setItemsPerPage(value) {
|
|
126
|
-
this.itemsPerPage$.next(+value);
|
|
127
|
-
this.currentPage$.next(1);
|
|
128
|
-
}
|
|
129
|
-
assignToChannel() {
|
|
130
|
-
this.productChannels$
|
|
131
|
-
.pipe(take(1), switchMap(channels => {
|
|
132
|
-
return this.modalService.fromComponent(AssignProductsToChannelDialogComponent, {
|
|
133
|
-
size: 'lg',
|
|
134
|
-
locals: {
|
|
135
|
-
productIds: [this.id],
|
|
136
|
-
currentChannelIds: channels.map(c => c.id),
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
}))
|
|
140
|
-
.subscribe();
|
|
141
|
-
}
|
|
142
|
-
removeFromChannel(channelId) {
|
|
143
|
-
this.modalService
|
|
144
|
-
.dialog({
|
|
145
|
-
title: _('catalog.remove-product-from-channel'),
|
|
146
|
-
buttons: [
|
|
147
|
-
{ type: 'secondary', label: _('common.cancel') },
|
|
148
|
-
{ type: 'danger', label: _('catalog.remove-from-channel'), returnValue: true },
|
|
149
|
-
],
|
|
150
|
-
})
|
|
151
|
-
.pipe(switchMap(response => response
|
|
152
|
-
? this.dataService.product.removeProductsFromChannel({
|
|
153
|
-
channelId,
|
|
154
|
-
productIds: [this.id],
|
|
155
|
-
})
|
|
156
|
-
: EMPTY))
|
|
157
|
-
.subscribe(() => {
|
|
158
|
-
this.notificationService.success(_('catalog.notify-remove-product-from-channel-success'));
|
|
159
|
-
}, err => {
|
|
160
|
-
this.notificationService.error(_('catalog.notify-remove-product-from-channel-error'));
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
assignVariantToChannel(variant) {
|
|
164
|
-
return this.modalService
|
|
165
|
-
.fromComponent(AssignProductsToChannelDialogComponent, {
|
|
166
|
-
size: 'lg',
|
|
167
|
-
locals: {
|
|
168
|
-
productIds: [this.id],
|
|
169
|
-
productVariantIds: [variant.id],
|
|
170
|
-
currentChannelIds: variant.channels.map(c => c.id),
|
|
171
|
-
},
|
|
172
|
-
})
|
|
173
|
-
.subscribe();
|
|
174
|
-
}
|
|
175
|
-
removeVariantFromChannel({ channelId, variant, }) {
|
|
176
|
-
this.modalService
|
|
177
|
-
.dialog({
|
|
178
|
-
title: _('catalog.remove-product-variant-from-channel'),
|
|
179
|
-
buttons: [
|
|
180
|
-
{ type: 'secondary', label: _('common.cancel') },
|
|
181
|
-
{ type: 'danger', label: _('catalog.remove-from-channel'), returnValue: true },
|
|
182
|
-
],
|
|
183
|
-
})
|
|
184
|
-
.pipe(switchMap(response => response
|
|
185
|
-
? this.dataService.product.removeVariantsFromChannel({
|
|
186
|
-
channelId,
|
|
187
|
-
productVariantIds: [variant.id],
|
|
188
|
-
})
|
|
189
|
-
: EMPTY))
|
|
190
|
-
.subscribe(() => {
|
|
191
|
-
this.notificationService.success(_('catalog.notify-remove-variant-from-channel-success'));
|
|
192
|
-
}, err => {
|
|
193
|
-
this.notificationService.error(_('catalog.notify-remove-variant-from-channel-error'));
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
assetsChanged() {
|
|
197
|
-
return !!Object.values(this.assetChanges).length;
|
|
198
|
-
}
|
|
199
|
-
variantAssetsChanged() {
|
|
200
|
-
return !!Object.keys(this.variantAssetChanges).length;
|
|
201
|
-
}
|
|
202
|
-
variantAssetChange(event) {
|
|
203
|
-
this.variantAssetChanges[event.variantId] = event;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* If creating a new product, automatically generate the slug based on the product name.
|
|
207
|
-
*/
|
|
208
|
-
updateSlug(nameValue) {
|
|
209
|
-
combineLatest(this.entity$, this.languageCode$)
|
|
210
|
-
.pipe(take(1))
|
|
211
|
-
.subscribe(([entity, languageCode]) => {
|
|
212
|
-
const slugControl = this.detailForm.get(['product', 'slug']);
|
|
213
|
-
const currentTranslation = findTranslation(entity, languageCode);
|
|
214
|
-
const currentSlugIsEmpty = !currentTranslation || !currentTranslation.slug;
|
|
215
|
-
if (slugControl && slugControl.pristine && currentSlugIsEmpty) {
|
|
216
|
-
slugControl.setValue(normalizeString(`${nameValue}`, '-'));
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
selectProductFacetValue() {
|
|
221
|
-
this.displayFacetValueModal().subscribe(facetValueIds => {
|
|
222
|
-
if (facetValueIds) {
|
|
223
|
-
const productGroup = this.getProductFormGroup();
|
|
224
|
-
const currentFacetValueIds = productGroup.value.facetValueIds;
|
|
225
|
-
productGroup.patchValue({
|
|
226
|
-
facetValueIds: unique([...currentFacetValueIds, ...facetValueIds]),
|
|
227
|
-
});
|
|
228
|
-
productGroup.markAsDirty();
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
updateProductOption(input) {
|
|
233
|
-
combineLatest(this.product$, this.languageCode$)
|
|
234
|
-
.pipe(take(1), mergeMap(([product, languageCode]) => this.productDetailService.updateProductOption(input, product, languageCode)))
|
|
235
|
-
.subscribe(() => {
|
|
236
|
-
this.notificationService.success(_('common.notify-update-success'), {
|
|
237
|
-
entity: 'ProductOption',
|
|
238
|
-
});
|
|
239
|
-
}, err => {
|
|
240
|
-
this.notificationService.error(_('common.notify-update-error'), {
|
|
241
|
-
entity: 'ProductOption',
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
removeProductFacetValue(facetValueId) {
|
|
246
|
-
const productGroup = this.getProductFormGroup();
|
|
247
|
-
const currentFacetValueIds = productGroup.value.facetValueIds;
|
|
248
|
-
productGroup.patchValue({
|
|
249
|
-
facetValueIds: currentFacetValueIds.filter(id => id !== facetValueId),
|
|
250
|
-
});
|
|
251
|
-
productGroup.markAsDirty();
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Opens a dialog to select FacetValues to apply to the select ProductVariants.
|
|
255
|
-
*/
|
|
256
|
-
selectVariantFacetValue(selectedVariantIds) {
|
|
257
|
-
this.displayFacetValueModal()
|
|
258
|
-
.pipe(withLatestFrom(this.variants$))
|
|
259
|
-
.subscribe(([facetValueIds, variants]) => {
|
|
260
|
-
if (facetValueIds) {
|
|
261
|
-
for (const variantId of selectedVariantIds) {
|
|
262
|
-
const index = variants.findIndex(v => v.id === variantId);
|
|
263
|
-
const variant = variants[index];
|
|
264
|
-
const existingFacetValueIds = variant ? variant.facetValues.map(fv => fv.id) : [];
|
|
265
|
-
const variantFormGroup = this.detailForm.get('variants').controls.find(c => c.value.id === variantId);
|
|
266
|
-
if (variantFormGroup) {
|
|
267
|
-
const uniqueFacetValueIds = unique([...existingFacetValueIds, ...facetValueIds]);
|
|
268
|
-
variantFormGroup.patchValue({
|
|
269
|
-
facetValueIds: uniqueFacetValueIds,
|
|
270
|
-
});
|
|
271
|
-
variantFormGroup.markAsDirty();
|
|
272
|
-
this.variantFacetValueChanges[variantId] = uniqueFacetValueIds;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
this.changeDetector.markForCheck();
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
variantsToCreateAreValid() {
|
|
280
|
-
return (0 < this.createVariantsConfig.variants.length &&
|
|
281
|
-
this.createVariantsConfig.variants.every(v => {
|
|
282
|
-
return v.sku !== '';
|
|
283
|
-
}));
|
|
284
|
-
}
|
|
285
|
-
displayFacetValueModal() {
|
|
286
|
-
return this.productDetailService.getFacets().pipe(mergeMap(facets => this.modalService.fromComponent(ApplyFacetDialogComponent, {
|
|
287
|
-
size: 'md',
|
|
288
|
-
closable: true,
|
|
289
|
-
locals: { facets },
|
|
290
|
-
})), map(facetValues => facetValues && facetValues.map(v => v.id)));
|
|
291
|
-
}
|
|
292
|
-
create() {
|
|
293
|
-
const productGroup = this.getProductFormGroup();
|
|
294
|
-
if (!productGroup.dirty) {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
combineLatest(this.product$, this.languageCode$)
|
|
298
|
-
.pipe(take(1), mergeMap(([product, languageCode]) => {
|
|
299
|
-
const newProduct = this.getUpdatedProduct(product, productGroup, languageCode);
|
|
300
|
-
return this.productDetailService.createProductWithVariants(newProduct, this.createVariantsConfig, languageCode);
|
|
301
|
-
}))
|
|
302
|
-
.subscribe(({ createProductVariants, productId }) => {
|
|
303
|
-
this.notificationService.success(_('common.notify-create-success'), {
|
|
304
|
-
entity: 'Product',
|
|
305
|
-
});
|
|
306
|
-
this.assetChanges = {};
|
|
307
|
-
this.variantAssetChanges = {};
|
|
308
|
-
this.detailForm.markAsPristine();
|
|
309
|
-
this.router.navigate(['../', productId], { relativeTo: this.route });
|
|
310
|
-
}, err => {
|
|
311
|
-
// tslint:disable-next-line:no-console
|
|
312
|
-
console.error(err);
|
|
313
|
-
this.notificationService.error(_('common.notify-create-error'), {
|
|
314
|
-
entity: 'Product',
|
|
315
|
-
});
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
save() {
|
|
319
|
-
combineLatest(this.product$, this.languageCode$, this.channelPriceIncludesTax$)
|
|
320
|
-
.pipe(take(1), mergeMap(([product, languageCode, priceIncludesTax]) => {
|
|
321
|
-
var _a, _b;
|
|
322
|
-
const productGroup = this.getProductFormGroup();
|
|
323
|
-
let productInput;
|
|
324
|
-
let variantsInput;
|
|
325
|
-
if (productGroup.dirty || this.assetsChanged()) {
|
|
326
|
-
productInput = this.getUpdatedProduct(product, productGroup, languageCode);
|
|
327
|
-
}
|
|
328
|
-
const variantsArray = this.detailForm.get('variants');
|
|
329
|
-
if ((variantsArray && variantsArray.dirty) || this.variantAssetsChanged()) {
|
|
330
|
-
variantsInput = this.getUpdatedProductVariants(product, variantsArray, languageCode, priceIncludesTax);
|
|
331
|
-
}
|
|
332
|
-
return this.productDetailService.updateProduct({
|
|
333
|
-
product,
|
|
334
|
-
languageCode,
|
|
335
|
-
autoUpdate: (_b = (_a = this.detailForm.get(['product', 'autoUpdateVariantNames'])) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : false,
|
|
336
|
-
productInput,
|
|
337
|
-
variantsInput,
|
|
338
|
-
});
|
|
339
|
-
}))
|
|
340
|
-
.subscribe(result => {
|
|
341
|
-
this.updateSlugAfterSave(result);
|
|
342
|
-
this.detailForm.markAsPristine();
|
|
343
|
-
this.assetChanges = {};
|
|
344
|
-
this.variantAssetChanges = {};
|
|
345
|
-
this.notificationService.success(_('common.notify-update-success'), {
|
|
346
|
-
entity: 'Product',
|
|
347
|
-
});
|
|
348
|
-
this.changeDetector.markForCheck();
|
|
349
|
-
}, err => {
|
|
350
|
-
this.notificationService.error(_('common.notify-update-error'), {
|
|
351
|
-
entity: 'Product',
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
canDeactivate() {
|
|
356
|
-
return super.canDeactivate() && !this.assetChanges.assets && !this.assetChanges.featuredAsset;
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* Sets the values of the form on changes to the product or current language.
|
|
360
|
-
*/
|
|
361
|
-
setFormValues(product, languageCode) {
|
|
362
|
-
const currentTranslation = findTranslation(product, languageCode);
|
|
363
|
-
this.detailForm.patchValue({
|
|
364
|
-
product: {
|
|
365
|
-
enabled: product.enabled,
|
|
366
|
-
name: currentTranslation ? currentTranslation.name : '',
|
|
367
|
-
slug: currentTranslation ? currentTranslation.slug : '',
|
|
368
|
-
description: currentTranslation ? currentTranslation.description : '',
|
|
369
|
-
facetValueIds: product.facetValues.map(fv => fv.id),
|
|
370
|
-
},
|
|
371
|
-
});
|
|
372
|
-
if (this.customFields.length) {
|
|
373
|
-
this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['product', 'customFields']), product, currentTranslation);
|
|
374
|
-
}
|
|
375
|
-
this.buildVariantFormArray(product.variantList.items, languageCode);
|
|
376
|
-
}
|
|
377
|
-
buildVariantFormArray(variants, languageCode) {
|
|
378
|
-
const variantsFormArray = this.detailForm.get('variants');
|
|
379
|
-
variants.forEach((variant, i) => {
|
|
380
|
-
const variantTranslation = findTranslation(variant, languageCode);
|
|
381
|
-
const pendingFacetValueChanges = this.variantFacetValueChanges[variant.id];
|
|
382
|
-
const facetValueIds = pendingFacetValueChanges
|
|
383
|
-
? pendingFacetValueChanges
|
|
384
|
-
: variant.facetValues.map(fv => fv.id);
|
|
385
|
-
const group = {
|
|
386
|
-
id: variant.id,
|
|
387
|
-
enabled: variant.enabled,
|
|
388
|
-
sku: variant.sku,
|
|
389
|
-
name: variantTranslation ? variantTranslation.name : '',
|
|
390
|
-
price: variant.price,
|
|
391
|
-
priceWithTax: variant.priceWithTax,
|
|
392
|
-
taxCategoryId: variant.taxCategory.id,
|
|
393
|
-
stockOnHand: variant.stockOnHand,
|
|
394
|
-
useGlobalOutOfStockThreshold: variant.useGlobalOutOfStockThreshold,
|
|
395
|
-
outOfStockThreshold: variant.outOfStockThreshold,
|
|
396
|
-
trackInventory: variant.trackInventory,
|
|
397
|
-
facetValueIds,
|
|
398
|
-
};
|
|
399
|
-
let variantFormGroup = variantsFormArray.controls.find(c => c.value.id === variant.id);
|
|
400
|
-
if (variantFormGroup) {
|
|
401
|
-
if (variantFormGroup.pristine) {
|
|
402
|
-
variantFormGroup.patchValue(group);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
variantFormGroup = this.formBuilder.group(Object.assign(Object.assign({}, group), { facetValueIds: this.formBuilder.control(facetValueIds) }));
|
|
407
|
-
variantsFormArray.insert(i, variantFormGroup);
|
|
408
|
-
}
|
|
409
|
-
if (this.customVariantFields.length) {
|
|
410
|
-
let customFieldsGroup = variantFormGroup.get(['customFields']);
|
|
411
|
-
if (!customFieldsGroup) {
|
|
412
|
-
customFieldsGroup = this.formBuilder.group(this.customVariantFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {}));
|
|
413
|
-
variantFormGroup.addControl('customFields', customFieldsGroup);
|
|
414
|
-
}
|
|
415
|
-
this.setCustomFieldFormValues(this.customVariantFields, customFieldsGroup, variant, variantTranslation);
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
/**
|
|
420
|
-
* Given a product and the value of the detailForm, this method creates an updated copy of the product which
|
|
421
|
-
* can then be persisted to the API.
|
|
422
|
-
*/
|
|
423
|
-
getUpdatedProduct(product, productFormGroup, languageCode) {
|
|
424
|
-
var _a, _b;
|
|
425
|
-
const updatedProduct = createUpdatedTranslatable({
|
|
426
|
-
translatable: product,
|
|
427
|
-
updatedFields: productFormGroup.value,
|
|
428
|
-
customFieldConfig: this.customFields,
|
|
429
|
-
languageCode,
|
|
430
|
-
defaultTranslation: {
|
|
431
|
-
languageCode,
|
|
432
|
-
name: product.name || '',
|
|
433
|
-
slug: product.slug || '',
|
|
434
|
-
description: product.description || '',
|
|
435
|
-
},
|
|
436
|
-
});
|
|
437
|
-
return Object.assign(Object.assign({}, updatedProduct), { assetIds: (_a = this.assetChanges.assets) === null || _a === void 0 ? void 0 : _a.map(a => a.id), featuredAssetId: (_b = this.assetChanges.featuredAsset) === null || _b === void 0 ? void 0 : _b.id, facetValueIds: productFormGroup.value.facetValueIds });
|
|
438
|
-
}
|
|
439
|
-
/**
|
|
440
|
-
* Given an array of product variants and the values from the detailForm, this method creates an new array
|
|
441
|
-
* which can be persisted to the API.
|
|
442
|
-
*/
|
|
443
|
-
getUpdatedProductVariants(product, variantsFormArray, languageCode, priceIncludesTax) {
|
|
444
|
-
const dirtyFormControls = variantsFormArray.controls.filter(c => c.dirty);
|
|
445
|
-
const dirtyVariants = dirtyFormControls
|
|
446
|
-
.map(c => this.productVariantMap.get(c.value.id))
|
|
447
|
-
.filter(notNullOrUndefined);
|
|
448
|
-
const dirtyVariantValues = dirtyFormControls.map(c => c.value);
|
|
449
|
-
if (dirtyVariants.length !== dirtyVariantValues.length) {
|
|
450
|
-
throw new Error(_(`error.product-variant-form-values-do-not-match`));
|
|
451
|
-
}
|
|
452
|
-
return dirtyVariants
|
|
453
|
-
.map((variant, i) => {
|
|
454
|
-
var _a, _b;
|
|
455
|
-
const formValue = dirtyVariantValues.find(value => value.id === variant.id);
|
|
456
|
-
const result = createUpdatedTranslatable({
|
|
457
|
-
translatable: variant,
|
|
458
|
-
updatedFields: formValue,
|
|
459
|
-
customFieldConfig: this.customVariantFields,
|
|
460
|
-
languageCode,
|
|
461
|
-
defaultTranslation: {
|
|
462
|
-
languageCode,
|
|
463
|
-
name: '',
|
|
464
|
-
},
|
|
465
|
-
});
|
|
466
|
-
result.taxCategoryId = formValue.taxCategoryId;
|
|
467
|
-
result.facetValueIds = formValue.facetValueIds;
|
|
468
|
-
result.price = priceIncludesTax ? formValue.priceWithTax : formValue.price;
|
|
469
|
-
const assetChanges = this.variantAssetChanges[variant.id];
|
|
470
|
-
if (assetChanges) {
|
|
471
|
-
result.featuredAssetId = (_a = assetChanges.featuredAsset) === null || _a === void 0 ? void 0 : _a.id;
|
|
472
|
-
result.assetIds = (_b = assetChanges.assets) === null || _b === void 0 ? void 0 : _b.map(a => a.id);
|
|
473
|
-
}
|
|
474
|
-
return result;
|
|
475
|
-
})
|
|
476
|
-
.filter(notNullOrUndefined);
|
|
477
|
-
}
|
|
478
|
-
getProductFormGroup() {
|
|
479
|
-
return this.detailForm.get('product');
|
|
480
|
-
}
|
|
481
|
-
/**
|
|
482
|
-
* The server may alter the slug value in order to normalize and ensure uniqueness upon saving.
|
|
483
|
-
*/
|
|
484
|
-
updateSlugAfterSave(results) {
|
|
485
|
-
const firstResult = results[0];
|
|
486
|
-
const slugControl = this.detailForm.get(['product', 'slug']);
|
|
487
|
-
function isUpdateMutation(input) {
|
|
488
|
-
return input.hasOwnProperty('updateProduct');
|
|
489
|
-
}
|
|
490
|
-
if (slugControl && isUpdateMutation(firstResult)) {
|
|
491
|
-
slugControl.setValue(firstResult.updateProduct.slug, { emitEvent: false });
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
ProductDetailComponent.decorators = [
|
|
496
|
-
{ type: Component, args: [{
|
|
497
|
-
selector: 'vdr-product-detail',
|
|
498
|
-
template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"flex clr-flex-row\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['product', 'enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </div>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine || !variantsToCreateAreValid()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"\r\n (detailForm.invalid || detailForm.pristine) && !assetsChanged() && !variantAssetsChanged()\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"product$ | async as product\">\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <clr-tabs>\r\n <clr-tab>\r\n <button clrTabLink (click)=\"navigateToTab('details')\">\r\n {{ 'catalog.product-details' | translate }}\r\n </button>\r\n <clr-tab-content *clrIfActive=\"(activeTab$ | async) === 'details'\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <section class=\"form-block\" formGroupName=\"product\">\r\n <ng-container *ngIf=\"!(isNew$ | async)\">\r\n <ng-container *vdrIfMultichannel>\r\n <vdr-form-item\r\n [label]=\"'common.channels' | translate\"\r\n *vdrIfDefaultChannelActive\r\n >\r\n <div class=\"flex channel-assignment\">\r\n <ng-container *ngFor=\"let channel of productChannels$ | async\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n (iconClick)=\"removeFromChannel(channel.id)\"\r\n >\r\n <vdr-channel-badge\r\n [channelCode]=\"channel.code\"\r\n ></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n <button class=\"btn btn-sm\" (click)=\"assignToChannel()\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'catalog.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </vdr-form-item>\r\n </ng-container>\r\n </ng-container>\r\n <vdr-form-field [label]=\"'catalog.product-name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <div\r\n class=\"auto-rename-wrapper\"\r\n [class.visible]=\"\r\n (isNew$ | async) === false && detailForm.get(['product', 'name'])?.dirty\r\n \"\r\n >\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n formControlName=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{\r\n 'catalog.auto-update-product-variant-name' | translate\r\n }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: 'catalog.slug-pattern-error' | translate }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Product\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get(['product', 'customFields'])\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </section>\r\n </div>\r\n <div class=\"clr-col-md-auto\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || product.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || product.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"['UpdateCatalog', 'UpdateProduct'] | hasPermission\"\r\n (remove)=\"removeProductFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <button\r\n class=\"btn btn-sm btn-secondary\"\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n (click)=\"selectProductFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isNew$ | async\">\r\n <h4>{{ 'catalog.product-variants' | translate }}</h4>\r\n <vdr-generate-product-variants\r\n (variantsChange)=\"createVariantsConfig = $event\"\r\n ></vdr-generate-product-variants>\r\n </div>\r\n </clr-tab-content>\r\n </clr-tab>\r\n <clr-tab *ngIf=\"!(isNew$ | async)\">\r\n <button clrTabLink (click)=\"navigateToTab('variants')\">\r\n {{ 'catalog.product-variants' | translate }}\r\n </button>\r\n <clr-tab-content *clrIfActive=\"(activeTab$ | async) === 'variants'\">\r\n <section class=\"form-block\">\r\n <div class=\"view-mode\">\r\n <div class=\"btn-group\">\r\n <button\r\n class=\"btn btn-secondary-outline\"\r\n (click)=\"variantDisplayMode = 'card'\"\r\n [class.btn-primary]=\"variantDisplayMode === 'card'\"\r\n >\r\n <clr-icon shape=\"list\"></clr-icon>\r\n {{ 'catalog.display-variant-cards' | translate }}\r\n </button>\r\n <button\r\n class=\"btn\"\r\n (click)=\"variantDisplayMode = 'table'\"\r\n [class.btn-primary]=\"variantDisplayMode === 'table'\"\r\n >\r\n <clr-icon shape=\"table\"></clr-icon>\r\n {{ 'catalog.display-variant-table' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"variant-filter\">\r\n <input\r\n [formControl]=\"filterInput\"\r\n [placeholder]=\"'catalog.filter-by-name-or-sku' | translate\"\r\n />\r\n <button class=\"icon-button\" (click)=\"filterInput.setValue('')\">\r\n <clr-icon shape=\"times\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <a\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n [routerLink]=\"['./', 'manage-variants']\"\r\n class=\"btn btn-secondary edit-variants-btn\"\r\n >\r\n <clr-icon shape=\"add-text\"></clr-icon>\r\n {{ 'catalog.manage-variants' | translate }}\r\n </a>\r\n </div>\r\n\r\n <div class=\"pagination-row mt4\" *ngIf=\"10 < (paginationConfig$ | async)?.totalItems\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n\r\n <vdr-pagination-controls\r\n [id]=\"(paginationConfig$ | async)?.id\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (pageChange)=\"setPage($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n\r\n <vdr-product-variants-table\r\n *ngIf=\"variantDisplayMode === 'table'\"\r\n [variants]=\"variants$ | async\"\r\n [paginationConfig]=\"paginationConfig$ | async\"\r\n [optionGroups]=\"product.optionGroups\"\r\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [productVariantsFormArray]=\"detailForm.get('variants')\"\r\n [pendingAssetChanges]=\"variantAssetChanges\"\r\n ></vdr-product-variants-table>\r\n <vdr-product-variants-list\r\n *ngIf=\"variantDisplayMode === 'card'\"\r\n [variants]=\"variants$ | async\"\r\n [paginationConfig]=\"paginationConfig$ | async\"\r\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [facets]=\"facets$ | async\"\r\n [optionGroups]=\"product.optionGroups\"\r\n [productVariantsFormArray]=\"detailForm.get('variants')\"\r\n [taxCategories]=\"taxCategories$ | async\"\r\n [customFields]=\"customVariantFields\"\r\n [customOptionFields]=\"customOptionFields\"\r\n [activeLanguage]=\"languageCode$ | async\"\r\n [pendingAssetChanges]=\"variantAssetChanges\"\r\n (assignToChannel)=\"assignVariantToChannel($event)\"\r\n (removeFromChannel)=\"removeVariantFromChannel($event)\"\r\n (assetChange)=\"variantAssetChange($event)\"\r\n (updateProductOption)=\"updateProductOption($event)\"\r\n (selectionChange)=\"selectedVariantIds = $event\"\r\n (selectFacetValueClick)=\"selectVariantFacetValue($event)\"\r\n ></vdr-product-variants-list>\r\n </section>\r\n <div class=\"pagination-row mt4\" *ngIf=\"10 < (paginationConfig$ | async)?.totalItems\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n\r\n <vdr-pagination-controls\r\n [id]=\"(paginationConfig$ | async)?.id\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n (pageChange)=\"setPage($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n </clr-tab-content>\r\n </clr-tab>\r\n </clr-tabs>\r\n</form>\r\n",
|
|
499
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
500
|
-
styles: [":host ::ng-deep trix-toolbar{top:24px}.facets{margin-top:12px;display:flex;flex-wrap:wrap;align-items:center}@media screen and (min-width: 768px){.facets{max-width:340px}}vdr-action-bar clr-toggle-wrapper{margin-top:12px}.variant-filter{flex:1;display:flex}.variant-filter input{flex:1;max-width:initial;border-radius:3px 0 0 3px!important}.variant-filter .icon-button{border:1px solid var(--color-component-border-300);background-color:var(--color-component-bg-100);border-radius:0 3px 3px 0;border-left:none}.group-name{padding-right:6px}.view-mode{display:flex;justify-content:flex-end;align-items:center}.edit-variants-btn{margin-top:0}.channel-assignment{flex-wrap:wrap;max-height:144px;overflow-y:auto}.auto-rename-wrapper{overflow:hidden;max-height:0;padding-left:9.5rem;margin-bottom:0;transition:max-height .2s,margin-bottom .2s}.auto-rename-wrapper.visible{max-height:24px;margin-bottom:12px}.pagination-row{display:flex;align-items:baseline;justify-content:space-between}\n"]
|
|
501
|
-
},] }
|
|
502
|
-
];
|
|
503
|
-
ProductDetailComponent.ctorParameters = () => [
|
|
504
|
-
{ type: ActivatedRoute },
|
|
505
|
-
{ type: Router },
|
|
506
|
-
{ type: ServerConfigService },
|
|
507
|
-
{ type: ProductDetailService },
|
|
508
|
-
{ type: FormBuilder },
|
|
509
|
-
{ type: ModalService },
|
|
510
|
-
{ type: NotificationService },
|
|
511
|
-
{ type: DataService },
|
|
512
|
-
{ type: Location },
|
|
513
|
-
{ type: ChangeDetectorRef }
|
|
514
|
-
];
|
|
515
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFhLFdBQVcsRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFFSCxtQkFBbUIsRUFFbkIseUJBQXlCLEVBRXpCLFdBQVcsRUFFWCxlQUFlLEVBQ2Ysa0JBQWtCLEVBSWxCLGVBQWUsRUFDZixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFVBQVUsRUFHVixtQkFBbUIsRUFFbkIsdUJBQXVCLEdBTTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEdBQ2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDL0YsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sa0ZBQWtGLENBQUM7QUF1QzFJLE1BQU0sT0FBTyxzQkFDVCxTQUFRLG1CQUFtRDtJQWdDM0QsWUFDSSxLQUFxQixFQUNyQixNQUFjLEVBQ2QsbUJBQXdDLEVBQ2hDLG9CQUEwQyxFQUMxQyxXQUF3QixFQUN4QixZQUEwQixFQUMxQixtQkFBd0MsRUFDdEMsV0FBd0IsRUFDMUIsUUFBa0IsRUFDbEIsY0FBaUM7UUFFekMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFSL0MseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBOUI3QyxnQkFBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLGlCQUFZLEdBQW1CLEVBQUUsQ0FBQztRQUNsQyx3QkFBbUIsR0FBNEMsRUFBRSxDQUFDO1FBQ2xFLDZCQUF3QixHQUFzQyxFQUFFLENBQUM7UUFLakUsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhDLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUNsQyx1QkFBa0IsR0FBcUIsTUFBTSxDQUFDO1FBQzlDLHlCQUFvQixHQUFnQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBRWpGLDREQUE0RDtRQUM1RCxnREFBZ0Q7UUFDeEMsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUFDdkQsc0JBQWlCLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQWVyRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUMvQixzQkFBc0IsRUFBRSxJQUFJO2dCQUM1QixJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsdUJBQXVCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDM0QsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNuQixZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsaUNBQU0sSUFBSSxLQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsQ0FBQyxDQUNqRjthQUNKLENBQUM7WUFDRixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3ZDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQ2hHLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QyxVQUFVO1lBQ1YsWUFBWTtZQUNaLFdBQVc7U0FDZCxDQUFDLENBQUMsQ0FDTixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsV0FBVyxFQUFFLENBQ2hCLENBQUM7UUFDRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUMzRixTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQzVDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO2lCQUMxQixrQkFBa0IsK0JBRVgsSUFBSSxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFDdEMsSUFBSSxFQUFFLFlBQVksSUFDZixDQUFDLElBQUk7Z0JBQ0osQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO2dCQUNuRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQ1QsY0FBYyxFQUFFLGVBQWUsQ0FBQyxFQUFFLEtBRXRDLElBQUksQ0FBQyxFQUFFLENBQ1Y7aUJBQ0EsU0FBUyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FDM0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ1gsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNuRDtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQVEsQ0FBQyxDQUFDLENBQUM7UUFFOUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRVAsZ0VBQWdFO1FBQ2hFLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVoRCxNQUFNLHdCQUF3QixHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMzRCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBeUIsQ0FBQyxFQUN6QyxvQkFBb0IsRUFBRSxDQUN6QixDQUFDO1FBQ0YsTUFBTSxzQkFBc0IsR0FBRyxhQUFhLENBQ3hDLHdCQUF3QixFQUN4QixtQkFBbUIsRUFDbkIsZUFBZSxDQUNsQixDQUFDLElBQUksQ0FDRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7YUFDcEQsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO2FBQy9CLHNCQUFzQixFQUFFO2FBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7YUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3RCLElBQUksQ0FBQyxNQUFNO2FBQ04sYUFBYSxDQUFDLENBQUMsSUFBSSxrQ0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUUsR0FBRyxFQUFFLE9BQU8sSUFBRyxFQUFFO1lBQ3BFLG1CQUFtQixFQUFFLE9BQU87WUFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ3pCLENBQUM7YUFDRCxRQUFRLEVBQUUsQ0FDbEIsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUNoQyxPQUFPLFdBQVcsS0FBSyxvQkFBb0IsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsZ0JBQWdCO2FBQ2hCLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsc0NBQXNDLEVBQUU7Z0JBQzNFLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRTtvQkFDSixVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNyQixpQkFBaUIsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDN0M7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFpQjtRQUMvQixJQUFJLENBQUMsWUFBWTthQUNaLE1BQU0sQ0FBQztZQUNKLEtBQUssRUFBRSxDQUFDLENBQUMscUNBQXFDLENBQUM7WUFDL0MsT0FBTyxFQUFFO2dCQUNMLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUNoRCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7YUFDakY7U0FDSixDQUFDO2FBQ0QsSUFBSSxDQUNELFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUNqQixRQUFRO1lBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2dCQUMvQyxTQUFTO2dCQUNULFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDeEIsQ0FBQztZQUNKLENBQUMsQ0FBQyxLQUFLLENBQ2QsQ0FDSjthQUNBLFNBQVMsQ0FDTixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLENBQUM7UUFDOUYsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQWdDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDbkIsYUFBYSxDQUFDLHNDQUFzQyxFQUFFO1lBQ25ELElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFO2dCQUNKLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3JEO1NBQ0osQ0FBQzthQUNELFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxFQUNyQixTQUFTLEVBQ1QsT0FBTyxHQUlWO1FBQ0csSUFBSSxDQUFDLFlBQVk7YUFDWixNQUFNLENBQUM7WUFDSixLQUFLLEVBQUUsQ0FBQyxDQUFDLDZDQUE2QyxDQUFDO1lBQ3ZELE9BQU8sRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDaEQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsNkJBQTZCLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2FBQ2pGO1NBQ0osQ0FBQzthQUNELElBQUksQ0FDRCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDakIsUUFBUTtZQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztnQkFDL0MsU0FBUztnQkFDVCxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7YUFDbEMsQ0FBQztZQUNKLENBQUMsQ0FBQyxLQUFLLENBQ2QsQ0FDSjthQUNBLFNBQVMsQ0FDTixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLENBQUM7UUFDOUYsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsa0RBQWtELENBQUMsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDckQsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBeUI7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLFNBQWlCO1FBQ3hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUM3RCxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDakUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGtCQUFrQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQzNFLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxRQUFRLElBQUksa0JBQWtCLEVBQUU7Z0JBQzNELFdBQVcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM5RDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELHVCQUF1QjtRQUNuQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxhQUFhLEVBQUU7Z0JBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ2hELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQzlELFlBQVksQ0FBQyxVQUFVLENBQUM7b0JBQ3BCLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7aUJBQ3JFLENBQUMsQ0FBQztnQkFDSCxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDOUI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUF5RDtRQUN6RSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQzNDLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FDOUUsQ0FDSjthQUNBLFNBQVMsQ0FDTixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsZUFBZTthQUMxQixDQUFDLENBQUM7UUFDUCxDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7WUFDRixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO2dCQUM1RCxNQUFNLEVBQUUsZUFBZTthQUMxQixDQUFDLENBQUM7UUFDUCxDQUFDLENBQ0osQ0FBQztJQUNWLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxZQUFvQjtRQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzlELFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDcEIsYUFBYSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUM7U0FDeEUsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLGtCQUE0QjtRQUNoRCxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLGFBQWEsRUFBRTtnQkFDZixLQUFLLE1BQU0sU0FBUyxJQUFJLGtCQUFrQixFQUFFO29CQUN4QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoQyxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDbEYsTUFBTSxnQkFBZ0IsR0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNqRixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FDaEMsQ0FBQztvQkFDRixJQUFJLGdCQUFnQixFQUFFO3dCQUNsQixNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcscUJBQXFCLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUNqRixnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7NEJBQ3hCLGFBQWEsRUFBRSxtQkFBbUI7eUJBQ3JDLENBQUMsQ0FBQzt3QkFDSCxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO3FCQUNsRTtpQkFDSjtnQkFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3RDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3BCLE9BQU8sQ0FDSCxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDN0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMseUJBQXlCLEVBQUU7WUFDdkQsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRTtTQUNyQixDQUFDLENBQ0wsRUFDRCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNoRSxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU07UUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQzNDLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQ3JDLE9BQU8sRUFDUCxZQUF5QixFQUN6QixZQUFZLENBQ08sQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FDdEQsVUFBVSxFQUNWLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsWUFBWSxDQUNmLENBQUM7UUFDTixDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FDTixDQUFDLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsU0FBUzthQUNwQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0Ysc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRTtnQkFDNUQsTUFBTSxFQUFFLFNBQVM7YUFDcEIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUNKLENBQUM7SUFDVixDQUFDO0lBRUQsSUFBSTtRQUNBLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2FBQzFFLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRTs7WUFDbkQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDaEQsSUFBSSxZQUE0QyxDQUFDO1lBQ2pELElBQUksYUFBc0QsQ0FBQztZQUUzRCxJQUFJLFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO2dCQUM1QyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUNqQyxPQUFPLEVBQ1AsWUFBeUIsRUFDekIsWUFBWSxDQUNPLENBQUM7YUFDM0I7WUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtnQkFDdkUsYUFBYSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDMUMsT0FBTyxFQUNQLGFBQTBCLEVBQzFCLFlBQVksRUFDWixnQkFBZ0IsQ0FDbkIsQ0FBQzthQUNMO1lBRUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDO2dCQUMzQyxPQUFPO2dCQUNQLFlBQVk7Z0JBQ1osVUFBVSxFQUNOLE1BQUEsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLDBDQUFFLEtBQUssbUNBQUksS0FBSztnQkFDOUUsWUFBWTtnQkFDWixhQUFhO2FBQ2hCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUNOLE1BQU0sQ0FBQyxFQUFFO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsU0FBUzthQUNwQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtZQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEVBQUU7Z0JBQzVELE1BQU0sRUFBRSxTQUFTO2FBQ3BCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDbEcsQ0FBQztJQUVEOztPQUVHO0lBQ08sYUFBYSxDQUFDLE9BQXVDLEVBQUUsWUFBMEI7UUFDdkYsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRTtnQkFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2RCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkQsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JFLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDdEQ7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyx3QkFBd0IsQ0FDekIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFDaEQsT0FBTyxFQUNQLGtCQUFrQixDQUNyQixDQUFDO1NBQ0w7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFFBQW1DLEVBQUUsWUFBMEI7UUFDekYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQWMsQ0FBQztRQUN2RSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNsRSxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0UsTUFBTSxhQUFhLEdBQUcsd0JBQXdCO2dCQUMxQyxDQUFDLENBQUMsd0JBQXdCO2dCQUMxQixDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsTUFBTSxLQUFLLEdBQXFCO2dCQUM1QixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUN4QixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ2hCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2RCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDckMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsNEJBQTRCO2dCQUNsRSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO2dCQUNoRCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7Z0JBQ3RDLGFBQWE7YUFDaEIsQ0FBQztZQUVGLElBQUksZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBRXRFLENBQUM7WUFDaEIsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDbEIsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7b0JBQzNCLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEM7YUFDSjtpQkFBTTtnQkFDSCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssaUNBQ2xDLEtBQUssS0FDUixhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQ3hELENBQUM7Z0JBQ0gsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFO2dCQUNqQyxJQUFJLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUEwQixDQUFDO2dCQUV4RixJQUFJLENBQUMsaUJBQWlCLEVBQUU7b0JBQ3BCLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsaUNBQU0sSUFBSSxLQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsQ0FBQyxDQUN4RixDQUFDO29CQUNGLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztpQkFDbEU7Z0JBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1Asa0JBQWtCLENBQ3JCLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQixDQUNyQixPQUF1QyxFQUN2QyxnQkFBMkIsRUFDM0IsWUFBMEI7O1FBRTFCLE1BQU0sY0FBYyxHQUFHLHlCQUF5QixDQUFDO1lBQzdDLFlBQVksRUFBRSxPQUFPO1lBQ3JCLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQ3JDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3BDLFlBQVk7WUFDWixrQkFBa0IsRUFBRTtnQkFDaEIsWUFBWTtnQkFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUN4QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFO2FBQ3pDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsT0FBTyxnQ0FDQSxjQUFjLEtBQ2pCLFFBQVEsRUFBRSxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSwwQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ2xELGVBQWUsRUFBRSxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSwwQ0FBRSxFQUFFLEVBQ3BELGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUNYLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHlCQUF5QixDQUM3QixPQUF1QyxFQUN2QyxpQkFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsZ0JBQXlCO1FBRXpCLE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRSxNQUFNLGFBQWEsR0FBRyxpQkFBaUI7YUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9ELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7WUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0RBQWdELENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxhQUFhO2FBQ2YsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFOztZQUNoQixNQUFNLFNBQVMsR0FBcUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUYsTUFBTSxNQUFNLEdBQThCLHlCQUF5QixDQUFDO2dCQUNoRSxZQUFZLEVBQUUsT0FBTztnQkFDckIsYUFBYSxFQUFFLFNBQVM7Z0JBQ3hCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQzNDLFlBQVk7Z0JBQ1osa0JBQWtCLEVBQUU7b0JBQ2hCLFlBQVk7b0JBQ1osSUFBSSxFQUFFLEVBQUU7aUJBQ1g7YUFDSixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDL0MsTUFBTSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDM0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRCxJQUFJLFlBQVksRUFBRTtnQkFDZCxNQUFNLENBQUMsZUFBZSxHQUFHLE1BQUEsWUFBWSxDQUFDLGFBQWEsMENBQUUsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQUEsWUFBWSxDQUFDLE1BQU0sMENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBYyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUFDLE9BQXFFO1FBQzdGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTdELFNBQVMsZ0JBQWdCLENBQUMsS0FBVTtZQUNoQyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksV0FBVyxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzlDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM5RTtJQUNMLENBQUM7OztZQXRxQkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLDJ6Z0JBQThDO2dCQUU5QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQ7OztZQTNGUSxjQUFjO1lBQUUsTUFBTTtZQXFCM0IsbUJBQW1CO1lBOEJkLG9CQUFvQjtZQXBEVCxXQUFXO1lBaUIzQixZQUFZO1lBQ1osbUJBQW1CO1lBVG5CLFdBQVc7WUFYTixRQUFRO1lBQ2lCLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBBc3NldCxcclxuICAgIEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBDcmVhdGVQcm9kdWN0SW5wdXQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIEZhY2V0V2l0aFZhbHVlcyxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIGZsYXR0ZW5GYWNldFZhbHVlcyxcclxuICAgIEdldFByb2R1Y3RXaXRoVmFyaWFudHMsXHJcbiAgICBHbG9iYWxGbGFnLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTG9naWNhbE9wZXJhdG9yLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQcm9kdWN0RGV0YWlsLFxyXG4gICAgUHJvZHVjdFZhcmlhbnQsXHJcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgVGF4Q2F0ZWdvcnksXHJcbiAgICB1bmljb2RlUGF0dGVyblZhbGlkYXRvcixcclxuICAgIFVwZGF0ZVByb2R1Y3RJbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RNdXRhdGlvbixcclxuICAgIFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvbixcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9ub3JtYWxpemUtc3RyaW5nJztcclxuaW1wb3J0IHsgREVGQVVMVF9DSEFOTkVMX0NPREUgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvdW5pcXVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIGRlYm91bmNlVGltZSxcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gICAgbWFwLFxyXG4gICAgbWVyZ2VNYXAsXHJcbiAgICBzaGFyZVJlcGxheSxcclxuICAgIHNraXAsXHJcbiAgICBza2lwVW50aWwsXHJcbiAgICBzdGFydFdpdGgsXHJcbiAgICBzd2l0Y2hNYXAsXHJcbiAgICB0YWtlLFxyXG4gICAgdGFrZVVudGlsLFxyXG4gICAgdGFwLFxyXG4gICAgd2l0aExhdGVzdEZyb20sXHJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1mYWNldC1kaWFsb2cvYXBwbHktZmFjZXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2lnblByb2R1Y3RzVG9DaGFubmVsRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYXNzaWduLXByb2R1Y3RzLXRvLWNoYW5uZWwtZGlhbG9nL2Fzc2lnbi1wcm9kdWN0cy10by1jaGFubmVsLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDcmVhdGVQcm9kdWN0VmFyaWFudHNDb25maWcgfSBmcm9tICcuLi9nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzL2dlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVmFyaWFudEFzc2V0Q2hhbmdlIH0gZnJvbSAnLi4vcHJvZHVjdC12YXJpYW50cy1saXN0L3Byb2R1Y3QtdmFyaWFudHMtbGlzdC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVGFiTmFtZSA9ICdkZXRhaWxzJyB8ICd2YXJpYW50cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhcmlhbnRGb3JtVmFsdWUge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBza3U6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICBwcmljZVdpdGhUYXg6IG51bWJlcjtcclxuICAgIHRheENhdGVnb3J5SWQ6IHN0cmluZztcclxuICAgIHN0b2NrT25IYW5kOiBudW1iZXI7XHJcbiAgICB1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBib29sZWFuO1xyXG4gICAgb3V0T2ZTdG9ja1RocmVzaG9sZDogbnVtYmVyO1xyXG4gICAgdHJhY2tJbnZlbnRvcnk6IEdsb2JhbEZsYWc7XHJcbiAgICBmYWNldFZhbHVlSWRzOiBzdHJpbmdbXTtcclxuICAgIGN1c3RvbUZpZWxkcz86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZEFzc2V0cyB7XHJcbiAgICBhc3NldHM/OiBBc3NldFtdO1xyXG4gICAgZmVhdHVyZWRBc3NldD86IEFzc2V0O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25Db25maWcge1xyXG4gICAgdG90YWxJdGVtczogbnVtYmVyO1xyXG4gICAgY3VycmVudFBhZ2U6IG51bWJlcjtcclxuICAgIGl0ZW1zUGVyUGFnZTogbnVtYmVyO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLXByb2R1Y3QtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8R2V0UHJvZHVjdFdpdGhWYXJpYW50cy5Qcm9kdWN0PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBhY3RpdmVUYWIkOiBPYnNlcnZhYmxlPFRhYk5hbWU+O1xyXG4gICAgcHJvZHVjdCQ6IE9ic2VydmFibGU8R2V0UHJvZHVjdFdpdGhWYXJpYW50cy5Qcm9kdWN0PjtcclxuICAgIHZhcmlhbnRzJDogT2JzZXJ2YWJsZTxQcm9kdWN0VmFyaWFudC5GcmFnbWVudFtdPjtcclxuICAgIHRheENhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPFRheENhdGVnb3J5LkZyYWdtZW50W10+O1xyXG4gICAgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgY3VzdG9tVmFyaWFudEZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIGN1c3RvbU9wdGlvbkdyb3VwRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgY3VzdG9tT3B0aW9uRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgZGV0YWlsRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgZmlsdGVySW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgYXNzZXRDaGFuZ2VzOiBTZWxlY3RlZEFzc2V0cyA9IHt9O1xyXG4gICAgdmFyaWFudEFzc2V0Q2hhbmdlczogeyBbdmFyaWFudElkOiBzdHJpbmddOiBTZWxlY3RlZEFzc2V0cyB9ID0ge307XHJcbiAgICB2YXJpYW50RmFjZXRWYWx1ZUNoYW5nZXM6IHsgW3ZhcmlhbnRJZDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xyXG4gICAgcHJvZHVjdENoYW5uZWxzJDogT2JzZXJ2YWJsZTxQcm9kdWN0RGV0YWlsLkNoYW5uZWxzW10+O1xyXG4gICAgZmFjZXRWYWx1ZXMkOiBPYnNlcnZhYmxlPFByb2R1Y3REZXRhaWwuRmFjZXRWYWx1ZXNbXT47XHJcbiAgICBmYWNldHMkOiBPYnNlcnZhYmxlPEZhY2V0V2l0aFZhbHVlcy5GcmFnbWVudFtdPjtcclxuICAgIHRvdGFsSXRlbXMkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBjdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDEpO1xyXG4gICAgaXRlbXNQZXJQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMTApO1xyXG4gICAgcGFnaW5hdGlvbkNvbmZpZyQ6IE9ic2VydmFibGU8UGFnaW5hdGlvbkNvbmZpZz47XHJcbiAgICBzZWxlY3RlZFZhcmlhbnRJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICB2YXJpYW50RGlzcGxheU1vZGU6ICdjYXJkJyB8ICd0YWJsZScgPSAnY2FyZCc7XHJcbiAgICBjcmVhdGVWYXJpYW50c0NvbmZpZzogQ3JlYXRlUHJvZHVjdFZhcmlhbnRzQ29uZmlnID0geyBncm91cHM6IFtdLCB2YXJpYW50czogW10gfTtcclxuICAgIGNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIC8vIFVzZWQgdG8gc3RvcmUgYWxsIFByb2R1Y3RWYXJpYW50cyB3aGljaCBoYXZlIGJlZW4gbG9hZGVkLlxyXG4gICAgLy8gSXQgaXMgbmVlZGVkIHdoZW4gc2F2aW5nIGNoYW5nZXMgdG8gdmFyaWFudHMuXHJcbiAgICBwcml2YXRlIHByb2R1Y3RWYXJpYW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIFByb2R1Y3RWYXJpYW50LkZyYWdtZW50PigpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb25zID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVQcm9kdWN0XTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByb2R1Y3REZXRhaWxTZXJ2aWNlOiBQcm9kdWN0RGV0YWlsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIocm91dGUsIHJvdXRlciwgc2VydmVyQ29uZmlnU2VydmljZSwgZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdCcpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tVmFyaWFudEZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RWYXJpYW50Jyk7XHJcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25Hcm91cEZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb25Hcm91cCcpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9uRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbicpO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBwcm9kdWN0OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgYXV0b1VwZGF0ZVZhcmlhbnROYW1lczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNsdWc6IFsnJywgdW5pY29kZVBhdHRlcm5WYWxpZGF0b3IoL15bXFxwe0xldHRlcn0wLTlfLV0rJC8pXSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IFtbXV0sXHJcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHZhcmlhbnRzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLnByb2R1Y3QkID0gdGhpcy5lbnRpdHkkO1xyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyQgPSB0aGlzLnByb2R1Y3QkLnBpcGUobWFwKHByb2R1Y3QgPT4gcHJvZHVjdC52YXJpYW50TGlzdC50b3RhbEl0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnJCA9IGNvbWJpbmVMYXRlc3QodGhpcy50b3RhbEl0ZW1zJCwgdGhpcy5pdGVtc1BlclBhZ2UkLCB0aGlzLmN1cnJlbnRQYWdlJCkucGlwZShcclxuICAgICAgICAgICAgbWFwKChbdG90YWxJdGVtcywgaXRlbXNQZXJQYWdlLCBjdXJyZW50UGFnZV0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zLFxyXG4gICAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHZhcmlhbnRzJCA9IHRoaXMucHJvZHVjdCQucGlwZShtYXAocHJvZHVjdCA9PiBwcm9kdWN0LnZhcmlhbnRMaXN0Lml0ZW1zKSk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVGVybSQgPSB0aGlzLmZpbHRlcklucHV0LnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICBzdGFydFdpdGgoJycpLFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGluaXRpYWxWYXJpYW50cyQgPSB0aGlzLnByb2R1Y3QkLnBpcGUobWFwKHAgPT4gcC52YXJpYW50TGlzdC5pdGVtcykpO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWYXJpYW50cyQgPSBjb21iaW5lTGF0ZXN0KGZpbHRlclRlcm0kLCB0aGlzLmN1cnJlbnRQYWdlJCwgdGhpcy5pdGVtc1BlclBhZ2UkKS5waXBlKFxyXG4gICAgICAgICAgICBza2lwVW50aWwoaW5pdGlhbFZhcmlhbnRzJCksXHJcbiAgICAgICAgICAgIHNraXAoMSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW3Rlcm0sIGN1cnJlbnRQYWdlLCBpdGVtc1BlclBhZ2VdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgLmdldFByb2R1Y3RWYXJpYW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcDogKGN1cnJlbnRQYWdlIC0gMSkgKiBpdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiBpdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odGVybVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBmaWx0ZXI6IHsgbmFtZTogeyBjb250YWluczogdGVybSB9LCBza3U6IHsgY29udGFpbnM6IHRlcm0gfSB9IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlck9wZXJhdG9yOiBMb2dpY2FsT3BlcmF0b3IuT1IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTdHJlYW0oKHsgcHJvZHVjdFZhcmlhbnRzIH0pID0+IHByb2R1Y3RWYXJpYW50cy5pdGVtcyk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy52YXJpYW50cyQgPSBtZXJnZShpbml0aWFsVmFyaWFudHMkLCB1cGRhdGVkVmFyaWFudHMkKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAodmFyaWFudHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0VmFyaWFudE1hcC5zZXQodmFyaWFudC5pZCwgdmFyaWFudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy50YXhDYXRlZ29yaWVzJCA9IHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UuZ2V0VGF4Q2F0ZWdvcmllcygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZVRhYiQgPSB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUobWFwKHFwbSA9PiBxcG0uZ2V0KCd0YWInKSBhcyBhbnkpKTtcclxuXHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh1cGRhdGVkVmFyaWFudHMkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW3ZhcmlhbnRzLCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVmFyaWFudEZvcm1BcnJheSh2YXJpYW50cywgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEZhY2V0VmFsdWVzIGFyZSBwcm92aWRlZCBpbml0aWFsbHkgYnkgdGhlIG5lc3RlZCBhcnJheSBvZiB0aGVcclxuICAgICAgICAvLyBQcm9kdWN0IGVudGl0eSwgYnV0IG9uY2UgYSBmZXRjaCB0byBnZXQgYWxsIEZhY2V0cyBpcyBtYWRlIChhcyB3aGVuXHJcbiAgICAgICAgLy8gb3BlbmluZyB0aGUgRmFjZXRWYWx1ZSBzZWxlY3RvciBtb2RhbCksIHRoZW4gdGhlc2UgYWRkaXRpb25hbCB2YWx1ZXNcclxuICAgICAgICAvLyBhcmUgY29uY2F0ZW5hdGVkIG9udG8gdGhlIGluaXRpYWwgYXJyYXkuXHJcbiAgICAgICAgdGhpcy5mYWNldHMkID0gdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS5nZXRGYWNldHMoKTtcclxuICAgICAgICBjb25zdCBwcm9kdWN0RmFjZXRWYWx1ZXMkID0gdGhpcy5wcm9kdWN0JC5waXBlKG1hcChwcm9kdWN0ID0+IHByb2R1Y3QuZmFjZXRWYWx1ZXMpKTtcclxuICAgICAgICBjb25zdCBhbGxGYWNldFZhbHVlcyQgPSB0aGlzLmZhY2V0cyQucGlwZShtYXAoZmxhdHRlbkZhY2V0VmFsdWVzKSk7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5nZXRQcm9kdWN0Rm9ybUdyb3VwKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1GYWNldFZhbHVlSWRDaGFuZ2VzJCA9IHByb2R1Y3RHcm91cC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgbWFwKHZhbCA9PiB2YWwuZmFjZXRWYWx1ZUlkcyBhcyBzdHJpbmdbXSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmb3JtQ2hhbmdlRmFjZXRWYWx1ZXMkID0gY29tYmluZUxhdGVzdChcclxuICAgICAgICAgICAgZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkLFxyXG4gICAgICAgICAgICBwcm9kdWN0RmFjZXRWYWx1ZXMkLFxyXG4gICAgICAgICAgICBhbGxGYWNldFZhbHVlcyQsXHJcbiAgICAgICAgKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtpZHMsIHByb2R1Y3RGYWNldFZhbHVlcywgYWxsRmFjZXRWYWx1ZXNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9IFsuLi5wcm9kdWN0RmFjZXRWYWx1ZXMsIC4uLmFsbEZhY2V0VmFsdWVzXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpZHMubWFwKGlkID0+IGNvbWJpbmVkLmZpbmQoZnYgPT4gZnYuaWQgPT09IGlkKSkuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMkID0gbWVyZ2UocHJvZHVjdEZhY2V0VmFsdWVzJCwgZm9ybUNoYW5nZUZhY2V0VmFsdWVzJCk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0Q2hhbm5lbHMkID0gdGhpcy5wcm9kdWN0JC5waXBlKG1hcChwID0+IHAuY2hhbm5lbHMpKTtcclxuICAgICAgICB0aGlzLmNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JCA9IHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3NcclxuICAgICAgICAgICAgLmdldEFjdGl2ZUNoYW5uZWwoJ2NhY2hlLWZpcnN0JylcclxuICAgICAgICAgICAgLnJlZmV0Y2hPbkNoYW5uZWxDaGFuZ2UoKVxyXG4gICAgICAgICAgICAubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5hY3RpdmVDaGFubmVsLnByaWNlc0luY2x1ZGVUYXgpXHJcbiAgICAgICAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZVRvVGFiKHRhYk5hbWU6IFRhYk5hbWUpIHtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXJcclxuICAgICAgICAgICAgICAgIC5jcmVhdGVVcmxUcmVlKFsnLi8nLCB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLCB0YWI6IHRhYk5hbWUgfV0sIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0RlZmF1bHRDaGFubmVsKGNoYW5uZWxDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gY2hhbm5lbENvZGUgPT09IERFRkFVTFRfQ0hBTk5FTF9DT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dChwYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtc1BlclBhZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlJC5uZXh0KCt2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3NpZ25Ub0NoYW5uZWwoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0Q2hhbm5lbHMkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChjaGFubmVscyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoQXNzaWduUHJvZHVjdHNUb0NoYW5uZWxEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRzOiBbdGhpcy5pZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhbm5lbElkczogY2hhbm5lbHMubWFwKGMgPT4gYy5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJvbUNoYW5uZWwoY2hhbm5lbElkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZGlhbG9nKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjYXRhbG9nLnJlbW92ZS1wcm9kdWN0LWZyb20tY2hhbm5lbCcpLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYW5nZXInLCBsYWJlbDogXygnY2F0YWxvZy5yZW1vdmUtZnJvbS1jaGFubmVsJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnJlbW92ZVByb2R1Y3RzRnJvbUNoYW5uZWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZHM6IFt0aGlzLmlkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS1wcm9kdWN0LWZyb20tY2hhbm5lbC1zdWNjZXNzJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NhdGFsb2cubm90aWZ5LXJlbW92ZS1wcm9kdWN0LWZyb20tY2hhbm5lbC1lcnJvcicpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzaWduVmFyaWFudFRvQ2hhbm5lbCh2YXJpYW50OiBQcm9kdWN0VmFyaWFudC5GcmFnbWVudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChBc3NpZ25Qcm9kdWN0c1RvQ2hhbm5lbERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZHM6IFt0aGlzLmlkXSxcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0VmFyaWFudElkczogW3ZhcmlhbnQuaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFubmVsSWRzOiB2YXJpYW50LmNoYW5uZWxzLm1hcChjID0+IGMuaWQpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVZhcmlhbnRGcm9tQ2hhbm5lbCh7XHJcbiAgICAgICAgY2hhbm5lbElkLFxyXG4gICAgICAgIHZhcmlhbnQsXHJcbiAgICB9OiB7XHJcbiAgICAgICAgY2hhbm5lbElkOiBzdHJpbmc7XHJcbiAgICAgICAgdmFyaWFudDogUHJvZHVjdFZhcmlhbnQuRnJhZ21lbnQ7XHJcbiAgICB9KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmRpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXygnY2F0YWxvZy5yZW1vdmUtcHJvZHVjdC12YXJpYW50LWZyb20tY2hhbm5lbCcpLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYW5nZXInLCBsYWJlbDogXygnY2F0YWxvZy5yZW1vdmUtZnJvbS1jaGFubmVsJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnJlbW92ZVZhcmlhbnRzRnJvbUNoYW5uZWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RWYXJpYW50SWRzOiBbdmFyaWFudC5pZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBFTVBUWSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjYXRhbG9nLm5vdGlmeS1yZW1vdmUtdmFyaWFudC1mcm9tLWNoYW5uZWwtc3VjY2VzcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjYXRhbG9nLm5vdGlmeS1yZW1vdmUtdmFyaWFudC1mcm9tLWNoYW5uZWwtZXJyb3InKSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2V0c0NoYW5nZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhT2JqZWN0LnZhbHVlcyh0aGlzLmFzc2V0Q2hhbmdlcykubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHZhcmlhbnRBc3NldHNDaGFuZ2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIU9iamVjdC5rZXlzKHRoaXMudmFyaWFudEFzc2V0Q2hhbmdlcykubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIHZhcmlhbnRBc3NldENoYW5nZShldmVudDogVmFyaWFudEFzc2V0Q2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy52YXJpYW50QXNzZXRDaGFuZ2VzW2V2ZW50LnZhcmlhbnRJZF0gPSBldmVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNyZWF0aW5nIGEgbmV3IHByb2R1Y3QsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIHNsdWcgYmFzZWQgb24gdGhlIHByb2R1Y3QgbmFtZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlU2x1ZyhuYW1lVmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtlbnRpdHksIGxhbmd1YWdlQ29kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNsdWdDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldChbJ3Byb2R1Y3QnLCAnc2x1ZyddKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihlbnRpdHksIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2x1Z0lzRW1wdHkgPSAhY3VycmVudFRyYW5zbGF0aW9uIHx8ICFjdXJyZW50VHJhbnNsYXRpb24uc2x1ZztcclxuICAgICAgICAgICAgICAgIGlmIChzbHVnQ29udHJvbCAmJiBzbHVnQ29udHJvbC5wcmlzdGluZSAmJiBjdXJyZW50U2x1Z0lzRW1wdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzbHVnQ29udHJvbC5zZXRWYWx1ZShub3JtYWxpemVTdHJpbmcoYCR7bmFtZVZhbHVlfWAsICctJykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RQcm9kdWN0RmFjZXRWYWx1ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKS5zdWJzY3JpYmUoZmFjZXRWYWx1ZUlkcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmYWNldFZhbHVlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0R3JvdXAgPSB0aGlzLmdldFByb2R1Y3RGb3JtR3JvdXAoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGYWNldFZhbHVlSWRzID0gcHJvZHVjdEdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHM7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogdW5pcXVlKFsuLi5jdXJyZW50RmFjZXRWYWx1ZUlkcywgLi4uZmFjZXRWYWx1ZUlkc10pLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0R3JvdXAubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByb2R1Y3RPcHRpb24oaW5wdXQ6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCAmIHsgYXV0b1VwZGF0ZTogYm9vbGVhbiB9KSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnByb2R1Y3QkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbcHJvZHVjdCwgbGFuZ3VhZ2VDb2RlXSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3REZXRhaWxTZXJ2aWNlLnVwZGF0ZVByb2R1Y3RPcHRpb24oaW5wdXQsIHByb2R1Y3QsIGxhbmd1YWdlQ29kZSksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RPcHRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVByb2R1Y3RGYWNldFZhbHVlKGZhY2V0VmFsdWVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5nZXRQcm9kdWN0Rm9ybUdyb3VwKCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZhY2V0VmFsdWVJZHMgPSBwcm9kdWN0R3JvdXAudmFsdWUuZmFjZXRWYWx1ZUlkcztcclxuICAgICAgICBwcm9kdWN0R3JvdXAucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IGN1cnJlbnRGYWNldFZhbHVlSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gZmFjZXRWYWx1ZUlkKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwcm9kdWN0R3JvdXAubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW5zIGEgZGlhbG9nIHRvIHNlbGVjdCBGYWNldFZhbHVlcyB0byBhcHBseSB0byB0aGUgc2VsZWN0IFByb2R1Y3RWYXJpYW50cy5cclxuICAgICAqL1xyXG4gICAgc2VsZWN0VmFyaWFudEZhY2V0VmFsdWUoc2VsZWN0ZWRWYXJpYW50SWRzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUZhY2V0VmFsdWVNb2RhbCgpXHJcbiAgICAgICAgICAgIC5waXBlKHdpdGhMYXRlc3RGcm9tKHRoaXMudmFyaWFudHMkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW2ZhY2V0VmFsdWVJZHMsIHZhcmlhbnRzXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhY2V0VmFsdWVJZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnRJZCBvZiBzZWxlY3RlZFZhcmlhbnRJZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2YXJpYW50cy5maW5kSW5kZXgodiA9PiB2LmlkID09PSB2YXJpYW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50ID0gdmFyaWFudHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0ZhY2V0VmFsdWVJZHMgPSB2YXJpYW50ID8gdmFyaWFudC5mYWNldFZhbHVlcy5tYXAoZnYgPT4gZnYuaWQpIDogW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRGb3JtR3JvdXAgPSAodGhpcy5kZXRhaWxGb3JtLmdldCgndmFyaWFudHMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0+IGMudmFsdWUuaWQgPT09IHZhcmlhbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUZhY2V0VmFsdWVJZHMgPSB1bmlxdWUoWy4uLmV4aXN0aW5nRmFjZXRWYWx1ZUlkcywgLi4uZmFjZXRWYWx1ZUlkc10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudEZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNldFZhbHVlSWRzOiB1bmlxdWVGYWNldFZhbHVlSWRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Rm9ybUdyb3VwLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhbnRGYWNldFZhbHVlQ2hhbmdlc1t2YXJpYW50SWRdID0gdW5pcXVlRmFjZXRWYWx1ZUlkcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXJpYW50c1RvQ3JlYXRlQXJlVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgMCA8IHRoaXMuY3JlYXRlVmFyaWFudHNDb25maWcudmFyaWFudHMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFyaWFudHNDb25maWcudmFyaWFudHMuZXZlcnkodiA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdi5za3UgIT09ICcnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkaXNwbGF5RmFjZXRWYWx1ZU1vZGFsKCk6IE9ic2VydmFibGU8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS5nZXRGYWNldHMoKS5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZU1hcChmYWNldHMgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoQXBwbHlGYWNldERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6ICdtZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7IGZhY2V0cyB9LFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG1hcChmYWNldFZhbHVlcyA9PiBmYWNldFZhbHVlcyAmJiBmYWNldFZhbHVlcy5tYXAodiA9PiB2LmlkKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5nZXRQcm9kdWN0Rm9ybUdyb3VwKCk7XHJcbiAgICAgICAgaWYgKCFwcm9kdWN0R3JvdXAuZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMucHJvZHVjdCQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFtwcm9kdWN0LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvZHVjdCA9IHRoaXMuZ2V0VXBkYXRlZFByb2R1Y3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RHcm91cCBhcyBGb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIENyZWF0ZVByb2R1Y3RJbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS5jcmVhdGVQcm9kdWN0V2l0aFZhcmlhbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhcmlhbnRzQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoeyBjcmVhdGVQcm9kdWN0VmFyaWFudHMsIHByb2R1Y3RJZCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYW50QXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBwcm9kdWN0SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMucHJvZHVjdCQsIHRoaXMubGFuZ3VhZ2VDb2RlJCwgdGhpcy5jaGFubmVsUHJpY2VJbmNsdWRlc1RheCQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbcHJvZHVjdCwgbGFuZ3VhZ2VDb2RlLCBwcmljZUluY2x1ZGVzVGF4XSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RHcm91cCA9IHRoaXMuZ2V0UHJvZHVjdEZvcm1Hcm91cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9kdWN0SW5wdXQ6IFVwZGF0ZVByb2R1Y3RJbnB1dCB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFyaWFudHNJbnB1dDogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dFtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjdEdyb3VwLmRpcnR5IHx8IHRoaXMuYXNzZXRzQ2hhbmdlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZFByb2R1Y3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdEdyb3VwIGFzIEZvcm1Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCd2YXJpYW50cycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodmFyaWFudHNBcnJheSAmJiB2YXJpYW50c0FycmF5LmRpcnR5KSB8fCB0aGlzLnZhcmlhbnRBc3NldHNDaGFuZ2VkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHNJbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZFByb2R1Y3RWYXJpYW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50c0FycmF5IGFzIEZvcm1BcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlSW5jbHVkZXNUYXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS51cGRhdGVQcm9kdWN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvVXBkYXRlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ3Byb2R1Y3QnLCAnYXV0b1VwZGF0ZVZhcmlhbnROYW1lcyddKT8udmFsdWUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHNJbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2x1Z0FmdGVyU2F2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYW50QXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuY2FuRGVhY3RpdmF0ZSgpICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHMgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGZvcm0gb24gY2hhbmdlcyB0byB0aGUgcHJvZHVjdCBvciBjdXJyZW50IGxhbmd1YWdlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhwcm9kdWN0OiBHZXRQcm9kdWN0V2l0aFZhcmlhbnRzLlByb2R1Y3QsIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHByb2R1Y3QsIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBwcm9kdWN0OiB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBwcm9kdWN0LmVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24ubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLnNsdWcgOiAnJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24uZGVzY3JpcHRpb24gOiAnJyxcclxuICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHByb2R1Y3QuZmFjZXRWYWx1ZXMubWFwKGZ2ID0+IGZ2LmlkKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ3Byb2R1Y3QnLCAnY3VzdG9tRmllbGRzJ10pLFxyXG4gICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idWlsZFZhcmlhbnRGb3JtQXJyYXkocHJvZHVjdC52YXJpYW50TGlzdC5pdGVtcywgbGFuZ3VhZ2VDb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkVmFyaWFudEZvcm1BcnJheSh2YXJpYW50czogUHJvZHVjdFZhcmlhbnQuRnJhZ21lbnRbXSwgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpIHtcclxuICAgICAgICBjb25zdCB2YXJpYW50c0Zvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ3ZhcmlhbnRzJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHZhcmlhbnRzLmZvckVhY2goKHZhcmlhbnQsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFyaWFudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhcmlhbnQsIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdGYWNldFZhbHVlQ2hhbmdlcyA9IHRoaXMudmFyaWFudEZhY2V0VmFsdWVDaGFuZ2VzW3ZhcmlhbnQuaWRdO1xyXG4gICAgICAgICAgICBjb25zdCBmYWNldFZhbHVlSWRzID0gcGVuZGluZ0ZhY2V0VmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICA/IHBlbmRpbmdGYWNldFZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgOiB2YXJpYW50LmZhY2V0VmFsdWVzLm1hcChmdiA9PiBmdi5pZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBWYXJpYW50Rm9ybVZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHZhcmlhbnQuaWQsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB2YXJpYW50LmVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBza3U6IHZhcmlhbnQuc2t1LFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdmFyaWFudFRyYW5zbGF0aW9uID8gdmFyaWFudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByaWNlOiB2YXJpYW50LnByaWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2VXaXRoVGF4OiB2YXJpYW50LnByaWNlV2l0aFRheCxcclxuICAgICAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnQudGF4Q2F0ZWdvcnkuaWQsXHJcbiAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogdmFyaWFudC5zdG9ja09uSGFuZCxcclxuICAgICAgICAgICAgICAgIHVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQudXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCxcclxuICAgICAgICAgICAgICAgIG91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQub3V0T2ZTdG9ja1RocmVzaG9sZCxcclxuICAgICAgICAgICAgICAgIHRyYWNrSW52ZW50b3J5OiB2YXJpYW50LnRyYWNrSW52ZW50b3J5LFxyXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkcyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2YXJpYW50Rm9ybUdyb3VwID0gdmFyaWFudHNGb3JtQXJyYXkuY29udHJvbHMuZmluZChjID0+IGMudmFsdWUuaWQgPT09IHZhcmlhbnQuaWQpIGFzXHJcbiAgICAgICAgICAgICAgICB8IEZvcm1Hcm91cFxyXG4gICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYW50Rm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudEZvcm1Hcm91cC5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnRGb3JtR3JvdXAucGF0Y2hWYWx1ZShncm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Rm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGZhY2V0VmFsdWVJZHMpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50c0Zvcm1BcnJheS5pbnNlcnQoaSwgdmFyaWFudEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFyaWFudEZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXN0b21GaWVsZHNHcm91cCA9IHZhcmlhbnRGb3JtR3JvdXAuZ2V0KFsnY3VzdG9tRmllbGRzJ10pIGFzIEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUZpZWxkc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudEZvcm1Hcm91cC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBjdXN0b21GaWVsZHNHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50VHJhbnNsYXRpb24sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHByb2R1Y3QgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIHByb2R1Y3Qgd2hpY2hcclxuICAgICAqIGNhbiB0aGVuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRQcm9kdWN0KFxyXG4gICAgICAgIHByb2R1Y3Q6IEdldFByb2R1Y3RXaXRoVmFyaWFudHMuUHJvZHVjdCxcclxuICAgICAgICBwcm9kdWN0Rm9ybUdyb3VwOiBGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0SW5wdXQgfCBDcmVhdGVQcm9kdWN0SW5wdXQge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9kdWN0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogcHJvZHVjdCxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogcHJvZHVjdEZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvZHVjdC5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogcHJvZHVjdC5zbHVnIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZFByb2R1Y3QsXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBwcm9kdWN0Rm9ybUdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgfSBhcyBVcGRhdGVQcm9kdWN0SW5wdXQgfCBDcmVhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhbiBhcnJheSBvZiBwcm9kdWN0IHZhcmlhbnRzIGFuZCB0aGUgdmFsdWVzIGZyb20gdGhlIGRldGFpbEZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gbmV3IGFycmF5XHJcbiAgICAgKiB3aGljaCBjYW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZFByb2R1Y3RWYXJpYW50cyhcclxuICAgICAgICBwcm9kdWN0OiBHZXRQcm9kdWN0V2l0aFZhcmlhbnRzLlByb2R1Y3QsXHJcbiAgICAgICAgdmFyaWFudHNGb3JtQXJyYXk6IEZvcm1BcnJheSxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICAgICBwcmljZUluY2x1ZGVzVGF4OiBib29sZWFuLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dFtdIHtcclxuICAgICAgICBjb25zdCBkaXJ0eUZvcm1Db250cm9scyA9IHZhcmlhbnRzRm9ybUFycmF5LmNvbnRyb2xzLmZpbHRlcihjID0+IGMuZGlydHkpO1xyXG4gICAgICAgIGNvbnN0IGRpcnR5VmFyaWFudHMgPSBkaXJ0eUZvcm1Db250cm9sc1xyXG4gICAgICAgICAgICAubWFwKGMgPT4gdGhpcy5wcm9kdWN0VmFyaWFudE1hcC5nZXQoYy52YWx1ZS5pZCkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgICAgICBjb25zdCBkaXJ0eVZhcmlhbnRWYWx1ZXMgPSBkaXJ0eUZvcm1Db250cm9scy5tYXAoYyA9PiBjLnZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKGRpcnR5VmFyaWFudHMubGVuZ3RoICE9PSBkaXJ0eVZhcmlhbnRWYWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfKGBlcnJvci5wcm9kdWN0LXZhcmlhbnQtZm9ybS12YWx1ZXMtZG8tbm90LW1hdGNoYCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlydHlWYXJpYW50c1xyXG4gICAgICAgICAgICAubWFwKCh2YXJpYW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsdWU6IFZhcmlhbnRGb3JtVmFsdWUgPSBkaXJ0eVZhcmlhbnRWYWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gdmFyaWFudC5pZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGFibGU6IHZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogZm9ybVZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLmN1c3RvbVZhcmlhbnRGaWVsZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC50YXhDYXRlZ29yeUlkID0gZm9ybVZhbHVlLnRheENhdGVnb3J5SWQ7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZmFjZXRWYWx1ZUlkcyA9IGZvcm1WYWx1ZS5mYWNldFZhbHVlSWRzO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnByaWNlID0gcHJpY2VJbmNsdWRlc1RheCA/IGZvcm1WYWx1ZS5wcmljZVdpdGhUYXggOiBmb3JtVmFsdWUucHJpY2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NldENoYW5nZXMgPSB0aGlzLnZhcmlhbnRBc3NldENoYW5nZXNbdmFyaWFudC5pZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzZXRDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZlYXR1cmVkQXNzZXRJZCA9IGFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0Py5pZDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXNzZXRJZHMgPSBhc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFByb2R1Y3RGb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxGb3JtLmdldCgncHJvZHVjdCcpIGFzIEZvcm1Hcm91cDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzZXJ2ZXIgbWF5IGFsdGVyIHRoZSBzbHVnIHZhbHVlIGluIG9yZGVyIHRvIG5vcm1hbGl6ZSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3MgdXBvbiBzYXZpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlU2x1Z0FmdGVyU2F2ZShyZXN1bHRzOiBBcnJheTxVcGRhdGVQcm9kdWN0TXV0YXRpb24gfCBVcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvbj4pIHtcclxuICAgICAgICBjb25zdCBmaXJzdFJlc3VsdCA9IHJlc3VsdHNbMF07XHJcbiAgICAgICAgY29uc3Qgc2x1Z0NvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsncHJvZHVjdCcsICdzbHVnJ10pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBpc1VwZGF0ZU11dGF0aW9uKGlucHV0OiBhbnkpOiBpbnB1dCBpcyBVcGRhdGVQcm9kdWN0TXV0YXRpb24ge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuaGFzT3duUHJvcGVydHkoJ3VwZGF0ZVByb2R1Y3QnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzbHVnQ29udHJvbCAmJiBpc1VwZGF0ZU11dGF0aW9uKGZpcnN0UmVzdWx0KSkge1xyXG4gICAgICAgICAgICBzbHVnQ29udHJvbC5zZXRWYWx1ZShmaXJzdFJlc3VsdC51cGRhdGVQcm9kdWN0LnNsdWcsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|